数值线性代数课程设计报告.docx

上传人:b****5 文档编号:7195425 上传时间:2023-01-21 格式:DOCX 页数:26 大小:38.48KB
下载 相关 举报
数值线性代数课程设计报告.docx_第1页
第1页 / 共26页
数值线性代数课程设计报告.docx_第2页
第2页 / 共26页
数值线性代数课程设计报告.docx_第3页
第3页 / 共26页
数值线性代数课程设计报告.docx_第4页
第4页 / 共26页
数值线性代数课程设计报告.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

数值线性代数课程设计报告.docx

《数值线性代数课程设计报告.docx》由会员分享,可在线阅读,更多相关《数值线性代数课程设计报告.docx(26页珍藏版)》请在冰豆网上搜索。

数值线性代数课程设计报告.docx

数值线性代数课程设计报告

燕山大学

课程设计

 

题目:

Gauss消去法及其变形方法求解线性方程组

 

学院(系):

年级专业:

学号:

 

学生姓名:

指导教师:

教师职称:

燕山大学课程设计(论文)任务书

院(系):

理学院基层教学单位:

信息与计算科学系

学号

学生姓名

专业(班级)

设计题目

Gauss消去法及其变形方法求解线性方程组

Gauss消去法是一个古老的求解线性方程组的方法,但由于它的改进、变形得到的平方根法和改进的平方根法仍是在计算机上求解系数矩阵为中、低阶稠密矩阵的线性方程组常用的有效方法,本文对这几种方法进行了比较。

用高斯消去法求解n阶线性方程组Ax=b的基本思想是在逐步消元的过程中,把方程组的系数矩阵化为上三角矩阵,从而将原方程组约化为容易求解的等价三角方程组,然后进行回代求解。

1、通过查阅资料,了解课题在实际中的应用;

2、运用所学知识,建立问题的数学模型;

3、利用MATLAB软件进行计算,并给出计算机程序;

4、运用所学知识,对计算结果进行分析;

5、要阅读不少于四篇的相关文献。

1、本课程设计要在一周内完成;

2、报告的正文在4000字左右。

第1-2天:

阅读参考文献,收集资料.

第3-5天:

构建数学模型,编制计算机程序.

第5-6天:

上机运算,调试程序,计算结果分析.

第7天:

撰写报告.

[1]张德丰.MATLAB数值分析与应用[M].北京:

国防工业出版社.2007.1

[2]李庆扬,王能超,易大义.数值分析[M].武汉:

华中科技大学出版社.2006.7

[3]萧树铁.数学实验[M].北京:

高等教育出版社.1990

[4]莱(LayD.C.),刘深泉.数值线性代数及其应用[M].机械工业出版社.2005.8

指导教师签字

基层教学单位主任签字

说明:

此表一式四份,学生、指导教师、基层教学单位、系部各一份。

年月日

燕山大学课程设计评审意见表

指导教师评语:

成绩:

指导教师:

年月日

答辩小组评语:

成绩:

评阅人:

年月日

课程设计总成绩:

答辩小组成员签字:

 

年月日

摘要………………………………………………………………………………2

一、问题的提出………………………………………………………………2

二、数学模型的建立………………………………………………………3

三、计算机程序………………………………………………………………3

四、计算结果及分析………………………………………………………5

五、参考文献…………………………………………………………………20

六、心得体会…………………………………………………………………20

摘要:

  Gauss消去法是求解线性方程组的最基本的方法之一。

实际计算中,线性方程组的系数矩阵常常具有对称正定性,即其各阶顺序主子式及全部特征值均大于零。

矩阵的这一特性使它的三角分解也有更简单的形式,从而导出一些特殊的解法,如平方根法和改进的平方根法。

关键词:

线性方程组,Gauss消去法,平方根法,改进的平方根法,Hilbert矩阵。

一、问题的提出

1、先用你所熟悉的计算机语言将不选主元和列主元Gauss消去法编写成通用程序,然后用你编写的程序求解下面的84阶方程组

最后,将你的计算结果与方程组的精确解进行比较,并就此谈谈你对Gauss消去法的看法。

2、先用你所熟悉的计算机语言将平方根法和改进的平方根法编写成通用程序,然后用你编写的程序求解对称正定方程组

,其中

(1)

随机地选取,系数矩阵为100阶矩阵

(2)系数矩阵为40阶Hilbert矩阵,即系数矩阵

的第

行第

列元素为

