数值分析课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学院:数学学院
姓名:王敏
班级:数学与应用数学一班学号:20096269
时间:2011/6/18
实验一(2题)
1.1 水手、猴子和椰子问题:五个水手带了一只猴子来到南太平洋的一个荒岛
上,发现那里有一大堆椰子。由于旅途的颠簸,大家都很疲惫,很快就入睡了。第一个水手醒来后,把椰子平分成五堆,将多余的一只给了猴子,他私藏了一堆后便又去睡了。第二、第三、第四、第五个水手也陆续起来,和第一个水手一样,把椰子分成五堆,恰多一只猴子,私藏一堆,再去入睡,天亮以后,大家把余下的椰子重新等分成五堆,每人分一堆,正好余一只再给猴子,试问原先共有几只椰子?
试分析椰子数目的变化规律,利用逆向递推的方法求解这一问题(15621)。
解:首先分析椰子数目的变化规律,设最初的椰子数为p
,即第一个水手所处
理之前的椰子数,用p 1、p 2、p 3、p 4、p 5 分别表示五个水手对椰子动了手脚以
后剩余的椰子数目,则根据问题有
14(1)(0,1,2,3,4)
5
k k p p k +=
-=
再用x 表示最后每个水手平分得到的椰子数,于是有
51(1)
5
x p =
-
所以
551p x =+
利用逆向递推的方法,有
151,(4,3,2,1,0)
4
k k p p k +=
+=
有了逆向递推关系式,求解这一问题似乎很简单,但由于椰子数为一正整数,用任意的x 作为初值递推出的p 0数据不一定是合适的。 这里用 for 循环语句结合 break 语句来寻找合适的 x 和 p 0 ,对任意的 x 递推计算出 p 0 ,当计算结果为正整数时,结果正确,否则选取另外的 x 再次重新递推计算,直到计算出的结果 p 0 为正整数为止。
程序如下 :
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])
运行这段程序后,屏幕出现要求从键盘输入 x 数据的信息input n ,输入1023后,MATLAB 计算出合适的 x 和 p 0 的值。 运行结果如下: input :n 1023 n =
1023
1023 15621
1.2 设,10
5n
n
x
I
dx x
=
+⎰
(1)从0I 尽可能精确的近似值出发,利用递推公式:
115(1,2,20)
n n I I n n
-=-+
=
计算机从1I 到20I 的近似值;
(2)从30I 较粗糙的估计值出发,用递推公式:
111(30,29,,3,2)55n n I I n n
-=-
+
=
计算从1I 到20I 的近似值;
(3)分析所得结果的可靠性以及出现这种现象的原因。
解:(1)递推公式程序如下:
function dtgs(n) syms x i I ; f=1/(5+x); I=int(f,x,0,1);
for i=1:n
I=-5*I+1/i;
vpa(I)
end
end
在MATLAB命令窗口输入:dtgs(20)
运行结果为:
ans =
0.088392216030226868941409874227427 ans =
0.058038919848865655292950628862866 ans =
0.043138734089005056868580189019004 ans =
0.034306329554974715657099054904979 ans =
0.028468352225126421714504725475105 ans =
0.024324905541034558094143039291144 ans =
0.021232615151970066672141946401424 ans =
0.018836924240149666639290267992878 ans =
0.016926489910362777914659771146719 ans =
0.015367550448186110426701144266407 ans =
0.014071338668160356957403369577056 ans =
0.012976639992531548546316485448045 ans =
0.012039876960419180345340649682855 ans =
0.011229186626475526844725323014428 ans =
0.010520733534289032443040051594081 ans =
0.0098963323285548377847997420264414 ans =
0.0093418677689905169583542310372102 ans =
0.00884621671060297076378440027414 ans =
0.0084004953943535672337095771302562 ans =
0.0079975230282321638314521117637798 (2)程序为:
function dts2(n)
syms x i I;
f=x^30/(5+x);
I=int(f,x,0,1);
for i=n:-1:1
I=-1/5*I+1/(5*i);
vpa(I)
end
end
在MATLAB命令窗口输入:dtgs2(30)
运行的结果为
ans =
0.0055857400736385308149005088362848 ans =
0.0057794037094102248716779050494163 ans =
0.0059869764009750978827951756622988 ans =
0.0062100121272123878308468036954157 ans =
0.0064503052668652147415239650216708 ans =
0.0067099389466269570516947040698534 ans =
0.0069913455440079419229941995105531 ans =
0.0072973830651114550936620341586536 ans =
0.0076314324778867998903584895694758 ans =
0.0079975230282321638314521085326055 ans =
0.0084004953943535672337095779380497 ans =
0.0088462167106029707637844000721916 ans =
0.0093418677689905169583542310876973 ans =
0.0098963323285548377847997420201305