Interpolation of 2D-Table Data

31 Ansichten (letzte 30 Tage)
Mapete
Mapete am 7 Jun. 2022
Beantwortet: Tushar am 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 Kommentare
Mapete
Mapete am 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 am 7 Jun. 2022
I need to know the value B for the known values A = 12.65 and C = 1867.

Melden Sie sich an, um zu kommentieren.

Antworten (1)

Tushar
Tushar am 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

Kategorien

Mehr zu Interpolation finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by