計算方法實驗_第1頁
計算方法實驗_第2頁
計算方法實驗_第3頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、.計算方法實驗報告學(xué)號 2015216772劉盼班級計算機(jī)一班實驗項目名稱插值與擬合一、實驗名稱實驗一 插值與擬合二、 實驗?zāi)康模?. 明確插值多項式和分段插值多項式各自的優(yōu)缺點;2. 編程實現(xiàn)拉格朗日插值算法,分析實驗結(jié)果體會高次插值產(chǎn)生的龍格現(xiàn)象;3. 理解最小二乘擬合,并編程實現(xiàn)線性擬合,掌握非線性擬合轉(zhuǎn)化為線性擬合的方法4. 運(yùn)用常用的插值和擬合方法解決實際問題。三、 實驗內(nèi)容及要求(1)對于要求選取11個等距插值節(jié)點,分別采用拉格朗日插值和分段線性插值,計算x為0.5, 4.5處的函數(shù)值并將結(jié)果與精確值進(jìn)行比較。輸入:區(qū)間長度,n(即n+1個節(jié)點),預(yù)測點輸出:預(yù)測點的近似函數(shù)值,精

2、確值,及誤差(2)已知用牛頓插值公式求的近似值。輸入:數(shù)據(jù)點集,預(yù)測點。輸出:預(yù)測點的近似函數(shù)值四、 實驗原理及算法描述1. Lagrange插值法的基本原理:當(dāng)精確函數(shù) y = f(x) 非常復(fù)雜或未知,在一系列節(jié)點 x0 xn處測得函數(shù)值 y0 = f(x0), yn = f(xn), 希望由此構(gòu)造一個簡單易算的近似函數(shù) g(x) » f(x),滿足條件g(xi) = f(xi) (i = 0, n)。這里的 g(x) 稱為f(x) 的插值函數(shù),由插值函數(shù)可以去近似估計f(x)在一些未知點處的函數(shù)值。最常用的插值函數(shù)是多項式插值。所謂多項式插值即求 n 次多項式使得基于基函數(shù)的拉

3、格朗日插值是構(gòu)造多項式插值最基本方法。也是推導(dǎo)數(shù)值微積分和微分方程數(shù)值解的公式的理論基礎(chǔ)。拉格朗日插值公式為:其中2. Lagrange插值算法描述:(也可以是算法流程圖)步驟1: 構(gòu)造處的插值基函數(shù),其中,插值節(jié)點處的插值基函數(shù)為;步驟2:以作為的系數(shù),使得通過插值點;步驟3:把所有的線性疊加,得到通過所有插值點的插值函數(shù)。Lagrange插值偽代碼:給定個插值點的情況下,求插值函數(shù)在點處的函數(shù)值。/*輸入?yún)?shù)*x=(x0,x1,.,xn), 插值節(jié)點*y=(y0,y1,yn); 被插函數(shù)f(x)在插值節(jié)點處的函數(shù)值*t 求插值函數(shù)Ln (x)在t處的函數(shù)值*返回值 插值函數(shù)Ln (x)在t

4、處的函數(shù)值 */五、 程序代碼及實驗結(jié)果1 主程序int main() double x11 = -5,-4,-3,-2,-1,0,1,2,3,4,5,y11 = 0.038461,0.058823,0.100000,0.200000,0.500000,1.000000,0.500000,0.200000,0.100000,0.058823,0.038461; double u1,u2; double m1,l1,p1,m2,l2,p2;printf("請輸入要計算的x的值:");scanf("%lf",&u1); m1=1/(1+u1*u1);

5、printf("x=%lf時的精確值為:%fn",u1,m1);printf("x=%lf時的拉格朗日差值近似值為:%fn",u1,Lagrange(x,y,u1);/拉格郎日插值 printf("x=%lf時的分段線性差值近似值為:%fn",u1,PiecewiseLinear(x,y,u1); /分段線性插值 l1=m1-Lagrange(x,y,u1);p1=m1-PiecewiseLinear(x,y,u1);printf("x=%lf時的拉格朗日誤差為:%fn",u1,l1);printf("x

6、=%lf時的分段線性誤差為:%fn",u1,p1);printf("請再輸入要計算的x的值:");scanf("%lf",&u2); m2=1/(1+u2*u2);printf("x=%lf時的精確值為:%fn",u2,m2);printf("x=%lf時的拉格朗日差值近似值為:%fn",u2,Lagrange(x,y,u2);/拉格郎日插值 printf("x=%lf時的分段線性差值近似值為:%fn",u2,PiecewiseLinear(x,y,u2); /分段線性插值 l

7、2=m2-Lagrange(x,y,u2);p2=m2-PiecewiseLinear(x,y,u2);printf("x=%lf時的拉格朗日誤差為:%fn",u2,l2);printf("x=%lf時的分段線性誤差為:%fn",u2,p2);newton(); return 0;2 Lagrange插值子程序:double Lagrange(double *x, double *y, double *) /拉格郎日插值 int i,j; double *a,yy=0.000; a=new double11; for(i=0;i<11;i+) ai

8、=yi; for(j=0;j<11;j+) if(j!=i) ai*=(*-xj)/(xi-xj); yy+=ai; delete a; return yy; 3. 分段線性插值子程序double PiecewiseLinear(double *x, double *y, double input) /分段線性插值 double output; int i; for (i=0;i<10;i+) if (xi <= input && xi+1 >= input) output=yi +(yi+1-yi)*(input-xi)/(xi+1-xi); brea

9、k; return output; 4. 牛頓插值子程序void newton() /牛頓插值 float x100,y100,c100100,x1,xp,wx; int n,i,j; cout<<"輸入數(shù)據(jù)組的個數(shù)"<<endl; cin>>n; for(i=0;i<n;i+) cout<<"當(dāng)前輸入第"<<i<<"組數(shù)據(jù)"<<endl; cin>>xi; cin>>yi; for(j=0;j<n;j+) if(j

10、>0) for(i=0;i<n-j;i+) cij=(ci+1j-1-cij-1)/(xi+j-xi); else for(i=0;i<n;i+) ci0=yi; xp=y0; char m='y' while(m='y') cout<<"請輸入你要求的點的X值:"<<endl; cin>>x1; for(i=1;i<n;i+) wx=1; for(j=0;j<=i-1;j+) wx=wx*(x1-xj); xp=xp+c0i*wx; cout<<"newton插值的結(jié)果為:"<<xp<<endl; cout<<"是否想繼續(xù)計算(Y/N)"<<endl; cin>>m; 實驗結(jié)果:.。如圖一所示。圖12 六、 實驗總結(jié)1. 拉格朗日插值在高次插值時同原函數(shù)偏差大、存在龍格現(xiàn)象,高次插值多項式不收斂。2. 牛頓插值和拉格朗日插值的區(qū)別和聯(lián)系:Ln(x)與NN(x)均是n次多項式,且均滿足插值

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論