數(shù)值分析實(shí)驗(yàn)_第1頁(yè)
數(shù)值分析實(shí)驗(yàn)_第2頁(yè)
數(shù)值分析實(shí)驗(yàn)_第3頁(yè)
數(shù)值分析實(shí)驗(yàn)_第4頁(yè)
數(shù)值分析實(shí)驗(yàn)_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、數(shù)值分析實(shí)驗(yàn)第二章實(shí)驗(yàn)內(nèi)容:拉格朗日差值問(wèn)題描述: 利用拉格朗日差值來(lái)計(jì)算Sin函數(shù)的值,并比較插值的值與真實(shí)值的誤差。(1) 計(jì)算函數(shù)表sinXi,其中Xi=i*3.1415/20,i=0,1,10。(2) 用一次和二次拉格朗日差值公式對(duì)函數(shù)表進(jìn)行差值得L1(Xj),L2(Xj),其中Xj=3.1415*(j+0.5)/20,j=0,1,.,8。(3) 計(jì)算函數(shù)值Yi=sin(Xj),j=0,1,8。(4) 計(jì)算Ei(1)=yi-L1(Xj);Ei(2)=yi-L2(Xj);i=0,1,.,8.原碼算法:#include <math.h>#include <iostream

2、.h>#define A 3.141592654int main()double a11;cout<<"原始的Sin函數(shù)的值是:"<<endl;for(int i=0;i<11;i+)ai=sin(A*i/20); cout<<ai<<"t"cout<<endl<<"固定節(jié)點(diǎn)處的一次拉格朗日差值的值是:"<<endl;double b8;for(int j=0;j<8;j+)bj=(aj+aj+1)/2; cout<<bj

3、<<"t"cout<<endl<<"固定節(jié)點(diǎn)處的二次拉格朗日差值的值是:"<<endl;double c8;for(int s=0;s<8;s+)cs=(3*as+6*as+1-as+2)/8;cout<<cs<<"t"cout<<endl<<"插值節(jié)點(diǎn)出的Sin真值是:"<<endl;double d8;for(int t=0;t<8;t+)dt=sin(A*(t+0.5)/20); cout&

4、lt;<dt<<"t"double f8,h8;cout<<endl<<"一次拉格朗日插值與真值的誤差是:"<<endl;for(int p=0;p<8;p+) fp=bp-cp;cout<<fp<<"t"cout<<endl<<"二次拉格朗日插值與真值的誤差是:"<<endl;for(int q=0;q<8;q+)hq=bq-dq;cout<<hq<<"t

5、"cout<<endl;return 0;測(cè)試結(jié)果:心得: 在使用拉格朗日差值時(shí),如果區(qū)間比較大時(shí),而且不適合用高階拉格朗日差值時(shí),我們可以先利用樣條的思想,把大區(qū)間分成m小段,然后在每個(gè)小區(qū)間上使用低階的拉格朗日差值,這樣得到的結(jié)果較之前就精確了很多。從程序運(yùn)行的結(jié)果可以看出這樣的結(jié)論。第三章實(shí)驗(yàn)內(nèi)容:自動(dòng)選取步長(zhǎng)的龍貝格積分問(wèn)題描述: 利用龍貝格積分程序,自動(dòng)選取步長(zhǎng)計(jì)算下面的三個(gè)積分:(1)1.110720735(2)0.500000000(3)算法原碼:#include <iostream.h>#include <stdio.h>#incl

6、ude <math.h>double F1(double x);/被積分函數(shù)void LBG(double a,double b,double real);/龍貝格積分函數(shù)可輸入積分上下限和函/數(shù)真值#define n 100#define PI 3.141592654void main()LBG(0,1,1.110720735);/可以修改函數(shù)F1的return值來(lái)球不同的函數(shù)積分/龍唄格積分函數(shù)體void LBG(double a,double b,double real)int i,j;double h=b-a;double r3n=0.0;r11=0.5*h*(F1(a)+

7、F1(b);printf("%.7f ",r11);cout<<endl;for(i=2;i<=n;i+)r21=0.5*r11;for(int k=1;k<=pow(2,i-2);k+)r21+=F1(a+(k-0.5)*h)*0.5*h;for(j=2;j<=i;j+)r2j=r2j-1+(r2j-1-r1j-1)/(pow(4,j-1)-1);printf("%.7f ",r2i);for(j=1;j<=i;j+)r1j=r2j;if(fabs(r2i-real)<0.000001) break;/滿足精度

