ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

csapi

3 次スプライン内挿

構文

pp=csapi(x,y)
values = csapi(x,y,xx)

説明

pp=csapi(x,y) は、j=1:length(x) に対して x(j) で値 y(:,j) を使用する節点シーケンス x をもつ 3 次スプライン s の pp 型を返します。値 y(:,j) はスカラー、ベクトル、行列や、場合によっては ND 配列にすることもできます。同じデータ サイトを使用するデータ点はそれらのサイトで平均化されてから並べ替えられます。x による結果として並べ替えられたデータ サイトで、スプライン s は節点なしの端点条件、つまり、jumpx(2)D3s = 0 = jumpx(end–1)D3s (D3s による s の 3 階微分) を満たします。

x が cell 配列で、それぞれ長さが n1, ..., nm のシーケンス x1, ..., xm を含む場合、y はサイズが [n1,...,nm] (または内挿が d 値の場合はサイズ [d,n1,...,nm]) の配列であると予測されます。その場合、pp はそのデータに対する m 3 次スプライン内挿 s の pp 型です。特に、これで s(xl(i1), ..., xm(im)) は i1 = 1:nl, ..., im = 1:nm に対する y(:,i1, ..., im) に等しくなります。

構造体 pp を fnvalfnderfnplt などで使用し、この内挿 3 次スプラインの評価、微分、プロットなどを行うことができます。

values = csapi(x,y,xx) は、fnval(csapi(x,y),xx) と同じです。すなわち、xx で指定されるサイトで内挿 3 次スプラインの値が返されます。

このコマンドは本質的には MATLAB® の関数 spline で、csapi (spline も) がベクトル値のデータを受け入れ、グリッド データを処理できることを除き、"PGS" における Fortran ルーチン CUBSPL の機能を削減したものです。

詳細については、"スプライン内挿" のさまざまな例を参照してください。

丸め誤差が発生するまで、x が少なくとも 4 つのエントリをもつベクトルであると仮定すると、ステートメント pp = csapi(x,y) は次のステートメントと同じスプラインを pp に配置します。 

pp = fn2fm(spapi(augknt(x([1 3:(end-2) end]),4),x,y),'pp');

ただし、この 2 つ目の方法で取得したスプラインの記述では、x(2)x(n-1) でブレークを使用しません。

以下は、Mexican Hat 関数に双三次スプライン内挿がプロットされる簡単な 2 変数の例です。

x =.0001+[-4:.2:4]; y = -3:.2:3;
[yy,xx] = meshgrid(y,x); r = pi*sqrt(xx.^2+yy.^2); z = sin(r)./r;
bcs = csapi( {x,y}, z ); fnplt( bcs ), axis([-5 5 -5 5 -.5 1])

meshgrid への呼び出しにおける xy の反転は必要であることに注意してください。なぜなら、MATLAB がエントリ z(i,j) を (x(j), y(i)) における値として考える傾向にある一方で、このツールボックスが z(i,j) を (x(i),y(j)) における値として考える近似理論標準に従うからです。同様の注意事項は、以下に示すとおり、MATLAB の関数mesh を使用してこのような 2 変数スプラインの値をプロットする場合にも考慮しなければなりません (fnval から取得した値の行列の転置を使用する点に注意してください)。

xf = linspace(x(1),x(end),41); yf = linspace(y(1),y(end),41);
mesh(xf, yf, fnval( bcs, {xf, yf}).')

アルゴリズム

関連する三重対角線形システムは MATLAB のスパース行列機能を使用して構成され、解決されます。

節点なしの端点条件が使用されるため、内挿の最初および 2 番目の多項式区分と、最後から 2 番目および最後の多項式区分が強制的に一致するようにします。

参考

| |