
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
No.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次スプライン補間の定義を考えると、なんとなく釈然としません。
大変明確な回答をありがとうございます。
私もただ今、他のアルゴリズム参考書で3次スプラインを検算させようとしています。
ただ、相当時間が掛かりそうですので、まずはお礼をのべておきます。
他にも情報があればお願いいたします。
No.1
- 回答日時:
スプラインというのは,とびとびの点に対して,
滑らかにつながる曲線を補完する方法ですよね.
私の記憶では,
「指定された点をすべて通るもの」
と
「指定された点を必ずしも通らない」
いろいろなスプラインがあります.
どちらのものか忘れましたが,「Bスプライン」というものがあります.
3次スプラインといえども,この2つはあると思います.
その点はよろしいでしょうか?
いろいろなスプラインがあるので,
市販のライブラリとの違いを論じる場合に,
あなたが,アルゴリズムのコード化に失敗しているのか,もともとねらっている式が違うのかをまずは,
判断する必要があります.
どのような補完をお望みですか?
それは,3次式でよいのですか?
二次式ではだめなのですか?
お望みの補完方法を明らかにした方が良い回答が得られると思います.
早速の回答ありがとうございます。
今回は各点を通る事が大前提ですのでB-スプラインではないです。
次数は3次、始点・終点の境界条件は「自然条件」と呼ばれるもので2次微分係数は0です。
Cのコードは上記にあるように、間違ってはなさそうです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
人気Q&Aランキング
-
4
エクセルで60進法計算の仕方...
-
5
エクセルでのシグマ計算
-
6
経費率の計算方法を教えて下さい。
-
7
8進数から16進数への変換
-
8
この産み分けの計算でハズレの...
-
9
逆ハッシュ関数(逆一方向関数)?
-
10
ラプラス変換の「s」とは?
-
11
常用対数と自然対数の違い
-
12
○進法とかの計算方法。
-
13
関数電卓の使い方
-
14
A÷(B×C)=?
-
15
小学生の割合の問題
-
16
5進法を10進法への直し方
-
17
50以下は“50”も入るのですか?
-
18
【機械図面】 最大値・最小値...
-
19
敬語の使い方
-
20
10分の1は「10/1 それとも1/10...
おすすめ情報
公式facebook
公式twitter