Interpolation of 2D-Table Data

26 views (last 30 days)
Mapete
Mapete on 7 Jun 2022
Answered: Tushar on 5 Sep 2023
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
Mapete
Mapete on 7 Jun 2022
@KSSV thanks for your quick answer. Have a look at what i have tried so far with the interp functions:
It still doesn´t work.
Mapete
Mapete on 7 Jun 2022
I need to know the value B for the known values A = 12.65 and C = 1867.

Sign in to comment.

Answers (1)

Tushar
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:
Regards,
Tushar

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!