数学分析课程设计.docx
《数学分析课程设计.docx》由会员分享,可在线阅读,更多相关《数学分析课程设计.docx(40页珍藏版)》请在冰豆网上搜索。
《课程设计---数值分析》
共—39—页第—39—页
实验一1.1 水手、猴子和椰子问题:
五个水手带了一只猴子来到南太平洋的一个荒岛上,发现那里有一大堆椰子。
由于旅途的颠簸,大家都很疲惫,很快就入睡了。
第一个水手醒来后,把椰子平分成五堆,将多余的一只给了猴子,他私藏了一堆后便又去睡了。
第二、第三、第四、第五个水手也陆续起来,和第一个水手一样,把椰子分成五堆,恰多一只猴子,私藏一堆,再去入睡,天亮以后,大家把余下的椰子重新等分成五堆,每人分一堆,正好余一只再给猴子,试问原先共有几只椰子?
试分析椰子数目的变化规律,利用逆向递推的方法求解这一问题。
解:
问题分析:
假设第n个人分椰子前,有An个椰子,即第n-1醒来面对的椰子数为An-1,第n个水手醒来后,把椰子平分成五堆,将多余的一只给了猴子,他私藏了一堆后便又去睡了则易得:
第—1—页
An*5+1=An-14
(1)
设最后一堆为a个,则第五个人分完后余下A(6)=5*a+1;由
(1)式可得出A
(1),A
(2)...A(5);
由于椰子数目为整数,有a=1开始,建立循环,可以由matlab求得最小的a=1023,五次数量变化如下:
Matlab窗口输入如下:
>>a=1;
A=zeros(1,6);
end
break;
whilea>0,
A(6)=5*a+1;
ifA(6)~=fix(A(6)),
end
a=a+1;
end
i=6;
a=a+1;continue;
>>aa=
1023
whilei>=2,
A(i-1)=A(i)*5/4+1;
ifA(i-1)~=fix(A(i-1)),break;
endi=i-1;
end
if(A
(1)~=0)&&(A
(1)==fix(A
(1))),
>>A
(1)
ans15621
>>plot(A,’k’)
1 e-nx
1.2
当n=0,1,2,L,100时,选择稳定的算法计算积分
In=ò0e-x+10dx
解:
用蒙特卡罗方法求解该问题,在(0,1)上随机选取一定数量的点,以落在积分区域内的频率近似所求积分,matlab程序如下:
mtj.m
functiona=mtj(n)
f=@(x)exp(-n*x)/(exp(-x)+10);N=10000;
r=0;
end
ifA
(2)<=f(A
(1))
r=r+1;
end
fori=1:
N,
A=rand(1,2);
a=r/N;
1.3 绘制静态和动态的Koch分形曲线
问题描述:
从一条直线段开始,将线段中间的三分之一部分用一个等边三角形的另两条边代替,形成具有
5个结点的新的图形;在新的图形中,又将图中每一直线段中间的三分之一部分都用一个等边三角形的另两条边代替,再次形成新的图形,这时,图形中共有17个结点。
这种迭代继续进行下去可以形成Koch分形曲线。
在迭代过程中,图形中的结点将越来越多,而曲线最终显示细节的多少取决于所进行的迭代次数和显示系统的分辨率。
Koch分形曲线的绘制与算法设计和计算机实现相关。
图1.1Koch曲线的形成过程
解:
A.绘制静态Koch分形曲线,代码如下:
A=[cos(pi/6)-sin(pi/6);sin(pi/6)cos(pi/6)];p=[010;00;];%第一行是横坐标第二行是纵坐标n=2;
fork=1:
6,m=1;
fori=1:
n-1,d=p(:
i+1)-p(:
i);
p1(:
m+1)=p(:
i)+d/3;
p1(:
m+3)=p(:
i)+d*2/3;
p1(:
m+2)=p(:
i)+A*d/sqrt(3);
p1(:
m:
4:
m+4)=p(:
i:
i+1);
m=m+5;end
n=length(p1);p=p1;
clearp1;endx=p(1,:
);
y=p(2,:
);
plot(x,y,'k');
axis([010010]);
matalb得到图形如下:
B.动态的Koch分形曲线,在静态曲线的基础上得到动态分形曲线的代码和截图如下:
第—39—页
A=[cos(pi/6)-sin(pi/6);sin(pi/6)cos(pi/6)];p=[010;00;];
n=2;
fork=1:
6,m=1;
fori=1:
n-1,d=p(:
i+1)-p(:
i);
p1(:
m+1)=p(:
i)+d/3;
p1(:
m+3)=p(:
i)+d*2/3;
p1(:
m+2)=p(:
i)+A*d/sqrt(3);
p1(:
m:
4:
m+4)=p(:
i:
i+1);
m=m+5;end
n=length(p1);p=p1;
clearp1;x=p(1,:
);
y=p(2,:
);
plot(x,y,'k');
axis([010010]);
pause
(2);end
实验二2.1小行星轨道问题:
一天文学家要确定一颗小行星绕太阳运行的轨道,他在轨道平面内建立以太阳为原点的直角坐标系,在五个不同的对小行星作了五次观察,测得轨道上五个点的坐标数据(单位:
万公里)
如下表所示:
P1
P2
P3
P4
P5
X坐标
53605
58460
62859
66662
68894
Y坐标
6026
11179
16954
23492
68894
由开普勒第一定律知,小行星轨道为一椭圆,椭圆的一般方程可表示为:
1 2 3 4 5
ax2+2axy+ay2+2ax+2ay+1=0
现需要建立椭圆的方程以供研究。
(1)分别将五个点的数据代入椭圆一般方程中,写出五个待定系数满足的等式,整理后写出线性方程组
AX=b
以及方程组的系数矩阵和右端项b;
(2)用MARLAB求低阶方程的指令A\b求出待定系数a1,a2,a3,a4,a5;
(3)分别用直接法、Jacobi迭代法、Gauss-Seidel迭代法求出待定系数a1,a2,a3,a4,a5.
解:
(1)由五个点的坐标(x1,y1)...(x5,y5)代入一般椭圆方程整理可得
ìax2+2axy+ay2+2ax+2ay
=-1
ï11 211 31 41 51
ax2+2axy+ay2+2ax+2ay
=-1
ï12 222 32 42 52
íax2+2axy+ay2+2ax+2ay
=-1
13 233 33 43 53
ïax2+2axy+ay2+2ax+2ay
=-1
ï14 244 34 44 54
ïax2+2axy+ay2+2ax+2ay
=-1
î15 255 35 45 55
代入题目中的数据得
A=[2873496025.0, 646047460.0, 36312676.0,107210.0, 12052.0]
[3417571600.0,1307048680.0, 124970041.0,116920.0, 22358.0]
[3951253881.0,2131422972.0, 287438116.0,125718.0, 33908.0]
[4443822244.0,3132047408.0, 551874064.0,133324.0, 46984.0]
[4746383236.0,9492766472.0,4746383236.0,137788.0,137788.0]b=(-1,-1,-1,-1,-1)’;
(2)用MARLAB求低阶方程的指令A\b得待定系数a1,a2,a3,a4,a5
æ0.000000079170015ö
ç ÷
ç-0.000000872696674÷
为:
(a1,a2,a3,a4,a5)’»ç-0.000002347489573÷*10-4
ç ÷
ç-0.108977537832776÷
ç0.174662645730850÷
è ø
(3)a.直接法:
先将[A,b]用高斯—约当消元法和行主元法求行最简行矩阵
æ1 0 0 0 0 0 ö
ç ÷
ç0 1 0 0 0 0 ÷
ç0 0
ç
1
0
0
0 ÷
÷
ç0 0
0
1
0 -
1/91762÷
ç0 0
0
0
1 1/57253÷
ø
R=
è
æ 0 ö æ 0 ö
ç ÷ ç ÷
ç
(a1,a2,a3,a4,a5)’=ç
0 ÷ ç
0 ÷»ç
0 ÷
0 ÷*10-4
ç ÷ ç ÷
ç-1/91762÷ ç-0.108977572415597÷
ç1/57253÷ ç0.174663336419052÷
Matlab输入如下:
è ø è ø
x=[5360558460628596666268894]';
y=[602611179169542349268894]';
A=[x.^22*x.*yy.^22*x2*y];b=-ones(5,1);
rref([A,b])
b.Jacobi迭代法:
取x(0)=(0,0,0,0,0)’,迭代10次,由matlab求得
12345
(a,a,a,a,a)’=(-0.0004,-0.0012,-0.0077,-23.1573,-86.6738)T
Matlab输入如下:
x=[5360558460628596666268894]';
y=[602611179169542349268894]';
A=[x.^22*x.*yy.^22*x2*y];b=-ones(5,1);X0=zeros(5,1);D=diag(diag(A));
L=tril(A)-D;
U=triu(A)-D;
Bj=-D\(L+U);
fj=D\b;
X1=A\b;k=1;
whilek>0,
X=Bj*X0+fj;X0=X;
if(norm(X-X1,inf)<10^-5)||(k>10)break;
endk=k+1;
end
c.Gauss-Seidel迭代法:
取x(0)=(0,0,0,0,0)’,迭代10次,由matlab求得
æ0.000002111208571ö
ç ÷
ç0.000021