アプリ版:「スタンプのみでお礼する」機能のリリースについて

3次スプライン補間ですが、3次関数で補間するので既知の3点より、
補間したい値を求めると思っていたのですが、
下記の資料を見ると、既知の2点から値を求めています。
接線を使って、計算しているみたいですが、イマイチ分かりません。
分かりやすく教えていただけないでしょうか?
http://www.caero.mech.tohoku.ac.jp/publicData/Da …

A 回答 (1件)

> 3次関数で補間するので



 ここを誤解なさってるようです。そうはなくて、「2階微分まで連続な区分的3次関数」で補間するんです。

「n-1階微分まで連続な区分的n次関数」f(x)というのは、あらかじめ点列 k[j] (j=0,1,…, N) (これらを"knot" (「つなぎ目」という意味)と言います)が決めてあるものとし、また、f[j](x)をn次関数の列 (j=1,2,…,N)として、 k[0] ≦ x ≦ k[N]で定義される関数 f(x) が
(1) k[j-1] ≦ x ≦ k[j] のとき f(x) = f[j](x)
であって、しかも
(2) fのxによる0階微分f(x), 1階微分f'(x), 2階微分f''(x), …, n-1階微分(f^(n-1))(x)がどれもk[0] ≦ x ≦ k[N]の範囲で至る所連続
である、という意味。

 もちろん(1)から、k[j-1] < x < k[j] ならf(x), f'(x), f''(x), …, (f^(n-1))(x)が連続なのは自明。だから、xが丁度knot k[1], …, k[N-1]に等しいときにf(x)が(2)を満たすことが、f(x)が(2)を満たすための必要十分条件。つまり、
  (f[j]^(r))(k[j+1]) = (f[j+1]^(r))(k[j+1]) (r=0,1,2,…, n-1; j=1,…,N-1) …(★)
ということです。
 n次関数ならn+1個の係数がある。(ご質問には「3次関数で補間するので既知の3点」とありますが、勝手な3次関数なら既知の4点が必要。これはラグランジュ補間ですね。)
 しかし(2)の制約条件が付くため、f[j](x)は勝手なn次関数では駄目です。関数がN個あるんだから全部で(n+1)N個の係数がある。けれども、k[1], …, k[N-1]のN-1個のknotそれぞれについてn個の拘束条件(★)があるために、自由度は(n+1)N - n(N-1) = N+n だけしかない。この自由度を使って補間するんだから、結局「既知のN+n点 <x[i], y[i]> (i=1,2,…,N+n)を通るようにする」という補間をする。すなわち、
  f(x[i]) = y[i] (i=1,2,…,N+n)
と上記の式★とを連立した連立方程式を解くことによってfが決まるんです。

 なお問題によっては、一番端のknot k[0], k[N]におけるfのr階微分が予め指定されていたり(たとえば (f^(r))(k[0])=(f^(r))(k[N])=0 (r=2,3,…,n)とか)、あるいはfが周期的( (f^(r))(k[0])=(f^(r))(k[N]) (r=0,1,…,n) )であったり、といった条件が付く場合もあり、このときにはさらに自由度が減ることになります。
    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!