x=[-1,0,1,2],y=[0,1,0,0]のデータで
区間x=0~1 をスプライン補間で計算させています。

MuPAD でcubicSplineを用いた場合と
C言語によるアルゴリズム辞典から作ったソフトでは計算結果が
微妙に異なります。

どちらが3次スプライン補間として正しいのかお教え願えないでしょうか?
あるいはどちらも正しいとして、スプラインの種別が違うのでしょうか?

非常に漠然としていますが、よろしくお願いします。

「自分のツールだとこういう結果だった」というようなアドバイスでも大歓迎です。


X      MuPAD        C言語によるアルゴ

0      1            1
0.125  0.922851563  0.9488281
0.25   0.8203125    0.853125
0.375  0.698242188  0.7246094
0.5    0.5625       0.575
0.625  0.418945313  0.4160156
0.75   0.2734375    0.259375
0.875  0.131835938  0.1167969

このQ&Aに関連する最新のQ&A

A 回答 (2件)

x=[-1,0,1,2],y=[0,1,0,0]


この3次スプライン補間を、次のように定義し計算しました。
 (1)3次式で、節点での関数値はすべて一致
 (2)2回微分可能で、導関数、2次導関数が連続
 (3)両端 x=-1, x=2 で2次導関数が0

「'」は導関数、「"」は二次導関数です。

f1(-1)=0, f1(0)=1; f2(0)=1, f2(1)=0; f3(1)=0, f3(2)=0
f1'(0)=f2'(0); f2'(1)=f3'(1)
f1"(-1)=0; f1"(0)=f2"(0); f2"(1)=f3"(1); f3"(2)=0

これを解くと、条件を満たす3次式f1,f2,f3は一組だけ存在し、

f1(x) = -0.6 x^3 - 1.8 x^2 - 0.2 x + 1
f2(x) = x^3 - 1.8 x^2 - 0.2 x + 1
f3(x) = -0.4 x^3 + 2.4 x^2 - 4.4 x + 2.4

区間[-1,0],[0,1],[1,2] にそれぞれf1,f2,f3を当てはめてつなぐと、2回連続微分可能な3次スプライン補間が得られます。

f2(x)の[0,1]での値は次のようになります。ご質問の「C言語によるアルゴ」に一致しているようです。ご所望のスプライン補間が、上記の定義と異なる場合は補足してください。

f2(0/8)=1
f2(1/8)=0.948828125
f2(2/8)=0.853125
f2(3/8)=0.724609375
f2(4/8)=0.575
f2(5/8)=0.416015625
f2(6/8)=0.259375
f2(7/8)=0.116796875
f2(8/8)=0

この回答への補足

補足します。

MuPADのcubicSplineの計算結果は、この4点を通る3次多項式と一致しているようです。

そのようなこともあるのかな?と思いましたが、3次スプライン補間の定義を考えると、なんとなく釈然としません。

補足日時:2005/04/11 09:51
    • good
    • 0
この回答へのお礼

大変明確な回答をありがとうございます。

私もただ今、他のアルゴリズム参考書で3次スプラインを検算させようとしています。
ただ、相当時間が掛かりそうですので、まずはお礼をのべておきます。
他にも情報があればお願いいたします。

お礼日時:2005/04/11 09:42

スプラインというのは,とびとびの点に対して,


滑らかにつながる曲線を補完する方法ですよね.

私の記憶では,
「指定された点をすべて通るもの」

「指定された点を必ずしも通らない」
いろいろなスプラインがあります.

どちらのものか忘れましたが,「Bスプライン」というものがあります.


3次スプラインといえども,この2つはあると思います.

その点はよろしいでしょうか?

いろいろなスプラインがあるので,
市販のライブラリとの違いを論じる場合に,

あなたが,アルゴリズムのコード化に失敗しているのか,もともとねらっている式が違うのかをまずは,
判断する必要があります.

どのような補完をお望みですか?

それは,3次式でよいのですか?

二次式ではだめなのですか?

お望みの補完方法を明らかにした方が良い回答が得られると思います.
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。

今回は各点を通る事が大前提ですのでB-スプラインではないです。

次数は3次、始点・終点の境界条件は「自然条件」と呼ばれるもので2次微分係数は0です。

Cのコードは上記にあるように、間違ってはなさそうです。

お礼日時:2005/04/11 09:46

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード


人気Q&Aランキング