How to convert y data for equal intervals of x, z to z data for equal intervals of x, y

50 views (last 30 days)
x and z are tables of size 100x100 using meshgrid.
Values ​​outside the required range of z are treated as NaN.
The y value is the result of the calculation using x and z.
If the result of the calculation for z is a complex number, NaN is processed.
What code should I use to find z for equally spaced x, y?
An error occurs when trying to do 3D interpolation.
I attached the variable as an attachment.
I would greatly appreciate your help.

Accepted Answer

Bruno Luong
Bruno Luong on 12 Nov 2024 at 7:30
Moved: Bruno Luong on 12 Nov 2024 at 11:18
Rescaling is important when doing scatering interpolation. Avoid unstable extrapolation
load example.mat
XYZ = [X(:), Y(:), Z(:)];
XYZ = rmmissing(XYZ,1);
[minx, maxx] = bounds(X, "all");
[miny, maxy] = bounds(Y, "all");
XN = (XYZ(:,1)-minx)/(maxx-minx);
YN = (XYZ(:,2)-miny)/(maxy-miny);
F = scatteredInterpolant(YN, XN, XYZ(:,3) , 'linear', 'none');
[XNG, YNG] = deal(linspace(0, 1));
ZG = F({YNG, XNG});
XG = minx + XNG*(maxx-minx);
YG = miny + YNG*(maxy-miny);
figure
surf(XG, YG, ZG);
shading interp
hold on
contourf(XG, YG, ZG, 'Zlocation',-1.3)
colorbar
plot3(X(:),Y(:),Z(:),'.b')
view(15,50)

More Answers (1)

Walter Roberson
Walter Roberson on 12 Nov 2024 at 3:36
Moved: Walter Roberson on 12 Nov 2024 at 3:36
load example.mat
XYZ = [X(:), Y(:), Z(:)];
XYZ = rmmissing(XYZ,1);
F = scatteredInterpolant(XYZ(:,1), XYZ(:,2), XYZ(:,3));
[minx, maxx] = bounds(X, "all");
[miny, maxy] = bounds(Y, "all");
[XG, YG] = ndgrid(linspace(minx, maxx), linspace(miny, maxy));
ZG = F(XG, YG);
surf(XG, YG, ZG);
shading interp

Products


Release

R2023b

Community Treasure Hunt

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

Start Hunting!