Use of interp2 in an arbitrary dataset (2024)

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

  • 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

Sign in to comment.

Sign in to answer this question.

Answers (2)

Walter Roberson on 27 Jan 2024

  • Link

    Direct link to this answer

    https://nl.mathworks.com/matlabcentral/answers/2075161-use-of-interp2-in-an-arbitrary-dataset#answer_1398476

  • Link

    Direct link to this answer

    https://nl.mathworks.com/matlabcentral/answers/2075161-use-of-interp2-in-an-arbitrary-dataset#answer_1398476

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)

Use of interp2 in an arbitrary dataset (3)

4 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

  • Link

    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

  • Link

    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

  • Link

    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

  • Link

    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

Use of interp2 in an arbitrary dataset (8)

Sign in to comment.

Sulaymon Eshkabilov on 27 Jan 2024

  • Link

    Direct link to this answer

    https://nl.mathworks.com/matlabcentral/answers/2075161-use-of-interp2-in-an-arbitrary-dataset#answer_1398481

  • Link

    Direct link to this answer

    https://nl.mathworks.com/matlabcentral/answers/2075161-use-of-interp2-in-an-arbitrary-dataset#answer_1398481

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');

Use of interp2 in an arbitrary dataset (10)

2 Comments

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

  • Link

    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

  • Link

    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.


Use of interp2 in an arbitrary dataset (13)

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)

Europe

  • 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

Contact your local office

Use of interp2 in an arbitrary dataset (2024)
Top Articles
Latest Posts
Article information

Author: Reed Wilderman

Last Updated:

Views: 5889

Rating: 4.1 / 5 (52 voted)

Reviews: 91% of readers found this page helpful

Author information

Name: Reed Wilderman

Birthday: 1992-06-14

Address: 998 Estell Village, Lake Oscarberg, SD 48713-6877

Phone: +21813267449721

Job: Technology Engineer

Hobby: Swimming, Do it yourself, Beekeeping, Lapidary, Cosplaying, Hiking, Graffiti

Introduction: My name is Reed Wilderman, I am a faithful, bright, lucky, adventurous, lively, rich, vast person who loves writing and wants to share my knowledge and understanding with you.