8、要求時(shí),自動(dòng)跳出cout<<endl;h=h/2;double F1(double x)return (1+x*x)/(1+x*x*x*x);/可修改的函數(shù)測(cè)試結(jié)果:(1) 第一個(gè)積分求解情況,真值為1.110720735,控制誤差為0.000001.(2)第二個(gè)積分求解情況,真值為0.500000000,控制誤差為0.000001.(3) 第三個(gè)積分求解情況,真值為,控制誤差為0.000001.心得: 在求解積分時(shí),由于電腦的字長(zhǎng)限制只能表示一部分?jǐn)?shù)據(jù),所以在求解第二個(gè)積分的值時(shí),原本精確的解是0.5,但是程序運(yùn)行的結(jié)果是0.4999993.這樣的結(jié)果雖然不是完全的符合,但是這是

9、電腦可以做的最好的答案了。第四章實(shí)驗(yàn)內(nèi)容:常微分方程解的四階龍格庫(kù)塔方法和阿達(dá)姆斯方法問(wèn)題描述: 完成以下功能:(1) 用C+語(yǔ)言描述:阿達(dá)姆斯預(yù)報(bào)校正式解常微分方程初值問(wèn)題的過(guò)程;(2) 調(diào)用龍格庫(kù)塔過(guò)程求解下面的一介常微分方程前四點(diǎn)的函數(shù)值,并用這些值作阿達(dá)姆斯方法的初值; 0<x<1 h=0.05(3) 調(diào)用阿達(dá)姆斯過(guò)程,求解常微分方程初值問(wèn)題;(4) 計(jì)算解析解在節(jié)點(diǎn)的值;解析解的表達(dá)式是:(5) 計(jì)算解析解與數(shù)值解的差;(6) 比較龍格庫(kù)塔方法和阿達(dá)姆斯方法解的精度。算法源碼:#include <iostream.h>#include <stdio.h&

10、gt;#include <math.h>#define n 21void LGKT(double h0,double y0);/四階龍格庫(kù)塔方法函數(shù)void ADMS(double h0,double y0);/阿達(dá)姆斯預(yù)報(bào)校正公式函數(shù)double TF(double x);/計(jì)算常微分方程精確初值的函數(shù)double F(double x,double y);/f(x,y)的值輸出函數(shù)void main() LGKT(0.05,0.0);ADMS(0.05,0.0);/四階龍格庫(kù)塔方法void LGKT(double h0,double y0)int i;double k1,k2,

11、k3,k4,yyn,h=h0,x,y;yy0=y0;for(i=0;i<n;i+)x=i*h;y=yyi;k1=F(x,y);x=i*h+0.5*h;y=yyi+0.5*h*k1;k2=F(x,y);x=i*h+0.5*h;y=yyi+0.5*h*k2;k3=F(x,y);x=i*h+h;y=yyi+h*k3;k4=F(x,y);yyi+1=yyi+h*(k1+2*k2+2*k3+k4)/6;cout<<"項(xiàng)"<<"t"<<"四階龍格庫(kù)塔公式值"<<"t"<

12、;<"常微分方程的精確值"<<"t"<<"與解析解的誤差"<<endl;for(i=1;i<n;i+)printf("yy%d %.10f %.10f %.10f;",i,yyi,TF(h0*i),TF(h0*i)-yyi);cout<<endl;/阿達(dá)姆斯預(yù)報(bào)校正方法void ADMS(double h0,double y0)int i;double k1,k2,k3,k4,yyn,h=h0,ffn,x,y;yy0=y0;for(i=0;i<n;i

13、+) if(i<3)/用四階的龍格庫(kù)塔方法提供初值x=i*h;y=yyi;k1=F(x,y),ffi=k1; x=i*h+0.5*h;y=yyi+0.5*h*k1;k2=F(x,y); x=i*h+0.5*h;y=yyi+0.5*h*k2;k3=F(x,y); x=i*h+h;y=yyi+h*k3;k4=F(x,y); yyi+1=yyi+h*(k1+2*k2+2*k3+k4)/6;else /用阿達(dá)姆斯校正公式求解x=i*h;y=yyi;ffi=F(x,y);yyi+1=yyi+h*(55*ffi-59*ffi-1+37*ffi-2-9*ffi-3)/24;x=i*h+h;y=yyi+

