logo

数値解析におけるB-スプライン 📂数値解析

数値解析におけるB-スプライン

テキストと数式を読むのが嫌なら、図を見て理解しても全く問題ない。

定義 1

区間 [a,b][a,b]ax0<x1<<xn<xNba \le x_{0} < x_{1} < \cdots < x_{n} < \cdots x_{N} \le bのようなノードポイントで分割したとする。与えられた自由度 KK に対して、xK<xK+1<<x1<x0x_{-K} < x_{-K + 1} < \cdots < x_{-1} < x_{0}xN<xN+1<<xN+K1<xN+Kx_{N} < x_{N + 1} < \cdots < x_{N+K-1} < x_{N+K} の追加のノードを考え、ii番目のノードポイントと自由度1kK1 \le k \le Kに依存する再帰関数 Bi,k(x):={χ[xi,xi+1)(x),k=1xtiti+k1tiBi,k1(x)xti+kti+kti+1Bi+1,k1(x),k>1 B_{i,k}(x) := \begin{cases} \chi_{[x_{i} , x_{i+1} )} (x) & , k=1 \\ {{ x - t_{i} } \over {t_{i+k-1} - t_{i} }} B_{i , k-1} (x) - {{ x - t_{i+k} } \over {t_{i+k} - t_{i+1} }} B_{i+1, k-1} (x) & , k > 1 \end{cases} を定義しよう。これに基づき与えられたデータをインターポレートするスプライン i=3n1αiBi,K(x)\displaystyle \sum_{i=-3}^{n-1} \alpha_{i} B_{i , K} (x)B-スプラインb-Splineという。

定理

  • 2: x(xi,xi+K)x \notin (x_{i} , x_{i+K} ) に対して、Bi,K(x)=0B_{i, K} (x) = 0
  • 3: 全てのxx に対して、0Bi(x)10 \le B_{i} (x) \le 1

  • χ\chi は領域AA に対してχA(x):={0,xA1,xA\chi_{A} (x) := \begin{cases} 0 & , x \notin A \\ 1 & , x \in A \end{cases} として定義された指示関数を表す。

説明

B-スプラインとは、ベーシスを持ち、ピースワイズな多項式インターポレートを行うスプラインの中でも特にそのようなスプラインのことだ。関数Bi,KB_{i,K}は元の関数を再構築するためのBasisという意味で、BBというアルファベットを使う。

定理についての説明

証明は省略する。

実用性について言えば、コンピュータグラフィックスを始めとした応用分野が広く、理論的にも数学的にも良い特性を豊富に持っているため、B-スプラインだけで一冊の本が出るほどだ。ここで詳細に説明するのは難しいが、どんな概念なのか簡単にチェックしてみよう。定義を見るだけでは手が出ないほど難しそうに見えるが、実際の概念はそこまで難しくはない。

視覚的な理解

例を始める前に、実際のB-スプラインがカバーするノードは、上記の定義よりも遥かに厳しくても構わないことに注意しよう。同じ点があってもよく、追加のノードは想像以上に自由だ。しかし、理解を助けるために、例では等間隔で与えられたノードのみを考えることにする。

20190415\_145943.png 自由度k=1k=1の時、データをインターポレートするためのBi,1B_{i,1}は上のような形をしている。これらの組み合わせによって元のデータをインターポレートすることは、文字通り、ただ四角い柱の高さを適当に調節して合わせることに他ならない。しかし、関数の線形結合で元のデータを復元するというアイデアを説明するにはこれ以上ない。

20190415\_145953.png 自由度k=2k=2の時、Bi,2B_{i,2}は上と同じ形をしていることが数式的に簡単に確認できる。ただし、簡単であることと単純であることは異なることに注意しよう。自由度k=1k=1の時と比べると、i=3n1αiBi,K(x)\displaystyle \sum_{i=-3}^{n-1} \alpha_{i} B_{i , K} (x)は少し角が取れた形をしているだろう。図では別に表現されていないが、自由度が増加するにつれてx1=1x_{-1} = -1x5=5x_{5} = 5のような追加のノードが次々と生まれ、そこでのBi,2B_{i,2}も新たに作られる。

20190415\_150000.png 自由度k=3k=3の時、Bi,3B_{i,3}は区間ごとにクアドラティックである。もちろん、再帰的に定義されたBi,kB_{i,k}の特性上、全区間で二次関数であるとは限らず、実際にはそうでない場合がほとんどである。上の例と最も大きく異なる点は、ついに曲線になったということだ。

B-スプラインとは、このように、特定の区間で扱いやすく、それ以外では関数値がすべて00の関数の線形結合でインターポレートする関数のことを指す。だから、定義は複雑に書かれているが、実際の概念はより多く、より悪い条件で同じ作業を繰り返すことに過ぎない。

参照


  1. Atkinson. (1989). An Introduction to Numerical Analysis(2nd Edition): p173. ↩︎