東南大學(xué)數(shù)值分析上機(jī)題C++參_第1頁
東南大學(xué)數(shù)值分析上機(jī)題C++參_第2頁
東南大學(xué)數(shù)值分析上機(jī)題C++參_第3頁
東南大學(xué)數(shù)值分析上機(jī)題C++參_第4頁
東南大學(xué)數(shù)值分析上機(jī)題C++參_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、數(shù)值分析上機(jī)題姓名:陳作添 學(xué)號:040816習(xí)題120(上機(jī)題)舍入誤差與有效數(shù)設(shè),其精確值為。(1)編制按從大到小的順序,計算的通用程序。(2)編制按從小到大的順序,計算的通用程序。(3)按兩種順序分別計算,并指出有效位數(shù)。(編制程序時用單精度)(4)通過本上機(jī)題,你明白了什么?按從大到小的順序計算的通用程序為:#include<iostream.h>float sum(float N)float j,s,sum=0;for(j=2;j<=N;j+) s=1/(j*j-1);sum+=s;return sum; 按從小到大的順序計算的通用程序為:#include<i

2、ostream.h>float sum(float N)float j,s,sum=0;for(j=N;j>=2;j-)s=1/(j*j-1);sum+=s;return sum;從大到小的順序的值從小到大的順序的值精確值有效位數(shù)從大到小從小到大0.7400490.740050.740049650.7498520.74990.7499440.7498520.7499990.74999936通過本上機(jī)題,看出按兩種不同的順序計算的結(jié)果是不相同的,按從大到小的順序計算的值與精確值有較大的誤差,而按從小到大的順序計算的值與精確值吻合。從大到小的順序計算得到的結(jié)果的有效位數(shù)少。計算機(jī)在進(jìn)行

3、數(shù)值計算時會出現(xiàn)“大數(shù)吃小數(shù)”的現(xiàn)象,導(dǎo)致計算結(jié)果的精度有所降低,我們在計算機(jī)中進(jìn)行同號數(shù)的加法時,采用絕對值較小者先加的算法,其結(jié)果的相對誤差較小。習(xí)題220(上機(jī)題)Newton迭代法(1)給定初值及容許誤差,編制Newton法解方程根的通用程序。(2)給定方程,易知其有三個根,。1由Newton方法的局部收斂性可知存在,當(dāng)時,Newton迭代序列收斂于根。試確定盡可能大的。2試取若干初始值,觀察當(dāng),時Newton序列是否收斂以及收斂于哪一個根。(3)通過本上機(jī)題,你明白了什么?解:(1)編制的通用程序:#include<iostream.h>#include<math.

4、h>#define eps 0.000001 /給定容許誤差float f(float x) /定義函數(shù)f(x)float f;f=x*x*x/3-x; /f(x)的表達(dá)式;return(f);float df(float x) /定義函數(shù)df(x),計算f(x)的導(dǎo)函數(shù)float df;df=x*x-1; /f(x)導(dǎo)函數(shù)的表達(dá)式;return (df);void main(void)float x0,x1,a;int k=0;cout<<"請輸入初值x0:"cin>>x0;doa=-f(x0)/df(x0);x1=x0+a;k+;x0=x1

5、;while(fabs(a)>eps);cout<<k<<'t'<<x0; /輸出迭代的次數(shù)和根值(2)計算迭代序列收斂于根的盡可能大的的函數(shù)為:#include<iostream.h>#include<math.h>void delay(int n) /定義延時函數(shù)for(n=10000;n>0;n-);#define eps 0.000001float f(float x) /定義函數(shù)f(x)float f;f=x*x*x/3-x; /f(x)的表達(dá)式;return(f);float df(float

6、x) /定義函數(shù)df(x),計算f(x)的導(dǎo)函數(shù)float df;df=x*x-1; /f(x)導(dǎo)函數(shù)的表達(dá)式;return (df);int judgement(float z)int count=5;float x0,x1,type,type1;x0=z;while(count->0) x1=x0-f(x0)/df(x0);type=fabs(x1); type1=fabs(x1-x0); /調(diào)試值用cout<<"count="<<count<<'t'<<"type="<&l

