東南大學數值分析上機題C參考答案_第1頁
東南大學數值分析上機題C參考答案_第2頁
東南大學數值分析上機題C參考答案_第3頁
東南大學數值分析上機題C參考答案_第4頁
東南大學數值分析上機題C參考答案_第5頁
已閱讀5頁,還剩18頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、文檔來源為:從網絡收集整理.word版本可編輯.歡迎下載支持.數值分析上機題姓名:陳作添學號:040816習題120(上機題)舍入誤差與有效數編制按從大到小的順序S=-+-+1,計算S的通用程序。N221321N21N編制按從小到大的順序s=1+1+1,計算S的通用程序。NN21(N1)21221N(3)按兩種順序分別計算S,S101,S,并指出有效位數。(編制程序時用單精度)102101064)通過本上機題,你明白了什么?按從大到小的順序計算SN的通用程序為:按從小到大的順序計算Sn的通用程序為:從大到小的順序的值從小到大的順序的值精確值有效位數從大到小從小到大0.7400490.74005

2、0.740049650.7498520.74990.7499440.7498520.7499990.74999936通過本上機題,看出按兩種不同的順序計算的結果是不相同的,按從大到小的順序計算的值與精確值有較大的誤差,而按從小到大的順序計算的值與精確值吻合。從大到小的順序計算得到的結果的有效位數少。計算機在進行數值計算時會出現“大數吃小數”的現象,導#includeviostream.hfloatsum(floatN)floatj,s,sum=0;for(j=2;jv=N;j+)s=1/(j*j-1);sum+=s;returnsum;#includeviostream.hfloatsum(f

3、loatN)floatj,s,sum=0;for(j=N;j=2;j-)s=1/(j*j-1);sum+=s;returnsum;致計算結果的精度有所降低,我們在計算機中進行同號數的加法時,采用絕對值較小者先加的算法,其結果的相對誤差較小。習題220.(上機題)Newton迭代法給定初值x及容許誤差,編制Newton法解方程f(x)=0根的通用程序。0給定方程f(x)二x3/3-x二0,易知其有三個根x*=3,x*二0,x*=。1231由Newton方法的局部收斂性可知存在&0,當xG(-5,S)時,Newton迭代序0列收斂于根x2。試確定盡可能大的5。2試取若干初始值,觀察當xoe(-1)

4、,(-1-5),(-5,5),(5,1),(3時Newton序列是否收斂以及收斂于哪一個根。(3)通過本上機題,你明白了什么?解:(1)編制的通用程序:/給定容許誤差/定義函數f(x)f(x)的表達式;/定義函數df(x),#include#include#defineeps0.000001floatf(floatx)floatf;f=x*x*x/3-x;return(f);floatdf(floatx)計算f(x)的導函數floatdf;df=x*x-1;/f(x)導函數的表達式;return(df);voidmain(void)floatx0,x1,a;intk=0;coutvv請輸入初值

5、x0:;cinx0;doa=-f(x0)/df(x0);x1=x0+a;k+;x0=x1;while(fabs(a)eps);coutktx0;/輸出迭代的次數和根值計算迭代序列收斂于根x2的盡可能大的5的函數為:floatf;f=x*x*x/3-x;f(x)的表達式;#include#includevoiddelay(intn)/定義延時函數for(n=10000;n0;n-);#defineeps0.000001floatf(floatx)/定義函數f(x)return(f);floatdf(floatx)定義函數df(x),計算f(x)的導函數floatdf;df=x*x-1;/f(x)

6、導函數的表達式;return(df);intjudgement(floatz)intcount=5;floatx0,x1,type,type1;x0=z;while(count-0)x1=x0-f(x0)/df(x0);type=fabs(x1);type1=fabs(x1-x0);/調試值用coutcount=countttype=typettype1=type1n;if(fabs(x1-x0)eps)return1;x0=x1;delay(30000);/調試值用return0;voidmain(void)floatdelta=0;intflag=1;while(flag=1)coutvv

7、方程的根為:n;delta+=eps;flag=judgement(delta);cout輸出方程根收斂的區間值:n;coutdelta-eps;/輸出收斂的區間值當步長為0.001時,程序計算出的的為5=0.774,即在區間(-0.774,0.774)內迭代序列收斂于0。對于不同得初始值收斂于不同的根,x0在5,-1)內收斂于x*,在(心74,0.774)內收斂于x*,在(1,+8)內收斂于x*,但在內(0.774,1)和(一1,0.774)均可能收斂于23x*和x*。x*,x*,x*分別為方程的精確解。13123分析:對于不同的初值,迭代序列會收斂于不同的根,所以在某個區間內求根對于初值的

