Scilab Website | Contribute with GitLab | Mailing list archives | ATOMS toolboxes
Scilab Online Help
2024.1.0 - 日本語


bsplin3val

3次元スプラインの任意微分評価関数

呼び出し手順

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

引数

xp, yp, zp

同じ大きさの実数ベクトルまたは行列

tl

"splin3d"型のtlistで, 3次元テンソルスプライン(以下ではsと 呼びます)を定義します.

der

3つ要素 [ox,oy,oz]のベクトルで, 計算するsの微分を定義します.

dfp

xp,ypおよび zpと同じ大きさのベクトルまたは行列で, これらの点におけるsの要素毎に特定の微分の評価値.

説明

関数interp3dは スプラインsとその1階の微分のみを計算しますが, bsplin3vals の任意の微分値を計算することができます. 計算する微分値は引数der=[ox,oy,oz]で 指定されます :

dfp(i)=∂^{oxoyoz}/(∂^ox.∂^oy.∂^oz) s(xp(i),yp(i),zp(i))

この場合,der=[0 0 0]s, der=[1 0 0]ds/dx, der=[0 1 0]ds/dy, der=[1 1 0]d2s/dxdy, など...に対応します

座標がグリッドの外部の点 (xp(i),yp(i),zp(i))の場合,関数は0を返します.

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  補間点
x = linspace(0,2*%pi,n); y=x; z=x; // 補間グリッド
[X,Y,Z] = ndgrid(x,y,z); V = f(X,Y,Z);
tl = splin3d(x,y,z,V,[5 5 5]);
// ある点で f および微係数を計算し,
// スプライン補間値と比較
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])

参照

  • splin3d — 3次元補間グリッドのスプライン
  • interp3d — 3次スプライン評価関数
Report an issue
<< bezier Interpolation cshep2d >>

Copyright (c) 2022-2024 (Dassault Systèmes)
Copyright (c) 2017-2022 (ESI Group)
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Mon Jun 17 17:54:17 CEST 2024