2d interpolation from a non-uniform grid
260 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
oceanmod
le 24 Juin 2020
Commenté : Akira Agata
le 26 Juin 2020
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.
4 commentaires
Akira Agata
le 26 Juin 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);
Réponse acceptée
Bjorn Gustavsson
le 25 Juin 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
3 commentaires
Bjorn Gustavsson
le 25 Juin 2020
Yes it does:
[X,Y] = meshgrid(1:12,1:11);
X(2:2:end,:) = X(2:2:end,:)+.5;
plot(X,Y,'+')
Z = peaks(12);
Z = Z(2:end,:);
subplot(1,2,1),
pcolor(X,Y,Z)
[Xi,Yi] = meshgrid(1:.1:12,1:.1:11);
Zi = griddata(X(:),Y(:),Z(:),Xi,Yi);
subplot(1,2,2)
pcolor(Xi,Yi,Zi),shading flat
You have to give the function the input it expects, for x, y and z. Then it demonstrably works.
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Interpolation dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!