8、選取有很大的關系。產生上述結果的原因是區間不滿足大范圍收斂的條件。習題335.(上機題)列主元三角分解法對于某電路的分析,歸結為求解線性方程組RI=V。(1)編制解n階線性方程組Ax二b的列主元三角分解法的通用程序;(2)用所編制的程序解線性方程組RI=V,并打印出解向量,保留五位有效數;vvn;/進行第一行和第一列元素的求取本編程之中,你提高了哪些編程能力?程序為:#include#includevoidmain(void)inti,j,n,k,q;floata1011,s10,s110;coutvv請輸入n的值:;cinn;coutvv輸入數組a:vvendl;for(i=1;iv=n;i

9、+)for(j=1;jv=(n+1);j+)cinaij;給矩陣a賦值for(i=1;iv=n;i+)for(j=1;jv=(n+1);j+)coutvvaijvvt;coutvvn;/輸出數組acoutvv文檔來源為:從網絡收集整理.word版本可編輯.歡迎下載支持.文檔來源為:從網絡收集整理.word版本可編輯.歡迎下載支持.!/cout!n;intt=1;for(i=1;i=n;i+)si=ai1;floatmax=fabs(s1);for(i=2;imax)max=fabs(si);t=i;for(j=1;j=(n+1);j+)floatb=a1j;a1j=atj;atj=b;/進行第

10、一列主元互換for(i=2;i=n;i+)ai1=ai1/max;/第一列除以a11for(i=1;i=n;i+)for(j=1;j=(n+1);j+)coutaijt;coutn;輸出進行第一步變換的數組a/進行第k步分解/m=fabs(s1i);l=i;/返回行值for(j=1;j=n+1;j+)/交換兩行元素floats2=akj;akj=alj;alj=s2;for(j=k;j=n+1;j+)算出第k行行元素的值floatsum1=0;for(q=1;qk;q+)sum1+=akq*aqj;akj=akj-sum1;for(i=k+1;i=n;i+)算出第k列列元素的值floatsum

11、2=0;for(q=1;qk;q+)sum2+=aiq*aqk;aik=(aik-sum2)/(akk);/第k步分解結束for(i=1;i=n;i+)for(k=2;k=n;k+)for(i=k;i=n;i+)floatsum=0;for(q=1;qk;q+)sum+=aiq*aqk;s1i=aik-sum;intl=k;floatm=fabs(s1k);for(i=k;im)for(j=1;j=(n+1);j+)coutaijt;cout=1;i-)xn=ann+1/ann;floatsum3=0;for(j=i+1;j=n;j+)sum3+=aij*xj;xi=(ain+1-sum3)/

12、aii;/回代過程for(i=1;i=n;i+)文檔來源為:從網絡收集整理.word版本可編輯.歡迎下載支持.文檔來源為:從網絡收集整理.word版本可編輯.歡迎下載支持.文檔來源為:從網絡收集整理.word版本可編輯.歡迎下載支持./輸出解向量coutxi=xiendl;結果:方程的解為: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。分析:我感覺是提高了查錯誤點的能力和編循環語句的能力,即利用很規整的迭代公式進行編程。另外列主元三

13、角分解法的階梯步驟有了更深的了解!36逐次超松弛迭代法(1)編制解n階線性方程組Ax=b的SOR方法的通用程序(要求卜-x(k-i)|);(2)對于35題中所給的線性方程組,取松弛因子5二i/50(i二1,2-,99),容許誤差i=2X10-5,打印松弛因子、迭代次數、最佳松弛因子及解向量。程序為:#include#include#defineeps0.5e-5/迭代誤差voidmain(void)inti,j,l;floatw,t;floatm9;floatsum;floata99=31,-13,0,0,0,-10,0,0,0,-13,35,-9,0,-11,0,0,0,0,0,-9,31,

14、-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;floatb9=-15,27,-23,0,-20,12,-7,7,10;floatmax(floatm9);for(t=1;t=99;t+)l=0;floatx09=1,1,1,1,1,1,1,1,1;floatx19=1,1,1,1,1,1,1,1,1;w=t/50;dofor(i=0;i9;i+)x0i

