matlab.docx

上传人:b****5 文档编号:3729961 上传时间:2022-11-25 格式:DOCX 页数:11 大小:79.02KB
下载 相关 举报
matlab.docx_第1页
第1页 / 共11页
matlab.docx_第2页
第2页 / 共11页
matlab.docx_第3页
第3页 / 共11页
matlab.docx_第4页
第4页 / 共11页
matlab.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

matlab.docx

《matlab.docx》由会员分享,可在线阅读,更多相关《matlab.docx(11页珍藏版)》请在冰豆网上搜索。

matlab.docx

matlab

matlab在解线性方程组中的应用

摘要:

随着计算机的高速发展与普及,继理论分析、科学实验之后,在计算机上用数值计算方法进行科学与工程问题的科学计算已经成为科学研究的另一种重要手段。

Matlab作为现代最流行的科学计算软件之一,同于其他高级语言的特点,这种语言的特点是编程效率高、用户使用方便、扩充能力强、交互性好、移植性好、开放性好、语言简单、内涵丰富、绘图功能丰富等。

文中运用了多种求解现行方程组的方法,来分类讨论matlab在解线性方程组中的应用。

关键字:

直接法、迭代法、线性方程组、高斯消去法、高斯列主元素消去法、简单迭代法、雅克比迭代法、高斯——赛德尔迭代法、逐次松弛迭代法

 

现代自然科学计算中,往往有很多的问题都需要运用到解线性方程组的知识,而运用matlab求解线性方程组大致可以分为两类:

直接法和迭代法。

1.直接法.

直接法就是指在没有舍入误差影响的条件下,经过有限次四则运算可以求得线性方程组的准确解的一类方法。

但由于实际计算时舍入误差是不可避免的,所以直接法也只能求得近似解。

1.1高斯消去法

 

其矩阵形式为Ax=b,

这里A为非奇异矩阵,

 

例1:

用消去法求解线性方程组

7x1+8x2+11x3=-3,

5x1+x2-3x3=-4

X1+2x2+3x3=1

解:

第一步,消去线性方程组中的第2、第3个方程中的X1。

将第1个方程乘以-5/7加到第2个方程,第1个方程乘以-1/7加到第3个方程,得到等价的线性方程组

7x1+8x2+11x3=-3

-33/7x2-76/7x3=-13/7

6/7x2+10/7x3=10/7

第二步,消去方程组第三个方程中的x2.将第二个方程乘以6/33加到第三个方程。

得到等价的线性方程组

7x1+8x2+11x3=-3

-33/7x2-76/7x3=-13/7

-6/11x3=12/11

这是一个上三角线性方程组,这种线性方程组容易求解。

依次得到x3x2x1.

即:

X1=-3

X2=5

X3=-2

可以由matlab直接求解例题1.直接求得Ax=b的解。

编写实现顺序高斯消去法的MATLAB函数文件gauss.m如下:

Functionx=guass(a,b,flag)

%线性方程组求解的顺序高斯消去法,a为系数矩阵,b为常数向量

%flag若为0,则显示中间过程,否则不显示,x求解

[na,m]=size(a);n=length(b);ifna~=m,error(‘系数矩阵必须是方阵’);return;end

Ifn~=m,error(‘系数矩阵a的列数必须等于b的行数’);return;end

Ifnargin<3,flag=0;end;

A=[a,b];

Fork=1:

(n-1)

a((k+1):

n,(k+1):

(n+1))=a((k+1):

n,(k+1):

(n+1))-a((k+1):

n,k)/a(k,k)*a(k,k+1):

(n+1));

a((k+1):

n,k)=zeros(n-k,1);

ifflag==0,a,end

end

x=zeros(n,1);x(n)=a(n,n+1)/a(n,n);

fork=n-1:

*-1:

1

x(k,:

)=(a(k,n+1)-a(k(k+1):

n)*x((k+1):

n))/a(k,k);

end

用上述MATLABm文件来求解例题1.

formatlong;a=[7811;51-3;123];b=[-3;-4;1]

X=guass(a,b)

1.2高斯列主元素消去法

 

雅可比迭代法

假设线性方程组Ax=b的雅可比迭代法的分量计算公式为

 

 

雅可比迭代的矩阵形式

A=D+L+U

 

(迭代法收敛的充分条件)如果迭代法x(k+1)=Bx(k)+f的迭代矩阵B的某一种范数‖B‖<1则

(1)对任意初始向量x(0),迭代法收敛;

(2)迭代误差满足

 

求解如下方程组

=

实现求解线性方程组的雅可比迭代法的MATLAB函数文件jacobim如下。

function[x,k]=jacobi(a,b)

%求解线性方程组的jacobi迭代法,a为系数矩阵,b为常向量

%e为精度要求(默认为1e-5),m为迭代次数上限(默认200)

n=length(b);m=200;e=1e-6;x0=zeros(n,1);

k=0;x=x0;x0=x+2*e;d=diag(diag(a));1=-tril(a,-1);u=triu(a,1);

