# bsplin3val

função de avaliação de derivada arbitrária de spline 3d

## Seqüência de Chamamento

    [dfp]=bsplin3val(xp,yp,zp,tl,der)

## Parâmetros

xp, yp, zp

  vetores ou matrizes de reais de tamanhos iguais

tl

  tlist de tipo "splin3d", definindo um tensor spline 3d (chamado de `s` a seguir)

der

  vetor com três componentes `[ox,oy,oz]` definindo qual derivada de `s` computar.

dfp

  vetor ou matriz de mesmo formato que `xp`, `yp` e `zp`, avaliação elemento a elemento da derivada especificada de `s` nesses pontos.

## Descrição

Enquanto a função interp3d pode computar apenas o spline `s` e suas primeiras derivadas, `bsplin3val` pode computar qualquer derivada de `s`. A derivada a ser computada é especificada pelo argumento `der=[ox,oy,oz]` :

                ox   oy   oz
               d    d    d
    dfp(i) =  ---  ---  ---   s (xp(i),yp(i),zp(i))
                ox   oy   oz
              dx   dy   dz

Então, `der=[0 0 0]` corresponde a s, `der=[1 0 0]` to ds/dx, `der=[0 1 0]` to ds/dy, `der=[1 1 0]` to d2s/dxdy, etc...

Para um ponto com coordenadas (xp(i),yp(i),zp(i)) fora do grid, a função retorna 0.

## Exemplos

    deff("v=f(x,y,z)","v=cos(x).*sin(y).*cos(z)");
    deff("v=fx(x,y,z)","v=-sin(x).*sin(y).*cos(z)");
    deff("v=fxy(x,y,z)","v=-sin(x).*cos(y).*cos(z)");
    deff("v=fxyz(x,y,z)","v=sin(x).*cos(y).*sin(z)");
    deff("v=fxxyz(x,y,z)","v=cos(x).*cos(y).*sin(z)");
    n = 20;  // n x n x n  pontos de interpolação
    x = linspace(0,2*%pi,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]);

    // computando f e algumas derivadas em um ponto
    // e comparando com o spline interpolante
    xp = grand(1,1,"unf",0,2*%pi);
    yp = grand(1,1,"unf",0,2*%pi);
    zp = grand(1,1,"unf",0,2*%pi);

    f_e = f(xp,yp,zp)
    f_i = bsplin3val(xp,yp,zp,tl,[0 0 0])

    fx_e = fx(xp,yp,zp)
    fx_i = bsplin3val(xp,yp,zp,tl,[1 0 0])

    fxy_e = fxy(xp,yp,zp)
    fxy_i = bsplin3val(xp,yp,zp,tl,[1 1 0])

    fxyz_e = fxyz(xp,yp,zp)
    fxyz_i = bsplin3val(xp,yp,zp,tl,[1 1 1])

    fxxyz_e = fxxyz(xp,yp,zp)
    fxxyz_i = bsplin3val(xp,yp,zp,tl,[2 1 1])

## Ver Também

- splin3d
- interp3d

## Autores

- R.F. Boisvert, C. De Boor (código da biblioteca FORTRAN CMLIB)
- B. Pincon (interface Scilab)