Help needed with finding corresponding index values for given table value

4 vues (au cours des 30 derniers jours)
Ruwan
Ruwan le 21 Juin 2013
Hi,
i would like to do the following:
i have a two-dimensional table (see http://pastebin.com/raw.php?i=p7DQrCKT) where i have in the table cells combustion temperatures (Tc) as function of a certain propellant mixture ratio (MR) (varying horizontally in table) and combustion chamber pressure (pc) (varying vertically in table).
what i would like to achieve is to find the MR and pc combination for a given Tc value. An additional catch is that the TC value is most of the time not exactly the same as the TC values in the table hence simple 'find' will not work (also it won't work because i am not interested in the indices); in other words the algorithm should interpolate between the available Tc values in the table and find the location where the desired Tc value would be located and output the corresponding (interpolated) MR and pc values.
The data in the table is such that only one unique MR and pc combination is possible for a given Tc, hence no multiple solutions are possible.
I know when i want to find the Tc value for a given MR and pc, i can use:
mixtureratio = data(1,3:11); pressure = data(3:19,1); specificheat = data(3:19,3:11); [X,Y] = meshgrid(mixtureratio,pressure); Tc = interp2(X,Y,temperature,MR,pc);
where data is the matrix containing the data read from the text file as given in http://pastebin.com/raw.php?i=p7DQrCKT
But now i hence want to achieve the exact opposite and wonder if this can be easily done with some matlab function or someone has a tip how i could address this problem?
thank you in advance for looking at this question! kind regards,
Ruwan
  2 commentaires
Iain
Iain le 21 Juin 2013
You're basically asking for someone to tell you how to get two unknowns from a single equation. This cannot be done without adding additional information.
Add additional information to help us, or all we can do is point out that it is almost certain that there will be more than one combination of MR and pc for any given Tc.
Ruwan
Ruwan le 21 Juin 2013
the optimal/desired solution is the one with the highest chamber pressure (pc) value.

Connectez-vous pour commenter.

Réponse acceptée

Tom
Tom le 21 Juin 2013
As Iain said, you've got more unknows than equations. I've come up with a possible solution, but I don't know how robust it is. It involves finding the closest temperature, isolating it and all its neighbouring nodes, and using fminsearch to interpolate.
Cols = [1 1.5 2 2.5 3 3.5 4 4.5 5];
Rows = [4:4:52];
tempMat = [2350.70 2904.03 3075.05 3075.39 3024.47 2956.58 2881.53 2802.72 2721.67
2357.33 2948.86 3147.28 3150.22 3093.38 3017.43 2933.81 2846.51 2757.39
2360.42 2972.96 3189.15 3194.13 3133.54 3052.44 2963.42 2870.86 2776.87
2362.31 2989.02 3218.58 3225.29 3161.89 3076.94 2983.91 2887.51 2790.03
2363.62 3000.87 3241.22 3249.44 3183.78 3095.73 2999.49 2900.05 2799.84
2364.60 3010.14 3259.56 3269.14 3201.58 3110.91 3011.99 2910.04 2807.60
2365.37 3017.69 3274.94 3285.78 3216.57 3123.64 3022.41 2918.30 2813.98
2366.00 3024.02 3288.18 3300.17 3229.50 3134.56 3031.30 2925.32 2819.37
2366.52 3029.43 3299.77 3312.84 3240.86 3144.12 3039.05 2931.40 2824.02
2366.97 3034.15 3310.08 3324.16 3250.99 3152.61 3045.90 2936.76 2828.09
2367.35 3038.30 3319.34 3334.38 3260.12 3160.24 3052.03 2941.53 2831.71
2367.69 3042.00 3327.75 3343.70 3268.42 3167.16 3057.56 2945.83 2834.95
2367.99 3045.34 3335.44 3352.26 3276.04 3173.48 3062.61 2949.73 2837.89];
%temperature to match:
Target = 3250;
%find the temperature closest to the target and isolate its neighbours to
%form a 3x3 matrix
[~,I] = min(abs(tempMat(:) - Target));
[x y] = ind2sub(size(tempMat),I);
%use fminsearch to interpolate within this region to find row and column
%values
tempNearest = tempMat(x-1:x+1,y-1:y+1);
rowsNearest = Rows(x-1:x+1);
colsNearest = Cols(y-1:y+1);
[X Y] = meshgrid(rowsNearest,colsNearest);
Mat = cell(4);
Mat(2:4,2:4) = num2cell(tempNearest);
Mat(1,2:4) = num2cell(colsNearest);
Mat(2:4,1) = num2cell(rowsNearest);
disp('Isolated Temperature Matrix:')
disp(Mat)
%function to find the interpolated values:
fcn = @(a) abs(interp2(X,Y,tempNearest,a(1),a(2)) - Target);
%run fminsearch to find values
I_int = fminsearch(fcn,[rowsNearest(2),colsNearest(2)]);
rowSearch = I_int(1)
colSearch = I_int(2)
  3 commentaires
Ruwan
Ruwan le 21 Juin 2013
Yep, this solution seems to leads to good results for the purposes i need it for. Thank you very much! :D
NAGA VBN
NAGA VBN le 7 Août 2013
Very good example,but i have some queries ,since i have 3 byte data frame which has to be checked in each and every row full data and interpolate the row and column can u help me on this?

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Programming dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by