3次エルミートスプライン

提供: testwiki
ナビゲーションに移動 検索に移動

数値解析において、3次エルミートスプラインまたは3次エルミート補間は、各部分がエルミート形式で指定される3次多項式、つまり対応する区間の両端の値と1次微分によって指定されるスプラインである [1] 。

3次エルミートスプラインは、通常、与えられる引数値 x1,x2,…,xn で指定される数値データを補間して連続関数を得るために使用される。 データは、各 xk についての所望の関数値と微分から構成される必要がある(値のみが与えられている場合、微分はそれから推定する必要がある)。 エルミート補間多項式[訳注 1]は各区間 (xk,xk+1) に個別に適用される。 結果のスプラインは連続、かつ、一次微分連続となる。

3次多項式スプラインは他の方法でも指定でき、ベジェ形式が最も一般的である。 しかし、これら2つの方法で得られるスプラインセットは同一であり、ベジェ形式とエルミート形式の間でデータの変換も容易であるため、これらの名称はしばしば同義語のように使用される。

3次多項式スプラインは、コンピュータグラフィックスやテンプレート:日本語版にない記事リンクにおいて、平面または3次元空間上の指定された点を通過する曲線や運動軌跡を得るために広く用いられている。 これらのアプリケーションでは、平面または空間の各座標は、個別のパラメータ t を持つ3次スプライン関数によって個別に補間される。 3次多項式スプラインは、テンプレート:日本語版にない記事リンクなどの構造解析アプリケーションでも広く用いられている。

3次多項式スプラインは、死亡率分析[2] や死亡率予測[3] にも応用されている。

3次スプラインは、いくつかの方法で2つ以上のパラメータを持つ関数に拡張できる。 バイキュービックスプライン(バイキュービック補間)は、デジタル画像のピクセル値や地形の高度データなど、規則的な矩形グリッド上のデータを補間するためによく使用される。 バイキュービック曲面パッチ [訳注 2] は、コンピュータグラフィックスにおいて不可欠なツールである。

3次スプラインは、特にコンピュータグラフィックスではしばしばcsplineと呼ばれる。エルミートスプラインは、シャルル・エルミートにちなんで名付けられた。

単一区間の補間

単位区間 [0, 1]

4つのエルミート基底関数。各部分区間における補間関数は、これら4つの関数の線形結合である。

単位間隔 [0,1] について、 t=0 における始点 𝒑0、t=1 における終点 𝒑1、および、 t=0 における開始接ベクトル 𝒎0、t=1 における終了接ベクトル 𝒎1 が与えられると、 多項式は次のように定義される。

𝒑(t)=(2t3−3t2+1)𝒑0+(t3−2t2+t)𝒎0+(−2t3+3t2)𝒑1+(t3−t2)𝒎1

ただし t ∈ [0, 1] である。

任意区間の補間

任意の区間 (xk,xk+1) 内の x での補間は、アフィン(1次)変数変換により区間を [0,1] にマッピングすることで行われる。 式は次のようになる。

𝒑(x)=h00(t)𝒑k+h10(t)(xk+1−xk)𝒎k+h01(t)𝒑k+1+h11(t)(xk+1−xk)𝒎k+1

ただし t=(x−xk)/(xk+1−xk) と h は、以下に定義される基底関数を参照。 なお接ベクトルの長さは、単位区間の方程式に対し xk+1−xk 倍にスケーリングされる。

一意性

上記の式は、指定された接ベクトルを持つ2点間の、一意の3次多項式の経路を示す。

証明

P,Q は、与えられた境界条件を満たす2つの3次多項式とする。R=Q−P とすると、

R(0)=Q(0)−P(0)=0
R(1)=Q(1)−P(1)=0

である。 Q と P はいずれも3次多項式であるので、R は最大で3次の多項式である。 そのため、R は以下の式でなければならない。

R(x)=ax(x−1)(x−r)

導関数を計算すると、

R′(x)=ax(x−1)+ax(x−r)+a(x−1)(x−r)

さらに、以下が明らかである。

R′(0)=Q′(0)−P′(0)=0,

テンプレート:NumBlk

R′(1)=Q′(1)−P′(1)=0,

テンプレート:NumBlk

式 (テンプレート:EquationNote) と (テンプレート:EquationNote) を合わせると、a=0 が導かれ、したがって R=0、よって P=Q となる。

表現

