Численный анализ кубическая сплайн-интерполяция и реализация

 Анализ:

Первый вопрос, учитывая, что первое граничное условие

Второй вопрос, учитывая, что второе граничное условие

Мы хотим следовать шаги, соответственно Кубический сплайн-интерполяции для первого класса и второго граничного условия

Для того, чтобы не повторить расчет, и легко расширить, мы используем ++ программирование цикла C может быть достигнуто.

 (Это, конечно, не отсчет рук, количество рук будет сдавать кислоты)

  1 #include <cstdio>
   2 #include <iostream>
   3  
  4 с  использованием  пространства имен STD;
  5  
  6  Const  INT N = 5 ;
  7  
  8  INT основных ()
   9  {
 10      // 录入数据
11      двойной х [Н] = { 0,25 , 0,30 , 0,39 , 0,45 , 0,53 };
12      дважды у [Н] = { 0,5 , 0,5477 , 0,6245 , 0,6708 ,0,7280 };
13      // 输出数据
14      Е ( " Х (я), I = 0 ...% d \ п " , N 1 );
15      для ( Int I = 0 ; я <N; ++ я)
 16      {
 17          Е ( " % F " , х [г]);
18      }
 19      Е ( " \ п \ Ny (я), I = 0 ...% d \ п " , N 1 );
20      для ( Int I = 0 ; я <N; ++ я)
 21      {
22          Е ( " % F " , у [I]);
23      }
 24      Е ( " \ п \ п " );
25  
26      // 计算ч [I] 
27      двойной ч [N];
28      для ( Int I = 0 ; я <N - 1 ; ++ я)
 29      {
 30          ч [I] = х [I + 1 ] - х [г];
31      }
 32      // 输出数据
33      Е ( " ч (я), I = 0 ...% d \ п " , N-2 );
34      для ( Int I = 0 ; я <N - 1 ; ++ я)
 35      {
 36          Е ( " % F " , ч [I]);
37      }
 38      putchar ( ' \ п ' );
39      putchar ( ' \ п ' );
40  
41      // 计算и [I], г [я] 
42      дважды и [N], г [Н];
43      для ( Int I = 1 ; я <N; ++ я)
 44     {
 45          и [I] = ч [i - 1 ] / (ч [i - 1 ] + H [I]);
46          г [г] = Н [г] / (ч [i - 1 ] + H [I]);
47      }
 48      // 输出数据
49      Е ( " и (я), i = 1 ...% d \ п " , N 1 );
50      для ( Int I = 1 ; я <N; ++ я)
 51      {
 52          Е ( " % F " , и [я]);
53      }
 54      putchar ( '\ п ' );
55      putchar ( ' \ п ' );
56      Е ( " г (я), i = 1 ...% d \ п " , N 1 );
57      для ( Int I = 1 ; я <N; ++ я)
 58      {
 59          Е ( " % F " , г [г]);
60      }
 61      putchar ( ' \ п ' );
62      putchar ( ' \ п ' );
63  
64      //计算Р [х (I-1), х (I)]
 65      // 用F [I]表示Р [х (I-1), х (я)] 
66      двойной F [N + 1 ];
67      для ( Int I = 1 ; я <N; ++ я)
 68      {
 69          F [I] = (у [г] - у [i - 1 ]) / (х [г] - х [i - 1 ] );
70      }
 71      // 输出数据
72      Е ( " Р [х (я), х (I-1)], i = 1 ...% d \ п " , N 1 );
73      для ( Int I = 1 ; я <N; ++ я)
 74     {
 75          Е ( " % F " , F [I]);
 76      }
 77      putchar ( ' \ п ' );
 78      putchar ( ' \ п ' );
 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 ]) / ч [ 0 ];
87      для ( Int I = 1 ; я <N - 1 ; ++ я)
 88      {
 89          д [I] = 6 * (е [г + 1 ] -f [г]) / (ч [i - 1 ] + ч [я]);
90      }
 91      г [Н] = 6 * (F [N] , -f [N 1 ]) / ч [N 2 ];
92  
93      Е ( " d [I], I = 0 ...% d \ п " , N);
94      для ( Int I = 0 ; я <= N; ++я)
 95      {
 96          Е ( " % F " , д [I]);
97      }
 98  
99      // АХ = В
 100      // Х = [А ^ (- 1)] * В 
101      возврата  0 ;
102 }

 

 

После получения вышеуказанных данных, матрица решается для получения подстановки всех значений М (I), обратная матрица умножение матрицы, соответствующей работе, или в питона MATLAB может быть реализован, здесь не повторяется понял, чуть выше полученные расчетные данные, записанные в соответствующем файле, а затем прочитать в питоне Numpy вызвать функцию библиотеки или быть реализованы с помощью MATLAB.

 

После того, как все данные были получены, в кубической сплайн-функции также желательно

 

рекомендация

отwww.cnblogs.com/jishuren/p/12392668.html
рекомендация