Interpolation of 2D-Table Data
26 views (last 30 days)
Show older comments
Hello,
i have the following table with three values:
The calculated value for n is n = 1867 U/min and for the Motormoment M = 12,65 Nm.
What i need to calculate/interpolate is the corresponding value "alpha". How is that possible in a matlab function that i can use in my Simulink-Model?
Thanks!
3 Comments
Answers (1)
Tushar
on 5 Sep 2023
Hi Mapete,
I understand that you are trying to interpolate the corresponding value of 'alpha' when A=12.65 & C=1867. Note that the resulting value may not be exactly 12.65 or 1867 due to the nature of interpolation and the available data points. Here is the code sample. I have added comments so that it would be easier to modify the values as and when needed:
function requiredAlpha = requiredAlpha(A,B,C,requiredA,requiredC,precision,interpolationType)
% Define the X and Y coordinates for the grid
[X, Y] = meshgrid(1:size(A), 1:size(A));
% Define the required resolution of the interpolated data
numPointsX = precision; numPointsY = precision;
minX = 1; maxX = size(A,2);
minY = 1; maxY = size(A,1);
% Create the new grid for interpolation
[Xq, Yq] = meshgrid(linspace(minX, maxX, numPointsX), linspace(minY, maxY, numPointsY));
% Interpolate the data
interpolatedDataA = interp2(X, Y, A, Xq, Yq, interpolationType);
% Defining some vectors to be used while interpolating both B and C
X = 1:length(B);
Xq = linspace(minX, maxX, numPointsX);
% Interpolating B
interpolatedDataB = interp1(X, B, Xq, interpolationType);
% Interpolating C
interpolatedDataC = interp1(X, C, Xq, interpolationType);
% Finding the required Alpha value
[~, required_C_index] = min(abs(interpolatedDataC(:) - requiredC));
[~, index] = min(abs(interpolatedDataA(:,required_C_index) - requiredA));
[required_B_index, ~] = ind2sub(size(interpolatedDataA), index);
requiredAlpha = interpolatedDataB(required_B_index);
end
% given data
A = [[110,110,110,110,110,110,110,110]',[110, 106, 105, 100,95,90,55,27]',[125,115, 110, 105, 100,80,50,0]',[140,140,130,125,100,65,20, -32]',[170,160,150,110,75,35,-25,-51]',[185,165,155,95,50,20,-40, -60]',[200,175,160,70,25,-10,-50, -63]',[190,155,140,40,-20,-40,-60,-65]'];
B = [0,5,10,15,20,30,40,90];
C = [300,800,1000,2000,3000,4000,5000,6500];
% required data
requiredA = 12.65;
requiredC = 1867;
precision = 10000; % this will result in the number of points in the grid made. The more the precision value, the more number of points would be interpolated and the closer you will get to the required Alpha value.
% I found that precision value of 10e4 or 10e5 gives similar results
interpolationType = 'spline'; % look at the documentation provided and choose the preferred type
% calling the function to get the answer
Alpha=requiredAlpha(A,B,C,requiredA,requiredC,precision,interpolationType);
I hope the comments are adequate enough. Attaching some documentation to help you tackle any issues faced:
- 2D and 3D meshgrid
- fill missing entries
- A similar 1D Problem on MATLAB Answers
- Interpolation for missing data on File Exchange
Regards,
Tushar
0 Comments
See Also
Categories
Find more on Interpolation in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!