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 の次元に起因していることがあります。