スプライン補間

数値解析という数学の分野において、スプライン補間は、補間式がスプラインと呼ばれる特殊な区分多項式である補間形式である。つまり、単一の高次多項式をすべての値に一度に当てはめるのではなく、スプライン補間では、値の小さなサブセットに低次多項式を当てはめ、たとえば、10 点のペアすべてに単一の 9 次多項式を当てはめるのではなく、各 10 点のペアの間に 9 つの 3 次多項式を当てはめる。スプライン補間は、スプラインに低次多項式を使用しても補間誤差を小さくできるため、多項式補間よりも好まれることが多い。 [ 1 ]スプライン補間では、高次多項式を使用して補間するときに点の間で振動が発生する可能性があるルンゲ現象の問題も回避できる。

導入

8点間の3次スプラインによる補間。造船用の手描きの技術図面は、スプライン補間の歴史的な例です。図面は、あらかじめ定義された点に沿って曲げられる柔軟な定規を使用して作成されました。

スプラインとは、もともと、あらかじめ定義された複数の点、つまり結び目を通過するように曲げられる弾性定規を指す用語でした。図に示すように、 これらは造船や建設の技術図面を手作業で作成するために使用されました。

同様の曲線を、一連の数式を用いてモデル化したいと考えています。から までの結び目の列があると仮定します。各結び目のペアと の間には、と が結びついており、 が となります。つまり、から始まりで終わる多項式が存在することになります。 n+1{\displaystyle n+1}×0y0{\displaystyle (x_{0},y_{0})}×nyn{\displaystyle (x_{n},y_{n})}q×y{\displaystyle q_{i}(x)=y}×1y1{\displaystyle (x_{i-1},y_{i-1})}×y{\displaystyle (x_{i},y_{i})}12n{\displaystyle i=1,2,\dots ,n}n{\displaystyle n}×0y0{\displaystyle (x_{0},y_{0})}×nyn{\displaystyle (x_{n},y_{n})}

あらゆる曲線の曲率は次のように定義される。 yy×{\displaystyle y=y(x)}