whilenorm(x0-x,inf)>e&k

x=inv(d)*(l+u)*x+inv(d)*b;k,disp(x'),end;

ifk==m,error('失败或已达迭代次数上限');end

输入

>>formatlong;a=[7-1-3;-582;249];b=[1;2;3];

[x,k]=jacobi(a,b)

解得

k=

1

0.1428571428571430.2500000000000000.333333333333333

k=

2

0.3214285714285710.2559523809523810.190476190476190

k=

3

0.2610544217687070.4032738095238100.148148148148148

k=

4

0.2639597505668930.3761219765684050.096088435374150

k=

5

0.2377696118129790.3909527352607710.107510288065844

k=

6

0.2447833713511860.3717284353666510.106738870592329

k=

7

0.2417064353062340.3763048894464090.113724390647892

k=

8

0.2453540087700120.3726354244044230.112374174622433

k=

9

0.2442511354673890.3752527118256490.113194476093587

k=

10

0.2449765914437730.3743583406437210.112276320195847

k=

11

0.2444553287473230.3750412896033960.112512606059730

k=

12

0.2446541582546550.3746564289521450.112324909343530

k=

13

0.2445187367118190.3748276215732770.112451774186901

k=

14

0.2445975634477120.3747112668981620.112405782253695

k=

15

0.2445612305227490.3747720315913960.112439978390214

k=

16

0.2445845666802910.3747407744791650.112421045843213

k=

17

0.2445719874298290.3747600927143790.112429752080306

k=

18

0.2445784784221850.3747500541235670.112423961586981

k=

19

0.2445745626977870.3747555586171210.112426980740151

k=

20

0.2445766429767960.3747523565010790.112425404459549

k=

21

0.2445755099828180.3747540507456100.112426365338010

k=

22

0.2445761638228060.3747531024047590.112425864116880

x=

0.244576163822806

0.374753102404759

0.112425864116880

k=

22

>>

 

高斯-赛德尔迭代法

高斯-赛德尔迭代法,简称G-S迭代法,就是对新算出的分量马上加以应用,其格式为

 

G-S迭代法的一个明显优点是,在计算机运算是只需一组工作单元,以便存放近似解。

可以说G-S迭代法是雅可比迭代发的一种加速方法。

现求如下线性方程组

 

实现求解线性方程组的G-S迭代法的MATLAB函数文件Seguass.m如下。

function[x,k]=Segauss(a,b,x0,e,m)

%求解线性方程组的Guass-Seidel迭代法,a为系数矩阵,b为常量

%e为代数精度要求(默认1e-5),m为迭代次数上限(默认200)

n=length(b);ifnargin<5,m=200;end;

ifnargin<4,e=1e-5;end;ifnargin<3,x0=zeros(n,1);end;

k=0;x=x0;x0=x+2*e;al=tril(a);ial=inv(al);

whilenorm(x0-x,inf)>e&k

ifk==m,error('失败或已达迭代次数上限');end

在MATLAB命令窗口求解

输入

>>formatlong;a=[31;12];b=[2;1];x0=[0;0];e=1e-5;m=200;

>>[x,k]=Segauss(a,b,x0,e,m)

解得

0.6666666666666670.166********6667

0.611111*********0.194444444444444

0.6018518518518520.199********4074

0.6003086419753090.199********2346

0.6000514403292180.199********5391

0.6000085733882030.199********5898

0.6000014288980340.199********0983

x=

0.600001428898034

0.199********0983

k=

7

>>

 

逐次超松弛迭代法简称SOR方法,是G-S方法的加速方法,是解决大型稀疏线性方程组的有效方法之一。

 

用SOR方法求解线性方程组

=

实现求解方程组的逐次迭代法的MATLAB函数文件SOR.m如下。

function[x,k]=SOR(a,b,om,x0,e,m)

%求解线性方程组的逐次超松弛迭代法,a为系数矩阵,b为常向量

%om为松弛因子,e为精度要求(默认1e-5),m为迭代次数上限(默认200)

n=length(b);ifnargin<6,m=200;end;ifnargin<5,e=1e-5;end;

ifnargin<4,x0=zeros(n,1);end;ifnargin<3,om=1.5;end;

k=0;x=x0;x0=x+2*e;l=tril(a,-1);u=triu(a,1);

whilenorm(x0-x,inf)>e&k

n,

x1(i)=(b(i)-l(i,1:

i-1)*x(1:

i-1,1)-u(i,i+1:

u)*x0(i+1:

n,1))/a(i,i);

x(i)=(1-om)*x0(i)+om*x1(i);end;disp(x'),end;

ifk==m,error('失败或已达迭代次数上限');end

用SOR方法求解线性方程组

=

formatlong;a=[-4111;1-411;11-41;111-4];b=[1;1;1;1];

om=1.3;x0=[0;0;0;0];e=1e-5;m=200;[x,k]=SOR{a,b,om,x0,e,m}

得到解x=(-1,-1,-1,-1).

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

当前位置:首页 > 小学教育 > 语文

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

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