単位区間上の補間多項式は次のように書ける(任意区間については、上記再スケール版を参照)。 𝒑(t)=h00(t)𝒑0+h10(t)𝒎0+h01(t)𝒑1+h11(t)𝒎1 ただし h00, h10, h01, h11 はエルミート基底関数である。 これらは様々な方法で記述することができ、それぞれ異なる性質を示す。

展開 因数分解 バーンスタイン
h00(t) 2t3−3t2+1 (1+2t)(1−t)2 B0(t)+B1(t)
h10(t) t3−2t2+t t(1−t)2 13B1(t)
h01(t) −2t3+3t2 t2(3−2t) B3(t)+B2(t)
h11(t) t3−t2 t2(t−1) −13B2(t)

「展開」列は上記の定義で使用された表現を示している。 「因数分解」列は、h10 と h11 が端点でゼロであることを直接示している。 さらに、h01 と h11 は0で重複度2の零点を持ち、h00 と h10 は1で重複度2の零点を持つため、それら端点で傾きが0になると言える。 「バーンスタイン」列は、エルミート基底関数を3次のバーンスタイン多項式に分解したものを示しており、

Bk(t)=(3k)⋅tk⋅(1−t)3−k

である。

この関係を利用すると、3次エルミート補間を 3次ベジェ曲線の形式で、次の4つの値 𝒑0,𝒑0+13𝒎0,𝒑1−13𝒎1,𝒑1 によって表現でき、ド・カステリョのアルゴリズムを用いてエルミート補間を行うことができる。 これは、3次ベジェ曲線 [訳注 3] において、補間曲線の両端点における接ベクトルが、中間の2つの制御点により決定されることを示している。

この多項式は次の標準形式で記述することもできる: 𝒑(t)=(2𝒑0+𝒎0−2𝒑1+𝒎1)t3+(−3𝒑0+3𝒑1−2𝒎0−𝒎1)t2+𝒎0t+𝒑0 ただし、制御点と接ベクトルが係数である。 この形式では係数が一定となり、一度計算して再利用できるため、t の様々な値について多項式を効率的に評価できる。

行列形式では 𝒑(t)=[t3t2t1][21−21−3−23−101001000][𝒑0𝒎0𝒑1𝒎1] となる。

ベジェ曲線への変換

3次ベジェ曲線の行列形式は 𝒑(t)=[t3t2t1][−13−313−630−33001000][𝒑𝒃𝒛0𝒑𝒃𝒛1𝒑𝒃𝒛2𝒑𝒃𝒛3] であることから、3次エルミートスプラインと等しくなる3次ベジェ曲線の制御点は [𝒑𝒃𝒛0𝒑𝒃𝒛1𝒑𝒃𝒛2𝒑𝒃𝒛3]=[−13−313−630−33001000]−1[21−21−3−23−101001000][𝒑0𝒎0𝒑1𝒎1]=[𝒑0𝒑0+𝒎03𝒑1−𝒎13𝒑1] である。

データセットの補間

あるデータセット (xk,𝒑k)(k=1,…,n)は、各区間に上記手順を適用することで補間できる。ただし、接ベクトルを適切な方法で選択する、つまり端点を共有する区間どうしで接線を等しくする。 補間された曲線は区分3次エルミートスプラインで構成され、(x1,xn) において大域的に連続して微分可能である。

接ベクトルの選択は一意ではなく、いくつかのオプションが利用可能である。

有限差分

有限差分の例

最も単純な選択肢は3点差分であり、一定間隔のデータ点を必要としない。 内部の点 k=2,…,n−1 に対しては、

𝒎k=12(𝒑k+1−𝒑kxk+1−xk+𝒑k−𝒑k−1xk−xk−1)

とし、データ集合の端点では片側差分とする。

カーディナルスプライン

2Dにおけるカーディナルスプラインの例。 線は曲線を表し、四角形は制御点 𝒑k を表す。 曲線は最初の点と最後の点には達していないことに注意。 ただし、これらの点は曲線の形状に影響を与える。テンションパラメータは0.1を用いた。
𝒎k=(1−c)𝒑k+1−𝒑k−1xk+1−xk−1

を用いて接ベクトルを計算すると、カーディナルスプライン(英語: cardinal spline)が得られる [4] 。なお、カーディナルスプラインは正準スプライン(英語: canonical spline)と呼ばれることもある [5] 。 パラメータ テンプレート:Mvar はテンションパラメータであり、テンプレート:Math の範囲でなければならない。 ある意味では、これは接ベクトルの「長さ」と解釈できる。 テンプレート:Math を選択するとすべての接ベクトルがゼロになり、テンプレート:Math を選択すると一様パラメータ化(英語: uniform parameterization)Catmull-Romスプラインになる。

