数値解析キュービックスプライン補間と実現

 分析:

最初の境界条件という与えられた最初の質問、

第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.250.300.390.450.53 }。
12      二重 Y [N] = { 0.50.54770.62450.67080.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によって実装されてもよいです。

 

すべてのデータは、キュービックスプライン関数に、取得された後も望まれています

 

おすすめ

転載: www.cnblogs.com/jishuren/p/12392668.html