数值分析课程设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档