Please note that the recommended version of Scilab is 2025.0.0. This page might be outdated.
See the recommended documentation of this function
splin3d
interpolação spline em grides 3d
Seqüência de Chamamento
tl = splin3d(x, y, z, v, [order])
Parâmetros
- x,y,z
vetores linhas estritamente crescentes (cada um com pelo menos três componentes) definindo o grid de interpolação 3d
- v
uma hipermatriz nx x ny x nz (nx, ny, nz sendo de comprimentos de
x
,y
ez
, respectivamente)- order
(opcional) um vetor 1x3 [kx,ky,kz] dada a ordem do tensor spline em cada direção (o padrão é [4,4,4], i.e. spline tricúbico)
- tl
um tlist do tipo splin3d definindo o spline
Descrição
Esta função computa um spline tensor 3d s que
interpola os pontos (xi,yj,zk,vijk), i.e., temos
s(xi,yj,zk)=vijk para todo
i=1,..,nx, j=1,..,ny e
k=1,..,nz. O spline resultante s
é definido por tl
que consiste em uma representação
B-tensor-spline de s. A avaliação de s em alguns
pontos deve ser feita pela função interp3d
(para computar s e suas derivadas primeiras) ou pela função bsplin3val (para computar uma derivada
arbitrária de s) . Vários tipos de splines podem ser computados
selecionando a ordem dos splines em cada direção
order=[kx,ky,kz]
.
Observação
Esta função funciona sob as condições:
nx, ny, nz <= 3 2 <= kx < nx 2 <= ky < ny 2 <= kz < nz
Há erro quando estas condições não são respeitadas.
Exemplos
// exemplo 1 // ============================================================================= func = "v=cos(2*%pi*x).*sin(2*%pi*y).*cos(2*%pi*z)"; deff("v=f(x,y,z)",func); n = 10; // n x n x n pontos de interpolação x = linspace(0,1,n); y=x; z=x; // grid de interpolação [X,Y,Z] = ndgrid(x,y,z); V = f(X,Y,Z); tl = splin3d(x,y,z,V,[5 5 5]); m = 10000; // computando um erro aproximado xp = grand(m,1,"def"); yp = grand(m,1,"def"); zp = grand(m,1,"def"); vp_exact = f(xp,yp,zp); vp_interp = interp3d(xp,yp,zp, tl); er = max(abs(vp_exact - vp_interp)) // tente agora com n=20 e veja o erro // exemplo 2 (veja a página de ajuda de linear_interpn que contém o // mesmo exemplo com interpolação trilinear) // ============================================================================= 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); // computando e exibindo o spline interpolante 3d em algumas fatias m = 41; dir = ["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(dir(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 = 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), flag=[-1 6 4]) xtitle("interpolação por spline 3d da função "+func) show_window()
Ver Também
Autores
- R.F. Boisvert, C. De Boor (código da biblioteca FORTRAN CMLIB)
- B. Pincon (interface Scilab)
<< splin2d | Interpolação | CACSD >> |