κy1+y23/2{\displaystyle \kappa ={\frac {y''}{(1+y'^{2})^{3/2}}},}

ここで、およびは の に関する1次および2次導関数である。スプラインが(すべての節点を通過するという制約の下で)曲がりを最小にする形状をとるようにするために、 と が節点を含むあらゆる場所で連続であると定義する。各連続多項式は、対応するデータ点のy値に等しい値、導関数、および節点における2次導関数を持つ必要がある。つまり、 y{\displaystyle y'}y{\displaystyle y''}y×{\displaystyle y(x)}×{\displaystyle x}y{\displaystyle y'}y{\displaystyle y''}

{q×q+1×yq×q+1×q×q+1×1n1.{\displaystyle {\begin{cases}q_{i}(x_{i})=q_{i+1}(x_{i})=y_{i}\\q'_{i}(x_{i})=q'_{i+1}(x_{i})\\q''_{i}(x_{i})=q''_{i+1}(x_{i})\end{cases}}\qquad 1\leq i\leq n-1.}

これは、3次以上の多項式(3次多項式)を使用した場合にのみ実現できます。古典的なアプローチは、正確に3次多項式、つまり3次スプラインを使用することです。

上記の 3 つの条件に加えて、自然 3 次スプラインには次の条件があります。 q1×0qn×n0{\displaystyle q''_{1}(x_{0})=q''_{n}(x_{n})=0}

上記の 3 つの主な条件に加えて、クランプされた 3 次スプラインには、およびという条件があります。ここで、は補間関数の導関数です。 q1×0f×0{\displaystyle q'_{1}(x_{0})=f'(x_{0})}qn×nf×n{\displaystyle q'_{n}(x_{n})=f'(x_{n})}f×{\displaystyle f'(x)}

上記の3つの主な条件に加えて、ノットのないスプラインには、およびという条件があります。[ 2 ]q1×1q2×1{\displaystyle q'''_{1}(x_{1})=q'''_{2}(x_{1})}qn1×n1qn×n1{\displaystyle q'''_{n-1}(x_{n-1})=q'''_{n}(x_{n-1})}

補間3次スプラインを求めるアルゴリズム

から までの点が与えられたときに、各多項式を求めたいとします。そのために、曲線 の 1 つの部分、つまり から までを補間するものを考えます。この部分の端点は傾きが で、となります。より正確には、 qi(x){\displaystyle q_{i}(x)}(x0,y0){\displaystyle (x_{0},y_{0})}(xn,yn){\displaystyle (x_{n},y_{n})}q(x){\displaystyle q(x)}(x1,y1){\displaystyle (x_{1},y_{1})}(x2,y2){\displaystyle (x_{2},y_{2})}k1{\displaystyle k_{1}}k2{\displaystyle k_{2}}

q(x1)=y1,{\displaystyle q(x_{1})=y_{1},}
q(x2)=y2,{\displaystyle q(x_{2})=y_{2},}
q(x1)=k1,{\displaystyle q'(x_{1})=k_{1},}
q(x2)=k2.{\displaystyle q'(x_{2})=k_{2}.}

完全な方程式は対称形で書くことができる q(x){\displaystyle q(x)}

どこ

しかし、ととは何でしょうか?これらの臨界値を導くには、次の点を考慮する必要があります。 k1{\displaystyle k_{1}}k2{\displaystyle k_{2}}

q=dqdx=dqdtdtdx=dqdt1x2x1.{\displaystyle q'={\frac {dq}{dx}}={\frac {dq}{dt}}{\frac {dt}{dx}}={\frac {dq}{dt}}{\frac {1}{x_{2}-x_{1}}}.}

すると、

式()と式(6 )でそれぞれt = 0t = 1と設定すると、式()から、確かに1次導関数q′x 1)= k 1q′x 2)= k 2が得られ、2次導関数も 得られる。

もし今( x i , y i ) とすると、i = 0, 1, ..., nn + 1点であり、

ここで、i = 1, 2, ..., n、およびは、 i = 1, ..., nに対してx i −1xx iの区間でy を補間するnの 3 次多項式であり、 i = 1, ..., n  − 1に対してq′ i ( x i ) = q′ i +1 ( x i )が成立する場合、 n個の多項式は、区間x 0xx nで微分可能な関数を定義し、 t=xxi1xixi1{\displaystyle t={\tfrac {x-x_{i-1}}{x_{i}-x_{i-1}}}}

i = 1, ..., n ただし

シーケンスk 0k 1、 ...、k nにおいて、さらにi = 1、 ...、n − 1 に対してq′′ i ( x i ) = q′′ i +1 ( x i )が成り立つ 場合、結果の関数は連続した 2 次導関数を持ちます。

( 7),(),(10)および(11 )から、これが成り立つのは、

i = 1, ..., n − 1である 。関係式(15)は、n + 1個のk 0k 1、 ..., k nに対するn − 1個の線形方程式である。

弾性定規をスプライン補間のモデルとすると、左端の「結び目」の左側と右端の「結び目」の右側では定規は自由に動くため、q′′ = 0となる直線の形をとる。q ′′はx連続関数となるため、 n − 1個の線形方程式(15) に加えて「自然スプライン」は

q1(x0)=23(y1y0)(k1+2k0)(x1x0)(x1x0)2=0,{\displaystyle q''_{1}(x_{0})=2{\frac {3(y_{1}-y_{0})-(k_{1}+2k_{0})(x_{1}-x_{0})}{{(x_{1}-x_{0})}^{2}}}=0,}
qn(xn)=23(ynyn1)(2kn+kn1)(xnxn1)(xnxn1)2=0,{\displaystyle q''_{n}(x_{n})=-2{\frac {3(y_{n}-y_{n-1})-(2k_{n}+k_{n-1})(x_{n}-x_{n-1})}{{(x_{n}-x_{n-1})}^{2}}}=0,}

つまり

最終的に、(15 )は( 16)および(17)とともに、n + 1個のパラメータk0 k1...kn一意定義するn + 1個の線形方程式を構成します。

他にも端点条件として、スプラインの端点における傾きを指定する「クランプスプライン」と、 x 1点とx n −1点における三次導関数が連続であることを要求する「ノットスプライン」があります。「ノットスプライン」の場合、追加の式は以下のようになります。

q1(x1)=q2(x1)1Δx12k0+(1Δx121Δx22)k11Δx22k2=2(Δy1Δx13Δy2Δx23),{\displaystyle q'''_{1}(x_{1})=q'''_{2}(x_{1})\Rightarrow {\frac {1}{\Delta x_{1}^{2}}}k_{0}+\left({\frac {1}{\Delta x_{1}^{2}}}-{\frac {1}{\Delta x_{2}^{2}}}\right)k_{1}-{\frac {1}{\Delta x_{2}^{2}}}k_{2}=2\left({\frac {\Delta y_{1}}{\Delta x_{1}^{3}}}-{\frac {\Delta y_{2}}{\Delta x_{2}^{3}}}\right),}
qn1(xn1)=qn(xn1)1Δxn12kn2+(1Δxn121Δxn2)kn11Δxn2kn=2(Δyn1Δxn13ΔynΔxn3),{\displaystyle q'''_{n-1}(x_{n-1})=q'''_{n}(x_{n-1})\Rightarrow {\frac {1}{\Delta x_{n-1}^{2}}}k_{n-2}+\left({\frac {1}{\Delta x_{n-1}^{2}}}-{\frac {1}{\Delta x_{n}^{2}}}\right)k_{n-1}-{\frac {1}{\Delta x_{n}^{2}}}k_{n}=2\left({\frac {\Delta y_{n-1}}{\Delta x_{n-1}^{3}}}-{\frac {\Delta y_{n}}{\Delta x_{n}^{3}}}\right),}

どこ。 Δxi=xixi1, Δyi=yiyi1{\displaystyle \Delta x_{i}=x_{i}-x_{i-1},\ \Delta y_{i}=y_{i}-y_{i-1}}

3点間の3次「自然」スプラインによる補間

3点の場合、の値は三重対角線形方程式を解くことによって求められる。k0,k1,k2{\displaystyle k_{0},k_{1},k_{2}}

[a11a120a21a22a230a32a33][k0k1k2]=[b1b2b3]{\displaystyle {\begin{bmatrix}a_{11}&a_{12}&0\\a_{21}&a_{22}&a_{23}\\0&a_{32}&a_{33}\\\end{bmatrix}}{\begin{bmatrix}k_{0}\\k_{1}\\k_{2}\\\end{bmatrix}}={\begin{bmatrix}b_{1}\\b_{2}\\b_{3}\\\end{bmatrix}}}

a11=2x1x0,{\displaystyle a_{11}={\frac {2}{x_{1}-x_{0}}},}
a12=1x1x0,{\displaystyle a_{12}={\frac {1}{x_{1}-x_{0}}},}
a21=1x1x0,{\displaystyle a_{21}={\frac {1}{x_{1}-x_{0}}},}
a22=2(1x1x0+1x2x1),{\displaystyle a_{22}=2\left({\frac {1}{x_{1}-x_{0}}}+{\frac {1}{x_{2}-x_{1}}}\right),}
a23=1x2x1,{\displaystyle a_{23}={\frac {1}{x_{2}-x_{1}}},}
a32=1x2x1,{\displaystyle a_{32}={\frac {1}{x_{2}-x_{1}}},}
a33=2x2x1,{\displaystyle a_{33}={\frac {2}{x_{2}-x_{1}}},}
b1=3y1y0(x1x0)2,{\displaystyle b_{1}=3{\frac {y_{1}-y_{0}}{(x_{1}-x_{0})^{2}}},}
b2=3(y1y0(x1x0)2+y2y1(x2x1)2),{\displaystyle b_{2}=3\left({\frac {y_{1}-y_{0}}{{(x_{1}-x_{0})}^{2}}}+{\frac {y_{2}-y_{1}}{{(x_{2}-x_{1})}^{2}}}\right),}
b3=3y2y1(x2x1)2.{\displaystyle b_{3}=3{\frac {y_{2}-y_{1}}{(x_{2}-x_{1})^{2}}}.}

3つのポイント

(1,0.5), (0,0), (3,3),{\displaystyle (-1,0.5),\ (0,0),\ (3,3),}

それはわかる

k0=0.6875, k1=0.1250, k2=1.5625,{\displaystyle k_{0}=-0.6875,\ k_{1}=-0.1250,\ k_{2}=1.5625,}

そして(10)と(11) から

a1=k0(x1x0)(y1y0)=0.1875,{\displaystyle a_{1}=k_{0}(x_{1}-x_{0})-(y_{1}-y_{0})=-0.1875,}
b1=k1(x1x0)+(y1y0)=0.3750,{\displaystyle b_{1}=-k_{1}(x_{1}-x_{0})+(y_{1}-y_{0})=-0.3750,}
a2=k1(x2x1)(y2y1)=3.3750,{\displaystyle a_{2}=k_{1}(x_{2}-x_{1})-(y_{2}-y_{1})=-3.3750,}
b2=k2(x2x1)+(y2y1)=1.6875.{\displaystyle b_{2}=-k_{2}(x_{2}-x_{1})+(y_{2}-y_{1})=-1.6875.}

図には、2つの3次多項式から成り、( 9 )で与えられるスプライン関数が表示されている。 q1(x){\displaystyle q_{1}(x)}q2(x){\displaystyle q_{2}(x)}

参照

参考文献

  1. ^ Hall, Charles A.; Meyer, Weston W. (1976). 「3次スプライン補間の最適誤差境界」 . Journal of approximation Theory . 16 (2): 105– 122. doi : 10.1016/0021-9045(76)90040-X .
  2. ^バーデン、リチャード、フェアーズ、ダグラス (2015).数値解析(第10版). Cengage Learning. pp.  142– 157. ISBN 9781305253667

さらに読む