数值课分程析设计专业班级:信息与计算科学09-1班姓名:陈育伟学号:20096361实验一1.1水手、猴子和椰子问题:五个水手带了一只猴子来到南太平洋的一个荒岛上,发现那里有一大堆椰子。由于旅途的颠簸,大家都很疲惫,很快就入睡了。第一个水手醒来后,把椰子平分成五堆,将多余的一只给了猴子,他私藏了一堆后便又去睡了。第二、第三、第四、第五个水手也陆续起来,和第一个水手一样,把椰子分成五堆,恰多一只猴子,私藏一堆,再去入睡,天亮以后,大家把余下的椰子重新等分成五堆,每人分一堆,正好余一只再给猴子,试问原先共有几只椰子?试分析椰子数目的变化规律,利用逆向递推的方法求解这一问题(15621)。【问题分析】首先分析问题的解答方法,应该采用逆推的方式解决问题。每个水手起来的椰子数量等于前一个水手醒来时椰子数量少一的五分之四。最后每个水手得到的椰子数量会等于最后一堆椰子少一的五分之一。根据这个逆推,由于椰子的数量是整数,所以利用循环语句知道整数的解答为止。【程序实现】n=input(’inputn:’);forx=1:np=5*x+1;fork=1:5p=5*p/4+1;endifp==fix(p),break,endenddisp([x,p])运行这段程序后,屏幕出现要求从键盘输入x数据的信息inputn,输入1200后,MATLAB计算出合适的x和p0的值为102315621【结果分析】要使得最初的椰子数p0为整数,必须取(x+1)为45(=1024)的倍数,一种简单的处理可取x=1023。1.2设,105nnxIdxx(1)从0I尽可能精确的近似值出发,利用递推公式:115(1,2,20)nnIInn计算机从1I到20I的近似值;(2)从30I较粗糙的估计值出发,用递推公式:111(30,29,,3,2)55nnIInn计算从1I到20I的近似值;(3)分析所得结果的可靠性以及出现这种现象的原因【算法分析】symsxn;int(1/(x+5),0,1)anslog(2)+log(3)-log(5)eval(ans)ans=0.1823Nowweuse115(1,2,20)nnIInntocomputeInwherenrangfrom1to20.s=0.1823forn=1:20s=-5*s+1/n;disp(s)ends=0.18230.08850.05750.04580.02080.0958-0.31251.7054-8.401842.1200-210.50021.0526e+003-5.2629e+0032.6314e+004-1.3157e+0056.5786e+005-3.2893e+0061.6447e+007-8.2233e+0074.1116e+008-2.0558e+009(2)首先计算I(30)的近似值symsxn;int(x^30/(x+5),0,1)//所得结果为ans=931322574615478515625*log(2)+931322574615478515625*log(3)-931322574615478515625*log(5)-79095966183067699902965545527073/465817912560eval(ans)0//即I(30)≈0s=0;forn=30:-1:2s=-s/5+1/5*n;disp(s)ends=064.60004.68004.46404.30724.13863.97233.80553.63893.47223.30563.13892.97222.80562.63892.47222.30562.13891.97221.80561.63891.47221.30561.13890.97220.80560.63890.47220.3056【结果分析】第一小题当中首先算出较为精确的I0,之后经过代入的方法计算出I(20),结果是比较准确的。但是第二小题当中先是算出必是很精确的I(30),本来所得误差比第一步就稍微大一点了,然后再用这个误差稍微大的I(30)回代计算I(20)——I(1),而从I(30)算到I(20)的时候误差这时已经够大了,采用这个误差更大的结果去计算我们想要的值,当然误差大得惊人啦,显然比第一种误差大得多。所以我们使用第一种方法得到的结果较接近准确值。实验二2.1用高斯消元法的消元过程作矩阵分解。设20231812315A消元过程可将矩阵A化为上三角矩阵U,试求出消元过程所用的乘数21m、31m、31m并以如下格式构造下三角矩阵L和上三角矩阵U(1)(1)212223(2)313233120231,1LmUaamma验证:矩阵A可以分解为L和U的乘积,即A=LU。【算法分析】(1)TheprocessofGaussianeliminationA=[20,2,3;1,8,1;2,-3,15];B(1)=[0,0,0;-1,-2/20,-3/20;0,0,0];C(1)=A+B(1)得到结果为:C(1)=20.00002.00003.000007.90000.85002.0000-3.000015.0000B(2)=[0,0,0;0,0,0;-20/10,-2/10,-3/10];C(2)=C(1)+B(2)得到结果为:C(2)=20.00002.00003.000007.90000.85000-3.200014.7000B(3)=[0,0,0;0,0,0;0,0.32,0.85*3.2/7.9];C(3)=B(3)+C(2)得到结果为:C(3)=20.00002.00003.000007.90000.85000015.0443SoU=20.00002.00003.000007.90000.85000015.0443AndfromtheGaussioneliminationwehavethatL=1001/20101/10-3.2/7.91验证:L=[1,0,0;0.05,1,0;0.1,-0.405063,1];U=[20,2,3;0,7.9,0.85;0,0,15.0443];A*Bans=20.00002.00003.00001.00008.00001.00002.0000-2.999514.9998所以LU=10020.00002.00003.00001/201007.90000.85001/10-3.2/7.910015.0443L*U≈20231812-315【结果分析】因为在运算过程中遇到除不尽的分数采用的是四舍五入的方法来记录数据,所以所得结果是一个近似值,但是结果非常的接近准确值,所以说这种方法是正确的。2.2用矩阵分解方法求上题中A的逆矩阵。记1231000,1,0001bbb分别求解方程组123,,AXbAXbAXb由于三个方程组系数矩阵相同,可以将分解后的矩阵重复使用。对第一个方程组,由于A=LU,所以先求解下三角方程组1bLY,再求解上三角方程组UXY,则可得逆矩阵的第一列列向量;类似可解第二、第三方程组,得逆矩阵的第二列列向量的第三列列向量。由三个列向量拼装可得逆矩阵1A。【程序实现】A=[2023;181;2-315];b1=[1;0;0];b2=[0;1;0];b3=[0;0;1];[L,U]=lu(A);Y=inv(L)*b1;a1=inv(U)*Y;Y=inv(L)*b2;a2=inv(U)*Y;Y=inv(L)*b3;a3=inv(U)*Y;a1=0.0517-0.0055-0.0080a2=-0.01640.12370.0269a3=-0.0093-0.00720.0665【结果分析】所以A的逆矩阵是0.0517-0.0164-0.0093-0.00550.1237-0.0072-0.00800.02690.0665同时,a1、a2、a3分别是三个方程组的解。实验三3.1用泰勒级数的有限项逼近正弦函数0132353()sin,[0,](),[0,/2]()/6,[0,/2]()/6/120,[0,/2]yxxxyxxxyxxxxyxxxxx00.511.522.5300.250.50.7511.251.5用计算机绘出上面四个函数的图形。【算法分析】(1)y1=x,x∈[0,pi/2]则算法如下:x=0:.1:pi/2;y1=sin(x);y2=x;plot(x,y1,x,y2)得到的图形如右图:(2)y₀(x)=sinx,x∈[0,π];则y(x)≈x-x³/3!具体算法如下:x=0:.1:pi;y1=sin(x);y2=x-x.^3/6;plot(x,y1,x,y2)得到的图形如右图:(3)y3=x-x^3/6+x^5/120,x∈[0,pi/2]具体算法如下:x=0:.1:pi/2;y1=sin(x);y2=x-x.^3/6+x.^5/120;plot(x,y1,x,y2)得到的图形如右图:【结果分析】函数采用taloy展开项来逼近原函数,依次采用一阶、二阶、三阶的泰勒公式,显然有限项越多,逼近效果越好,从图形就可以很明显的看出来了。3.3追赶曲线的计算机模拟问题描述:欧洲文艺复兴时期的著名人物达·芬奇曾经提出一个有趣的“狼追兔子”问题,当一只兔子正在它的洞穴南面60码处觅食时,一只饿狼出现在兔子正东的100码处。兔子急忙奔向自己的洞穴,狼立即以快于兔子一倍的速度紧追兔子不放。兔子一旦回到洞穴便逃脱厄,问狼是否会追赶上兔子?这一问题的研究方法可以推广到如鱼雷追击潜艇、地对空导弹击飞机等问题上去。在对真实系统做实验时,可能时间太长、费用太高、危险太大、甚至很难进行。计算机模拟是用计算机模仿实物系统,对系统的结构和行为进行动态演示,以评价或预测系统的行为效果。根据模拟对象的不同特点,分为确定性模拟和随机性模拟两大类。模拟通常所用的是时间步长法,即按照时间流逝的顺序一步一步对所研究的系统进行动态演示,以提取所00.511.500.511.500.511.522.533.5-2-1.5-1-0.500.51需要的数据。问题分析:首先计算狼的初始位置到兔子洞穴的直线距离:2210060116.6190D由于狼奔跑的速度是兔子速度的两倍,兔子跑60码的时间狼可以跑120码。如果狼沿直线奔向兔窝,应该是可以追上兔子的。但是,有人推导出狼在追赶兔子过程中的运动曲线为31221200()10303yxxx根据曲线方程,当0x时,200/3y。也就是说,在没有兔窝的情况下兔子一直往北跑,在跑到大约66码处将被狼追上。由此可知,在有兔窝时狼是追赶不上兔子的。用计算机模拟的方法也可以得到同样的结论。取时间步长为1s,随时间步长的增加,考虑这一系统中的各个元素(狼和兔子)所处的位置变化规律,用计算机作出模拟。最后,根据第60s时狼所在的位置的坐标,判断狼是否能追上兔子。问题思考与实验:(1)设兔子奔跑的速度为01m/s,则狼运动的速度为102。建立平面直角坐标系,若当ktt时刻,兔子位于点0(0,)kkQt处,狼位于点(,)kkkPxy处。试根据kP,kQ的坐标确定一个单位向量ke描述狼在1[,]kktt时段内的运动方向。(2)根据狼的运动方向和速度推导(,)kkkPxy到111(,)kkkPxy的坐标的具体表达式;(3)用计算机绘制追赶曲线的图形(包括静态和动态的图形)。【问题求解】由于P点的运动方向始终指向Q,设在t=tk时刻的位置为Pk(xk,yk),则P点的运动方向可以由下面的单位向量表示Ek⃗⃗⃗⃗=PkQk⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗|PkQk⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗|=(0−xk√(0−xk)2+(tk−yk)2,tk−yk√(0−xk)2+(tk−yk)2)P点的速度是2m/s,取时间步长为∆t,设在t=tk+1时刻,P点