,向量

的第

个分量为

3、用1中的程序求解2中的两个方程组并比较所有的计算结果,然后评论各个方法的优劣。

二、数学模型的建立

1、Gauss消去法:

用消去法解方程组的基本思想是用逐次消去未知数的方法把原来方程组Ax=b化为与其等价的三角方程组,而求解三角方程组就容易了。

换句话说,上述过程就是用行的初等变换将原方程组系数矩阵化为简单形式,从而将求解原方程组的问题转化为求解简单方程组的问题。

2、平方根法:

平方根法就是利用对称正定矩阵的三角分解而得到的求解对称正定方程组的一种有效方法。

平方根法递推公式可以证明对于对称正定矩阵A,可以唯一地分解成A=LLT,其中L是非奇异下三角形矩阵。

3、改进的平方根法:

  平方根算法的计算量约为普通三角分解算法的一半,但由于要用到开平方,效率不是很高,所以,便有了为效率而存在的改进版平方根算法。

对A进行LU分解,即A=LU,A对称正定,可得uii>0,则可得A=LDLT分解计算公式,L是对角元素为1的单位下三角矩阵,D为对角矩阵。

三、计算机程序

模型一:

利用Gauss消去法对线性方程组Ax=b进行求解。

用MATLAB建立m文件DelGauss.m,程序如下:

functionx=DelGauss(a,b)

[n,m]=size(a);

nb=length(b);

det=1; 

x=zeros(n,1);

fork=1:

n-1

fori=k+1:

n

ifa(k,k)==0

return

end

m=a(i,k)/a(k,k);

forj=k+1:

n

a(i,j)=a(i,j)-m*a(k,j);

end

b(i)=b(i)-m*b(k);

end

det=det*a(k,k); 

end

det=det*a(n,n);

fork=n:

-1:

1

forj=k+1:

n

b(k)=b(k)-a(k,j)*x(j);

end

x(k)=b(k)/a(k,k);

end

模型二:

利用平方根法对线性方程组Ax=b进行求解。

用MATLAB建立m文件pingfg.m,程序如下:

function[x]=pingfg(A,b)%乔累斯基分解

[n,n]=size(A);

L=zeros(n,n);%实际上不用为L申请空间,使用A即可

L(1,1)=sqrt(A(1,1));

fork=2:

n

L(k,1)=A(k,1)/L(1,1);

end

fork=2:

n-1

L(k,k)=sqrt(A(k,k)-sum(L(k,1:

k-1).^2));

fori=k+1:

n

L(i,k)=(A(i,k)-sum(L(i,1:

k-1).*L(k,1:

k-1)))/L(k,k);

end

end

L(n,n)=sqrt(A(n,n)-sum(L(n,1:

n-1).^2));%解下三角方程组Ly=b

y=zeros(n,1);

fork=1:

n

j=1:

k-1;

y(k)=(b(k)-L(k,j)*y(j))/L(k,k);

end%解上三角方程组L'x=y

x=zeros(n,1);

U=L';

fork=n:

-1:

1

j=k+1:

n;

x(k)=(y(k)-U(k,j)*x(j))/U(k,k);

end

模型三:

利用改进的平方根法对线性方程组Ax=b进行求解。

用MATLAB建立m文件ave.m,程序如下:

function[x]=ave(A,b,n)%用改进平方根法求解Ax=b

L=zeros(n,n);%L为n*n矩阵

D=diag(n,0);%D为n*n的主对角矩阵

S=L*D;

fori=1:

n%L的主对角元素均为1

L(i,i)=1;

end

fori=1:

n

forj=1:

n%验证A是否为对称正定矩阵

if(eig(A)<=0)|(A(i,j)~=A(j,i))%A的特征值小于0或A非对称时,输出wrong

disp('wrong');break;end

end

end

Hilbert矩阵用MATLAB建立m文件Hil.m,程序如下:

functionb=Hil()

fork=1:

40

form=1:

40

s=0;

t=s+1/(k+m-1);

s=t;

end

b(k,1)=s;

end

四、计算结果及分析

问题1:

>>A=ones(1,83);

>>B=6*ones(1,84);

>>C=8*ones(1,83);

>>D=diag(A,1)+diag(B,0)+diag(C,-1);

>>b=[7;15*ones(82,1);14];

>>DelGauss(D,b)

ans=

1.0e+008*

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

0.0000

-0.0000

0.0000

-0.0000

0.0000

