このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
fndir
関数の方向導関数
構文
df = fndir(f,y)
説明
df = fndir(f,y)
は、(列) ベクトル y
の方向における、f
の関数 f の方向導関数の pp 型です。つまり、df
は関数 を記述します。
y
が n
列の行列で、f が d
値の場合、df
の関数は prod(d)*n
値です。x におけるその値はサイズ [d,n]
に再形成され、j 番目の "列" に、y
の j 番目の列の方向における x での f の方向導関数をもちます。df
に f の実際のサイズを明示的に反映させる場合は、代わりに次を使用します。
df = fnchg( fndir(f,y), 'dim',[fnbrk(f,'dim'),size(y,2)] );
fndir
は f
の関数の pp 型に依存しているため、有理関数と st 型の関数のいずれでも機能しません。
例
たとえば、f
が m
変量 d
ベクトル値関数を記述し、x
がそのドメイン内の点である場合、スカラー値双一次多項式を記述するこの特定の pp 型 f
などでは、
f = ppmak({0:1,0:1},[1 0;0 1]); x = [0;0]; [d,m] = fnbrk(f,'dim','var'); jacobian = reshape(fnval(fndir(f,eye(m)),x),d,m)
は、その点における関数のヤコビアン (この特定の "スカラー" 値関数の場合は、その勾配となり、原点で 0) です。
関連する例として、次のステートメントは規則的なメッシュにフランケ関数 (への適切な近似) の勾配をプロットします。
xx = linspace(-.1,1.1,13); yy = linspace(0,1,11); [x,y] = ndgrid(xx,yy); z = franke(x,y); pp2dir = fndir(csapi({xx,yy},z),eye(2)); grads = reshape(fnval(pp2dir,[x(:) y(:)].'),... [2,length(xx),length(yy)]); quiver(x,y,squeeze(grads(1,:,:)),squeeze(grads(2,:,:)))
以下のプロットが得られます。
アルゴリズム
f
の関数は pp 型に変換され、その多項式区分の方向導関数は 1 つのベクトル演算で正式に計算され、再び組み合わされて f
の関数の方向導関数の pp 型を形成します。