15、=x1i;for(i=0;i9;i+)sum=0;for(j=0;ji;j+)sum=sum+aij*x1j;for(j=i+1;j9;j+)sum=sum+aij*x0j;x1i=(1-w)*x0i+w*(bi-sum)/aii;/解出九個解for(i=0;i=eps);if(max(m)=eps)cout迭代次數=ltw=wn;for(i=0;i9;i+)coutx1i=x1it;coutn;floatmax(floatm9)/求出最大的迭代誤差floatk;k=(fabs(m0);for(inti=1;ik)結果為:3迭代次數3迭代次數0.0212910.52550.047000.545

16、30.064860.56510.083730.58480.103030.60460.122550.62440.142210.64420.161940.66410.181730.68390.201560.70370.221420.72360.241300.74340.261200.76330.281110.78320.301030.80300.32960.82290.34900.84280.36850.86270.38800.88260.40750.90250.42710.92240.44680.94230.46640.96220.48610.98210.50581.0020從1.92到2.00

17、均出現不合理的迭代次數,當初值為x=(1,1,1,1,1,1,1,1,1,)T時,從上表可為10次,方程的解為:x1=-0.289231,x2=0.345437,x3=-0.712811x4=-0.220608,x5=-0.430400,x6=0.154309x7=-0.057823,x8=0.201054,x9=0.290229。數值分姓名:戴載星k=fabs(mi);returnk;3迭代次數3迭代次數1.02191.52241.04181.54251.06171.56271.08161.58301.10151.60311.12151.62341.14141.64361.16121.663

18、91.18101.68441.20111.70491.22121.72551.24121.74601.26131.76711.28131.78811.30141.80971.32151.821211.34151.841571.36161.862281.38171.883981.40181.9015821.42191.9254271.44191.9421781.46201.9613741.48211.9810091.5022迭代次數偏大。不是合理的迭代值。以看出最佳松弛1因子為3=1.18,迭代次數僅上機題學號:040139習題438.(上機題)3次樣條插值函數0123456789102.513

19、.304.044.705.225.545.785.405.575.705.801)編制求第一型3次樣條插值函數的通用程序;2)已知汽車曲線型值點的數據如下:yio=2。用所編制程序求車門的3次樣條插值函數血),并打印出端點條件為y=0.8,0S(i+0.5)(i=0,l,-9)。解:通用程序:#includevoidmain(void)floatxll;存放數組xjfloaty11;/存放數組yjfloath11;存放數組hjfloatu11;存放數組ujfloatv11;/存放數組vjfloatd11;存放數組djfloatM11;/存放數組Mjfloatb11;存放數組bjfloatt11

20、,l11,yy11,s4,aa1,aa2,aa3,aa4;floats110;inti,j,n;floatxx;/x為區間值/將初值初始化coutvv請輸入n的值:n;cinn;coutvv輸入數組x:n;for(i=0;ixi;coutvv輸入數組y:n;for(i=0;iv=n;i+)cinyi;/輸入端點值floatdf2;coutvv輸入兩個端點值:n;for(i=0;iv2;i+)cindfi;/利用書本上的算法求出所需要的值求出hj的值for(j=0;jv=n-1;j+)hj=xj+1-xj;coutvvhvvvvjvvvv=vvhjvvt;coutvvendl;求出uj和vj的初

21、值v0=1;un=1;for(j=1;jv=n-1;j+)uj=hj-1/(hj-1+hj);vj=hj/(hj-1+hj);求出dj的值for(j=1;jvn;j+)dj=6*(yj+1-yj)/hj-(yj-yj-1)/hj-1)/(hj+hj-1);d0=6*(y1-y0)/h0-df0)/h0;dn=6*(df1-(yn-yn-1)/hn-1)/hn-1;for(j=1;jv=n;j+)coutvvuvvvvjvvvv=vvujvvt;coutvvendl;for(j=0;jvn;j+)coutvvvvvvvjvvvv=vvvjvvt;coutvvendl;for(j=0;jv=n;j

22、+)coutvvdvvvvjvvvv=vvdjvvt;coutvvendl;/利用書本上的追趕法求解方程組for(i=0;iv=n;i+)bi=2;coutendl;t0=b0;yy0=d0;/消元過程for(i=1;i=0;i-)Mi=(yyi-vi*Mi+1)/ti;將Mj的值輸出for(i=0;i=n;i+)coutMi=Miendl;/輸出插值多項式的系數for(j=0;jn;j+)s0=yj;s1=(yj+1-yj)/hj-(Mj/3+Mj+1/6)*hj;s2=Mj/2;s3=(Mj+1-Mj)/(6*hj);cout當x的值在區間xj到vvxvvTvv(j+l)vvTvv時,輸出

