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 配列のどちらであるかによって示されます。説明のため、sizec は size(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 ベクトル k の i 番目のエントリは 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 の目的のサイズをこのように明示的に指定していない場合は、coefs が spmak によって正しく解釈されないためです。
spmak によって、knots と coefs を指定するように求められます。
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 の次元に起因していることがあります。