7、t;type<<'t'<<"type1="<<type1<<'n'if(fabs(x1-x0)<eps)return 1;x0=x1;delay(30000); /調(diào)試值用 return 0; void main(void)float delta=0;int flag=1;while(flag=1)cout<<"方程的根為:"<<'n'delta+=eps;flag=judgement(delta);cout<<&qu

8、ot;輸出方程根收斂的區(qū)間值:n"cout<<delta-eps; /輸出收斂的區(qū)間值當(dāng)步長為0.001時,程序計算出的的為=0.774,即在區(qū)間(-0.774,0.774)內(nèi)迭代序列收斂于0。對于不同得初始值收斂于不同的根, 在(-,-1)內(nèi)收斂于,在(-0.774,0.774)內(nèi)收斂于,在(1,+)內(nèi)收斂于,但在內(nèi)(0.774,1)和(1,0.774)均可能收斂于和。,分別為方程的精確解。分析:對于不同的初值,迭代序列會收斂于不同的根,所以在某個區(qū)間內(nèi)求根對于初值的選取有很大的關(guān)系。產(chǎn)生上述結(jié)果的原因是區(qū)間不滿足大范圍收斂的條件。習(xí)題335(上機(jī)題)列主元三角分解法對

9、于某電路的分析,歸結(jié)為求解線性方程組RI=V。(1)編制解n階線性方程組Ax=b的列主元三角分解法的通用程序;(2)用所編制的程序解線性方程組RI=V,并打印出解向量,保留五位有效數(shù);(3)本編程之中,你提高了哪些編程能力?程序為:#include<iostream.h>#include<math.h>void main(void)int i,j,n,k,q;float a1011,s10,s110;cout<<"請輸入n的值:"cin>>n;cout<<"輸入數(shù)組a:"<<endl

10、;for(i=1;i<=n;i+)for(j=1;j<=(n+1);j+)cin>>aij; /給矩陣a賦值for(i=1;i<=n;i+)for(j=1;j<=(n+1);j+)cout<<aij<<'t'cout<<'n' /輸出數(shù)組acout<<"''''''''''''''''''''''

11、'''"<<'n'/進(jìn)行第一行和第一列元素的求取'''''''''''''''''''''''''/int t=1;for(i=1;i<=n;i+)si=ai1;float max=fabs(s1);for(i=2;i<=n;i+)if(fabs(si)>max)max=fabs(si);t=i;for(j=1;j&l

12、t;=(n+1);j+)float b=a1j;a1j=atj;atj=b; /進(jìn)行第一列主元互換for(i=2;i<=n;i+)ai1=ai1/max; /第一列除以a11for(i=1;i<=n;i+)for(j=1;j<=(n+1);j+)cout<<aij<<'t'cout<<'n'/輸出進(jìn)行第一步變換的數(shù)組acout<<"''''''''''''''''

13、;'''''''''"<<'n'/進(jìn)行第k步分解'''''''''''''''''''''''''''''''''''''''''/for(k=2;k<=n

14、;k+)for(i=k;i<=n;i+)float sum=0;for(q=1;q<k;q+)sum+=aiq*aqk;s1i=aik-sum;int l=k;float m=fabs(s1k);for(i=k;i<=n;i+)/比較第k步分解的第k列值的大小if(fabs(s1i)>m)m=fabs(s1i);l=i; /返回行值for(j=1;j<=n+1;j+) /交換兩行元素float s2=akj;akj=alj;alj=s2;for(j=k;j<=n+1;j+)/算出第k行行元素的值float sum1=0;for(q=1;q<k;q+)s

