Main Content

spmak

B 型のスプラインの組み立て

構文

spmak(knots,coefs)
spmak(knots,coefs,sizec)
spmak
sp = spmak(knots,coeffs)

説明

コマンド spmak(...) は、最小限の情報と、その入力からのその他の推論から、B 型のスプライン関数を組み立てます。fnbrk は完全な説明のすべての部分を返します。このようにして、この型の格納に使用される実際のデータ構造体を、この構造体を使用するさまざまな fn... コマンドに影響を及ぼすことなく容易に変更できます。

spmak(knots,coefs) は、knots の節点情報と coefs の係数情報によって指定されたスプラインの B 型を返します。

spmak が実行するアクションは、関数が一変量と多変量のどちらであるかによって異なります。これは、knots がシーケンスと cell 配列のどちらであるかによって示されます。説明のため、sizecsize(coefs) であるとします。

knots がシーケンス (非減少でなければならない) である場合、スプラインは一変量になり、その次数 k length(knots)-sizec(end) になります。つまり、coefs の各 '列' coefs(:,j) はスプラインの B スプライン係数となるため、スプラインは sizec(1:end-1) 値になります。B 型の基本区間は [knots(1) .. knots(end)] です。

節点の多重度は、≤ k に保持されます。つまり、対応する B スプラインが明らかに 1 つの節点のみをもつ場合 (knots(j)knots(j+k) に等しい場合)、係数 coefs(:,j) は単に無視されます。

knots が長さ m の cell 配列の場合、スプラインは m 変量となり、coefs は (r+m) 次元配列でなければなりません。ただし、スプラインがスカラー値の場合を除きます。この場合は、一変量の場合とは対照的に、coefs m 次元配列になることができますが、sizec は次によってリセットされます。

sizec = [1, sizec]; r = 1;

スプラインは、sizec(1:r) 値です。つまり、スプラインの出力は r 次元の配列です。たとえば、sizec(1:2) = [2, 3] の場合、スプラインの出力は 2 行 3 列の行列です。

スプラインは sizec(1:r) 値で、 m ベクトル ki 番目のエントリは length(knots{i}) - sizec(r+i), i=1:m として計算され、基本区間の cell 配列の i 番目のエントリは [knots{i}(1), knots{i}(end)] に設定されます。

spmak(knots,coefs,sizec) によって、配列 coefs の意図したサイズを指定できます。coefs のサイズが正しく指定されているものとすると、これは、coefs の末尾に大きさが 1 の次元が 1 つ以上あるまれなケースでのみ懸念事項となります。これは、MATLAB® では、末尾にある大きさが 1 の次元が抑制されるため、coefs の目的のサイズをこのように明示的に指定していない場合は、coefsspmak によって正しく解釈されないためです。

spmak によって、knotscoefs を指定するように求められます。

sp = spmak(knots,coeffs) は、スプライン sp を返します。

spmak(1:6,0:2) は基本区間が [1. .6] で、6 つの節点と 3 つの係数をもち、したがって次数 6 - 3 = 3 のスプライン関数を作成します。

spmak(t,1) は B 型の B スプライン B(·|t) を提供します。

係数は d ベクトル (2 ベクトルまたは 3 ベクトルなど) の場合があります。この場合、得られるスプラインは曲線または曲面 (R2 または R3) です。

次のように、1 番目の変数が線形、2 番目の変数が定数の 2 ベクトル値 二変量多項式を四角形 [–1..1] × [0..1] 上に作成することが目的である場合、

 coefs = zeros([2 2 1]); coefs(:,:,1) = [1 0;0 1];

この場合、次の単純なコマンド

sp = spmak({[-1 -1 1 1],[0 1]},coefs);

の結果、エラー メッセージ 'There should be no more knots than coefficients' が返されます。これは、coefs の末尾にある大きさが 1 の次元は spmak によって認識されませんが、次のように 3 番目の引数の適切な使用が

sp = spmak({[-1 -1 1 1],[0 1]},coefs,[2 2 1]);

成功するためです。ここで、[2 2 1]size(coefs) に置き換えても機能しません。

その他の例については、例「Intro to B-form」を参照してください。

Diagnostics

提案された節点シーケンスが非減少でない場合、係数配列が空の場合、または節点の数が係数の数を超えていない場合はエラーが返されます。スプラインが多変量の場合、この最終診断は coefs 内の末尾にある大きさが 1 の次元に起因していることがあります。

参考