スプライン補間の計算について -その3-

理論関係

これまで、スプライン補間の基本式と条件を用いて、多項式の係数を計算してまとめました。今回は、係数をどのように計算するか考えます。

連立方程式の行列表示

これまでh_i, a_i, c_iですべての区間の曲線の連立方程式が表現できることがわかりました。この中で式(4,5)よりa_iは自ずとわかります。h_iは曲線のパラメータtによって計算できるのでこれも、一意に計算できます。
このためc_iがわかれば、すべての係数を計算できます。

行列表示のため次のように場合分けで式を考えてみます。

i = 0 のとき

    \[$c_0 = 0$\]

    \[ h_0 c_0 + 2(h_0 + h_1) c_1 + h_1 c_2 = \frac{3(a_2-a_1)}{h_1}- \frac{3(a_1-a_0)}{h_0} \]

i = 1 のとき

    \[ h_1 c_1 + 2(h_1 + h_2) c_2 + h_2 c_3 = \frac{3(a_3-a_2)}{h_2}- \frac{3(a_2-a_1)}{h_1} \]

と書けます。i = 2,3,4 と同様に書けます。ここで、 添え字i が取る範囲は0\leqq n-1であることに注意してn個の方程式を作ることを考えます。

注)ここ、前提条件間違えてました!書き直しています。ごめんなさい! 19/05/03

i=n-2のとき

    \[ h_{n-2} c_{n-2} + 2(h_{n-2} + h_{n-1}) c_{n-1} + h_{n-1} c_{n} = \frac{3(a_{n}-a_{n-1})}{h_{n-1}}- \frac{3(a_{n-1}-a_{n-2})}{h_{n-2}} \]

となります。これに

    \[$c_{n-1} = 0$\]

を加えると、0~n-2までのn-1個の式と2つのc_0,c_{n-1}の式でN+1個の方程式となることがわかります。

ここでこの方程式を

(15)   \begin{equation*}\begin{bmatrix} H \end{bmatrix} \begin{Bmatrix} C \end{Bmatrix} = \begin{Bmatrix} V \end{Bmatrix}\end{equation*}

と書きます。ここで\begin{Bmatrix} C \end{Bmatrix} ,  \begin{Bmatrix} V \end{Bmatrix}

(16)   \begin{equation*}\begin{Bmatrix} C \end{Bmatrix} = \begin{Bmatrix}  c_1 \\ c_2\\ \vdots \\ c_{n-2} \end{Bmatrix}    \end{equation*}


(17)   \begin{equation*}\begin{Bmatrix} V \end{Bmatrix} =  \begin{Bmatrix}  \frac{3(a_2 - a_1)}{h_1} -  \frac{3(a_1 - a_0)}{h_0}    \\ \frac{3(a_3 - a_2)}{h_2} -  \frac{3(a_2 - a_1)}{h_1} \\ \vdots \\\frac{3(a_{n} - a_{n-1})}{h_{n-1}} -  \frac{3(a_{n-1} - a_{n-2})}{h_{n-2}}   \end{Bmatrix}    \end{equation*}

ここで、 c_0 = 0, c_{n-1} = 0より行列のサイズをn-2にしています。
このブログ記事では、補間点はn個としていますが、n + 1個の方が最終的に式がきれいに書けましたね…

(18)   \begin{equation*}\begin{bmatrix}2(h_0 + h_1) & h_1 & 0  & \cdots & \cdots & \cdots  & 0  \\  h_1 & 2(h_1 + h_2) & h_2 & 0 & \cdots & \cdots  & 0  \\ 0 & h_2 & 2(h_2 + h_3) & h_3 & 0  & \cdots & 0 \\ \vdots & & & &  &  & \vdots \\0   & \cdots  & \cdots  & \cdots  & 0& h_{n-2} & 2(h_{n-2} + h_{n-1})  \\  \end{bmatrix} \end{equation*}

以上より、この連立方程式を解けばc_iの値が求まります。ここで、h_ia_iの関係は補間点の座標と補間点の媒介変数tで表したときの対応です。

この記事でGrasshopperの補間オプションが3つあってそれは、補間点P_it_iの関係が違う。と書いたのはここにつながります。

伏線回収です。

次回はプログラムでコンポーネントを実際に作ってみます。

もし、式が間違ってる!等々ありましたらTwitterでもコメントでもどしどしご連絡ください!基本的にこのブログはビールを飲みながら書いているので間違ってる可能性もあると思われます。ごめんなさい笑

コメント

タイトルとURLをコピーしました