avaliação por interpolação cúbica bidimensional de Shepard
zp = eval_cshep2d(xp, yp, tl_coef) [zp, dzpdx, dzpdy] = eval_cshep2d(xp, yp, tl_coef) [zp, dzpdx, dzpdy, d2zpdxx, d2zpdyy, d2zpdxy] = eval_cshep2d(xp, yp, tl_coef)
dois vetores (ou matrizes) de mesmo tamanho
uma estrutura Scilab tlist (de tipo cshep2d) definindo uma
função de interpolação cúbica de Shepard (chamada
S
a partir daqui)
vetor (ou matrizes) de mesmo tamanho que xp
e yp
, avaliação do interpolante
S
nesses pontos
vetores (ou matrizes) de mesmo tamanho que
xp
e yp
, avaliação das
derivadas primeiras de S
nestes pontos
vetores (ou matrizes) de mesmo tamanho que
xp
e yp
, avaliação das
derivadas segundas de S
nestes pontos
Esta é a rotina de avaliação para a função de interpolação cúbica de Shepard obtida com cshep2d, isto é :
O interpolante S é C2 (duas vezes continuamente diferenciável) mas também é estendido por zero para (x,y) suficientemente longe dos pontos de interpolação. Isto leva a uma descontinuidade em regiões exteriores muito longe dos pontos de interpolação e, assim, a avaliação não se torna incoveniente na prática (de um modo geral, avaliação fora dos pontos de interpolação (i.e. extrapolação) leva a resultados muito inacurados).
// ver seção de exemplos em cshep2d // este exemplo mostra o comportamento longe dos pontos de interpolação... deff("z=f(x,y)","z = 1+ 50*(x.*(1-x).*y.*(1-y)).^2") x = linspace(0,1,10); [X,Y] = ndgrid(x,x); X = X(:); Y = Y(:); Z = f(X,Y); S = cshep2d([X Y Z]); // avaliação dentro e fora do quadrado [0,1]x[0,1] m = 40; xx = linspace(-1.5,0.5,m); [xp,yp] = ndgrid(xx,xx); zp = eval_cshep2d(xp,yp,S); // computando faceta (para definir uma cor para a região de extrapolação // e outra para a região de interpolação) [xf,yf,zf] = genfac3d(xx,xx,zp); color = 2*ones(1,size(zf,2)); // índices correspondentes à faceta na região de interpolação ind=find( mean(xf,"r")>0 & mean(xf,"r")<1 & mean(yf,"r")>0 & mean(yf,"r")<1 ); color(ind)=3; clf(); plot3d(xf,yf,list(zf,color), flag=[2 6 4]) legends(["região de extrapolação","região de interpolação"],[2 3],1) show_window() | ![]() | ![]() |