23、插值多項式的系數:n;for(intk=0;kv4;k+)coutsk=skt;coutendl;x屬于區間0,1時;x屬于區間1,2時;x屬于區間2,3時x屬于區間3,4時x屬于區間4,5時x屬于區間5,6時x屬于區間6,7時x屬于區間7,8時x屬于區間8,9時S(0.5)=2.90856S(3.5)=4.98819S(6.5)=5.59441S(9.5)=5.7323S(2.5)=4.38147S(5.5)=5.7237S(8.5)=5.65976編制的程序求車門的3次樣條插值函數S(x):S(x)=2.51+0.8(x)-0.0014861(x)(x)-0.00851395(x)(x)(

24、x)S(x)=3.3+0.771486(x-1)-0.027028(x-1)(x-1)-0.00445799(x-1)(x-1)(x-1)S(x)=4.04+0.704056(x-2)-0.0404019(x-2)(x-2)-0.0036543(x-2)(x-2)(x-2)S(x)=4.7+0.612289(x-3)-0.0513648(x-3)(x-3)-0.0409245(x-3)(x-3)(x-3)S(x)=5.22+0.386786(x-4)-0.174138(x-4)(x-4)+0.107352(x-4)(x-4)(x-4)S(x)=5.54+0.360567(x-5)+0.1479

25、19(x-5)(x-5)-0.268485(x-5)(x-5)(x-5)S(x)=5.78-0.149051(x-6)-0.657537(x-6)(x-6)+0.426588(x-6)(x-6)(x-6)S(x)=5.4-0.184361(x-7)+0.622227(x-7)(x-7)-0.267865(x-7)(x-7)(x-7)S(x)=5.57+0.256496(x-8)-0.181369(x-8)(x-8)+0.0548728(x-8)(x-8)(x-8)x屬于區間9,10時;S(x)=5.7+0.058376(x-9)-0.0167508(x-9)(x-9)+0.0583752(x-

26、9)(x-9)(x-9)S(1.5)=3.67843S(4.5)=5.38328S(7.5)=5.42989習題五重積分的計算23(上機題)重積分的計算題目:給定積分1(f)-Jd(Jbf(x,y)dx)dy。取初始步長h和k,及精度。應用復化Simpsonca公式,采用逐次二分步長的方法,編制計算I(f)的通用程序。計算至相鄰兩次近似值之差的絕對值不超過為止。取=0.5*10-5。1)用所編程序計算積分I(f)二F6(#3tg(x2+y2)dx)dy,00算法概述初始時候只在X,y方向上各二分一次,根據復化Simpson公式計算積分值,然后再二分一次,仍然根據上式重新計算積分值,比較兩次計算

27、結果的差值,如果小于誤差限,則已求得滿足要求的結果,否則繼續二分區間直到滿足誤差要求為止。程序如下:#include#include#definePI3.1415926#defineerror0.5E-5doublef(doubleX,doubley)doubleansw;answ=tan(X*X+y*y);returnansw;voidmain()doubleold,temp,a=0,c=0;inti,j,m=1,n=1;doubleb=PI/3;/重積分內層上限doubled=PI/6;重積分外層上限doubleh=(b-a)/(2*n);/doublek=(d-c)/(2*m);doub

28、leansw=0;doold=answ;answ=0;answ+=f(a,c);temp=0;for(i=1;in;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;jm;j+)temp+=f(a,c+2*j*k);temp*=2;answ+=temp;temp=0;for(j=1;jm;j+)for(i=1;in;i+)temp+=f(a+2*i*h,c+2*j*k);temp*

29、=4;answ+=temp;temp=0;for(j=1;jm;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;jm;j+)temp+=f(b,c+2*j*k);temp*=2;answ+=temp;temp=0;for(j=1;j=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;in;i+)temp+=f(a+2*i*h,c+(2*j-1)*k);temp*=8;answ+=

30、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-1)*k);temp*=4;answ+=temp;answ+=f(a,d);temp=0;for(i=1;in;i+)temp+=f(a+2*i*h,d);temp*=2;answ+=temp;temp=0;for(i=1;ierror);coutanswis:answ;coutnDividedintom/2partsn;retu

