Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

B 型スプラインの作成と操作

B 型の作成

通常、スプラインは、関数値や微分値などの情報に基づいて、または常微分方程式の近似解として作成されます。ただし、コマンド spmak にその節点シーケンスと係数シーケンスを指定してスプラインをゼロから作成することもできます。

たとえば、以下のように入力します。

sp = spmak(1:10,3:8);

ここでは、一様の節点シーケンス 1:10 と係数シーケンス 3:8 を指定しています。節点が 10 個、係数が 6 個あるため、次数は 4(= 10 – 6) とならなければなりません。これで 3 次スプラインが得られます。以下のコマンドを入力します。

fnbrk(sp) 

この 3 次スプラインの B 型の構成要素が次のように示されます。

knots(1:n+k) 
   1 2 3 4 5 6 7 8 9 10 
coefficients(d,n) 
   3 4 5 6 7 8 
number n of coefficients 
   6 
order k 
   4 
dimension d of target 
   1

さらに、fnbrk を使用すると、これらの各構成要素を個別に指定できます。

ただし、Curve Fitting Toolbox™ スプライン機能では、これらの詳細を確認する必要がありません。sp をコマンドの引数として使用するだけで、スプラインの評価、微分、積分、変換またはプロットを行うことができます。詳細については、sp を参照してください。

B 型スプラインの操作

スプラインの操作では以下のコマンドを使用できます。スプラインを作成し、それを再び分割する spmak および fnbrk があります。fn2fm を使用して B 型から pp 型に変換します。fnvalfnderfndirfnintfnminfnzerosfnpltfnrfnfnxtr を使用してスプラインを評価、微分、積分、最小化し、零点を求め、プロット、調整し、外挿を選択することもできます。

節点シーケンスを生成するための次の 5 つのコマンドがあります。

  • 境界節点を指定し、内部節点の多重度も制御するための augknt

  • 指定された多重度の節点シーケンスを指定するための brk2knt

  • 特定のデータ サイトにおいて内挿に適した、与えられた次数のスプライン領域に対する節点シーケンスを示す aptknt

  • 特定のサイトにおいて内挿の "最適な" 節点シーケンスを示す optknt

  • 関数の近似により適している可能性のある節点シーケンスを示す newknt

他にも次のコマンドがあります。

  • 節点平均 (Greville サイト) を内挿の推奨サイトとして指定する aveknt

  • それらのサイトを指定する chbpnt

  • 特定の節点シーケンスからブレークや多重度を抽出する knt2brk および knt2mlt

指定された 2 次元係数シーケンスと一様の節点シーケンスをもつスプライン "曲線" を表示するには、spcrv を使用します。

独自のスプラインを作成するコマンドを作成することもできます。このコマンドでは、以下の情報を知っている必要があります。内挿条件または近似条件を満たすスプラインを作成するには、通常は "選点行列" が必要です。これは、すべての j、一部の r および一部のサイト τ に対して、数列 DrBj,k(τ)、つまり j 番目の B スプラインの τ における r 階微分が各行に含まれている行列です。この行列は spcol によって与えられます。オプションの引数によって、この行列を spcol により領域を節約するスプライン概ブロック対角型で、または MATLAB® スパース行列として指定できます。これは、概ブロック対角係数行列で線形システムを解くためのコマンド slvblk に渡すことができます。このツールボックスでの spcolslvblk の使用法を確認する場合は、コマンド spapispap2 および spaps を参照してください。

さらに、"3 次" スプラインを作成するルーチンもあります。csapi および csape は、それぞれ節点なしの端点条件およびさまざまな他の端点条件を使用して、特定のデータの節点における 3 次スプライン内挿を示します。与えらえた点を通るパラメトリック 3 次スプライン曲線は cscvn で示されます。3 次 "平滑化" スプラインは csaps で作成されます。

例: 円の B 型スプライン近似

他の簡易な例として、次を考えます。

points = .95*[0 -1 0 1;1 0 -1 0]; 
sp = spmak(-4:8,[points points]);

これにより、次のページのプロットに示すように、中央部分が非常に適切な円の近似となっている平面の 4 次スプライン曲線が示されます。これは、以下で生成されます。

plot(points(1,:),points(2,:),'x'), hold on 
fnplt(sp,[0,4]), axis equal square, hold off

追加のコントロール ポイント (±0.95,±0.95)/1.9 を挿入すると、視覚的に完全な円が作成されます。

ここではさらに詳しく説明します。生成されたスプライン曲線は、Σ8j=1Bj,5a(:, j) の形式で表され、一様の節点シーケンス -4:8 、およびそのコントロール ポイント a(:,j) を α=0.95 とするシーケンス (0,α),(–α,0),(0,–α),(α,0),(0,α),(–α,0),(0,–α),(α,0) を使用しています。パラメーター値 0 ~ 4 の曲線部分のみが実際にプロットされます。

曲線のこの部分が実際に円にどのくらい近いか確認するには、その符号なし曲率を計算します。空間曲線 γ の曲線ポイント γ(t) = (x(t), y(t)) における曲率 κ(t) は次の式から計算できます。

κ=|x'y''y'x''|(x'2+y'2)3/2

ここで、x'、x″、y' および y” は、使用されるパラメーター (t) に対する曲線の 1 階微分と 2 階微分です。平面曲線を (x,y) 平面における空間曲線として処理し、次のように 21 の点における最大および最小曲率を取得します。

t = linspace(0,4,21);zt = zeros(size(t));
dsp = fnder(sp); dspt = fnval(dsp,t); ddspt = fnval(fnder(dsp),t);
kappa = abs(dspt(1,:).*ddspt(2,:)-dspt(2,:).*ddspt(1,:))./...
   (sum(dspt.^2)).^(3/2);
[min(kappa),max(kappa)] 

ans = 
     1.6747    1.8611

したがって、曲率は定数にはならないものの、次の計算からわかるように、1/半径に近くなります。

1/norm(fnval(sp,0)) 

ans = 
     1.7864 

コントロール ポイントが x にマークされている円のスプライン近似

関連するトピック