数值分析课程设计.docx

上传人:b****1 文档编号:996552 上传时间:2023-04-30 格式:DOCX 页数:108 大小:515.76KB
下载 相关 举报
数值分析课程设计.docx_第1页
第1页 / 共108页
数值分析课程设计.docx_第2页
第2页 / 共108页
数值分析课程设计.docx_第3页
第3页 / 共108页
数值分析课程设计.docx_第4页
第4页 / 共108页
数值分析课程设计.docx_第5页
第5页 / 共108页
数值分析课程设计.docx_第6页
第6页 / 共108页
数值分析课程设计.docx_第7页
第7页 / 共108页
数值分析课程设计.docx_第8页
第8页 / 共108页
数值分析课程设计.docx_第9页
第9页 / 共108页
数值分析课程设计.docx_第10页
第10页 / 共108页
数值分析课程设计.docx_第11页
第11页 / 共108页
数值分析课程设计.docx_第12页
第12页 / 共108页
数值分析课程设计.docx_第13页
第13页 / 共108页
数值分析课程设计.docx_第14页
第14页 / 共108页
数值分析课程设计.docx_第15页
第15页 / 共108页
数值分析课程设计.docx_第16页
第16页 / 共108页
数值分析课程设计.docx_第17页
第17页 / 共108页
数值分析课程设计.docx_第18页
第18页 / 共108页
数值分析课程设计.docx_第19页
第19页 / 共108页
数值分析课程设计.docx_第20页
第20页 / 共108页
亲,该文档总共108页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数值分析课程设计.docx

《数值分析课程设计.docx》由会员分享,可在线阅读,更多相关《数值分析课程设计.docx(108页珍藏版)》请在冰点文库上搜索。

数值分析课程设计.docx

数值分析课程设计

数值分析实验指导书

考核标准:

及格:

独立完成12—15题,其中八组实验中每组至少做1题;

中:

独立完成16—23题,其中八组实验中每组至少做1题;

良:

独立完成24—31题,其中八组实验中每组至少做2题;

优:

独立完成32—40题,其中八组实验中每组至少做3题。

结束课程时,抽查上机考核

实验一

1.1水手、猴子和椰子问题:

五个水手带了一只猴子来到南太平洋的一个荒岛上,发现那里有一大堆椰子。

由于旅途的颠簸,大家都很疲惫,很快就入睡了。

第一个水手醒来后,把椰子平分成五堆,将多余的一只给了猴子,他私藏了一堆后便又去睡了。

第二、第三、第四、第五个水手也陆续起来,和第一个水手一样,把椰子分成五堆,恰多一只猴子,私藏一堆,再去入睡,天亮以后,大家把余下的椰子重新等分成五堆,每人分一堆,正好余一只再给猴子,试问原先共有几只椰子?

试分析椰子数目的变化规律,利用逆向递推的方法求解这一问题。

分析:

E0(整数)是最初的总数,Ei(i=1,2,3,4,5)是第i次平分后每堆的椰子数,E6是天亮后最后一次平分的每堆的椰子数,4Ei=5E(i+1)+1,满足的E0最小是1023

解答:

MATLAB程序:

