Анализ:
Первый вопрос, учитывая, что первое граничное условие
Второй вопрос, учитывая, что второе граничное условие
Мы хотим следовать шаги, соответственно Кубический сплайн-интерполяции для первого класса и второго граничного условия
Для того, чтобы не повторить расчет, и легко расширить, мы используем ++ программирование цикла 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.
После того, как все данные были получены, в кубической сплайн-функции также желательно