matlab.docx
- 文档编号:3729961
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:11
- 大小:79.02KB
matlab.docx
《matlab.docx》由会员分享,可在线阅读,更多相关《matlab.docx(11页珍藏版)》请在冰豆网上搜索。
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).
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab