资源描述:
《线性方程组数值解法总结.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、好久没来论坛,刚刚发现以前的帖子现在那么火很欣慰,谢谢大家支持!今天趁着不想做其他事情,把线性方程组的数值解法总结下,有不足的地方希望大神指教!数学建模中也会用到线性方程组的解法,你会发现上10个的方程手动解得话把你累个半死,而且不一定有结果,直接用matlab的函数,可以,关键是你不理解用着你安心吗?你怎么知道解得对不对?我打算开个长久帖子,直到讲完为止!这是第一讲,如有纰漏请多多直接,大家一起交流!线性方程组解法有两大类:直接法和迭代法直接法是解精确解,这里主要讲一下Gauss消去法,目前求解中小型线性
2、方程组(阶数不超过1000),它是常用的方法,一般用于系数矩阵稠密,而有没有特殊结构的线性方程组。首先,有三角形方程组的解法引入Gauss消去法,下三角方程组用前代法求解,这个很简单,就是通过第一个解第二个,然后一直这样直到解出最后一个未知数,代码如下:前代法:function[b]=qiandai_method(L,b)n=size(L,1);%n矩阵L的行数forj=1:n-1%前代法求解结果存放在b中b(j)=b(j)/L(j,j);b(j+1:n)=b(j+1:n)-b(j)*L(j+1:n,j);
3、endb(n)=b(n)/L(n,n);上三角方程组用回代法,和前面一样就是从下面开始解x,代码:后代法:function[y]=houdai_method(U,y)n=size(U,1);%n矩阵L的行数forj=n:-1:2%后代法求解结果存放在y中y(j)=y(j)/U(j,j);y(1:j-1)=y(1:j-1)-y(j)*U(1:j-1,j);endy(1)=y(1)/U(1,1);Gauss消去的前提就是这两个算法:具体思想是把任何一个线性方程组的系数矩阵A,分解为一个上三角和一个下三角的乘积,
4、即A=LU,其中L为下三角,U为上三角。那么具体怎么做呢?有高斯变换,什么是高斯变换?由于时间有限我不可能去输入公式,所以我用最平白的话把它描述出来。你先想一下怎么把一个矩阵的某一列的从第j个分量后全部变0?高斯变换就是通过每次一个矩阵Li把A的第i列对角线元素以下的都变为0,最后把这么多Li一次左乘起来就是一个矩阵L’=L(n-1)L(n-2)…L2L1,而L’A=U,那么L=L’的转置,这样就得到了A得分解。我们要求Ax=bA=LU因此可以利用前代法先求Ly=b,得到yUx=y回代法求解x,这样就可以得
5、到线性方程组的解。高斯消去:function[b]=Gauss(A,b)n=size(A,1);fork=1:n-1A(k+1:n,k)=A(k+1:n,k)/A(k,k);A(k+1:n,k+1:n)=A(k+1:n,k+1:n)-A(k+1:n,k)*A(k,k+1:n);endL=zeros(n,n);%L为下三角矩阵U=zeros(n,n);%U为上三角矩阵fori=1:n;%求解L,为A的对角下半部分L(i+1:n,i)=A(i+1:n,i);endU=A-L;L=L+eye(n);%将L的对角位
6、置设为1if(rank(L)7、
8、rank(U)9、后代法无法调用)');endn=size(b);y=ones(n);y=qiandai_method(L,b);x=houdai_method(U,y);给一个测试案例:functiontest1A=[136892;253163;361285;268938;589323;358172];b=[2;-3;2;55;16;-6];b=Gauss(A,b)但是注意这个解法并不
10、是完美的,如果A的顺序主子式不是全为非奇异是不能得到精确解,而且误差非常大,所以下面会讲到选主元三角分解。我今天就讲到这里,请继续关注第二讲!谢谢这些算法要熟练能随时写出来或者背默出来,当然是理解的基础上.