1. 程式人生 > >數值分析實驗:Hermite插值

數值分析實驗:Hermite插值

文章目錄

1 題目

題目::人從甲地開車去乙地,每隔一段時間對行車距離和速率進行一次取樣,得到在 n

+ 1 n+1 個取樣時刻點 t i t_i 的里程 s
i s_i
和速率 v i i = 0
, 1 , . . . , n v_i(i=0, 1, ..., n)

要求::程式設計構造埃爾米特插值多項式 H 2 n + 1 ( t ) H_{2n+1}(t)

滿足::
對所有i=0, 1, …, n

{ H 2 n + 1 ( t i ) = s i H 2 n + 1 ( t i ) = v i \left \{\begin{matrix} H_{2n+1}(t_i)=s_i & & \\ H'_{2n+1}(t_i)=v_i & & \end{matrix} \right.

並據此計算 m m 個給定時刻 h t ht 及其里程 h s hs 和速率 h v hv

函式介面定義::
void Hermite_Interpolation( int N, double t[], double s[], double v[], int m, double ht[], double hs[], double hv[] );

其中 N N 為取樣點個數(注意這個 N N 不是公式中的最大下標 n n ,而是等於 n + 1 n+1

取樣時刻點 t i t_i 、里程 s i s_i 、速率 v i v_i 分別通過 t s v t、s、v 傳入;

m m 是需要估算的給定時刻的個數, h t ht 傳入給定的時刻點,相應計算出的里程和速率應分別儲存在 h s hs h v hv 中。


2 c++程式碼實現

2.0 程式目錄

虛擬碼

main.cpp

Hermite_Interpolation.h

input.txt

output.txt

2.1 虛擬碼

===========================================================================================================

虛擬碼:Hermite_Interpolation

輸入: N N 個取樣時刻點 t i t_i 的里程 s i s_i 和速率 v i i = 0 , 1 , . . . , n v_i(i=0, 1, ..., n) , m m 個給定時刻

輸出:這 m m 個給定時刻 h t ht 及其里程 h s hs 和速率 h v hv

===========================================================================================================
00:init h s [ ] hs[] , h v [ ] hv[] , l [ ] l[] , p [ ] p[] , p p [ ] pp[] , k k

01:for   k 0 k\leftarrow0   to   m m

02:   x x h t [ k ] xx \leftarrow ht[k]

03:  for   i 0 i\leftarrow 0   to   N N

04:     l i j = 0 , j i N x t j t i t j l_i \leftarrow \prod_{j=0,j\neq i}^{N}{\frac{x-t_j}{t_i-t_j}}

05:     p i j = 0 , j i N l i x t j ; p_i \leftarrow \sum_{j=0,j\neq i}^{N}{\frac{l_i}{x-t_j}};

06:     p p i j = 0 , j i N 1 t i t j ; pp_i \leftarrow \sum_{j=0,j\neq i}^{N}{\frac{1}{t_i-t_j}};