14、1;ffi+1=F(x,y);yyi+1=yyi+h*(9*ffi+1+19*ffi-5*ffi-1+ffi-2)/24;cout<<"項(xiàng)"<<"t"<<"阿達(dá)姆斯預(yù)報(bào)校正公式值"<<"t"<<"常微分方程的精確值"<<"t"<<"與解析解的誤差"<<endl;for(i=1;i<n;i+)printf("yy%d %.10f %.10f %.1

15、0f;",i,yyi,TF(h0*i),TF(h0*i)-yyi);cout<<endl;double F(double x,double y)return (2*x*x*x-2*x*y);/可以更改的f(x,y)double TF(double x)return (exp(-1)*x*x)+x*x-1);/可以更改的精確常微分方程值運(yùn)行結(jié)果分析:心得:在用計(jì)算機(jī)求解數(shù)學(xué)問(wèn)題是,要找到適合計(jì)算機(jī)做的方法。不一定要拘謹(jǐn)于固定的格式,只要是可以利用到已經(jīng)求解的結(jié)果得到更精確的解就可以。第五章實(shí)驗(yàn)內(nèi)容:最小二乘逼近問(wèn)題描述: 按照下表所示的數(shù)據(jù)求實(shí)驗(yàn)數(shù)據(jù)的線性最小二乘多項(xiàng)式:X

16、iYiXiYiXiYiXiYi0.04026.50.04128.10.05525.20.05626.00.06224.00.07125.00.07426.40.07426.40.07827.20.08225.60.09025.00.09226.80.10024.80.10527.00.12025.00.12326.9XiYiXiYi0.13026.90.14026.2算法源碼:#include <iostream.h>#include <math.h>#define N 17void ZXEC(double x,double y);/最小二乘法的函數(shù)void main(

17、)double xN,yN;/二個(gè)數(shù)組用于存放最小二乘的x和y值 x0=0.040;y0=26.5;x1=0.041;y1=28.1; x2=0.055;y2=25.2;x3=0.056;y3=26.0; x4=0.062;y4=24.0;x5=0.071;y5=25.0; x6=0.074;y6=26.4;x7=0.078;y7=27.2; x8=0.082;y8=25.6;x9=0.090;y9=25.0; x10=0.092;y10=26.8;x11=0.100;y11=24.8; x12=0.105;y12=27.0;x13=0.120;y13=25.0; x14=0.123;y14=

18、26.9;x15=0.130;y15=26.9; x16=0.140;y16=26.2;ZXEC(x,y);/最小二乘法的函數(shù)體void ZXEC(double xN,double yN)double x1=0.0,x2=0.0,x8=0.0,y1=0.0,y8=0.0,xy=0.0,a=0.0,b=0.0;for(int i=0;i<N;i+)/計(jì)算Xi,Yi,XiYi三項(xiàng)的求和x1+=xi;x2+=xi*xi;y1+=yi;xy+=xi*yi;x8=x1/N;y8=y1/N;/x和y的均值 b=(xy-N*x8*y8)/(x2-N*x8*x8);/線性表達(dá)是的斜率ba=y8-b*x8

19、;/截距acout<<"y="<<a<<"+("<<b<<")x"<<endl;運(yùn)行結(jié)果:心得: 在求解低階的最小二乘多項(xiàng)式時(shí),可以將低階的方程組化簡(jiǎn)后再去求解方程的系數(shù)。在本題中就是將未知量化簡(jiǎn)后再用給出的數(shù)據(jù)求解。第六章實(shí)驗(yàn)內(nèi)容:非線性方程的求根問(wèn)題描述:用程序解決下列問(wèn)題:(1) 用二分法寫(xiě)一個(gè)求函數(shù)飛f(x)=0實(shí)根的標(biāo)準(zhǔn)過(guò)程,并解非線性方程 在x=0附近的根。根的近似值是0.3604217(2) 用弦截法寫(xiě)一個(gè)標(biāo)準(zhǔn)過(guò)程并解非線性方程,在4.0附近的根。根

