您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 利用MATLAB求线性方程组
《MATLAB语言》课成论文利用MATLAB求线性方程组姓名:郭亚兰学号:12010245331专业:通信工程班级:2010级通信工程一班指导老师:汤全武学院:物电学院完成日期:2011年12月17日利用MATLAB求解线性方程组(郭亚兰120102453312010级通信一班)【摘要】在高等数学及线性代数中涉及许多的数值问题,未知数的求解,微积分,不定积分,线性方程组的求解等对其手工求解都是比较复杂,而MATLAB语言正是处理线性方程组的求解的很好工具。线性代数是数学的一个分支,它的研究对象是向量,向量空间(或称线性空间),线性变换和有限维的线性方程组。因而,线性代数被广泛地应用于抽象代数和泛函分析中;由于科学研究中的非线性模型通常可以被近似为线性模型,使得线性代数被广泛地应用于自然科学和社会科学中。线性代数是数学的一个分支,它的研究对象是向量,向量空间(或称线性空间),线性变换和有限维的线性方程组。因而,线性代数被广泛地应用于抽象代数和泛函分析中;由于科学研究中的非线性模型通常可以被近似为线性模型,使得线性代数被广泛地应用于自然科学和社会科学中。线性代数是讨论矩阵理论、与矩阵结合的有限维向量空间及其线性变换理论的一门学科。【关键字】线性代数MATLAB语言秩矩阵解一、基本概念1、N级行列式A:A等于所有取自不同性不同列的n个元素的积的代数和。2、矩阵B:矩阵的概念是很直观的,可以说是一张表。3、线性无关:一向量组(a1,a2,…,an)不线性相关,既没有不全为零的数k1,k2,………kn使得:k1*a1+k2*a2+………+kn*an=04、秩:向量组的极在线性无关组所含向量的个数成为这个向量组的秩。5、矩阵B的秩:行秩,指矩阵的行向量组的秩;列秩类似。记:R(B)6、一般线性方程组是指形式:ssnssnnnnbaxaxabxaxaxabxaxaxn22112222212111212111x********a二、基本理论三种基本变换:1,用一非零的数乘某一方程;2,把一个方程的倍数加到另一方程;3,互换两个方程的位置。以上称出等变换。消元法首先用初等变换化线性方程组为阶梯形方程组:1,如果剩下的方程当中最后的一个等式等于一非零数,那么方程组无解;否则有解;2,如果阶梯形方程组中方程的个数r等于未知量的个数,那么方程组有唯一的解;3,如果阶梯形方程组中方程的个数r小于未知量的个数,那么方程组就有无穷个解。定理1:线性方程组有解的充要条件为:R(A)=R(A,b)线性方程组解的结构:1:对齐次线性方程组,a:两个解的和还是方程组的解;b:一个解的倍数还是方程组的解。定义:齐次线性方程组的一组解u1,u2,…ui称为齐次线性方程组的一个基础解系,如果:齐次线性方程组的任一解都表成u1,u2,…ui的线性组合,且u1,u2,…ui线性无关。2:对非齐次线性方程组(1)方程组的两个解的差是(2)的解。(2)方程组的一个解与(2)的一个解之和还是(1)的解。定理2如果R0是方程组(1)的一个特解,那么方程组(1)的任一个解R都可以表成;R=R0+V….其中V是(2)的一个解,因此,对方称(1)的任一特解R0,当v取遍它的全部解时,(3)就给出了(1)全部解。三:基本思路线性方程的求解分为两类:一类是方程求唯一解或求特解;一类是方程组求无穷解即通解。(1)判断方程组解的情况。1:当R(A)=R(B)时,有解(R(A)=R(A,b))=n唯一解,R(A)=R(A,b)(n,有无穷解);2:当R(B)+1=R(A,b)时无解。(2)求特解;(3)求通解(无穷解),线性方程组的无穷解=对应齐次方程组的通解+非齐次方程组的一个特解;注:以上针对非齐次线性方程组,对齐次线性方程组,主要使用到(1),(2)步!四、基本方法基本思路将在解题的过程中得到体现。1、(求线性方程组的唯一解或特解),这类问题的求法分为两类:一类主要用于解低阶稠密矩阵——直接法;一类是解大型稀疏矩阵——迭代法。2、利用矩阵除法求线性方程组的特解(或一个解)方程:AX=b,解法:X=A\b,(注意此处’\’不是’/’)(1)求方程组979634226442224321432143214321xxxxxxxxxxxxxxxx命令如下:A=[2,-1,-1,1;1,1,-2,1;4,-6,2,-2;3,6,-9,7];%产生4x4阶系数矩阵b=[2,4,4,9]';%对矩阵进行转置x=A\b%进行左初运算x=NaNInfInf-3.0000曾介绍过利用矩阵求逆来解线性方程组,即其结果于使用左除是相同的。2、利用矩阵的分解求线性方程组矩阵分解是指根据一定的原理用某种运算将一个矩阵分解成若干个矩阵的乘积。常见矩阵分解如,LU,QR和Cholesky分解求方程组的解,这三种分解,再求大型方程组是很有用。其优点是运算速度快,可以节省磁盘空间,节省内存。(1)LU分解又称Gauss消去分解,可把任意方阵分解为下三角矩阵的基本变换形式(行变换)和上三角矩阵的乘积。即A=LU,L为下三角阵,U为上三角阵。则:A*X=b变成L*U*X=b所以X=U\(L\b)这样可以大大提高运算速度。命令[L,U]=lu(A)在matlab中可以编如下通用m文件;在MATLAB建立M文件如下%exp1.mA;b;[L,U]=lu(A);%产生一个三角矩阵A和一个变换形式的下三叫矩阵L(交换行),使之满足A=LUX=U\(L\b)%L右乘b的结果再右乘U得到x的值(2)求方程组6377323521432143214321xxxxxxxxxxxx命令如下:A=[1,1,-1,-1;2,-5,3,2;7,-7,3,1];%产生3x4阶系数矩阵b=[1,3,6]';%对矩阵进行转置[L,U]=lu(A);%产生一个三角矩阵A和一个变换形式的下三叫矩阵L(交换行),使之满足A=LUx=U\(L\b)%L右乘b的结果再右乘U得到x的值x=0.4286-0.428600rank=2,tol=6.7642e-015.采用第二种格式分解,在MATLAB建立M文件如下%exp1.mA;b;[L,U,P]=lu(A);X=U\(L\P*b)(3)求方程组7377323521432143214321xxxxxxxxxxxx命令如下:A=[1,1,-1,-1;2,-5,3,2;7,-7,3,1];%产生3x4阶矩阵b=[1,3,7]';%对矩阵进行转置[L,U,P]=lu(A);%产生一个三角矩阵A和一个下三角阵L以及一个置换矩阵P,使之满足PA=LUx=U\(L\P*b)%x的值x=0.6667-0.333300rank=2,tol=6.7642e-015.(II)Cholesky分解若A为对成正定矩阵,则Cholesky分解可将矩阵A分解成上三角矩阵和其转置的乘积,即:A=R’*R其中R为上三角矩阵。方程A*X=b变成R’*R*X=b所以X=R\(R’\b)在MATLAB中建立M文件如下%exp2.mA;b;[R’,R]=chol(A);%产生一个上三角矩阵R,使R’R=AX=R\(R’\b)%x的值(4)求方程组5.032130432143214321xxxxxxxxxxxx命令如下:A=[1,-1,-1,1;1,-1,1,-3;1,-1,-2,3];%产生3x4阶的矩阵b=[0,1,-0.5]';%对矩阵进行转置[R'R]=chol(A);%产生一个上三角矩阵R,使R'R=Ax=R\(R'\b)%x的值???Errorusing==cholMatrixmustbesquare.命令执行时,此格式将不出现错误信息。当A为对称正定时,则p=0;否则p为一个正整数。如果X未满秩矩阵,则R为一个阶数为q=p-1的上三角阵,且满足R’R=A(1:q,1:q)。(3)QR分解对于任何长方矩阵A,都可以进行QR分解,其中Q为正交矩阵,R为上三角矩阵的初等变换形式,即:A=QR方程A*X=b变形成QRX=b所以X=R\(Q\b)上例中[Q,R]=qr(A)%产生一个正交矩阵Q和一个上三角矩阵R,使之A=QRX=R\(Q\B)%x的值在MATLAB中建立M文件如下%exp3.mA;b;[Q,R]=qr(A);X=R\(Q\b)(5)求方程组831110x2322421321321xxxxxxx命令如下:A=[4,2,-1;3,-1,2;11,3,0];%产生3x3阶的矩阵b=[2,10,8]';%对矩阵进行转置[Q,R]=qr(A);%产生一个正交矩阵Q和一个上三角矩阵R,使之满足A=QRx=R\(Q\b)%x的值x=1.0e+015*1.3238-4.8539-4.4126RCOND=4.594136e-017.除了用直接方法求解线性方程组的解之外,还可以用迭代法求解。迭代法适合求解大型系数矩阵的方程组。它主要包括Jacobi迭代法,Gauss-Serdel迭代法,超松驰迭代法和两步迭代法。在此只讨论Jacobi与Gauss-Serdel迭代法。1’Gauseidel迭代法用迭代法求解下列线性方程组,迭代初值为0,迭代精度为10e-6。Gauseidel.m函数文件:function[y,n]=gauseidel(A,b,x0,eps)ifnargin==3eps=1.0e-6;elseifnargin3error%错误return%结束该函数的执行EndD=diag(diag(A));%求A的对角矩阵L=-tril(A,-1);%求A的下三角阵U=-triu(A,1);%求A的上三角阵G=(D-L)\U;f=(D-L)\b;y=G*x0+f;%y的值n=1;%迭代次数whilenorm(y-x0)=epsx0=y;y=G*x0+f;n=n+1;End(6)求解方程组310556312321321321xxxxxxxxx在命令中调用该文件gauseidel.m,程序如下:A=[1,2,1;3,6,-1;5,10,1];%产生一个3*3阶系数矩阵b=[1,5,3]`;%对矩阵进行转置[x,n]=gauseidel(A,b,[0,0,0]`,1.0e-6)%调用gauseidel函数x=0/00/00/0n=13912'Jacobi迭代法Jacobi.m函数文件:function[y,n]=jacobi(A,b,x0,eps)ifnargin==3eps=1.0-6;%精确度为10e-6elseifnargin3error%错误return%结束该函数的执行endD=diag(diag(A));%求A的对角矩阵L=-tril(A,-1);%求A的下三角阵U=-triu(A,1);%求A的上三角阵B=D\(L+U);f=D\b;y=B*x0+f;%y的值n=1;%迭代次数whilenorm(y-x0)=epsx0=y;y=B*x0+f;n=n+1;end用Jacobi迭代法求解下列线性方程组,迭代初值为0,迭代精度为10e-6。(7)求解方程组7x5532632132121xxxxxx在命令中调用该文件jacobi.m,程序如下:A=[3,-1,0;1,2,-3;0,-1,5];%产生一个3*3阶系数矩阵Ab=[6,5,7]';%产生矩阵b[x,n]=jacobi(A,b,[0,0,0]',1.0e-6)%调用jacobi函数f=2.00002.50001.4000n=1x=NaNNaNNaNn=1709五、总结Matlab语言运算以矩阵运算为基础,可视化,程序设计有机的融合到一个简单易行的互换式工作环境中,有出色的数值计算功能和强大的图形处理功能,而且简单易学,代码短小高效。线性代数是数学中的一个重要分支,很多理论问题和实际问题都需要借助于线性代
本文标题:利用MATLAB求线性方程组
链接地址:https://www.777doc.com/doc-4345714 .html