本文目錄一覽:
- 1、三次樣條插值 C++程序
- 2、三次樣條插值用c語言具體怎麼做
- 3、三次樣條插值計算步驟
- 4、三次樣條插值
三次樣條插值 C++程序
#includeiostream.h
#includeiomanip.h
#includemath.h
void main()
{
float a[37],b[37];
cout” “”度數”” “”sin(x)值”” “”一階導值”” “”二階導值”endl;
for(int i=0;i37;i++)
coutsetw(11)setprecision(3)
10*i
setw(11)setprecision(3)
sin(i*31.4/180)
setw(11)setprecision(3)
cos(i*31.4/180)
setw(11)setprecision(3)
-sin(i*31.4/180)
endl;
cout”一個周期內的積分值:0″endl;
}
三次樣條插值用c語言具體怎麼做
void SPL(int n, double *x, double *y, int ni, double *xi, double *yi); 是你所要。
已知 n 個點 x,y; x 必須已按順序排好。要插值 ni 點,橫坐標 xi[], 輸出 yi[]。
程序里用double 型,保證計算精度。
SPL調用現成的程序。
現成的程序很多。端點處理方法不同,結果會有不同。想同matlab比較,你需 嘗試 調用 spline()函數 時,令 end1 為 1, 設 slope1 的值,令 end2 為 1 設 slope2 的值。
三次樣條插值計算步驟
三次樣條插值在實際中有著廣泛的應用,在計算機上也容易實現。下面介紹用計算機求取三樣條插值函數S(x)的演算法步驟:
(1)輸入初始節點離散數據xi,yi(i=0,1,…,n);
(2)依據式(6-46),計算hi=xi-xi-1,λi和Ri(i=1,…,n-1);
(3)根據實際問題,從式(6-49)、式(6-51)和式(6-53)中選擇一類對應的邊界條件,求取v0,w0,u0,R0,un,vn,wn,Rn;
(4)根據形成的方程組(6-54)的特點,選用追趕法、高斯法等解方程組,求出Mi(i=0,1,2,…,n);
(5)依據式(6-41)、式(6-42),計算插值點的三樣條插值函數值和該點的導數值。
三次樣條插值
設S(x)滿足樣本點要求,則只需在每個子區間[ ]上確定1個三次多項式,假設為:
假設有n個點,需要n-1條線描述,每條線四個未知數, 則未知數個數為4(n-1)。顯然中間(n-2)個點具有4個約束條件:
兩端端點存在約束S( ) = f( ),則約束方程有4(n-2)+2=4(n-1)-2,所以,總的未知數個數比方程個數多兩個。所以需要額外的兩個約束,於是就有了三種邊界條件的插值演算法。
S(x) 在 [ ](j=1,2,⋯,n-1)上是三次多項式,於是S”(x)在[ ]上是一次多項式,假設S”(x) 在[ ](j=1,2,⋯,n-1)兩端點上的值已知,設
其中
對 進行兩次積分可得:
以上是在 上求得的 同理可求 ,將 同時代入兩個函數聯立方程,可以求得
將 :
求導後得:
同理分別寫出 ,聯立等式,簡化後可得:
在matlab實現時注意:n個點,n-1條線,以上矩陣是由相鄰的兩條線的微分方程聯立而來(一階連續),因此方程總個數減少了1,矩陣中有n-2個方程。 另外,用matlab實現時需要注意,matlab中下標從1開始,其他語言下標可能從0開始。
原創文章,作者:NTCM,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/149407.html