3 views (last 30 days)
Show older comments
Stathis Tingas on 27 Jan 2024
-
-
Link
Direct link to this question
https://nl.mathworks.com/matlabcentral/answers/2075161-use-of-interp2-in-an-arbitrary-dataset
Edited: Stathis Tingas on 28 Jan 2024
Open in MATLAB Online
Hello,
I would appreciate any help on the following issue.
I have a small dataset (3x3 matrix) which descirbes a mechanical property (say Z) in 2d space. Each line describes the mechanical property in the 2d space, hence I basically have 3 values of Z in the 2d space. Column 1 has the x-coordinate, column 2 has the y-coordinate and column 3 the respective value for Z.
For the sake of an example, my data looks like this:
X Y Z
0.25 0.25 0.5
0.50 0.60 1.5
0.75 0.35 3.0
I want to interpolate (between the given values) and extrapolate (from 0 up to 1 for both X and Y), ideally using spline, cubic or makima.
My plan was to use the following code:
x=[0.25;0.50;0.75];
y=[0.25;0.60;0.35];
[X,Y] = meshgrid(x,y);
Z = [0.5; 1.5; 3.0];
[Xq,Yq] = meshgrid(0:.01:1, 0:.01:1);
Zq = interp2(X,Y,Z,Xq,Yq,'spline');
However, when I try that, I get the following error:
Error using griddedInterpolant
Interpolation requires at least two sample points for each grid dimension.
Error in interp2>makegriddedinterp (line 226)
F = griddedInterpolant(varargin{:});
Error in interp2 (line 134)
F = makegriddedinterp(X, Y, V, method,extrap);
Could anyone advise?
Thanks
0 Comments Show -2 older commentsHide -2 older comments
Show -2 older commentsHide -2 older comments
Sign in to comment.
Sign in to answer this question.
Answers (2)
Walter Roberson on 27 Jan 2024
Open in MATLAB Online
x=[0.25;0.50;0.75];
y=[0.25;0.60;0.35];
Z = [0.5; 1.5; 3.0];
[Xq,Yq] = meshgrid(0:.01:1, 0:.01:1);
F = scatteredInterpolant(x, y, Z);
Zq = F(Xq, Yq);
surf(Xq, Yq, Zq)
4 Comments Show 2 older commentsHide 2 older comments
Show 2 older commentsHide 2 older comments
Stathis Tingas on 27 Jan 2024
Direct link to this comment
https://nl.mathworks.com/matlabcentral/answers/2075161-use-of-interp2-in-an-arbitrary-dataset#comment_3044546
Edited: Stathis Tingas on 28 Jan 2024
Dear @Walter Roberson
Thank you for your response but to my understanding, scatteredInterpolant does not allow the use of spline, cubic or makima functions? Am I right? If so, is there a workaround to use particularly spline or makima?
Thanks
Stathis
William Rose on 27 Jan 2024
Direct link to this comment
https://nl.mathworks.com/matlabcentral/answers/2075161-use-of-interp2-in-an-arbitrary-dataset#comment_3044566
@Stathis Tingas,
You have 3 data points, on a 2D surface. That is the minimum number needed to define a plane (assuming they are not collinear). With so few points, you cannot estimate a more sophisticated surface, such as a spline. You would need at least 4 points (2 in each dimension) to use makima and at least 16 (4 in each dimension) to use spline. With only three points, linear interpolation is your only option.
Stathis Tingas on 27 Jan 2024
Direct link to this comment
https://nl.mathworks.com/matlabcentral/answers/2075161-use-of-interp2-in-an-arbitrary-dataset#comment_3044571
Edited: Stathis Tingas on 28 Jan 2024
Thank you @William Rose for your response. I wasnt actually aware of this requirement for spline and makima.
My dataset will generally be small but it will vary from 3 up to 11-12 points. You are saying that makima would need 4 points. Therefore, if the original dataset as an example has the following 4 points, how could I use makima or cubic?
x=[0.25;0.50;0.75;0.9];
y=[0.25;0.60;0.35; 0.7];
Z = [0.5; 1.5; 3.0; 3.5];
Thanks
Torsten on 27 Jan 2024
Direct link to this comment
https://nl.mathworks.com/matlabcentral/answers/2075161-use-of-interp2-in-an-arbitrary-dataset#comment_3044586
Edited: Torsten on 27 Jan 2024
Open in MATLAB Online
If your data are not gridded, you will have to live with "ScatteredInterpolant" and its interpolation methods.
And your four points in 2d constitute a curve. So Z could be interpolated on this curve maybe, but it makes little sense to treat them as sufficient to interpolate on a real two-dimensional rectangle.
x=[0.25;0.50;0.75;0.9];
y=[0.25;0.60;0.35; 0.7];
Z = [0.5; 1.5; 3.0; 3.5];
plot3(x,y,Z)
grid on
Sign in to comment.
Sulaymon Eshkabilov on 27 Jan 2024
Open in MATLAB Online
Is this what you wanted to obtain:
% Given DATA:
Data = [ 0.25 0.25 0.5;
0.50 0.60 1.5;
0.75 0.75 3.0];
% Extract x, y, and z from Data
x = Data(:, 1);
y = Data(:, 2);
z = Data(:, 3);
[X,Y]=meshgrid(x,y);
Z = meshgrid(z);
% Interpolate using griddata
[Xq,Yq] = meshgrid(0:.01:1);
Zq = interp2(X,Y,Z,Xq,Yq,'spline');
% Plot the results
figure;
scatter3(x, y, z, 'ro', 'filled'); % Original data points in red
hold on;
surf(Xq, Yq, Zq, 'EdgeColor', 'none', 'FaceAlpha', 0.5); % Interpolated/extrapolated surface
xlabel('X');
ylabel('Y');
zlabel('Z(X,Y)');
title('Interpolation and Extrapolation of Mechanical Property');
2 Comments Show NoneHide None
Show NoneHide None
Torsten on 27 Jan 2024
Direct link to this comment
https://nl.mathworks.com/matlabcentral/answers/2075161-use-of-interp2-in-an-arbitrary-dataset#comment_3044591
Edited: Torsten on 27 Jan 2024
@Sulaymon Eshkabilov
You already interpolate (extrapolate) when you assume that (x,y,z) can be extended to (X,Y,Z) as existing database for interpolation with interp2.
Stathis Tingas on 27 Jan 2024
Direct link to this comment
https://nl.mathworks.com/matlabcentral/answers/2075161-use-of-interp2-in-an-arbitrary-dataset#comment_3044606
Edited: Stathis Tingas on 27 Jan 2024
Dear @Sulaymon Eshkabilov, thanks for your response which seems to work fine but you have made a mistake in your Data matrix and this seems to make a difference.
In particular, the 3rd element in the y vector should be 0.35 and not 0.75.
When I try to use 0.35 with your version of the code, I get:
Error using griddedInterpolant
Sample points must be sorted in ascending order.
Error in interp2>makegriddedinterp (line 226)
F = griddedInterpolant(varargin{:});
Error in interp2 (line 134)
F = makegriddedinterp(X, Y, V, method,extrap);
Is there a workaround for this error?
Sign in to comment.
Sign in to answer this question.
See Also
Categories
MATLABMathematicsInterpolation
Find more on Interpolation in Help Center and File Exchange
Tags
- interp2
- 2d
- makegriddedinterp
- griddedinterpolant
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
An Error Occurred
Unable to complete the action because of changes made to the page. Reload the page to see its updated state.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- Deutsch
- English
- Français
- United Kingdom(English)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)
Contact your local office