計算方法實習(xí)報告_第1頁
計算方法實習(xí)報告_第2頁
計算方法實習(xí)報告_第3頁
計算方法實習(xí)報告_第4頁
計算方法實習(xí)報告_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上一給出一個有效的算法和無效的算法計算積分y(n)=(xn)/(4x+1)dx,n=0,1,2,10,積分限為(0,1) 1 有效算法利用遞推公式y(tǒng)(n)=-y(n-1)/4+1/(4n),取y0=(log5)/4程序為:#include<iostream.h>#include<math.h>void main() double y0,y1; y0=1/4.0*log(5.0); cout<<"y0="<<y0<<" " for(int n=1;n<=10;n+)

2、y1=-1.0/4.0*y0+1.0/(4.0*n); cout<<"y"<<n<<"="<<y1<<" " y0=y1; if(n%3=0) cout<<endl; 其結(jié)果為: y0=0. y1=0.14941 y2=0. y3=0.y4=0. y5=0. y6=0.y7=0. y8=0. y9=0.y10=0. Press any key to continue2 無效算法利用遞推公式y(tǒng)(n-1)=-4y(n)+1/n, 又由廣義積分中值定理可得y(n)=1/

3、(4n+1)(4+1), (0,1),則1/(5(n+1)<y(n)<1/(n+1), 所以可取y(n)1/(5(n+1)+ 1/(n+1)/2=3/(5(n+1)程序為:#include<iostream.h> #include<math.h>void main() float y9,y10; y10=3.0 /55.0; cout<<"y10="<<y10<<" " for(int n=9;n>=0;n-) y9=-4.0*y10+1.0/(n+1); cout<&l

4、t;"y"<<n<<"="<<y9<<" " y10=y9; if(n%3=0) cout<<endl; 其結(jié)果為:y10=0. y9=-0.y8=0. y7=-2.21035 y6=8.98427y5=-35.7704 y4=143.282 y3=-572.877y2=2291.84 y1=-9166.86 y0=36668.43 心得體會由有效算法與無效算法的結(jié)果可以知道:有效算法的誤差的傳遞是逐步縮小的,而無效算法的誤差的傳遞是逐步擴(kuò)大的。因此有效算法是數(shù)值穩(wěn)定的算法。

5、二用牛頓法求下列方程lnx+x-2=0的根。1算法 給定初值X0,為根的容許誤差,為|F(X)|的容許誤差,N為迭代次數(shù)的容許值。(1).如果F(X0)的導(dǎo)數(shù)等于零或者迭代次數(shù)大于N,則算法失敗,結(jié)束;否則執(zhí)行2。(2).計算X1=X0-F(X0)/F(X0)。(3).若|X1-X0|<,或者|F(X1)|<,則輸出X1,程序結(jié)束,否則執(zhí)行4。(4).令X0=X1,轉(zhuǎn)向1。2.程序#include<iostream.h>#include<math.h>#define EPS 1e-8#define ETA 1e-8#define N 100float f(f

6、loat x)return log(x)+x-2;float f1(float x) return 1+1/x;void main()float x1,x0=1.5,d;cout<<"x0="<<x0<<" "for(int i=0;i<=N;)if(f1(x0)=0) break;else x1=x0-f(x0)/f1(x0);d=(x1-x0);if(fabs(f(x1)<ETA&&fabs(d)<EPS)cout<<x1<<endl; break;else

7、x0=x1;i+;cout<<"x"<<i<<"="<<x0<<" "while(i%3=0) cout<<endl;cout<<"The root of the equation is x="<<x0<<endl;3.結(jié)果x0=1.5 x1=1.55672x2=1.557151.55715The root of the equation is x=1.557154心得體會通過牛頓迭代算法的編程實習(xí),我了解到

8、牛頓法把非線性方程線性化,加快了收斂速度。三 編寫一個用牛頓前插公式計算函數(shù)值的程序,要求先輸出差分表,再計算x點的函數(shù)值,并應(yīng)用于下面的問題: xi 20 21 22 23 24 yi 1.30103 1.32222 1.34242 1.36173 1.38021求x=21.4時的插值多項式的值。1 算法(1).輸入n=4,xi,yi(i=0,1,2,3,4).(2).計算各階差分f00,f10,f20,f30,f40。(3).計算函數(shù)值:f00+f10*t+f20*t*(t-1)/2+f30*t*(t-1)*(t-2)/6+f40*t*(t-1)*(t-2)*(t-3)/24;2 程序#i

9、nclude<iostream.h>float NewTon(float f00,float f10,float f20,float f30,float f40,float t) return f00+f10*t+f20*t*(t-1)/2+f30*t*(t-1)*(t-2)/6+f40*t*(t-1)*(t-2)*(t-3)/24;void main()float f14,f23,f32,f4; float f05=1.30103,1.32222,1.34242,1.36173,1.38021; float x5=20,21,22,23,24;cout<<"

10、 "<<"差分表"<<endl;for(int i=0;i<=4;i+)cout<<" x"<<i<<"="<<xi;cout<<endl<<" " for(i=0;i<=4;i+)cout<<" "<<f0i;cout<<endl<<"1階差分"<<" "for(i=0;i<

11、;=3;i+)f1i=f0i+1-f0i;cout<<f1i<<" "cout<<endl<<"2階差分"<<" " for(i=0;i<=2;i+)f2i=f1i+1-f1i;cout<<f2i<<" "cout<<endl<<"3階差分"<<" " for(i=0;i<=1;i+)f3i=f2i+1-f2i;cout<<f3i&l

12、t;<" "cout<<endl<<"4階差分"<<" "f4=f31-f30;cout<<f4<<endl;float t=21.4-x0;float N4=NewTon(f00,f01,f02,f03,f04,t);cout<<"N(21.4)="<<N4<<endl;3 結(jié)果 差分表 x0=20 x1=21 x2=22 x3=23 x4=24 1.30103 1.32222 1.34242 1.36173 1

13、.380211階差分 0. 0.0202 0.01931 0.2階差分 -0. -0. -0.3階差分 9.98974e-005 6.00815e-0054階差分 -3.98159e-005N(21.4)=3.482684 心得體會由于此題目選用的節(jié)點是等距的,所以可用等距節(jié)點的插值公式代替節(jié)點的任意分布的牛頓插值公式,這樣就可以簡化插值公式,同時可以避免作除法運算,而且程序算法的設(shè)計也相對比較簡單。四 用改進(jìn)歐拉方法(取h=0.1)求解下列微分方程初值問題:y=(x2+y2),x0,1.0 y(0)=01 算法解一階常微分方程初值問題y=f(x,y),y(x0)=y0,xa,b,將區(qū)間a,b

14、做n等分,取步長h=(b-a)/n.歐拉公式為:y(i+1)=y(i)+hf(x(i),y(i)梯形公式為:y(i+1)=y(i)+hf(x(i),y(i)+ f(x(i+1),y(i+1)/2改進(jìn)歐拉法,采用公式:(i+1)=y(i)+h f(x(i),y(i)y(i+1)=y(i)+hf(x(i),y(i)+ f(x(i+1),(i+1)/22 程序#include<iostream.h>#define N 10float f(float x,float y)return x*x+y*y;void main()float x0=0,y0=0,a=0,b=1.0;float h=

15、(b-a)/N;cout<<"x0="<<x0<<" "<<"y0="<<y0<<endl;float x1=x0,y1=y0;for(int i=0;i<=N;)y1=y0+h*f(x0,y0);/*歐拉公式*/x1=x0+h;y1=y0+h*(f(x0,y0)+f(x1,y1)/2;/*梯形公式*/y0=y1;x0=x1;i+;cout<<"x"<<i<<"="<<x

16、1<<" "<<"y"<<i<<"="<<y1<<endl;3 結(jié)果x0=0 y0=0x1=0.1 y1=0.0005x2=0.2 y2=0.x3=0.3 y3=0.x4=0.4 y4=0.x5=0.5 y5=0.x6=0.6 y6=0.x7=0.7 y7=0.x8=0.8 y8=0.x9=0.9 y9=0.x10=1 y10=0.35183x11=1.1 y11=0.4 心得體會改進(jìn)歐拉公式和歐拉公式相比,它們同為單步顯式公式,但是前者的局部截斷誤差比后者的局部

17、截斷誤差高一階。歐拉公式具有一階精度,梯形公式和改進(jìn)歐拉公式具有二階精度。五用阿當(dāng)姆斯方法(取h=0.1)求解下列微分方程初值問題(用四階龍格-庫塔公式提供出發(fā)值):y=0.1(x3+y2),x0,1 y(0)=11. 算法概要阿當(dāng)姆斯方法是一種線性多步法,其四階顯式公式為y(i+1)=y(i)+h(55f(i)-59f(i-1)+37 f(i-2)-9 f(i-3)/24四階隱式公式為y(i+1)=y(i)+h(9 f(i+1)+19f(i)-5f(i-1)+ f(i-2)/24以上兩個公式均具有四階精度,將它們組成阿當(dāng)姆斯預(yù)測-校正系統(tǒng):(i+1)=y(i)+h(55f(i)-59f(i-

18、1)+37 f(i-2)-9 f(i-3)/24f(i+1)=f(x(i+1), (i+1)y(i+1)=y(i)+h(9 f(i+1)+19f(i)-5f(i-1)+ f(i-2)/24f(i+1)=f(x(i+1), y(i+1)這是一個四步方法,計算y(i+1)時要用到y(tǒng)(i),y(i-1),y(i-2),y(i-3),因此,它不是自開始的,一般借助于同階的龍格-庫塔公式為其提供出發(fā)值:y1,y2,y3.2. 程序#include<iostream.h>#include<conio.h>#define N 10float f(float x,float y)ret

19、urn 0.1*(x*x*x+y*y*y);void main()float yy3,y,x,h,a,b,k1,k2,k3,k4,f1;a=0;b=1.0;y=1;x=0;yy0=1;h=(b-a)/N; int i;cout<<"x0="<<x<<" "<<"y0="<<y<<endl;for(i=1;i<=3;i+) k1=f(x,y); k2=f(x+h/2,y+h*k1/2); k3=f(x+h/2,y+h*k2/2); k4=f(x+h,y+h*k

20、3); y=y+h*(k1+2*k2+2*k3+k4)/6; x=x+h; yyi=y; cout<<"x"<<i<<"="<<x<<" "<<"y"<<i<<"="<<y<<endl;for(i=3;i<=N;i+)x=a+i*h;y=yy3;yy3=yy3+h*(55*f(x,yy3)-59*f(x-h,yy2)+37*f(x-2*h,yy1)-9*f(x-3*h,yy0)/24;f1=f(x+h,yy3);yy3=y+h*(9*f1+19*f(x,yy3)-5*f(x-h,yy2)+f(x-2*h,yy1)/24;yy0=yy1;yy1=yy2;yy2=yy3

溫馨提示

  • 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

提交評論