31、rn;程序的輸出結果為:Resultis:0.33652Dividedinto64parts即在x,y方向上各二分6次。本題公式較長,形式較為復雜,但是并不需要太多編程技巧,只需細心即可。隨著二分的繼續,計算的結果越來越趨向準確值。本題在二分6次后,經檢驗誤差符合精度要求。文檔來源為:從網絡收集整理.word版本可編輯.歡迎下載支持.文檔來源為:從網絡收集整理.word版本可編輯.歡迎下載支持.文檔來源為:從網絡收集整理.word版本可編輯.歡迎下載支持.習題621(上機題)常微分方程初值問題數值解(1)編制rk4方法的通用程序;(2)編制AB4方法的通用程序(由RK4提供初值);(3)編制A

32、B4-AM4預測校正方法的通用程序(由RK4提供初值);(4)編制帶改進的AB4-AM4預測校正方法的通用程序(由RK4提供初值);(5)對于初值問題取步長h=0.1,應用(1)(4)中的四種方法進行計算,并將計算結果和精確解y(x)二3/(1+x3)作比較;(6)通過本上機題,你能得到哪些結論?解:程序為:#include#include#include#includeofstreamoutfile(data.txt);此處定義函數f(x,y)的表達式/用戶可以自己設定所需要求得函數表達式doublef1(doublex,doubley)doublef1;f1=(-1)*x*x*y*y;re

33、turnf1;/此處定義求函數精確解的函數表達式doublef2(doublex)doublef2;f2=3/(1+x*x*x);returnf2;/此處為精確求函數解的通用程序voidaccurate(doublea,doubleb,doubleh)doublex100,accurate100;x0=a;inti=0;outfilevv輸出函數準確值的程序結果:n;doxi=x0+i*h;accuratei=f2(xi);outfileaccuratei=accuratein;i+;while(i(b-a)/h+1);/此處為經典Runge-Kutta公式的通用程序voidRK4(doubl

34、ea,doubleb,doubleh,doublec)inti=0;doublek1,k2,k3,k4;doublex100,y100;y0=c;x0=a;outfilevv輸出經典Runge-Kutta公式的程序結果: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;outfilevvyvvvvivv=vvyivvn;i+;while(iv(b-a)/h+1);此處為4階Adams顯

35、式方法的通用程序voidAB4(doublea,doubleb,doubleh,doublec)doublex100,y100,y1100;doublek1,k2,k3,k4;y0=c;x0=a;outfilevv輸出4階Adams顯式方法的程序結果:n;for(inti=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)/6;intj=3;y10=y0;y11=y1;y12=y2

36、;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;outfiley1j=y1jn;j+;while(jabhc;accurate(a,b,h);RK4(a,b,h,c);AB4(a,b,h,c);結果為:由經典Runge-Kutta公式得出的結果列在下面的表格中,以及精確值y(xj和精確值和數值解的誤差:ixyiy(x)|y(xi)-yi|0033010.12.9972.9971.87138e-00720.22.976192.976193.

37、91665e-00730.32.921132.921137.58342e-00740.42.819552.819551.61101e-00650.52.666662.666673.17735e-00660.62.46712.467115.00551e-00670.72.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

38、-005131.30.9383970.938381.77272e-005141.40.80130.8012821.83754e-005151.50.6857320.6857141.78e-005y13=2.92113y18=1.98495y113=0.93871y14=2.81839y19=1.73704y114=0.801135由AB4方法得出的結果為:Y10=3y11=2.997y12=2.97619y15=2.66467y16=2.4652y17=2.23308y110=1.50219y111=1.28876y112=1.10072y115=0.685335通過本上機題我明白了各種求微分方程的數值方法,經典Runge-Kutta公式,AB4方法以及AB4-AM4預測校正方法求解公式的精度是不同的。其中經典Runge-Kutta公式的精度,四階Adams顯式方法(AB4)具有4階精度。習題八拋物線方程Crank-Nicolson格式題目:1)編制用Crank-Nicolson格式求拋物線方

溫馨提示

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

評論

0/150

提交評論