>>n=input('inputn:

');

forx=1:

n

p=5*x+1;

fork=1:

5

p=5*p/4+1;

end

ifp==fix(p)

disp([x,p])

end

end

inputn:

3000

102315621

204731246

1.2当

时,选择稳定的算法计算积分

.

解答:

.,有

所以有递推关系

显然求

时,

的误差的影响被输小了,是稳定算法。

不过要事先估计初值

由于:

时,由上式得

由此可做递归。

MATLAB程序:

I(100)=0.0009368;

fori=100:

-1:

1

I(i-1)=[(1-exp(-i))/i-I(i)]/10;

disp([i-1,I(i-1)]

End

99.000.00090632

98.000.00091947

97.000.00092846

96.000.00093808

95.000.00094786

94.000.00095785

93.000.00096805

92.000.00097846

91.000.00098911

90.000.00099999

1.3绘制静态和动态的Koch分形曲线

问题描述:

从一条直线段开始,将线段中间的三分之一部分用一个等边三角形的另两条边代替,形成具有5个结点的新的图形;在新的图形中,又将图中每一直线段中间的三分之一部分都用一个等边三角形的另两条边代替,再次形成新的图形,这时,图形中共有17个结点。

这种迭代继续进行下去可以形成Koch分形曲线。

在迭代过程中,图形中的结点将越来越多,而曲线最终显示细节的多少取决于所进行的迭代次数和显示系统的分辨率。

Koch分形曲线的绘制与算法设计和计算机实现相关。

图1.1Koch曲线的形成过程

解答:

%绘制Koch曲线的Matlab程序。

clear;closeall;clf;

y=[1,0];t=4;

fork=1:

t

x=y;

n=length(x)-1;

form=0:

n-1;

z=(x(m+2)-x(m+1))/3;

y(4*m+1)=x(m+1);

y(4*m+2)=x(m+1)+z;

y(4*m+3)=y(4*m+2)+z*((1-sqrt(3)*i)/2);

y(4*m+4)=x(m+1)+2*z;

end

y(4*n+1)=x(n+1);

plot(y);

axisequal;

holdon;figure;

End

 

实验二

2.1小行星轨道问题:

一天文学家要确定一颗小行星绕太阳运行的轨道,他在轨道平面内建立以太阳为原点的直角坐标系,在五个不同的对小行星作了五次观察,测得轨道上五个点的坐标数据(单位:

万公里)如下表所示:

P1

P2

P3

P4

P5

X坐标

53605

58460

62859

66662

68894

Y坐标

6026

11179

16954

23492

68894

由开普勒第一定律知,小行星轨道为一椭圆,椭圆的一般方程可表示为:

现需要建立椭圆的方程以供研究。

(1)分别将五个点的数据代入椭圆一般方程中,写出五个待定系数满足的等式,整理后写出线性方程组

以及方程组的系数矩阵和右端项b;

(2)用MARLAB求低阶方程的指令A\b求出待定系数

;

(3)分别用直接法、Jacobi迭代法、Gauss-Seidel迭代法求出待定系数

.

分析:

将每一组的x和y坐标带入可得:

 

解答:

>>A=[

28734960256460474603631267610721012052;

3417571600130704868012497004111692022358;

3951253881213142297228743811612571833908;

4443822244313204740855187406413332446984;

474638323694927664724746383236137788137788

];b=[-1-1-1-1-1]’;

A\b

x=

1.0e+123*

0.0000

0.0001

0.0007

2.0703

7.7487

LU分解法:

>>[L,U]=lu(A);x=U\(L\b)

x=

1.0e+123*

0.0000

0.0001

0.0007

2.0703

7.7487

Jacobi迭代法:

function[x,n]=jacobi(A,b,x0,eps,varargin)

%A:

系数矩阵,b:

常熟向量,x0:

初值,eps:

精度控制,varargin:

迭代步数控制

ifnargin==3

eps=1.0e-6;

M=200;

elseifnargin<3

disp('error');

return;

elseifnargin==5

M=varargin{1};

end

D=diag(diag(A));%求A的对角矩阵

L=-tril(A,-1);%求A得下三角阵

U=-triu(A,1);%求A的上三角阵

B=D\(L+U);

f=D\b;

x=B*x0+f;

n=1;%迭代次数

whilenorm(x-x0)>=eps

x0=x;

x=B*x0+f;

n=n+1;

if(n>=M)

disp('迭代次数太多,可能不收敛!

');

return;

end

end

A=[

53605^22*53605*60266026^22*536052*6026;

58460^22*58460*1117911179^22*584602*11179;

62859^22*62859*1695416954^22*628592*16954;

66662^22*66662*2349223492^22*666622*23492;

68894^22*68894*6889468894^22*688942*68894

];

b=[-1;-1;-1;-1;-1];x0=[0;0;0;0;0];

[x,n]=jacobi(A,b,x0)

迭代次数太多,可能不收敛!

x=

1.0e+123*

0.0000

0.0001

0.0007

2.0703

7.7487

Gauss-Seidel迭代法:

function[x,n]=gauseseidel(A,b,x0,eps,M)

%A:

系数矩阵,b:

常熟向量,x0:

初值,eps:

精度控制,M:

迭代步数控制

ifnargin==3

eps=1.0e-6;

M=200;

elseifnargin<3

disp('error');

return;

elseifnargin==4

M=200;

end

D=diag(diag(A));%求A的对角矩阵

L=-tril(A,-1);%求A得下三角阵

U=-triu(A,1);%求A的上三角阵

G=(D-L)\U;

f=(D-L)\b;

x=G*x0+f;

n=1;%迭代次数

whilenorm(x-x0)>=eps

x0=x;

x=G*x0+f;

n=n+1;

if(n>=M)

disp('迭代次数太多,可能不收敛!

');

return;

end

end

A=[

53605^22*53605*60266026^22*536052*6026;

58460^22*58460*1117911179^22*584602*11179;

62859^22*62859*1695416954^22*628592*16954;

66662^22*66662*2349223492^22*666622*23492;

68894^22*68894*6889468894^22*688942*68894

];

b=[-1;-1;-1;-1;-1];x0=[0;0;0;0;0];

[x,n]=gauseseidel(A,b,x0)

迭代次数太多,可能不收敛!

x=

1.0e+005*

0.0000

0.0000

-0.0000

-0.2442

-2.7716

n=

200

2.2

(1)用Gauss列主元消去法、Gauss按比例列主元消去法、Cholesky分解求解下列线性方程组,并彼此互相验证。

(2)判断用Jacobi迭代法、Gauss-Seidel迭代法、SOR法(分别取

)解下列线性方程组的收敛性.若收敛,再用Jacobi迭代法、Gauss-Seidel迭代法、SOR法(分别取

)分别解线性方程组,并比较各种方法的收敛速度.

(3)用Cholesky分解求解下列线性方程组

(方程组的精确解是

解答:

Gauss列主元消去法:

function[RA,RB,n,x]=GaussLZY(A,b)

B=[Ab];n=length(b);RA=rank(A);

RB=rank(B);zhicha=RB-RA;

ifzhicha>0,

disp('此方程组无解')

return

end

ifRA==RB

ifRA==n

disp('此方程组有唯一解')

x=zeros(n,1);C=zeros(1,n+1);

forp=1:

n-1

[Y,j]=max(abs(B(p:

n,p)));C=B(p,:

);

B(p,:

)=B(j+p-1,:

);B(j+p-1,:

)=C;

fork=p+1:

n

m=B(k,p)/B(p,p);

B(k,p:

n+1)=B(k,p:

n+1)-m*B(p,p:

n+1);

end

end

b=B(1:

n,n+1);A=B(1:

n,1:

n);x(n)=b(n)/A(n,n);

forq=n-1:

-1:

1

x(q)=(b(q)-sum(A(q,q+1:

n)*x(q+1:

n)))/A(q,q);

end

else

disp('此方程组有无穷多解')

end

End

Gauss按比例列主元消去法:

function[RA,RB,n,X]=GaussBLZY(A,b)

B=[Ab];n=length(b);RA=rank(A);

RB=rank(B);zhicha=RB-RA;

ifzhicha>0,

disp('此方程组无解')

return

end

ifRA==RB

ifRA==n

disp('此方程组有唯一解')

X=zeros(n,1);C=zeros(1,n+1);%#ok<*NASGU>

T=0;D=B';s=max(abs(D(1:

n,:

)));

S=s';

forp=1:

n-1

[Y,j]=max((abs(B(p:

n,p)))./S(p:

n));

J=min(j);

C=B(p,:

);B(p,:

)=B(J+p-1,:

);B(J+p-1,:

)=C;

T=S(p);S(p)=S(J+p-1);S(J+p-1)=T;

fork=p+1:

n

m=B(k,p)./B(p,p);

B(k,p:

n+1)=B(k,p:

n+1)-m.*B(p,p:

n+1);

end

end

b=B(1:

n,n+1);A=B(1:

n,1:

n);X(n)=b(n)./A(n,n);

forq=n-1:

-1:

1

X(q)=(b(q)-sum(A(q,q+1:

n)*X(q+1:

n)))/A(q,q);

end

else

disp('此方程组有无穷多解')

end

end

Cholesky分解法:

functionCholesky(A,b)

n=size(A,1);

G=chol(A);

f

(1)=b

(1)/G(1,1);

fori=2:

n;

S1=0;

fork=1:

i-1

S1=S1+G(k,i)*f(k);

end

f(i)=(b(i)-S1)/G(i,i);

end

x(n)=f(n)/G(n,n);

fori=n-1:

-1:

1

S2=0;

fork=1:

n-i

S2=S2+G(i,i+k)*x(i+k);

end

x(i)=(f(i)-S2)/G(i,i);

end

disp(x)

命令窗口~

Gauss列主元消去法

>>A=[1-121;-130-3;209-6;1-3-619];

>>b=[1;3;5;7];

>>[RA,RB,n,x]=GaussLZY(A,b)

此方程组有唯一解

RA=

4

RB=

4

n=

4

x=

-8.00000000000001

0.333333333333332

3.66666666666667

2

Gauss按比例列主元消去法

>>A=[1-121;-130-3;209-6;1-3-619];

>>b=[1;3;5;7];

>>[RA,RB,n,X]=GaussBLZY(A,b)

此方程组有唯一解

RA=

4

RB=

4

n=

4

X=

-8

0.333333333333333

3.66666666666667

2

Cholesky分解

>>A=[1-121;-130-3;209-6;1-3-619];

>>b=[1;3;5;7];

>>Cholesky(A,b)

Columns1through3

-8.000000000000020.3333333333333293.66666666666667

Column4

2

Jacobi迭代法:

functionH=JacobiC(A)

[nn]=size(A);

D=diag(diag(A));I=eye(n,n);E=inv(D);B=I-E*A;

H=eig(B);SRH=norm(H,inf);

ifSRH>=1

disp('发散,谱半径SRH和B的特征值H如下:

')

else

disp('收敛,谱半径SRH和B的特征值H如下:

')

end

SRH

functionJacobi(A,b,X0,P,error,max1)

[nn]=size(A);

X=zeros(n,1);

fork=1:

max1

forj=1:

n

X(j)=(b(j)-A(j,[1:

j-1,j+1:

n])*X0([1:

j-1,j+1:

n]))/A(j,j);

end

X

errX=norm(X-X0,P);

X0=X;X1=A\b;

if(errX

disp('迭代次数k,精确解X1,近似解X分别是:

')

k

X1

X

return

end

end

if(errX>=error)

disp('Jacobi迭代次数已超过最大次数')

end

Gauss-Seidel迭代法:

functionH=GSC(A)

D=diag(diag(A));U=-triu(A,1);L=-tril(A,-1);E=inv(D-L);B=E*U;

H=eig(B);SRH=norm(H,inf);

ifSRH>=1

disp('发散,谱半径SRH和B的特征值H如下:

')

else

disp('收敛,谱半径SRH和B的特征值H如下:

')

end

SRH

functionGS(A,b,X0,P,error,max1)

[nn]=size(A);

X=zeros(n,1);

fork=1:

max1

forj=1:

n

XX=0;

fori=1:

n

ifi

XX=XX+A(j,i)*X(i);

end

ifi>j

XX=XX+A(j,i)*X0(i);

end

end

X(j)=(b(j)-XX)/A(j,j);

end

X

errX=norm(X-X0,P);

X0=X;X1=A\b;

if(errX

disp('迭代次数k,精确解X1,近似解X分别是:

')

k

X1

X

return

end

end

if(errX>=error)

disp('Gauss-Seidel迭代次数已超过最大次数')

end

SOS法:

functionH=SORC(A,w)

D=diag(diag(A));U=-triu(A,1);L=-tril(A,-1);E=inv(D-w*L);

B=E*(w*U+(1-w)*D);

H=eig(B);SRH=norm(H,inf);

ifSRH>=1

disp('发散,谱半径SRH和B的特征值H如下:

')

else

disp('收敛,谱半径SRH和B的特征值H如下:

')

end

SRH

functionSOR(A,b,X0,w,P,error,max1)

[nn]=size(A);

X=zeros(n,1);

fork=1:

max1

forj=1:

n

XX=0;

fori=1:

n

ifi

XX=XX+A(j,i)*X(i);

end

ifi>j

XX=XX+A(j,i)*X0(i);

end

end

X(j)=(1-w)*X0(j)+w*(b(j)-XX)/A(j,j);

end

X

errX=norm(X-X0,P);

X0=X;X1=A\b;

if(errX

disp('迭代次数k,精确解X1,近似解X分别是:

')

k

X1

X

return

end

end

if(errX>=error)

disp('SOR迭代次数已超过最大次数')

end

Jacobi迭代法

>>A=[1-121;-130-3;209-6;1-3-619];

>>H=JacobiC(A)

收敛,谱半径SRH和B的特征值H如下:

SRH=

0.966881024532242

H=

0.966881024532242

0.536020655954138

-0.903317605697383

-0.599584074788997

>>A=[1-121;-130-3;209-6;1-3-619];

>>b=[1;3;5;7];

>>X0=[0;0;0;0];

>>Jacobi(A,b,X0,inf,0.001,1000)

迭代次数k,精确解X1,近似解X分别是:

k=

173

X1=

-8.00000000000002

0.333333333333329

3.66666666666667

2

X=

-7.97095795774273

0.339716804643296

3.65757261775243

1.99649138206938

Gauss-Seidel迭代法

A=[1-121;-130-3;209-6;1-3-619];

>>H=GSC(A)

收敛,谱半径SRH和B的特征值H如下:

SRH=

0.934888367800313

H=

0

0.934888367800313

0.281485901205534

-2.38957160758552e-017

>>A=[1-121;-130-3;209-6;1-3-619];

>>b=[1;3;5;7];

>>X0=[0;0;0;0];

>>GS(A,b,X0,inf,0.001,1000)

迭代次数k,精确解X1,近似解X分别是:

k=

99

X1=

-8.00000000000002

0.333333333333329

3.66666666666667

2

X=

-7.9864386402221

0.336173*********

3.66253302023792

1.99842937222506

SOR法(

>>SORC(A,0.8)

收敛,谱半径SRH和B的特征值H如下:

SRH=

0.956498743812875

ans=

0.956498743812875

0.503328665301619

0.050190208900126

.0662********

>>A=[1-121;-130-3;209-6;1-3-619];

>>b=[1;3;5;7];

>>X0=[0;0;0;0];

>>SOR(A,b,X0,0.8,inf,0.001,1000)

迭代次数k,精确解X1,近似解X分别是:

k=

139

X1=

-8.00000000000002

0.333333333333329

3.66666666666667

2

X=

-7.97865551731761

0.337878096178542

3.66010097132651

1.99749231060481

>>A=[1-121;-130-3;209-6;1-3-619];

>>SORC(A,1.2)

收敛,谱半径SRH和B的特征值H如下:

SRH=

0.901948033909749

ans=

0.901948033909749

0.039

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2