-0.0000

0.0000

-0.0000

0.0000

-0.0000

0.0000

-0.0000

0.0000

-0.0001

0.0002

-0.0003

0.0007

-0.0013

0.0026

-0.0052

0.0105

-0.0209

0.0419

-0.0836

0.1665

-0.3303

0.6501

-1.2582

2.3487

-4.0263

5.3684

方程组的精确解为x1=x2=…=x84=1.0000,与Gauss消去法求得的解差距很大,所得结果不够准确,计算简单但其消元过程有时不能进行到底而使求解出现解失真的情况。

问题2:

>>A=ones(1,99);

B=10*ones(1,100);

C=diag(A,1)+diag(B,0)+diag(A,-1);

b=ones(100,1);

pingfg(C,b)

ans=

0.0918

0.0825

0.0834

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0834

0.0825

0.0918

>>A=ones(1,99);

B=10*ones(1,100);

C=diag(A,1)+diag(B,0)+diag(A,-1);

b=ones(100,1);

>>ave(C,b,100)

ans=

0.0918

0.0825

0.0834

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0834

0.0825

0.0918

A=hilb(40);

b=Hil();

pingfg(A,b)

ans=

1.0e+007*

0.0000

-0.0000

0.0001

-0.0019

0.0171

-0.0939

0.3305

-0.7685

1.1892

-1.2077

0.7761

-0.3026

0.0684

0.0135

-0.0220

-0.0450

0.0954

-0.0675

0.0217

-0.0032

-0.0006

0.0013

-0.0009

0.0002

0.0009

-0.0015

0.0009

-0.0006

0.0005

-0.0002

0.0001

-0.0001

0.0000

0.0000

-0.0000

-0.0000

0.0000

-0.0000

-0.0000

0.0000

>>A=hilb(40);

b=Hil();

ave(A,b,40)

ans=

-0.0000

0.0000

-0.0001

0.0010

-0.0088

0.0459

-0.1416

0.2546

-0.2599

0.2041

-0.2812

0.2680

-0.1059

0.5017

-0.7878

-0.1399

0.3692

0.5230

-0.2395

0.0245

-0.4819

-0.2015

0.6467

-0.2634

-0.0293

0.4175

-0.4335

0.4124

-0.4021

-0.1497

0.1580

0.5615

-0.2600

-0.7207

0.3457

0.0995

0.2741

0.2579

-0.7917

1.3333

问题3:

>>A=ones(1,99);

B=10*ones(1,100);

C=diag(A,1)+diag(B,0)+diag(A,-1);

b=ones(100,1);

>>DelGauss(C,b)

ans=

0.0918

0.0825

0.0834

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0833

0.0834

0.0825

0.0918

>>A=hilb(40);

b=Hil();

>>DelGauss(A,b)

ans=

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

Gauss消去法所得的结果与平方根法和改进的平方根法求得的结果差距很大,而且Gauss消去法所得的结果大部分为零,显然平方根法和改进的平方根法求得的结果与方程的精确解比Gauss消去法的更接近,更准确。

但不管是哪一类算法都只能在预定的计算步骤内或给定的精度内得到近似解,有一定的误差。

五、参考文献

[1]张德丰.MATLAB数值分析与应用[M].北京:

国防工业出版社.2007.1

[2]李庆扬,王能超,易大义.数值分析[M].武汉:

华中科技大学出版社.2006.7

[3]萧树铁.数学实验[M].北京:

高等教育出版社.1990

[4]莱(LayD.C.),刘深泉.数值线性代数及其应用[M].机械工业出版社.2005.8

六、心得体会

拿到课程设计时候看起来题目比较简单,但是实际操作时遇到很多困难。

比如程序的编写和运行。

在运行过程中高阶矩阵的matlab输入着实让我们为难,深刻意识到自己掌握知识的局限性。

但是合作的力量让我们找到了解决问题的方法。

这次课程设计一共使用了三个程序:

Gauss消去法的程序、平方根法和改进的平方根法。

虽然都是求解线性方程组的解,但是经过结果分析发现改进的平方根法求得的结果更为精确。

因此,寻找解决问题的最优方法不仅可以保证结果的真实性,还可以提高效率。

与此同时,通过前期资料的查找和阅读,我们小组的成员对于matlab的使用和作用更加熟悉和重视,对数值代数这门科目有了更深层次的理解。

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

当前位置:首页 > 高等教育 > 研究生入学考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1