上机3

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1《计算方法》实验报告三题目:班级:计1402学号:1403140126姓名:应成龙日期:5月18日程序名:一、问题和要求:(1)用步长自动减半的复化梯形公式、复化Simpson公式和复化Cotes公式计算积分112dxex,自己设置不同精度要求,对结果进行比较分析。(2)用步长不自动减半的(即一般的)复化梯形公式、复化Simpson公式和复化Cotes公式计算积分102dxex,自己设置不同精度要求,对结果进行比较分析;与(1)的结果进行比较。(3)用Romberg积分法计算积分102dxex的近似值,自己设置不同精度要求,对结果进行比较分析;与(1)的结果进行比较分析,谈谈你的体会。二、设计总体方案及分析:2.1问题分析第1-1题考查的步长自动减半的复化梯形公式。第1-2题考查的步长自动减的复化Simpson公式。第1-3题考查的是步长自动减半的复化Cotes公式。(不知道有没有理解错题意,就自己设计了步长减半的复化Simpson公式,和复化Cotes公式)第2-1题考查的是步长不自动减半的(即一般的)复化梯形公式。第2-2题考查的是步长不自动减半的(即一般的)复化Simpson公式第2-3题考查的是步长不自动减半的(即一般的)复化Cotes公式。第3题考查的是Romberg积分法。2.2概要设计2.3详细设计(二合一)2第1题,我用书上变步长梯形公式,算出答案跟第2题一样,一直错误,在仔细理解变步长梯形公式后,我发现,变步长就是把h=(b-a)/n,每次n*2,即h每次除2,所以通过循环n每次乘2,即可完成步长减半的目的。然后分别用公式,复化梯形公式11()2()()2niinhfafxfTb复化Simpson公式121101()4()2()()6nniiinihfafxfxfbS复化Cotes公式11110042113014[7()32()12()9032()14()7()]nnnkkkknnkkkkhCfafxfxfxfxfb在第二层循环i中用带入,即可完成所有变步长公式的计算。使用该方法后,计算次数2的n次方递减,所以第一题比第二题计算次数要少很多第2题就直接是复化梯形公式,Simpson公式,Cotes公式的调用,通过两次循环,只不过不用使n每次乘上2,而是n++来完成。其实第2题跟第1题差不多,掌握了方法,就是2重循环。第3题就是把第1-1题的方法直接拿过来用,在这里我把循环次数控制在20次,直接可以得到Tn的值,通过数组存储起来。其实2的20次已经很大了,就完全没有必要担心精度不够的问题。再用doubles(doublex2,doublex1)函数,根据2441nnnTTS计算Sn;用c(doublex2,doublex1)函数,根据222441nnnSSC计算Cn。用r(doublex2,doublex1)函数根据323441nnnCCR计算Rn。2.4调试分析3在这里我把精度所有题目的精度设置为0.000001,可以根据运算结果显示的数目多少看出收敛速度第1-1题我用书上的公式得出的结果,按照积分的常识应该是第2题的所有结果的2倍,但是却跟第2题的结果一样。然后我改也一直没改出来,然后在我深入理解公式的情况下发现,所谓的变步长,就是把h除上2。只需再循环中每次把n*2就行了。然后我按照我的方法的到了正确结果。然后我就把该方法应用到Simpson公式和Cotes公式中得出了变步长的这两个公式,且收敛速度从梯形到Simpson到Cotes递增,完全符合书中的公式的收敛速度。第2题,完全就是书中3个公式的应用。有了第1题的基础很快就能写出来,收敛速度不如第1题,而且结果是第1题答案的1/2,,完全满足。第3题,套用第1-1题的方法,算出Tn,在多编写了几个函数,得出Sn,Cn,Rn,然后得出最终结果,第2个就满足要求了,说明Romberg积分法是所有积分法中收敛最快的,且跟第2题数据大小接近,完全满足答案要求。2.5测试结果第1-1题第1-2题4第1-3题第2-1题5第2-2题6第2-3题第3题三、源程序及注释第1-1题#includeiostream#includeiomanip#includecmath#definec0.000001usingnamespacestd;doublef(doublex){return(1/exp(x*x));}intmain()7{cout步长自动减半的复化梯形公式计算endl;doubles=0;doublea=-1;doubleb=1;intcount=0;for(doublen=1;n1000;n*=2){doubleh=(b-a)/n;doublet2=h/2*(f(a)+f(b));for(doublei=1;i=n-1;i++){t2+=h*f(a+i*h);}count++;coutsetw(10)countsetw(10)t2endl;if(s!=0&&fabs(t2-s)=c)break;s=t2;}}第1-2题#includeiostream#includeiomanip#includecmath#definec0.000001usingnamespacestd;doublef(doublex){return(1/exp(x*x));}intmain(){cout步长自动减半的复化Simpson公式计算endl;doubles=0;doublea=-1;doubleb=1;intcount=0;for(doublen=1;n1000;n*=2){doubleh=(b-a)/n;doublet2=h/6*(f(a)-f(b));for(doublei=1;i=n;i++){t2+=h/6*(4*f(-1+(i-1.0/2)*h)+2*f(-1+i*h));}8count++;coutsetw(10)countsetw(10)t2endl;if(s!=0&&fabs(t2-s)=c)break;s=t2;}}第1-3题#includeiostream#includeiomanip#includecmath#definec0.000001usingnamespacestd;doublef(doublex){return(1/exp(x*x));}intmain(){cout步长自动减半的Cotes公式计算endl;doublea=-1;doubleb=1;doubles=0;intcount=0;for(doublen=1;n100;n*=2){doubleh=(b-a)/n;doublet3=h/90*7*(f(a)+f(b));for(doublei=0;in;i++){t3+=h/90*(32*f(-1+(i+1.0/4)*h)+12*f(-1+(i+1.0/2)*h)+32*f(-1+(i+3.0/4)*h));if(i=1)t3+=h/90*14*f(-1+i*h);}count++;coutsetw(10)countsetw(10)t3endl;if(s!=0&&fabs(t3-s)=c)break;s=t3;}}第2题(3小题合一起了)#includeiostream#includeiomanip9#includecmathusingnamespacestd;doublef(doublex){return(1/exp(x*x));}intmain(){doublec=0.000001;//精度要求doublea=0;doubleb=1;doubles=0;//步长不自动减半的(即一般的)复化梯形公式计算/*cout步长不自动减半的(即一般的)复化梯形公式计算endl;for(doublen=1;n1000;n++){doubleh=(b-a)/n;doublet1=h/2*(f(a)+f(b));for(doublei=1;in;i++){t1+=h*f(a+i*h);}coutsetw(10)n-1setw(10)t1endl;if(s!=0&&fabs(t1-s)=c)break;s=t1;}*///复化Simpson公式计算/*cout步长不自动减半的(即一般的)复化Simpson公式计算endl;s=0;for(doublen=1;n1000;n++){doubleh=(b-a)/n;doublet2=h/6*(f(a)-f(b));for(doublei=1;i=n;i++){t2+=h/6*(4*f((i-1.0/2)*h)+2*f(i*h));}coutsetw(10)n-1setw(10)t2endl;if(s!=0&&fabs(t2-s)=c)break;s=t2;}*/10//复化Cotes公式计算s=0;cout复化Cotes公式计算endl;for(doublen=1;n1000;n++){doubleh=(b-a)/n;doublet3=h/90*7*(f(a)+f(b));for(doublei=0;in;i++){t3+=h/90*(32*f((i+1.0/4)*h)+12*f((i+1.0/2)*h)+32*f((i+3.0/4)*h));if(i=1)t3+=h/90*14*f(i*h);}coutsetw(10)n-1setw(10)t3endl;if(s!=0&&fabs(t3-s)=c)break;s=t3;}}第3题#includeiostream#includeiomanip#includecmath#defineN20usingnamespacestd;doublef(doublex){return(1/exp(x*x));}doubles(doublex2,doublex1){return4.0/3*x2-1.0/3*x1;}doublec(doublex2,doublex1){return16.0/15*x2-1.0/15*x1;}doubler(doublex2,doublex1){return64.0/63*x2-1.0/63*x1;}intmain(){doubleT[N]={0};11doubleS[N]={0};doubleC[N]={0};doubleR[N]={0};doublea=0;doubleb=1;doublez=0.000001;doublet1;intcount=0;intk;for(doublen=1;npow(2,N);n*=2){doubleh=(b-a)/n;doublet2=h/2*(f(a)+f(b));for(doublei=1;i=n-1;i++){t2+=h*f(a+i*h);}T[count++]=t2;}for(k=0;kN-1;k++){S[k]=s(T[k+1],T[k]);}for(k=0;kN-2;k++){C[k]=c(S[k+1],S[k]);}for(k=0;kN-3;k++){R[k]=r(C[k+1],C[k]);coutk+1setw(30)R[k]endl;if(k!=0&&fabs(R[k]-R[k-1])=z)break;}}四、设计总结(程序设计过程中的收获、遇到问题、解决问题过程的思考、程序调试的思考、对数据结构这门课程的思考认识等.对算法的程序的讨论、分析,改进设想,其它经验教训等)12这次上机,每道题的答案我都对比了好久,因为题目一样,不同的方法,所以相同题目答案也是一样的。我还在透彻理解公式之后,自创了变步长的方法。而且收敛速度是变步长公式快于一般复化公式,且Romberg积分法

1 / 12
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功