Catmull–Romスプライン

等間隔の横軸における黒点のCatmull–Rom 3次補間の幾何学的解釈 [6]

テンプレート:Main テンプレート:Seealso

接ベクトルとして

𝒎k=𝒑k+1−𝒑k−12

を選択することによりカーディナルスプラインの特殊な場合のひとつであるCatmull-Romスプラインが得られる。 「一様な」パラメータ間隔を前提とする。

Kochanek–Bartelsスプライン

テンプレート:Main Kochanek–Bartels スプラインは、データ ポイント 𝒑k−1, 𝒑k, 𝒑k+1 が与えられた場合に接ベクトルを選択する方法をさらに一般化したものであり、テンション、バイアス、連続性の3つのパラメータを指定できる。

単調3次補間

テンプレート:Main 上記のいずれかのタイプの3次エルミートスプラインを単調データセットの補間に使用する場合、補間された関数は必ずしも単調にはならないが、接ベクトルを調整することで単調性を維持できる。

端点の微分が一致する単位区間の補間

点 𝒑n−1,𝒑n,𝒑n+1,𝒑n+2 のひとつの座標成分を、 整数座標 x = n − 1, n, n + 1, n + 2 で関数 f(x) が取る値とすると、

pn=f(n)∀n∈ℤ

と表すことができる。

さらに、端点における接ベクトルは、隣接点の中心差分 mn=f(n+1)−f(n−1)2=pn+1−pn−12∀n∈ℤ. で定義されると仮定する。

実数値 x における補間値 f(x) を評価するには、まず x を整数部 n と小数部 u に分離する。

x=n+u,
n=⌊x⌋=floor⁡(x),
u=x−n=x−⌊x⌋,
0≤u<1,

ここで ⌊x⌋ は床関数を表し、x 以下の最大の整数を返すものとする。

Catmull-Romスプラインは [7] f(x)=f(n+u)=CINTu(pn−1,pn,pn+1,pn+2)=[1uu2u3][0100−1201201−522−12−1232−3212][pn−1pnpn+1pn+2]=12[−u3+2u2−u3u3−5u2+2−3u3+4u2+uu3−u2]T[pn−1pnpn+1pn+2]=12[u((2−u)u−1)u2(3u−5)+2u((4−3u)u+1)u2(u−1)]T[pn−1pnpn+1pn+2]=12((u2(2−u)−u)pn−1+(u2(3u−5)+2)pn+(u2(4−3u)+u)pn+1+u2(u−1)pn+2)=12((−u3+2u2−u)pn−1+(3u3−5u2+2)pn+(−3u3+4u2+u)pn+1+(u3−u2)pn+2)=12((−pn−1+3pn−3pn+1+pn+2)u3+(2pn−1−5pn+4pn+1−pn+2)u2+(−pn−1+pn+1)u+2pn)=12(((−pn−1+3pn−3pn+1+pn+2)u+(2pn−1−5pn+4pn+1−pn+2))u+(−pn−1+pn+1))u+pn, ただし、T は行列の転置を表す。 最後の式はホーナー法を用いた計算手法を示す。

この記述はトリキュービック補間(1回の最適化につき、同じ u と異なる p を使用して CINTu を16回計算する必要がある)にも関連する。

関連項目

テンプレート:Portal

脚注

訳注

テンプレート:Reflist

出典

テンプレート:Reflist

外部リンク

  1. ↑ テンプレート:Cite book
  2. ↑ テンプレート:Cite journal
  3. ↑ テンプレート:Cite journal
  4. ↑ テンプレート:Cite web
  5. ↑ テンプレート:Cite
  6. ↑ 3次補間は一意ではない。このモデルでは、Catmull–Romスプラインとラグランジュ基底多項式を用いて、4つの点すべてを通る曲線を構成している。
    注:黒点が黄点の左側にある場合、黄点までの水平距離は負になる。黒点が緑点の右側にある場合、緑点までの水平距離は負になる。
  7. ↑ Two hierarchies of spline interpolations. Practical algorithms for multivariate higher order splines.


引用エラー: 「訳注」という名前のグループの <ref> タグがありますが、対応する <references group="訳注"/> タグが見つかりません