基于matlab平台的三种迭代法求解矩阵方程

2020-11-16 17:20:03下载本文作者:会员上传
简介:写写帮文库小编为你整理了这篇《基于matlab平台的三种迭代法求解矩阵方程》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《基于matlab平台的三种迭代法求解矩阵方程》。

数值分析第二次作业

学院:电子工程学院

基于matlab平台的三种迭代法求解矩阵方程组

求解系数矩阵由16阶Hilbert方程组构成的线性方程组的解,其中右端项为[2877/851,3491/1431,816/409,2035/1187,2155/1423,538/395,1587/1279,573/502,947/895,1669/1691,1589/1717,414/475,337/409,905/1158,1272/1711,173/244].要求:1)Gauss_Sedel迭代法;

2)最速下降法;

3)共轭梯度法;

4)将结果进行分析对比。

解:根据题目要求,编写了对应算法的matlab程序,求解结果如下:(求解精度为10e-4,最大迭代次数1000)

1、方程的解:如下图1所示

图1

三种方法求解的结果对比

图2

Gause_Sedel算法收敛特性

图3

最速下降法收敛特性

图3

共轭梯度法收敛特性

从图中可以看到,在相同的最大迭代次数和预设求解精度条件下,共轭梯度算法仅需要4次迭代便可求出方程组的解,耗时0.000454秒,而且求出解的精度最高;Gauss_Sedel方法需要465次迭代,耗时0.006779秒,求解精度最差;最速下降法需要398次迭代,耗时0.007595秒,求解精度与共轭梯度算法差不多,因此两者求出的解也几乎相同。从中可以得出结论,共轭梯度算法无论从求解精度还是求解速度上都优于其他两种,最速下降法在求解精度上几乎与共轭梯度算法持平,但求解速度更慢。Gauss_Sedel方法在求解精度和速度两方面都最差。

具体的解为:

Gauss_Sedel迭代法:

(共需465次迭代,求解精度达到9.97e-5)

X=[0.***

1.01431732497804

1.05286123930011

0.***

0.93***38

0.***

1.00661848511341

1.03799789809258

1.05***4

1.062***

1.04857676431223

1.02856199041113

1.01999170162638

0.97***15

0.***

0.***].最速下降法:

(共需398次迭代,求解精度达到9.94e-5)

X=[0.***

1.0***00

0.***

0.***

0.***

1.00378022225329

1.0***78

1.01928337905816

1.02085909665194

1.01930314197028

1.01444777381651

1.00704058989297

0.***

0.***

0.***

0.***].共轭梯度法:

(共需4次迭代,求解精度达到3.98e-5)

X=[

0.***

1.02707840189049

0.***

0.***

0.986***7

1.00128902564234

1.0***14

1.02047386502293

1.02300905060565

1.02163015083975

1.01678089454399

1.00920310863874

0.***

0.***

0.***

0.***].Matlab程序

主程序:

clc;clear;

%%

本程序用于计算第二次数值分析作业,关于希尔伯特矩阵方程的解,用三种方法,分析并比较,也可推广至任意n维的矩阵方程

%%

A=hilb(16);

%生成希尔伯特系数矩阵

b=[2877/851;3491/1431;816/409;2035/1187;2155/1423;538/395;1587/1279;573/502;947/895;1669/1691;1589/1717;414/475;337/409;905/1158;1272/1711;173/244];

%右端向量

M=1000;

%最大迭代次数

err=1.0e-4;

%求解精度

[x,n,xx,cc,jingdu]=yakebi_diedai(A,b,err,M);

%

雅克比算法求解

tic;

[x1,n1,xx1,cc1,jingdu1]=gauss_seidel(A,b,err,M);

%

gauss_seidel算法求解

toc;

tic;

[x2,n2,xx2,jingdu2]=zuisuxiajiangfa(A,b,err,M);

%

最速下降法求解

toc;

tic;

[x3,flag,jingdu3,n3]=bicg(A,b,err);

%

matlab内置双共轭梯度算法求解

toc;

tic;

[x4,xx4,n4,jingdu4]=con_grad(A,b,err,M);

%

教材共轭梯度算法求解

toc;

%%

计算相应结果,用于作图

%%

num=[1:16]';

jie=[num,x1,x2,x4];

%

三者的解对比

%

三者的收敛情况对比

num1=[1:n1]';

