File Exchange

image thumbnail

3D Data Interpolation

version 1.1.0.0 (1.43 KB) by Per Sundqvist
3D interpolation using modified 4-point vector Newton interpolation

3 Downloads

Updated 12 Nov 2008

No License

Syntax: ui=NewtFit(x,y,z,u,xi,yi,zi)

3D interpolation. It may be used where griddata3 fails to find a triangularization of the datagrid (x,y,z). The function uses a modified 4 point Newton interpolation formula for vector arguments in 3D instread of scalars used in 1D. The interpolation is performed for the 4 nearest neighbors for each point in the (xi,yi,zi).

u=u(x,y,z) is the data from which ui(xi,yi,zi) is interpolated x,y,z,u are vectors of same size and xi,yi,zi are also vectors. The fit is exact (u=ui) for points (xi,yi,zi) that coinside with data points (x,y,z). Note: NewtFit also delivers result for points outside the domain (i.e., extrapolation), but results may be inaccurate then.

%Example: Prepare data in random non-uniform grid
xyz=rand(10003,3);
x=xyz(:,1);y=xyz(:,2);z=xyz(:,3);
u=x.^3+sin(pi*y).^2.*z.^2;

%Gridpoints to fit:
xyz=rand(8007,3);
xi=xyz(:,1);yi=xyz(:,2);zi=xyz(:,3);

%Interpolate
ui=NewtFit(x,y,z,u,xi,yi,zi);

%compare and plot
uui=xi.^3+sin(pi*yi).^2.*zi.^2;%exact
plot(uui,ui,'.');pause(4)
hist(uui-ui,60);
standard_deviation=std(uui-ui)

Cite As

Per Sundqvist (2020). 3D Data Interpolation (https://www.mathworks.com/matlabcentral/fileexchange/8970-3d-data-interpolation), MATLAB Central File Exchange. Retrieved .

Comments and Ratings (6)

Jami lynn

Not correct.

turki mehdi

Kent Davey

There are two lines right at the end of the code that need to be changed to

(y*ones(1,Nv)-ones(Nd,1)*yi).^2+...
(z*ones(1,Nv)-ones(Nd,1)*zi).^2;

Kent Davey

The program crashes if you reduce the size of the matrices using your own example. Would you please fix this?

xyz=rand(100,3);
x=xyz(:,1);y=xyz(:,2);z=xyz(:,3);
u=x.^3+sin(pi*y).^2.*z.^2;

%Gridpoints to fit:
xyz=rand(80,3);
xi=xyz(:,1);yi=xyz(:,2);zi=xyz(:,3);

%Interpolate
ui=NewtFit(x,y,z,u,xi,yi,zi);

%compare and plot
uui=xi.^3+sin(pi*yi).^2.*zi.^2;%exact
plot(uui,ui,'.')

Vishwas Iyengar

i tried to run this, but it is giving me weird numbers. i have two 3d grids, which are different in dimensions. so i ran the file with the first grid being (x,y,z) and u being my variable which needs to be interpolated onto another grid (x1,y1,z1). but it is not working. i wonder why? any comments?

Reaz Karim

Good, but with a bug. Undefined function or variable n when p == 0!. you could update after correcting. Also, deviation becomes high in some cases I tested.

Updates

1.1.0.0

Bug fixed. Have some ideas to improve it a bit more, but it will come later...

MATLAB Release Compatibility
Created with R13
Compatible with any release
Platform Compatibility
Windows macOS Linux