Main Content

Curve Fitting Toolbox スプラインと MATLAB スプライン

Curve Fitting Toolbox スプライン

Curve Fitting Toolbox™ スプライン関数には、("ベクトル" 値スプラインも処理するために拡張された) B スプライン パッケージの必須 MATLAB® プログラム バージョンも含まれています。詳細については、『A Practical Guide to Splines』(Applied Math.Sciences Vol. 27, Springer Verlag, New York (1978), xxiv + 392p; revised edition (2001), xviii+346p) (以下 "PGS" と呼びます) を参照してください。ツールボックスを使用すると、区分的多項式関数を簡単に作成および操作できます。

このツールボックスの想定される一般的な用途は、区分的多項式近似の作成とその後の使用です。この作成ではデータの近似が行われますが、幅広いデータを近似できます。最も簡潔な状況では、点 (ti,yi) が与えられ、f(ti) = yi、すべての i をいくらか満たす区分的多項式関数 f を必要とします。厳密な近似では "内挿" が、そこまでの厳密さを求めない近似では "最小二乗近似" または "平滑化スプライン" が考えられます。ただし、近似される関数は、微分または積分方程式の解など、より暗黙的な方法でも記述される場合もあります。そのような場合、データは (Af)(ti) の形式となります。この A は微分または積分演算子です。一方、形状全体に比べて正確な位置の重要度が低いスプライン "曲線" を作成する場合があります。最後に、このすべてにおいて、"テンソル積スプライン" など、複数の変数の関数が必要な場合があります。

この操作は、できる限り簡単かつ直観的になっています。特に、ユーザーがスプラインの作成方法または後で使用するための格納方法について心配したり、一時的なユーザーが "ブレーク"、"節点" または "係数" などの項目について心配する必要はありません。作成された各関数が、fn (function を表す) で始まるすべてのコマンドを含む、多くのコマンドの入力 (該当する場合) として自由に使用できる別の変数であることを理解していれば十分です。また、ツールボックス内で、型を変換できるコマンド fn2fm を使ってスプラインを異なる型で格納できることも理解していると役に立つ場合があります。

現在、ツールボックスは区分的多項式関数の表現について 2 つの主要な型をサポートしています。特定の共通する状況において一方の型がもう一方の型よりも優れていることが判明しています。B 型は特にスプラインの作成時に便利ですが、pp 型は区分的多項式関数を広範囲で評価する際に使用すると効率が高まります。これら 2 つの型は、『A Practical Guide to Splines』で使用されている B 表現および pp 表現とほぼ同じです。

しかし、年月を経て、Curve Fitting Toolbox スプライン関数は、『A Practical Guide to Splines』のプログラムを超えるものになりました。現在では、ツールボックスは 二変量の薄板スプラインの作成と使用に対応する 'scattered translates' 型 (st 型)、および NURB に対応する有理スプラインを表現する 2 つの方法 (rB 型と rp 型) もサポートするようになりました。

データ近似では、この場合に解く線形方程式が帯状で、解に必要な操作が正しく実行されると、データ点数に比例して線形にのみ拡張するため、スプラインが非常に効果的です。特に MATLAB スパース行列機能は、ここに示す線形システムのいくつかが概ブロック対角であるという事実に依存する、ツールボックス独自の方程式ソルバー slvblk よりも効率が向上する場合に Curve Fitting Toolbox スプライン関数で使用されます。

すべての多項式スプライン作成コマンドは、二変量 (または多変量) の区分的多項式関数をここで使用される一変量関数のテンソル積として作成するために用意されています。また、さまざまな fn... コマンドがこれらの多変量関数でも機能します。

さまざまな例が用意されており、すべてヘルプ ブラウザーからアクセスできます。それらの例や splinetool を参照してスプラインの操作の参考にすることを強くお勧めします。

スプライン

以下のセットを考えます。

S:=Πξ,kμ

すべて、次数 k でブレーク ξ1 < ... < ξl + 1 をもつ (スカラー値) 区分的多項式であり、i = 2...l の場合、ξi 全体でその μi 次導関数にジャンプがありますが、より低い次数の導関数にはジャンプはありません。このセットは、S 内の関数のスカラー倍が、S 内の 2 つの関数の和と同様に、やはり S 内にあるという意味で線形空間です。

したがって、S には基底 (実際は無数の基底)、つまり、シーケンス f1,...,fn が含まれます。これにより、S 内の各 f を次の形式で "一意" に記述できます。

f(x)=j=1nfj(x)aj,

これは、適した係数 aj の場合です。ここで現れる数値 n は線形空間 S の "次元" です。係数 aj は、通常、この基底に関する f の "座標" と呼ばれます。

特に、Curry-Schoenberg の定理によれば、この空間 S は、B スプラインで構成された基底、つまり、B(·|tj,...,tj+k), j = 1...n という形式のすべての B スプラインのシーケンスをもちます。これは、次の条件に従い、ブレーク シーケンス ξ から取得した節点シーケンス t と、シーケンス µ を備えています。

  • ξ1 と ξl + 1 の両方は t で正確に k 回発生する

  • それぞれの i = 2:l に対して、ξi が t で正確に k – µi 回発生する

  • 確実に、シーケンスは減少せず、ξ からの要素のみを含む

節点の多重度とその節点を横切るスプラインの滑らかさの間の対応に注意してください。特に、節点シーケンスで正確に 1 回現れる簡易な節点では、不連続となる可能性があるのは (k – 1) 次導関数のみです。

