数値解析という 数学の 分野において、スプライン補間は、補間式が スプライン と呼ばれる特殊な区分 多項式である 補間 形式である。つまり、単一の高次多項式をすべての値に一度に当てはめるのではなく、スプライン補間では、値の小さなサブセットに低次多項式を当てはめ、たとえば、10 点のペアすべてに単一の 9 次多項式を当てはめるのではなく、各 10 点のペアの間に 9 つの 3 次多項式を当てはめる。スプライン補間は、スプラインに低次多項式を使用しても補間誤差を 小さくできるため、多項式補間よりも好まれることが多い。 [ 1 ] スプライン補間では、高次多項式を使用して補間するときに点の間で振動が発生する可能性があるルンゲ現象 の問題も回避できる。
導入 8点間の3次スプラインによる補間。造船用の手描きの技術図面は、スプライン補間の歴史的な例です。図面は、あらかじめ定義された点に沿って曲げられる柔軟な定規を使用して作成されました。 スプライン とは、もともと、あらかじめ定義された複数の点、つまり結び目 を通過するように曲げられる弾性定規を指す用語でした。図に示すように、 これらは造船 や建設の技術図面を 手作業で作成するために使用されました。
同様の曲線を、一連の数式を用いてモデル化したいと考えています。から までの結び目の列があると仮定します。各結び目のペアと の間には、と が結びついており、 が となります。つまり、から始まりで終わる多項式が存在することになります。 n + 1 {\displaystyle n+1} ( × 0 、 y 0 ) {\displaystyle (x_{0},y_{0})} ( × n 、 y n ) {\displaystyle (x_{n},y_{n})} q 私 ( × ) = y {\displaystyle q_{i}(x)=y} ( × 私 − 1 、 y 私 − 1 ) {\displaystyle (x_{i-1},y_{i-1})} ( × 私 、 y 私 ) {\displaystyle (x_{i},y_{i})} 私 = 1 、 2 、 … 、 n {\displaystyle i=1,2,\dots ,n} n {\displaystyle n} ( × 0 、 y 0 ) {\displaystyle (x_{0},y_{0})} ( × n 、 y n ) {\displaystyle (x_{n},y_{n})}
あらゆる曲線の曲率は 次のように定義される。 y = y ( × ) {\displaystyle y=y(x)}
κ = y ″ ( 1 + y ′ 2 ) 3 / 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 ( × 私 ) = y 私 q 私 ′ ( × 私 ) = q 私 + 1 ′ ( × 私 ) q 私 ″ ( × 私 ) = q 私 + 1 ″ ( × 私 ) 1 ≤ 私 ≤ n − 1. {\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 次スプラインに は次の条件があります。 q 1 ″ ( × 0 ) = q n ″ ( × n ) = 0 {\displaystyle q''_{1}(x_{0})=q''_{n}(x_{n})=0}
上記の 3 つの主な条件に加えて、クランプされた 3 次スプライン には、およびという条件があります。ここで、は補間関数の導関数です。 q 1 ′ ( × 0 ) = f ′ ( × 0 ) {\displaystyle q'_{1}(x_{0})=f'(x_{0})} q n ′ ( × n ) = f ′ ( × n ) {\displaystyle q'_{n}(x_{n})=f'(x_{n})} f ′ ( × ) {\displaystyle f'(x)}
上記の3つの主な条件に加えて、ノットのないスプライン には、およびという条件があります。[ 2 ] q 1 ‴ ( × 1 ) = q 2 ‴ ( × 1 ) {\displaystyle q'''_{1}(x_{1})=q'''_{2}(x_{1})} q n − 1 ‴ ( × n − 1 ) = q n ‴ ( × n − 1 ) {\displaystyle q'''_{n-1}(x_{n-1})=q'''_{n}(x_{n-1})}
補間3次スプラインを求めるアルゴリズム から までの点が与えられたときに、各多項式を求めたいとします。そのために、曲線 の 1 つの部分、つまり から までを補間するものを考えます。この部分の端点は傾きが で、となります。より正確には、 q i ( x ) {\displaystyle q_{i}(x)} ( x 0 , y 0 ) {\displaystyle (x_{0},y_{0})} ( x n , y n ) {\displaystyle (x_{n},y_{n})} q ( x ) {\displaystyle q(x)} ( x 1 , y 1 ) {\displaystyle (x_{1},y_{1})} ( x 2 , y 2 ) {\displaystyle (x_{2},y_{2})} k 1 {\displaystyle k_{1}} k 2 {\displaystyle k_{2}}
q ( x 1 ) = y 1 , {\displaystyle q(x_{1})=y_{1},} q ( x 2 ) = y 2 , {\displaystyle q(x_{2})=y_{2},} q ′ ( x 1 ) = k 1 , {\displaystyle q'(x_{1})=k_{1},} q ′ ( x 2 ) = k 2 . {\displaystyle q'(x_{2})=k_{2}.} 完全な方程式は対称形で書くことができる q ( x ) {\displaystyle q(x)}
q ( x ) = ( 1 − t ( x ) ) y 1 + t ( x ) y 2 + t ( x ) ( 1 − t ( x ) ) ( ( 1 − t ( x ) ) a + t ( x ) b ) , {\displaystyle q(x)={\big (}1-t(x){\big )}\,y_{1}+t(x)\,y_{2}+t(x){\big (}1-t(x){\big )}{\Big (}{\big (}1-t(x){\big )}\,a+t(x)\,b{\Big )},} 1
どこ
t ( x ) = x − x 1 x 2 − x 1 , {\displaystyle t(x)={\frac {x-x_{1}}{x_{2}-x_{1}}},} 2
a = k 1 ( x 2 − x 1 ) − ( y 2 − y 1 ) , {\displaystyle a=k_{1}(x_{2}-x_{1})-(y_{2}-y_{1}),} 3
b = − k 2 ( x 2 − x 1 ) + ( y 2 − y 1 ) . {\displaystyle b=-k_{2}(x_{2}-x_{1})+(y_{2}-y_{1}).} 4
しかし、ととは何でしょうか?これらの臨界値を導くには、次の点を考慮する必要があります。 k 1 {\displaystyle k_{1}} k 2 {\displaystyle k_{2}}
q ′ = d q d x = d q d t d t d x = d q d t 1 x 2 − x 1 . {\displaystyle q'={\frac {dq}{dx}}={\frac {dq}{dt}}{\frac {dt}{dx}}={\frac {dq}{dt}}{\frac {1}{x_{2}-x_{1}}}.} すると、
q ′ = y 2 − y 1 x 2 − x 1 + ( 1 − 2 t ) a ( 1 − t ) + b t x 2 − x 1 + t ( 1 − t ) b − a x 2 − x 1 , {\displaystyle q'={\frac {y_{2}-y_{1}}{x_{2}-x_{1}}}+(1-2t){\frac {a(1-t)+bt}{x_{2}-x_{1}}}+t(1-t){\frac {b-a}{x_{2}-x_{1}}},} 5
q ″ = 2 b − 2 a + ( a − b ) 3 t ( x 2 − x 1 ) 2 . {\displaystyle q''=2{\frac {b-2a+(a-b)3t}{{(x_{2}-x_{1})}^{2}}}.} 6
式(5 )と式(6 )でそれぞれ t = 0 とt = 1 と設定すると、式(2 )から、確かに1次導関数q′ ( x 1 )= k 1 とq′ ( x 2 )= k 2 が得られ、2次導関数も 得られる。
q ″ ( x 1 ) = 2 b − 2 a ( x 2 − x 1 ) 2 , {\displaystyle q''(x_{1})=2{\frac {b-2a}{{(x_{2}-x_{1})}^{2}}},} 7
q ″ ( x 2 ) = 2 a − 2 b ( x 2 − x 1 ) 2 . {\displaystyle q''(x_{2})=2{\frac {a-2b}{{(x_{2}-x_{1})}^{2}}}.} 8
もし今( x i , y i ) とすると、i = 0, 1, ..., n はn + 1 点であり、
q i = ( 1 − t ) y i − 1 + t y i + t ( 1 − t ) ( ( 1 − t ) a i + t b i ) , {\displaystyle q_{i}=(1-t)\,y_{i-1}+t\,y_{i}+t(1-t){\big (}(1-t)\,a_{i}+t\,b_{i}{\big )},} 9
ここで、i = 1, 2, ..., n 、およびは、 i = 1, ..., nに対してx i −1 ≤ x ≤ x i の区間でy を補間する n 個 の 3 次多項式であり、 i = 1, ..., n − 1に対してq′ i ( x i ) = q′ i +1 ( x i ) が成立する場合、 n 個の多項式は、区間x 0 ≤ x ≤ x n で微分可能な関数 を定義し、 t = x − x i − 1 x i − x i − 1 {\displaystyle t={\tfrac {x-x_{i-1}}{x_{i}-x_{i-1}}}}
a i = k i − 1 ( x i − x i − 1 ) − ( y i − y i − 1 ) , {\displaystyle a_{i}=k_{i-1}(x_{i}-x_{i-1})-(y_{i}-y_{i-1}),} 10
b i = − k i ( x i − x i − 1 ) + ( y i − y i − 1 ) {\displaystyle b_{i}=-k_{i}(x_{i}-x_{i-1})+(y_{i}-y_{i-1})} 11
i = 1, ..., n 、 ただし
k 0 = q 1 ′ ( x 0 ) , {\displaystyle k_{0}=q_{1}'(x_{0}),} 12
k i = q i ′ ( x i ) = q i + 1 ′ ( x i ) , i = 1 , … , n − 1 , {\displaystyle k_{i}=q_{i}'(x_{i})=q_{i+1}'(x_{i}),\qquad i=1,\dots ,n-1,} 13
k n = q n ′ ( x n ) . {\displaystyle k_{n}=q_{n}'(x_{n}).} 14
シーケンスk 0 、k 1 、 ...、k n において、さらにi = 1、 ...、n − 1 に対して q′′ i ( x i ) = q′′ i +1 ( x i ) が成り立つ 場合、結果の関数は連続した 2 次導関数を持ちます。
( 7 ),(8 ),(10 )および(11 )から、これが成り立つのは、
k i − 1 x i − x i − 1 + ( 1 x i − x i − 1 + 1 x i + 1 − x i ) 2 k i + k i + 1 x i + 1 − x i = 3 ( y i − y i − 1 ( x i − x i − 1 ) 2 + y i + 1 − y i ( x i + 1 − x i ) 2 ) {\displaystyle {\frac {k_{i-1}}{x_{i}-x_{i-1}}}+\left({\frac {1}{x_{i}-x_{i-1}}}+{\frac {1}{x_{i+1}-x_{i}}}\right)2k_{i}+{\frac {k_{i+1}}{x_{i+1}-x_{i}}}=3\left({\frac {y_{i}-y_{i-1}}{{(x_{i}-x_{i-1})}^{2}}}+{\frac {y_{i+1}-y_{i}}{{(x_{i+1}-x_{i})}^{2}}}\right)} 15
i = 1, ..., n − 1である 。関係式(15 )は、n + 1個の 値k 0 、 k 1 、 ..., k n に対するn − 1個の 線形方程式である。
弾性定規をスプライン補間のモデルとすると、左端の「結び目」の左側と右端の「結び目」の右側では定規は自由に動くため、q′′ = 0となる直線の形をとる。q ′′は x の連続関数 となるため、 n − 1個の 線形方程式(15 ) に加えて「自然スプライン」は
q 1 ″ ( x 0 ) = 2 3 ( y 1 − y 0 ) − ( k 1 + 2 k 0 ) ( x 1 − x 0 ) ( x 1 − x 0 ) 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,} q n ″ ( x n ) = − 2 3 ( y n − y n − 1 ) − ( 2 k n + k n − 1 ) ( x n − x n − 1 ) ( x n − x n − 1 ) 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,} つまり
2 x 1 − x 0 k 0 + 1 x 1 − x 0 k 1 = 3 y 1 − y 0 ( x 1 − x 0 ) 2 , {\displaystyle {\frac {2}{x_{1}-x_{0}}}k_{0}+{\frac {1}{x_{1}-x_{0}}}k_{1}=3{\frac {y_{1}-y_{0}}{(x_{1}-x_{0})^{2}}},} 16
1 x n − x n − 1 k n − 1 + 2 x n − x n − 1 k n = 3 y n − y n − 1 ( x n − x n − 1 ) 2 . {\displaystyle {\frac {1}{x_{n}-x_{n-1}}}k_{n-1}+{\frac {2}{x_{n}-x_{n-1}}}k_{n}=3{\frac {y_{n}-y_{n-1}}{(x_{n}-x_{n-1})^{2}}}.} 17
最終的に、(15 )は( 16 )および(17 )とともに、n + 1個のパラメータk0 、 k1 、... 、 kn を 一意 に 定義 するn + 1個 の線形方程式を構成します。
他にも端点条件として、スプラインの端点における傾きを指定する「クランプスプライン」と、 x 1 点とx n −1 点における三次導関数 が連続であることを要求する「ノットスプライン」があります。「ノットスプライン」の場合、追加の式は以下のようになります。
q 1 ‴ ( x 1 ) = q 2 ‴ ( x 1 ) ⇒ 1 Δ x 1 2 k 0 + ( 1 Δ x 1 2 − 1 Δ x 2 2 ) k 1 − 1 Δ x 2 2 k 2 = 2 ( Δ y 1 Δ x 1 3 − Δ y 2 Δ x 2 3 ) , {\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),} q n − 1 ‴ ( x n − 1 ) = q n ‴ ( x n − 1 ) ⇒ 1 Δ x n − 1 2 k n − 2 + ( 1 Δ x n − 1 2 − 1 Δ x n 2 ) k n − 1 − 1 Δ x n 2 k n = 2 ( Δ y n − 1 Δ x n − 1 3 − Δ y n Δ x n 3 ) , {\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),} どこ。 Δ x i = x i − x i − 1 , Δ y i = y i − y i − 1 {\displaystyle \Delta x_{i}=x_{i}-x_{i-1},\ \Delta y_{i}=y_{i}-y_{i-1}}
例 3点間の3次「自然」スプラインによる補間 3点の場合、の値は三重対角線形方程式 を解くことによって求められる。k 0 , k 1 , k 2 {\displaystyle k_{0},k_{1},k_{2}}
[ a 11 a 12 0 a 21 a 22 a 23 0 a 32 a 33 ] [ k 0 k 1 k 2 ] = [ b 1 b 2 b 3 ] {\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}}} と
a 11 = 2 x 1 − x 0 , {\displaystyle a_{11}={\frac {2}{x_{1}-x_{0}}},} a 12 = 1 x 1 − x 0 , {\displaystyle a_{12}={\frac {1}{x_{1}-x_{0}}},} a 21 = 1 x 1 − x 0 , {\displaystyle a_{21}={\frac {1}{x_{1}-x_{0}}},} a 22 = 2 ( 1 x 1 − x 0 + 1 x 2 − x 1 ) , {\displaystyle a_{22}=2\left({\frac {1}{x_{1}-x_{0}}}+{\frac {1}{x_{2}-x_{1}}}\right),} a 23 = 1 x 2 − x 1 , {\displaystyle a_{23}={\frac {1}{x_{2}-x_{1}}},} a 32 = 1 x 2 − x 1 , {\displaystyle a_{32}={\frac {1}{x_{2}-x_{1}}},} a 33 = 2 x 2 − x 1 , {\displaystyle a_{33}={\frac {2}{x_{2}-x_{1}}},} b 1 = 3 y 1 − y 0 ( x 1 − x 0 ) 2 , {\displaystyle b_{1}=3{\frac {y_{1}-y_{0}}{(x_{1}-x_{0})^{2}}},} b 2 = 3 ( y 1 − y 0 ( x 1 − x 0 ) 2 + y 2 − y 1 ( x 2 − x 1 ) 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),} b 3 = 3 y 2 − y 1 ( x 2 − x 1 ) 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),} それはわかる
k 0 = − 0.6875 , k 1 = − 0.1250 , k 2 = 1.5625 , {\displaystyle k_{0}=-0.6875,\ k_{1}=-0.1250,\ k_{2}=1.5625,} そして(10 )と(11 ) から
a 1 = k 0 ( x 1 − x 0 ) − ( y 1 − y 0 ) = − 0.1875 , {\displaystyle a_{1}=k_{0}(x_{1}-x_{0})-(y_{1}-y_{0})=-0.1875,} b 1 = − k 1 ( x 1 − x 0 ) + ( y 1 − y 0 ) = − 0.3750 , {\displaystyle b_{1}=-k_{1}(x_{1}-x_{0})+(y_{1}-y_{0})=-0.3750,} a 2 = k 1 ( x 2 − x 1 ) − ( y 2 − y 1 ) = − 3.3750 , {\displaystyle a_{2}=k_{1}(x_{2}-x_{1})-(y_{2}-y_{1})=-3.3750,} b 2 = − k 2 ( x 2 − x 1 ) + ( y 2 − y 1 ) = − 1.6875. {\displaystyle b_{2}=-k_{2}(x_{2}-x_{1})+(y_{2}-y_{1})=-1.6875.} 図には、2つの3次多項式から成り、( 9 )で与えられるスプライン関数が表示されている。 q 1 ( x ) {\displaystyle q_{1}(x)} q 2 ( x ) {\displaystyle q_{2}(x)}
参照
参考文献
さらに読む
外部リンク