15、um1+=akq*aqj;akj=akj-sum1;for(i=k+1;i<=n;i+)/算出第k列列元素的值float sum2=0;for(q=1;q<k;q+)sum2+=aiq*aqk;aik=(aik-sum2)/(akk); /第k步分解結(jié)束for(i=1;i<=n;i+)for(j=1;j<=(n+1);j+)cout<<aij<<'t'cout<<'n' /輸出改變后的數(shù)組/輸出解'''''''''''

16、;''''''''''''''''''''''''''''''''''''''''''''/float x10;for(i=n-1;i>=1;i-)xn=ann+1/ann;float sum3=0;for(j=i+1;j<=n;j+)

17、sum3+=aij*xj;xi=(ain+1-sum3)/aii; /回代過程for(i=1;i<=n;i+)cout<<'x'<<i<<'='<<xi<<endl; /輸出解向量結(jié)果:方程的解為:x1= -0.28923,x2= 0.34544,x3= -0.71281,x4= -0.22061,x5= -0.43040,x6= 0.15431,x7= -0.057823,x8= 0.20105,x9= 0.29023。分析:我感覺是提高了查錯誤點的能力和編循環(huán)語句的能力,即利用很規(guī)整的迭代公式

18、進(jìn)行編程。另外列主元三角分解法的階梯步驟有了更深的了解!36逐次超松弛迭代法(1)編制解n階線性方程組Ax=b的SOR方法的通用程序(要求);(2)對于35題中所給的線性方程組,取松弛因子,容許誤差,打印松弛因子、迭代次數(shù)、最佳松弛因子及解向量。程序為:#include<iostream.h>#include<math.h>#define eps 0.5e-5 /迭代誤差void main(void)int i,j,l;float w,t;float m9;float sum;float a99=31,-13,0,0,0,-10,0,0,0,-13,35,-9,0,-1

19、1,0,0,0,0,0,-9,31,-10,0,0,0,0,0,0,0,-10,79,-30,0,0,0,-9,0,0,0,-30,57,-7,0,-5,0,0,0,0,0,-7,47,-30,0,0,0,0,0,0,0,-30,41,0,0,0,0,0,0,-5,0,0,27,-2,0,0,0,-9,0,0,0,-2,29;float b9=-15,27,-23,0,-20,12,-7,7,10;float max(float m9);for(t=1;t<=99;t+)l=0;float x09=1,1,1,1,1,1,1,1,1;float x19=1,1,1,1,1,1,1,1,1

20、;w=t/50;dofor(i=0;i<9;i+)x0i=x1i;for(i=0;i<9;i+)sum=0;for(j=0;j<i;j+)sum=sum+aij*x1j;for(j=i+1;j<9;j+)sum=sum+aij*x0j;x1i=(1-w)*x0i+w*(bi-sum)/aii; /解出九個解for(i=0;i<9;i+)mi=x1i-x0i;l+;while(max(m)>=eps);if(max(m)<=eps)cout<<"迭代次數(shù)="<<l<<'t'<&

21、lt;"w="<<w<<'n'for(i=0;i<9;i+)cout<<"x1"<<""<<i<<""<<'='<<x1i<<'t'cout<<"-"<<'n'float max(float m9) /求出最大的迭代誤差float k;k=(fabs(m0);for(int i=1;i<9;

22、i+)if(fabs(mi)>k)k=fabs(mi);return k;結(jié)果為: 迭代次數(shù) 迭代次數(shù) 迭代次數(shù) 迭代次數(shù)0.02 12910.04 7000.06 4860.08 3730.10 3030.12 2550.14 2210.16 1940.18 1730.20 1560.22 1420.24 1300.26 1200.28 1110.30 1030.32 960.34 900.36 850.38 800.40 750.42 710.44 680.46 640.48 610.50 580.52 550.54 530.56 510.58 480.60 460.62 440.6

23、4 420.66 410.68 390.70 370.72 360.74 340.76 330.78 320.80 300.82 290.84 280.86 270.88 260.90 250.92 240.94 230.96 220.98 211.00 201.02 191.04 181.06 171.08 161.10 151.12 151.14 141.16 121.18 101.20 111.22 121.24 121.26 131.28 131.30 141.32 151.34 151.36 161.38 171.40 181.42 191.44 191.46 201.48 211.

24、50 221.52 241.54 251.56 271.58 301.60 311.62 341.64 361.66 391.68 441.70 491.72 551.74 601.76 711.78 811.80 971.82 1211.84 1571.86 2281.88 3981.90 15821.92 54271.94 21781.96 13741.98 1009 從1.92到2.00均出現(xiàn)不合理的迭代次數(shù),迭代次數(shù)偏大。不是合理的迭代值。當(dāng)初值為x=(1,1,1,1,1,1,1,1,1,)T 時,從上表可以看出,最佳松弛因子為=1.18,迭代次數(shù)僅為10次,方程的解為: x1= -0

25、.289231,x2= 0.345437,x3= -0.712811, x4= -0.220608,x5= -0.430400,x6= 0.154309,x7= -0.057823,x8= 0.201054,x9= 0.290229。數(shù) 值 分 析 上 機(jī) 題姓名:戴載星 學(xué)號:040139習(xí)題 438.(上機(jī)題)3次樣條插值函數(shù)(1)編制求第一型3次樣條插值函數(shù)的通用程序; (2) 已知汽車曲線型值點的數(shù)據(jù)如下:0123456789102.513.304.044.705.225.545.785.405.575.705.80端點條件為=0.8,=0.2。用所編制程序求車門的3次樣條插值函數(shù)S(

26、x),并打印出S(i+0.5)(i=0,1,9)。解:通用程序:#include<iostream.h>void main(void)float x11;/存放數(shù)組xjfloat y11;/存放數(shù)組yjfloat h11;/存放數(shù)組hjfloat u11;/存放數(shù)組ujfloat v11;/存放數(shù)組vjfloat d11;/存放數(shù)組djfloat M11;/存放數(shù)組Mjfloat b11;/ 存放數(shù)組bjfloat t11,l11,yy11,s4,aa1,aa2,aa3,aa4;float s110;int i,j,n;float xx;/x為區(qū)間值/將初值初始化cout<&

27、lt;"請輸入n的值:n"cin>>n;cout<<"輸入數(shù)組x:n"for(i=0;i<=n;i+)cin>>xi;cout<<"輸入數(shù)組y:n"for(i=0;i<=n;i+)cin>>yi;/輸入端點值float df2;cout<<"輸入兩個端點值:n"for(i=0;i<2;i+)cin>>dfi;/利用書本上的算法求出所需要的值/求出hj的值for(j=0;j<=n-1;j+)hj=xj+1-xj

28、;cout<<'h'<<''<<j<<''<<'='<<hj<<'t'cout<<endl;/求出uj和vj的初值v0=1;un=1;for(j=1;j<=n-1;j+)uj=hj-1/(hj-1+hj);vj=hj/(hj-1+hj);/求出dj的值for(j=1;j<n;j+)dj=6*(yj+1-yj)/hj-(yj-yj-1)/hj-1)/(hj+hj-1);d0=6*(y1-y0)/h0-df0)/

29、h0;dn=6*(df1-(yn-yn-1)/hn-1)/hn-1;for(j=1;j<=n;j+)cout<<'u'<<''<<j<<''<<'='<<uj<<'t'cout<<endl;for(j=0;j<n;j+)cout<<'v'<<''<<j<<''<<'='<<v

30、j<<'t'cout<<endl;for(j=0;j<=n;j+)cout<<'d'<<''<<j<<''<<'='<<dj<<'t'cout<<endl;/利用書本上的追趕法求解方程組for(i=0;i<=n;i+)bi=2;cout<<endl;t0=b0;yy0=d0;/消元過程for(i=1;i<=n;i+)li=ui/ti-1;ti=bi-l

31、i*vi-1;yyi=di-li*yyi-1;/回代過程Mn=yyn/tn;for(i=n-1;i>=0;i-)Mi=(yyi-vi*Mi+1)/ti;/將Mj的值輸出for(i=0;i<=n;i+)cout<<'M'<<''<<i<<''<<'='<<Mi<<endl;/輸出插值多項式的系數(shù)for(j=0;j<n;j+)s0=yj;s1=(yj+1-yj)/hj-(Mj/3+Mj+1/6)*hj;s2=Mj/2;s3=(Mj+1

32、-Mj)/(6*hj);cout<<"當(dāng)x的值在區(qū)間"<<'x'<<''<<j<<''<<"到"<<'x'<<''<<(j+1)<<''<<"時,輸出插值多項式的系數(shù):n"for(int k=0;k<4;k+)cout<<'s'<<''<<

33、;k<<''<<'='<<sk<<'t'cout<<endl;(2)編制的程序求車門的3次樣條插值函數(shù)S(x):x屬于區(qū)間0,1時;S(x)=2.51+0.8(x)-0.0014861(x)(x)-0.00851395(x)(x)(x)x屬于區(qū)間1,2時;S(x)=3.3+0.771486(x-1)-0.027028(x-1)(x-1)-0.00445799(x-1)(x-1)(x-1)x屬于區(qū)間2,3時;S(x)=4.04+0.704056(x-2)-0.0404019(x-2)(x-

34、2)-0.0036543(x-2)(x-2)(x-2)x屬于區(qū)間3,4時;S(x)=4.7+0.612289(x-3)-0.0513648(x-3)(x-3)-0.0409245(x-3)(x-3)(x-3)x屬于區(qū)間4,5時;S(x)=5.22+0.386786(x-4)-0.174138(x-4)(x-4)+0.107352(x-4)(x-4)(x-4)x屬于區(qū)間5,6時;S(x)=5.54+0.360567(x-5)+0.147919(x-5)(x-5)-0.268485(x-5)(x-5)(x-5)x屬于區(qū)間6,7時;S(x)=5.78-0.149051(x-6)-0.657537(x

35、-6)(x-6)+0.426588(x-6)(x-6)(x-6)x屬于區(qū)間7,8時;S(x)=5.4-0.184361(x-7)+0.622227(x-7)(x-7)-0.267865(x-7)(x-7)(x-7)x屬于區(qū)間8,9時;S(x)=5.57+0.256496(x-8)-0.181369(x-8)(x-8)+0.0548728(x-8)(x-8)(x-8)x屬于區(qū)間9,10時;S(x)=5.7+0.058376(x-9)-0.0167508(x-9)(x-9)+0.0583752(x-9)(x-9)(x-9)S(0.5)=2.90856 S(1.5)=3.67843 S (2.5)=

36、4.38147S(3.5)=4.98819 S(4.5)=5.38328 S(5.5)=5.7237S(6.5)=5.59441 S(7.5)=5.42989 S(8.5)=5.65976S(9.5)=5.7323習(xí)題五 重積分的計算23(上機(jī)題)重積分的計算題目:給定積分。取初始步長h和k,及精度。應(yīng)用復(fù)化Simpson公式,采用逐次二分步長的方法,編制計算I(f)的通用程序。計算至相鄰兩次近似值之差的絕對值不超過為止。1) 用所編程序計算積分,取。算法概述初始時候只在x,y方向上各二分一次,根據(jù)復(fù)化Simpson公式計算積分值,然后再二分一次,仍然根據(jù)上式重新計算積分值,比較兩次計算結(jié)果的

37、差值,如果小于誤差限,則已求得滿足要求的結(jié)果,否則繼續(xù)二分區(qū)間直到滿足誤差要求為止。程序如下:#include<iostream.h>#include<math.h>#define PI 3.1415926#define error 0.5E-5double f(double x,double y) double answ; answ=tan(x*x+y*y); return answ;void main() double old,temp,a=0,c=0; int i,j,m=1,n=1; double b=PI/3;/重積分內(nèi)層上限 double d=PI/6;/重

38、積分外層上限 double h=(b-a)/(2*n);/ double k=(d-c)/(2*m); double answ=0; do old=answ; answ=0; answ+=f(a,c); temp=0; for(i=1;i<n;i+) temp+=f(a+2*i*h,c); temp*=2; answ+=temp; temp=0; for(i=1;i<=n;i+) temp+=f(a+(2*i-1)*h,c); temp*=4; answ+=temp; answ+=f(b,c); temp=0; for(j=1;j<m;j+) temp+=f(a,c+2*j*

39、k); temp*=2; answ+=temp; temp=0; for(j=1;j<m;j+) for(i=1;i<n;i+)temp+=f(a+2*i*h,c+2*j*k); temp*=4; answ+=temp; temp=0; for(j=1;j<m;j+) for(i=1;i<=n;i+)temp+=f(a+(2*i-1)*h,c+2*j*k); temp*=8; answ+=temp; temp=0; for(j=1;j<m;j+) temp+=f(b,c+2*j*k); temp*=2; answ+=temp; temp=0; for(j=1;j&

40、lt;=m;j+) temp+=f(a,c+(2*j-1)*k); temp*=4; answ+=temp; temp=0; for(j=1;j<=m;j+) for(i=1;i<n;i+)temp+=f(a+2*i*h,c+(2*j-1)*k); temp*=8; answ+=temp; temp=0; for(j=1;j<=m;j+) for(i=1;i<=n;i+)temp+=f(a+(2*i-1)*h,c+(2*j-1)*k); temp*=16; answ+=temp; temp=0; for(j=1;j<=m;j+) temp+=f(b,c+(2*j-

41、1)*k); temp*=4; answ+=temp; answ+=f(a,d); temp=0; for(i=1;i<n;i+) temp+=f(a+2*i*h,d); temp*=2; answ+=temp; temp=0; for(i=1;i<=n;i+) temp+=f(a+(2*i-1)*h,d); temp*=4; answ+=temp; answ+=f(b,d); answ=answ*h*k/9; m*=2; n*=2; h=(b-a)/(2*n); k=(d-c)/(2*m); while(fabs(answ-old)>error); cout<<

42、"answ is:"<<answ; cout<<"nDivided into"<<m/2<<"partsn" return;程序的輸出結(jié)果為:Result is:0.33652Divided into64parts即在x,y方向上各二分6次。本題公式較長,形式較為復(fù)雜,但是并不需要太多編程技巧,只需細(xì)心即可。隨著二分的繼續(xù),計算的結(jié)果越來越趨向準(zhǔn)確值。本題在二分6次后,經(jīng)檢驗誤差符合精度要求。習(xí)題621(上機(jī)題)常微分方程初值問題數(shù)值解(1)編制RK4方法的通用程序;(2)編制AB4方法

43、的通用程序(由RK4提供初值);(3)編制AB4-AM4預(yù)測校正方法的通用程序(由RK4提供初值);(4)編制帶改進(jìn)的AB4-AM4預(yù)測校正方法的通用程序(由RK4提供初值);(5)對于初值問題取步長,應(yīng)用(1)(4)中的四種方法進(jìn)行計算,并將計算結(jié)果和精確解作比較;(6)通過本上機(jī)題,你能得到哪些結(jié)論?解:程序為:#include<iostream.h>#include<fstream.h>#include<stdlib.h>#include<math.h>ofstream outfile("data.txt");/此處定義

44、函數(shù)f(x,y)的表達(dá)式/用戶可以自己設(shè)定所需要求得函數(shù)表達(dá)式double f1(double x,double y)double f1;f1=(-1)*x*x*y*y;return f1;/此處定義求函數(shù)精確解的函數(shù)表達(dá)式double f2(double x)double f2;f2=3/(1+x*x*x);return f2;/此處為精確求函數(shù)解的通用程序void accurate(double a,double b,double h)double x100,accurate100;x0=a;int i=0;outfile<<"輸出函數(shù)準(zhǔn)確值的程序結(jié)果:n"

45、doxi=x0+i*h;accuratei=f2(xi);outfile<<"accurate"<<i<<"="<<accuratei<<'n'i+;while(i<(b-a)/h+1);/此處為經(jīng)典Runge-Kutta公式的通用程序void RK4(double a,double b,double h,double c)int i=0;double k1,k2,k3,k4;double x100,y100;y0=c;x0=a;outfile<<"輸

46、出經(jīng)典Runge-Kutta公式的程序結(jié)果:n"doxi=x0+i*h;k1=f1(xi,yi);k2=f1(xi+h/2),(yi+h*k1/2);k3=f1(xi+h/2),(yi+h*k2/2);k4=f1(xi+h),(yi+h*k3);yi+1=yi+h*(k1+2*k2+2*k3+k4)/6;outfile<<"y"<<""<<i<<"="<<yi<<'n'i+;while(i<(b-a)/h+1);/此處為4階Adam

47、s顯式方法的通用程序void AB4(double a,double b,double h,double c)double x100,y100,y1100;double k1,k2,k3,k4;y0=c;x0=a;outfile<<"輸出4階Adams顯式方法的程序結(jié)果:n"for(int i=0;i<=2;i+)xi=x0+i*h;k1=f1(xi,yi);k2=f1(xi+h/2),(yi+h*k1/2);k3=f1(xi+h/2),(yi+h*k2/2);k4=f1(xi+h),(yi+h*k3);yi+1=yi+h*(k1+2*k2+2*k3+k4

48、)/6;int j=3;y10=y0;y11=y1;y12=y2;y13=y3;doxj=x0+j*h;y1j+1=y1j+(55*f1(xj,y1j)-59*f1(xj-1,y1j-1)+37*f1(xj-2,y1j-2)-9*f1(xj-3,y1j-3)*h/24;outfile<<"y1"<<""<<j<<"="<<y1j<<'n'j+;while(j<(b-a)/h+1);/主函數(shù)void main(void)double a,b,h

49、,c;cout<<"輸入上下區(qū)間、步長和初始值:n"cin>>a>>b>>h>>c;accurate(a,b,h);RK4(a,b,h,c);AB4(a,b,h,c);結(jié)果為:由經(jīng)典Runge-Kutta公式得出的結(jié)果列在下面的表格中,以及精確值y(xi)和精確值和數(shù)值解的誤差:ixiyiy(xi)|y(xi)-yi|0033010.12.9972.9971.87138e-00720.22.976192.976193.91665e-00730.32.921132.921137.58342e-00740.42.819

50、552.819551.61101e-00650.52.666662.666673.17735e-00660.62.46712.467115.00551e-00670.7 2.23382.23385.77233e-00680.81.984121.984134.12954e-00690.91.735111.735111.15554e-007101.01.500011.55.80668e-006111.11.287011.2871.13075e-005121.21.099721.099711.54242e-005131.30.9383970.938381.77272e-005141.40.80130

51、.8012821.83754e-005151.50.6857320.6857141.78e-005由AB4方法得出的結(jié)果為:Y10=3 y11=2.997 y12=2.97619 y13=2.92113 y14=2.81839y15=2.66467 y16=2.4652 y17=2.23308 y18=1.98495 y19=1.73704y110=1.50219 y111=1.28876 y112=1.10072 y113=0.93871 y114=0.801135y115=0.685335通過本上機(jī)題我明白了各種求微分方程的數(shù)值方法,經(jīng)典Runge-Kutta公式,AB4方法以及AB4-A

52、M4預(yù)測校正方法求解公式的精度是不同的。其中經(jīng)典Runge-Kutta公式的精度,四階Adams顯式方法(AB4)具有4階精度。習(xí)題八 拋物線方程Crank-Nicolson格式題目:1)編制用Crank-Nicolson格式求拋物線方程2u/2x = f(x,t) (0<x<1, 0u(x,0) = (0u(0,t) = ,u(1,t)= (0<t數(shù)值解的通用程序。2)就a=1, f(x,t)=0,=exp(x),=exp(t),=exp(1+t),M=40,N=40,輸入點(0.2,1.0),(0.4,1.0),(0.6,1.0),(.8,1.0)4點處u(x,t)的近似值。3) 已知所給方程的精確解為u(x,t)=exp(x+t),將步長反復(fù)二分,從(0.2,1.0),(0.4,1.0),(0.6,1.0),(0.8,1.0)

溫馨提示

  • 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

提交評論