Matlab的实际应用设计(经典).doc
课
程
设
计
学院: 数学学院
学号:
姓名: 黄星奕
辅导老师: 陈晓红 殷明
题目一二三四五六七八总具体题目1.1
1.2
1.3
2.1
2.33.1
3.2
3.34.1
4.2
4.35.1
5.2
5.3
6.1
6.2
7.4
7.58.1
8.420题实验一
1.1 水手、猴子和椰子问题
问题描述
1.1 水手、猴子和椰子问题:五个水手带了一只猴子来到南太平洋的一个荒岛上,发现那里有一大堆椰子。由于旅途的颠簸,大家都很疲惫,很快就入睡了。第一个水手醒来后,把椰子平分成五堆,将多余的一只给了猴子,他私藏了一堆后便又去睡了。第二、第三、第四、第五个水手也陆续起来,和第一个水手一样,把椰子分成五堆,恰多一只猴子,私藏一堆,再去入睡,天亮以后,大家把余下的椰子重新等分成五堆,每人分一堆,正好余一只再给猴子,试问原先共有几只椰子?
二、思考与实验
试分析椰子数目的变化规律,利用逆向递推的方法求解这一问题。
三、 问题分析
用递推算法。首先分析椰子数目的变化规律,设最初的椰子数为p 0,即第一个水手所处理之前的椰子数,用p 1、p 2、p 3、p4、p 5 分别表示五个水手对椰子动了手脚以后剩余的椰子数目,则根据问题有
所以
p5 = 5x +1
利用逆向递推的方法,有
但由于椰子数为一正整数,用任意的x作为初值递推出的p0数据不一定是合适的。 在实验中可以用 for 循环语句结合 break 语句来寻找合适的 x 和 p0 ,对任意的 x 递推计算出 p0 ,当计算结果为正整数时,结果正确,否则选取另外的?x 再次重新递推计算,直到计算出的结果 p0 为正整数为止。
四、源程序
n=input('input n:');
for x=1:n
p=5*x+1;
for k=1:5
p=5*p/4+1;
end
if p==fix(p)
break;
end
end
disp([x,p]);
五、实验结果
六、结果分析
从理论上分析,由于
所以
要使得最初的椰子数p0为整数,必须取 (x +1) 为 4 5( =1024)的倍数,一种简单的处理可取 x = 1023。
1.2
一、问题描述
1.2 设,
(1)从尽可能精确的近似值出发,利用递推公式:
计算机从到的近似值;
(2)从较粗糙的估计值出发,用递推公式:
计算从到的近似值;
(3)分析所得结果的可靠性以及出现这种现象的原因。
二、问题分析
有种方法可以尽可能地精确的计算的值根据积分计算得=ln 1.2=0.1823,然后可以编程求解到的近似值。
、源程序及运行结果
(1) fun=inline('1./(5+x)','x')
z=quad(fun,0,1)
for n=1:20
z=-5*z+1/n
end
z =0.0188
z =0.0169
z =0.0155
z =0.0135
z =0.0156
z =-0.0011
z =0.0770
z =-0.3186
z =1.6554
z =-8.2179
z =41.1453z =-205.6737
z =1.0284e+003(省略前7项)
(2)fun=inline('(x.^30)./(5+x)','x')
z=quad(fun,0,1)
for n=30:-1:2
z=-0.2*z+1/(5*n)
end
z =0.0130
z =0.0141
z =0.0154
z =0.0169
z =0.0188
z =0.0212
z =0.0243
z =0.0285
z =0.0343
z =0.0431
z =0.0580
z =0.0884
(限于篇幅省略前18项)四、结果分析
第二种算法较为可靠,原因是迭代时系数较小,第一种方法虽然较精确,但
后面的迭代系数绝对值为5,将误差逐步放大,所以最后结果反而不精确了。
1.3 绘制Koch分形曲线
一、问题描述
1.3 绘制Koch分形曲线:从一条直线段开始,将线段中间的三分之一部分用一个等边三角形的另两条边代替,形成具有5个结点的新的图形(图1);在新的图形中,又将图中每一直线段中间的三分之一部分都用一个等边三角形的另两条边代替,再次形成新的图形(图2),这时,图形中共有17个结点。这种迭代继续进行下去可以形成Koch分形曲线。在迭代过程中,图形中的结点将越来越多,而曲线最终显示细节的多少取决于所进行的迭代次数和显示系统的分辨率。Koch分形曲线的绘制与算法