fit1=[num1,jingdu1'];

num2=[1:n2]';

fit2=[num2,jingdu2'];

num4=[1:n4]';

fit4=[num4,jingdu4'];

子函数1(Gause_Sedel算法):

function

[x,n,xx,cc,jingdu]

=

gauss_seidel(A,b,err,M)

%

利用迭代方法求解矩阵方程

这里是高斯赛尔得迭代方法

%

A

为系数矩阵

b

为右端向量

err为精度大小

返回求解所得向量x及迭代次数

%

M

为最大迭代次数

cc

迭代矩阵普半径

jingdu

求解过程的精度

n

所需迭代次数

xx

存储求解过程中每次迭代产生的解

for

ii=1:length(b)

if

A(ii,ii)==0

x='error';

break;

end

end

D=diag(diag(A));

L=-tril(A,-1);

U=-triu(A,1);

B=(D-L)\U;

cc=vrho(B);

%迭代矩阵普半径

FG=(D-L)\b;

x0=zeros(length(b),1);

x=B*x0+FG;

k=0;

xx(:,1)=x;

while

norm(A*x-b)>err

x0=x;

x=B*x0+FG;

k=k+1;

xx(:,k+1)=x;

if

k>=M

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

break;

end

n=k;

jingdu(k)=norm(A*x-b);

end

end

子函数2(最速下降算法):

function

[x,n,xx,jingdu]=zuisuxiajiangfa(A,b,eps,M)

%

利用迭代方法求解矩阵方程

这里是最速下降迭代方法

%

A

为系数矩阵

b

为右端向量

err为精度大小

返回求解所得向量x及迭代次数

%

%

M

为最大迭代次数

jingdu

求解过程的精度

n

所需迭代次数

xx

存储求解过程中每次迭代产生的解

x0=zeros(length(b),1);

r0=b-A*x0;

t0=r0'*r0/(r0'*A*r0);

x=x0+t0*r0;

r=b-A*x;

xx(:,1)=x;

k=0;

while

norm(r)>eps

r=r;

x=x;

t=r'*r/(r'*A*r);

x=x+t*r;

r=b-A*x;

k=k+1;

xx(:,k+1)=x;

if

k>=M

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

break;

end

n=k;

jingdu(k)=norm(r);

end

end

子函31(共轭梯度法):

function

[x,xx,n,jingdu]=con_grad(A,b,eps,M)

%

利用迭代方法求解矩阵方程

这里是共轭梯度迭代方法

%

A

为系数矩阵

b

为右端向量

err为精度大小

返回求解所得向量x及迭代次数

%

M

为最大迭代次数

jingdu

求解过程的精度

n

所需迭代次数

xx

存储求解过程中每次迭代产生的解

x0=zeros(length(b),1);

r0=b-A*x0;

p0=r0;

%

t0=r0'*r0/(r0'*A*r0);

%

x=x0+t0*r0;

%

r=b-A*x;

%

xx(:,1)=x;

k=0;

x=x0;

r=r0;

p=p0;

while

norm(r)>eps

x=x;

r=r;

p=p;

afa=r'*r/(p'*A*p);

x1=x+afa*p;

r1=r-afa*A*p;

beta=r1'*r1/(r'*r);

p1=r1+beta*p;

x=x1;

r=r1;

p=p1;

k=k+1;

xx(:,k)=x;

if

k>=M

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

break;

end

n=k;

jingdu(k)=norm(r);

end

end

下载基于matlab平台的三种迭代法求解矩阵方程word格式文档
下载基于matlab平台的三种迭代法求解矩阵方程.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    企业管理咨询方程谁来求解?

    企业管理咨询方程谁来求解? 中小民营企业所面临的生存压力最大,竞争更加激烈,市场环境更加残酷,沈阳众森企业管理咨询公司在实践中遇到了民营企业的各样问题,有资金问题、战略问......

    MATLAB实验二 矩阵基本运算(一)答案

    实验一 矩阵基本运算(一) (1)设A和B是两个同维同大小的矩阵,问: 1)A*B和A.*B的值是否相等? A23441543 B3536754A=[2 3 4;4 1 5;3 6 7]; B=[4 3 1;3 5 2;5 4 9]; A*B, A.*B ans = 3......

    基于MATLAB数字图像处理平台设计

    基于MATLAB 数字图像处理平台设计 1 摘要 数字图像处理技术在各个行业得到广泛的应用,其交互式的图形界面是操作者方便使用这些技术的途径。本文主要介绍了基于MATLAB的图形......

    非线性方程牛顿迭代法与斯特芬森迭代法的研究与比较

    非线性方程牛顿迭代法与斯特芬森迭代法的研究与比较 申林坚 (南昌航空大学 测试与光电工程学院 江西 南昌 330063) 摘要:本文针对一个具体的非线性方程3x2ex0进行研究,首先作出......

    LU分解法、列主元高斯法、Jacobi迭代法、Gauss-Seidel法的原理及Matlab程序

    一、实验目的及题目 1.1 实验目的: (1)学会用高斯列主元消去法,LU分解法,Jacobi迭代法和Gauss-Seidel迭代法解线性方程组。 (2)学会用Matlab编写各种方法求解线性方程组的程序。 1.......

    课题_实验六迭代(一)——方程求解mathmatic数学实验报告王文翰实验6

    实验六迭代(一)——方程求解mathmatic数学实验报告王文翰实验6 2010级数学云亭班数学综合实验报告——迭代(方程求解、分形、混沌、几何形状的构造) 实验一:迭代(一)——方程求解......

    初始负载均衡架设平台LVS的三种机制

    在Linux下设置集群是通过Linux virtual severr来完成的,当然,负载平衡的建设前提也是在此之上的。那么,我们想要学会其中的设置过程,首先要了解它的基本构成原理,那么现在我们要......