MATLAB スプライン

MATLAB 技術計算環境では、コマンド spline を使ってスプライン近似を実行できます。cs = spline(x,y) という形式で呼び出すと、ブレーク シーケンス x を使用する 3 次スプラインの pp 型が返されます。このブレーク シーケンスでは、すべての i について x(i) で値が y(i) になり、節点なしの端点条件が満たされます。つまり、コマンド cs = spline(x,y) は、Curve Fitting Toolbox スプライン関数で使用できるコマンド cs = csapi(x,y) と同じ結果を示します。ただし、後者は x,y が多変量グリッド データを表す際も機能します。MATLAB では、多変量グリッド データの 3 次スプライン内挿は、コマンド interpn(x1,...,xd,v,y1,...,yd,'spline') で実行されます。このコマンドは、y1,...,yd で指定されるグリッドの内挿テンソル積 3 次スプラインの値を返します。

さらに、MATLAB で直接使用できる Curve Fitting Toolbox スプライン コマンド fnvalppmakfnbrk の簡易バージョンを、それぞれコマンド ppvalmkppunmkpp として使用して、任意の Curve Fitting Toolbox スプライン fn... コマンドを MATLAB spline(x,y) コマンドの出力に適用できます。

推奨される予備知識

Curve Fitting Toolbox スプライン関数は当初、スプライン近似のエキスパート向け MATLAB 環境の拡張機能として、新しいスプライン近似方法の作成とテストを支援するために作成されました。そのようなエキスパートは『A Practical Guide to Splines』で取り上げられている資料を知っているはずです。

ただし、スプライン近似を作成および使用するための基本コマンドは、内挿またはデータの最小二乗近似の作成方法や、関数の微分または積分の概要を理解していなくても使用できる設定になっています。

その点を考慮して、3 次スプライン内挿などの初級ユーザー向けの節もありますが、チェビシェフ スプラインの作成やテンソル積の使用に関するセクションなどの詳細な例を示すセクションは、独自のスプライン コマンドの開発に関心があるユーザー向けになっています。

ベクトル データ型のサポート

Curve Fitting Toolbox スプライン関数は、"ベクトル" 値スプライン、つまり値が Rd にあるスプラインを処理できます。MATLAB には最初は変数の型 (行列の型) が 1 つしかなかったため、現在でもベクトル (数値リスト) の処理については不確かな部分があります。MATLAB ではこのリストを 1 つの行のみを含む行列に格納する場合もあれば、1 つの列のみを含む行列に格納することもあります。1 つ目のインスタンスで "1 行行列" は行ベクトルと呼ばれ、2 つ目のインスタンスで "1 列行列" は列ベクトルと呼ばれます。どちらにしても、ベクトルの "格納" 方法が異なるだけで、ベクトルの "種類" が異なるわけではありません。

このツールボックスでは、"ベクトル"、つまり数値リストは最終的に 1 行行列または 1 列行列に格納されます。ただし、以下の決めごとがあります。

Rd の点、つまり d ベクトルは常に列ベクトルとして格納されます。特に、コマンドのいずれかに d ベクトルの n リストを指定する場合は、そのリストを [d,n] サイズの行列の n 列として指定する必要があります。

他の数値リスト (節点シーケンスまたはブレーク シーケンスなど) は行ベクトルとして内部に格納される場合がありますが、これらのリストは必要に応じて行ベクトルまたは列ベクトルどちらでも指定することができます。

スプライン関数の命名規則

このツールボックスの多くのスプライン コマンドには、次のパターンのいずれかに従う名前が付いています。

cs... コマンドは 3 次スプライン (pp 型) を作成する

sp... コマンドは B 型のスプラインを作成する

fn... コマンドはスプライン関数で機能する

..2... コマンドは変換を実行する

..api コマンドは内挿による近似を作成する

..aps コマンドは平滑化による近似を作成する

..ap2 コマンドは最小二乗近似を作成する

...knt コマンドは特定の節点シーケンス (の一部) を作成する

...dem コマンドは例を示す

Curve Fitting Toolbox スプライン関数の引数

使いやすさの面から、ほとんどの Curve Fitting Toolbox スプライン関数には既定の引数があります。「構文」の参照エントリでは、通常、最初に関数と "必要な" すべての入力引数を示した後に、"指定可能な" すべての入力引数を示しています。複数のオプション引数がある場合は、必ずというわけではありませんが、正確な順序は重要でない場合があります。順序が重要である場合は、対象となる引数の前にすべてのオプション引数を指定する必要があります。この場合、[] (空の行列) をその入力として使用してオプション引数の既定値を指定できます。各オプション入力引数の既定値については、リファレンス ページの説明を参照してください。

MATLAB では、明示的に指定された出力引数のみユーザーに返されます。

謝辞

MathWorks® は、Curve Fitting Toolbox スプライン関数への Carl de Boor の貢献に感謝の意を表します。de Boor 教授は最初のリリースから Version 3.3.4 (2008 年) まで Spline Toolbox™ を作成しました。

de Boor 教授は 1996 年にジョン フォン ノイマン理論賞、2003 年にはアメリカ国家科学賞を受賞しています。彼はアメリカ芸術科学アカデミーおよび米国科学アカデミー両方のメンバーです。彼は、『A Practical Guide to Splines』(Springer、2001 年) の著者です。

スプライン関数の命名規則の一部は、ウィスコンシン大学マディソン校コンピューター サイエンス学科の卒業生である Jörg Peters と協議して作成されました。