分析:
最初の境界条件という与えられた最初の質問、
第2の境界条件という与えられた2つ目の質問、
私たちは、最初のクラスに、それぞれキュービックスプライン補間のステップと第2の境界条件をフォローしたいです
計算、および拡張が容易なを繰り返さないために、我々は、C ++プログラミング・サイクルを達成することができます。
(これは、手のカウントは酸手だろう、確かに手の数ではありません)
1の#include <cstdioを> 2の#include <iostreamの> 3 4 使用して 名前空間STDを、 5 6 のconst int型 N = 5 。 7 8 INT メイン() 9 { 10 // 录入数据 11 二重 X [N] = { 0.25、0.30、0.39、0.45、0.53 }。 12 二重 Y [N] = { 0.5、0.5477、0.6245、0.6708、0.7280 }。 13 // 输出数据 14 のprintf(" X(i)は、iが0 ...%のD \ N = "、N- 1 ) 15 のために(INT iは= 0 ; I <N ++ I) 16 { 17 のprintf(" %のF " 、X [I])。 18 } 19 のprintf(" \ n \ NY(i)は、iが0 ...%のD \ N = "、N- 1 ) 20 のために(INT iが= 0 ; I <Nであり; ++ i)が 21 { 22 のprintf(" %のF " 、Y [I])。 23 } 24 のprintf(" \ n \ n " ); 25 26 // 计算H [i]は 27 ダブルH [N]。 28 のために(INT iは= 0、I <N- 1 ; ++ I) 29 { 30 H [I] = X [I + 1 ] - X [i]は、 31 } 32 // 输出数据 33 のprintf(" H(I)、iが0 ...%D \ N = "、N-を2 )。 34 のために(INT iは= 0、I <N- 1 ; ++ I) 35 { 36 のprintf(" %のF " 、H [I])。 37 } 38 のputchar(' \ n ' ); 39 のputchar(' \ n ' ); 40 41 // 计算U [i]は、R [i]は 42 ダブルU [N]、R [N]。 43 のために(INT iは= 1 ; I <N ++ I) 44 { 45 U [I] = H [I- 1 ] /(H [I- 1 ] + H [I])。 46 R [I] = H [I] /(H [I- 1 ] + H [I])。 47 } 48 // 输出数据 49 のprintfは(" U(i)は、iは1 ...%D \ N = "、N- 1 )。 50 のために(INT iは= 1 ; I <N ++ I) 51 { 52 のprintf(" %のF " 、U [I])。 53 } 54 のputchar('\ N " ); 55 のputchar(' \ n ' ); 56 のprintf(" R(I)、iは1 ...%のD \ N = "、N- 1 ) 57 のために(INT iは= 1 ; I <Nであり; ++ I) 58 { 59 のprintf(" %のF " 、R [I])。 60 } 61 のputchar(' \ n ' ); 62 のputchar(' \ n ' ); 63 64 //计算F [X(I-1)、X(I)] 65 // 用F [i]が表示F [X(I-1)、X(I)] 66 二重 F [N + 1 ]。 67 のために(INT iが= 1 ; I <Nであり; ++ I) 68 { 69 F [I] =(Y [I] - Y [I- 1 ])/(X [i]は- X [I- 1 ] ); 70 } 71 // 输出数据 72 のprintf(" F [X(I)中、Xは、(i-1)]は、iが1 ...%D \ N = " N-、1 )。 73 のために(INT iは= 1 ; I <N ++ I) 74 { 75 のprintf(" %F " 、F [I]); 76 } 77 のputchar(' \ N- ' ); 78 のputchar(' \ N- ' ); 79 80 //は誘導体の両方を記録 81 F [ 0 ] =を1。; 82 F [N] = 0.6868 ; 83 84 // 計算D(I) 85 ダブル D [N + 1 ]; 86 D [ 0 ] = 6 *(F [ 1] -f [ 0 ])/ H [ 0 ]。 87 のために(INT iは= 1 ; I <N- 1 ; ++ I) 88 { 89 D [I] = 6 *(F [I + 1 ] -f [I])/(H [I- 1 ] + H [私]); 90 } 91 D [N] = 6 *(F [N] -f [N- 1 ])/ H [N- 2 ]。 92 93 のprintf(" D [i]は、iは0 ...%のD \ N = " 、N)を、 94 のための(INTは私= 0 ; I <= N; ++I) 95 { 96 のprintf(" %のF " 、D [I])。 97 } 98 99 // AX = B 100 // X = [A ^( - 1)] * B 101 戻り 0 ; 102 }
上記のデータを得た後、マトリックスは全ての値M(i)を代入得るために解決され、逆行列演算に対応する行列の乗算、またはPythonのMATLABでは、すぐ上、実現ここでは繰り返さない、実装することができますPythonで読み取り、得られた演算データは、対応するファイルに書き込まれ、そして、ライブラリ関数を呼び出すnumpyのか、MATLABによって実装されてもよいです。
すべてのデータは、キュービックスプライン関数に、取得された後も望まれています