splin3dspline gridded 3d interpolationCalling Sequencetl = splin3d(x, y, z, v, [order])Argumentsx,y,zstrictly increasing row vectors (each with at least 3
components) defining the 3d interpolation grid
vnx x ny x nz hypermatrix (nx, ny, nz being the length of
x, y and
z)
order(optional) a 1x3 vector [kx,ky,kz] given the order of the
tensor spline in each direction (default [4,4,4], i.e. tricubic
spline)
tla tlist of type splin3d defining the splineDescription
This function computes a 3d tensor spline s
which interpolates the (xi,yj,zk,vijk) points, ie, we
have s(xi,yj,zk)=vijk for all
i=1,..,nx, j=1,..,ny and
k=1,..,nz. The resulting spline
s is defined by tl which consists
in a B-spline-tensor representation of s. The
evaluation of s at some points must be done by the
interp3d function (to compute
s and its first derivatives) or by the bsplin3val function (to compute an arbitrary
derivative of s) . Several kind of splines may be
computed by selecting the order of the spline in each direction
order=[kx,ky,kz].
RemarkThis function works under the conditions:an error being issued when they are not respected.Examples
exec("SCI/modules/interpolation/demos/interp_demo.sci")
func = "v=(x-0.5).^2 + (y-0.5).^3 + (z-0.5).^2";
deff("v=f(x,y,z)",func);
n = 5;
x = linspace(0,1,n); y=x; z=x;
[X,Y,Z] = ndgrid(x,y,z);
V = f(X,Y,Z);
tl = splin3d(x,y,z,V);
m = 41;
direction = ["z=" "z=" "z=" "x=" "y="];
val = [ 0.1 0.5 0.9 0.5 0.5];
ebox = [0 1 0 1 0 1];
XF=[]; YF=[]; ZF=[]; VF=[];
for i = 1:length(val)
[Xm,Xp,Ym,Yp,Zm,Zp] = slice_parallelepiped(direction(i), val(i), ebox, m, m, m);
Vm = interp3d(Xm,Ym,Zm, tl);
[xf,yf,zf,vf] = nf3dq(Xm,Ym,Zm,Vm,1);
XF = [XF xf]; YF = [YF yf]; ZF = [ZF zf]; VF = [VF vf];
Vp = interp3d(Xp,Yp,Zp, tl);
[xf,yf,zf,vf] = nf3dq(Xp,Yp,Zp,Vp,1);
XF = [XF xf]; YF = [YF yf]; ZF = [ZF zf]; VF = [VF vf];
end
nb_col = 128;
vmin = min(VF); vmax = max(VF);
color_example = dsearch(VF,linspace(vmin,vmax,nb_col+1));
xset("colormap",jetcolormap(nb_col));
clf(); xset("hidden3d",xget("background"));
colorbar(vmin,vmax)
plot3d(XF, YF, list(ZF,color_example), flag=[-1 6 4])
xtitle("3d spline interpolation of "+func)
See Also
linear_interpn
interp3d
bsplin3val
History5.4.0previously, imaginary part of input arguments were implicitly ignored.