1、计算方法综合实践1应用自己熟悉的算法语言编写程序,使之尽可能具有通用性。2上机前充分准备,复习有关算法,写出计算步骤,反复检查,调试程序。(注:在练习本上写,不上交)3完成计算后写出实验报告,容包括:算法步骤叙述,变量说明,程序清单,输出计算结果,结构分析和小结等。(注:具体题目具体分析,并不是所有的题目的实验报告都包含上述容!)4独立完成,如有雷同,一律判为零分!5上机期间不允许做其他任何与课程设计无关的事情,否则被发现一次扣10分,被发现三次判为不及格!非特殊情况,不能请假。旷课3个半天及以上者,直接判为不及格。一、基本技能训练1、误差分析实验 1.2 误差传播与算法稳定性实验目的:体会稳
2、定性在选择算法中的地位。误差扩的算法是不稳定的,是我们所不期望的;误差衰减的算法是稳定的,是我们努力寻求的,这是贯穿本课程的目标。问题提出:考虑一个简单的由积分定义的序列显然。当时,而对于时,利用分部积分易得另一方面,我们有实验容:由以上递推关系,我们可得到计算序列的两种方法。(I)(II)syms n In5 In6 In7;In5=vpa(exp(-1),5);In6=vpa(exp(-1),6);In7=vpa(exp(-1),7);fprintf(%.5f %.6f %.7fn,eval(In5),eval(In6),eval(In7);for n=2:10 In5=vpa(1-n*I
3、n5),5); In6=vpa(1-n*In6),6); In7=vpa(1-n*In7),7); fprintf(%.5f %.6f %.7fn,eval(In5),eval(In6),eval(In7);end五位 六位 七位0.36788 0.367879 0.36787940.26424 0.264241 0.26424110.20728 0.207277 0.20727660.17089 0.170893 0.17089340.14553 0.145533 0.14553290.12680 0.126802 0.12680240.11238 0.112384 0.11238350.1
4、0093 0.100932 0.10093200.09161 0.091612 0.09161230.08388 0.083877 0.0838771syms nEn;En5=vpa(0,5);En6=vpa(0,6);En7=vpa(0,7);fprintf(%.5f %.6f %.7fn,eval(En5),eval(En6),eval(En7);for n=10:-1:2 En5=vpa(1-En5)/n),5); En6=vpa(1-En6)/n),6); En7=vpa(1-En7)/n),7); fprintf(%.5f %.6f %.7fn,eval(En5),eval(En6)
5、,eval(En7);end五位 六位 七位0.00000 0.000000 0.00000000.10000 0.100000 0.10000000.10000 0.100000 0.10000000.11250 0.112500 0.11250000.12679 0.126786 0.12678570.14554 0.145536 0.14553570.17089 0.170893 0.17089290.20728 0.207277 0.20727680.26424 0.264241 0.26424110.36788 0.367879 0.3678795(1)由所得数据可以了解,两种算法随
6、着n的增大,误差越来越大,而第二种算法随着n的减小,数据越来越精确,且三种有效数字结果大致相同,所以第二种更精确。(2)算法一E1的误差e1,由于En=1-n*En-1,n=2,3,4.,通过推算可得误差=,n越大,其误差就越大,那么最后算出的结果是e1的n!倍;算法二的误差,由于,推倒可得误差=,比缩小了(N-n)!倍,则n减少,所以就越小。所以算法一越往后算,一步步的误差会使误差越大,而算法二由于是从后面递推回来,其误差会被缩小。所以算法二更优。(3)算法一中,n增大,误差增大,算法二中,n减小,误差减小。所以当某一步发生误差 后随着n变大,算法一的误差越来越大,而算法二由于是往回推,所以
7、误差变小。(4) 通过以上可一推出,算法一随着n变大,容易使误差越来越大,而算法二会使误差变小,所以算法二更加稳定。2、求解非线性方程3、插值实验目的:掌握Lagrange插值法和Newton插值法问题提出:,已知的函数值表如下x00.10.20.30.40.50000.53980.57930.61790.7554用插值法求和的近似值。实验容:(1)分别用Lagrange插值法和Newton插值法编程求解;(2)求出插值多项式系数,对比计算结果。拉格朗日差值function yh=lagrange(x,y,xh)ticn = length(x);m = length(xh);x = x(:);
8、y = y(:);xh = xh(:);yh = zeros(m,1); c1 = ones(1,n-1);c2 = ones(m,1);for i=1:n, xp = x(1:i-1 i+1:n); yh = yh + y(i) * prod(xh*c1-c2*xp)./(c2*(x(i)*c1-xp),2);endtoc x=0 0.1 0.2 0.3 0.4;y=0.5000 0.5398 0.5793 0.6179 0.7554;xh=0.13 0.36;lagrange(x,y,xh)时间已过 0.026678 秒。ans = 0.5537 0.6780多项式为(5*xh - 1)*
9、(5*xh)/2 - 1)*(10*xh - 1)*(10*xh)/3 - 1)/2 + (5793*xh*(5*xh - 2)*(10*xh - 1)*(10*xh - 3)/2000 - (6179*xh*(5*xh - 1/2)*(10*xh - 2)*(10*xh - 4)/3000 + (3777*xh*(5*xh - 1)*(10*xh - 3)*(10*xh)/3 - 1/3)/2000 - (2699*xh*(5*xh - 3/2)*(10*xh - 2)*(10*xh)/3 - 4/3)/500作图 x0=0 0.1 0.2 0.3 0.4;y0=0.5000 0.5398
10、0.5793 0.6179 0.7554;xh=0:0.01:0.4;y=lagrange(x0,y0,xh);时间已过 0.000158 秒。 plot(xh,y);hold on;牛顿差值function f=Newton(x,y,x0,x1)ticsyms t;if(length(x)=length(y) n=length(x); c(1:n)=0.0;else disp(x和y的维数不相等!);return;endf=y(1);y1=0;l =1;for(i=1:n-1)for(j=i+1:n) y1(j)=(y(j)-y(i)/(x(j)-x(i);end c(i)=y1(i+1);
11、 l=l*(t-x(i); f=f+c(i)*l; y=y1;endf=simplify(f);g=subs(f,t,x0)g1=subs(f,t,x1)A=zeros(n,n-1);A=y,A;for j=2:nfor i=j:n A(i,j)=(A(i,j-1)-A(i-1,j-1)/(x(i)-x(i+1-j);endenddisp(差商表为);disp(A);toc x0=0 0.1 0.2 0.3 0.4;y0=0.5000 0.5398 0.5793 0.6179 0.7554;Newton(x0,y0,0.13,0.36)g =9228481/0000000g1 =91741/0
12、0000差商表为 1.0e+04 * 0 0 0 0 0 0.0000 0.0004 0 0 0 -0.0000 -0.0004 -0.0041 0 0 -0.0000 -0.0001 0.0016 0.0190 0 0.0042 0.0419 0.2101 0.6948 1.6896时间已过 0.368255 秒。ans =(251*t4)/6 - (97*t3)/ + (501*t2)/00 + (7*t)/00 + 1/2作图 t=0:0.01:0.4; f=; f=(251.*t.4)./6.-(97.*t.3)./.+ (501.*t.2)./00.+(7.*t)./00.+ 1/2
13、; plot(t,f);hold on;两种方法作图曲线为拉格朗日插值法时间复杂度为O(n),牛顿插值法时间复杂度为O(n2),实际上拉格朗日算法计算时间为 0.000158 , 牛顿算法计算时间 0.368255 。说明拉格朗日算法时间复杂度低。4、数值积分实验目的:掌握Romberg积分法实验容:用Romberg积分法计算下列定积分:function R,y=Romberg(a,b,n)k=1;while 1 T=zeros(k+1,k+1); T(1,1)=1/2*(b-a)*(f(a)+f(b); for i=1:k h=(b-a)/2i; s=0; for j=1:2(i-1) s=
14、s+f(a+(2*j-1)*h); end T(i+1,1)=T(i,1)/2+h*s; end for j=1:k c=1/(4j-1); for m=j:k T(m+1,j+1)=T(m+1,j)+c*(T(m+1,j)-T(m,j); end end if abs(T(k,k)-T(k+1,k+1)10(-5) x1=x0-f(x0)/g(x0); y=abs(x1-x0); x0=x1; i=i+1;endE=vpa(x1)结果:E =32.83(3)通过调节轨道偏心率 e 查看运算收敛情况;e 0.001 1 1.8 2.2 10E 32.00055 32.99991 33.5355
15、9 30.88381 31.35097导 0.99916 1.01318 1.93911 -0.89582 -8.97892 可以看出,e在01之间,收敛;在11.8之间,发散;在1.82.2左右,收敛;2.2之后,发散.2、(日照时间分布)已知某地区在不同月份的平均日照时间的观测数据如下表所示月份123456789101112日照/(h/月)80.967.267.150.532.033.635.646.852.362.064.171.2试分析日照时间的变化规律。x=1:1:12;y=80.9 67.2 67.1 50.5 32.0 33.6 36.6 46.8 52.3 62.0 64.1
16、71.2; x1=1:0.01:12; y1=interp1(x,y,x1); y2=interp1(x,y,x1,spline);plot(x,y,go,x1,y1,r-,x1,y2,b)其中红线是分段插值得到的,因此为折线,绿色是三次样条曲线,o 处是插值节点。从图中可以看出,日照时间从一月开始减少至5月,之后又开始增加至12月。(水道测量问题)水深数据如下表所示,设船的吃水深度为1.5m,问在的区域,哪些地方船只避免进入,画船只避免进入的区域。x129.0140.0108.588.0185.5195.5105.5y7.5141.528.0147.022.5137.585.5z1.222.
17、441.832.441.832.442.44x157.5107.577.081.0162.0162.0117.5y-6.5-81.53.056.5-66.584-38.5z2.742.742.442.442.741.222.74x=129.0 140.0 108.5 88.0 185.5 195.5 105.5 157.5 107.5 77.0 81.0 162.0 162.0 117.5;y=7.5 141.5 28.0 147.0 22.5 137.5 85.5 -6.5 -81.5 3.0 56.5 -66.5 84 -38.5;z=-1.22 2.44 1.83 2.44 1.83 2
18、.44 2.44 2.74 2.74 2.44 2.44 2.74 1.22 2.74;x1=linspace(min(x),max(x),40); y1=linspace(min(y),max(y),40);Xi,Yi=meshgrid(x1,y1);Xi,Yi,Zi=griddata(x,y,z,Xi,Yi,cubic);mesh(Xi,Yi,Zi);xlabel(X);ylabel(Y);zlabel(Z);figure;c,h=contour(Xi,Yi,Zi,-1.2:-0.1:-2.8);clabel(c,h);xlabel(X);ylabel(Y);三、本课程设计的心得体会(50
19、0字左右)通过这次计算方法的课程设计,我比过去得到了更多的收获。不仅仅是知识的学习,更明白了巩固旧知识的重要性,明白了什么是温故而知新。也懂得了人际关系的重要性,保持好的人际关系,遇到问题,别人才乐于伸出援手。在试验的进行中,我们使用matlab对问题进行求解。刚开始的时候,使用matlab解决此类问题有一些难度,包括如何操作,具体算法编排都不是很了解,但是通过互相探讨,查找资料,渐渐的掌握了一些技巧,能够解决一些基础问题。同时我们也明白了maatlab的强大,它对数学数据和图形的处理能力是c比不上的。在本次实验中,我的计算方法知识得到了很好的巩固与更新。在不断的出错,不断的查找,不断的求索与修改之中,过去知识中的漏洞与迷茫渐渐不复存在,也明白了自己掌握的东西还是太少,太浅薄,需要努力寻找新的东西。而寻找东西的能力恰恰也在本次实验中得到了培养。由于一次次的求解失误,只能努力的寻找解决方法,书本,网络,同学,这些都在本次试验中运用到。课程设计已经结束,但是我收获了软件操作知识,数学知识,以及查找资料等能力,这些都是我对专业,对课程有了一个更加深入的了解。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1