20、的近似值是3.73307903.(3) 用二分法或弦截法寫(xiě)一個(gè)標(biāo)準(zhǔn)過(guò)程,求多項(xiàng)式.在1.0附近的根。根的近似值是1.07816259.(4) 設(shè)計(jì)一個(gè)不用除法操作,計(jì)算的牛頓迭代格式并寫(xiě)出標(biāo)準(zhǔn)過(guò)程,其中。取計(jì)算并輸出迭代次數(shù),。算法源碼:#include <iostream.h>#include <math.h>double F(double x);void EFF(double ,double ,double ,double );/二分法求解函數(shù)void XJF(double ,double ,double ,double );/弦截法求解函數(shù)void Newton(

21、double ,double );/牛頓法求倒數(shù)#define M 1000000void main()EFF(0.0,1.0,0.000005,0.3604217);XJF(1.0,1.5,0.000005,1.07816259);cout<<"除法a=0.1,取初值為h=8.8。"<<endl;Newton(8.8,0.1);cout<<"除法a=0.2,取初值為h=4.0。"<<endl;Newton(4.0,0.2);cout<<"除法a=0.5,取初值為h=3.0。"

22、;<<endl;Newton(3.0,0.5);cout<<"除法a=0.8,取初值為h=1.0。"<<endl;Newton(1.0,0.8);cout<<"除法a=2.5,取初值為h=0.3。"<<endl;Newton(0.3,2.5);cout<<"除法a=10,取初值為h=0.15。"<<endl;Newton(0.15,10);/二分法求解過(guò)程的函數(shù)體void EFF(double a,double b,double eps,double

23、real)double x0=a,x1=b, result=0.0,x=(b-a)/2;for(int i=1;i<M;i+)result=F(x);if(real-eps)<x&&x<(real+eps) cout<<"二分法求解的方程的根為:"<<x<<endl;break;if(result<0) x0=x;else x1=x;x=(x1-x0)/2+x0;/弦截法求解過(guò)程的函數(shù)體void XJF(double a,double b,double eps,double real)double

24、x0=a,x1=b,y0=F(a),y1=F(b);for(int i=1;i<M;i+)double temp0=x1,temp1=y1;x1=x1-y1*(x1-x0)/(y1-y0);if(real-eps)<x1&&x1<(real+eps)cout<<"弦截法求解的方程的根為:"<<x1<<endl;break;y1=F(x1);x0=temp0;y0=temp1;/牛頓法求解倒數(shù)的函數(shù)體void Newton(double h0,double a)double h100;h0=h0;for(i

25、nt i=0;i<M;i+)hi+1=hi*(2-a*hi);cout<<i+1<<"t"<<hi+1<<endl;if(hi+1-hi)<0)double e=(-1)*(hi+1-hi);if(e<0.001)break;else if(hi+1-hi)<0.001) break;/在每個(gè)小題中這個(gè)函數(shù)的內(nèi)部是不同的,在這里是不能在同一個(gè)程序中求解所有問(wèn)題的,要逐個(gè)來(lái)求解double F(double x)return (2*x*x*x+4*x*x-2*x-5);運(yùn)行結(jié)果:(1)用二分法寫(xiě)一個(gè)求函數(shù)

26、飛f(x)=0實(shí)根的標(biāo)準(zhǔn)過(guò)程,并解非線性方程 在x=0附近的根。根的近似值是0.3604217(2) 用弦截法寫(xiě)一個(gè)標(biāo)準(zhǔn)過(guò)程并解非線性方程,在4.0附近的根。根的近似值是3.73307903.(3) 用二分法或弦截法寫(xiě)一個(gè)標(biāo)準(zhǔn)過(guò)程,求多項(xiàng)式.在1.0附近的根。根的近似值是1.07816259.(4) 設(shè)計(jì)一個(gè)不用除法操作,計(jì)算的牛頓迭代格式并寫(xiě)出標(biāo)準(zhǔn)過(guò)程,其中。取計(jì)算并輸出迭代次數(shù),。心得: 在解決計(jì)算機(jī)上解決實(shí)際問(wèn)題時(shí),例如求除法,我們可以根據(jù)一些數(shù)學(xué)的算法,來(lái)轉(zhuǎn)化一些計(jì)算機(jī)很難解決的問(wèn)題。 在利用二分法或弦截法解決非線性方程求根問(wèn)題時(shí),我們發(fā)現(xiàn)選取很好的初值點(diǎn)式很重要的。如果初值選取的不好是,我們的收斂與否和收斂速度都有一定的影響。第

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論