201 views (last 30 days)

Show older comments

I have looked at the griddata function but am not clear if it applies to data on an irregular mesh. In my case, I have a 2d spatial dataset available on an [X,Y] grid where X and Y, which are the cartesian coordinates, are themselves 2d arrays. That is, both X and Y have sizes (m,n) but

X(:,1) ~= X(:,2) ~= X(:,3) and so on.

Similarly for the array Y. Visually, you can picturize the grid as follows, where X marks the location of the input data set:

X X X X

X X X X

X X X X

Along each row, the spacing between two Xs is uniform. But the spacing changes from row to row, leading to X(:,1), X(:,2), etc. all being different.

It looks like griddata will not accept such an input grid. Am I correct?

Thanks for your help.

Akira Agata
on 26 Jun 2020

Well, let me clarify my intention by the following small example.

I hope this will be somehow helpful for you to understand how these two functions works.

% Original Data (X and Y are non-uniform grid)

X = [...

1 3 5 7;...

2 4 6 8;...

1 3 5 7;...

2 4 6 8];

Y = [...

1 1 1 1;

2 2 2 2;

3 3 3 3;

4 4 4 4];

Z = X.^2 + Y.^2;

% Query points

[xGrid, yGrid] = meshgrid(1:0.2:8,1:0.2:4);

% [Solution 1]

F = scatteredInterpolant(X(:),Y(:),Z(:));

zGrid = F(xGrid,yGrid);

% [Solution 2]

X2 = X(1:2:end,:);

Y2 = Y(1:2:end,:);

Z2 = Z(1:2:end,:);

zGrid2 = interp2(X2,Y2,Z2,xGrid,yGrid);

Bjorn Gustavsson
on 25 Jun 2020

No you can use griddata and scatteredInterpolant. You can do something like this:

Zi = griddata(X(:),Y(:),Z(:),Xi,Yi);

And you do the same thing with scatteredInterpolant - the (:) construct just unwraps an array into a 1-D column array.

HTH

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

Start Hunting!