4.4 线性方程组的数值解
4.4.1 矩阵相除法X=A\B
在MATLAB中,线性方程组AX=B的直接解法是用矩阵左除来完成的,即X=A\B.若A为m×n的矩阵,当m=n且A可逆时,给出唯一解;当n>m时,矩阵除给出方程的最小二乘解;当n<m时,矩阵除给出方程的最小范数解.
>>a=[1 -1 1 -1;1 -1 -1 1;1 -1 -2 2 ];%A为3×4矩阵,n>m >>b=[1;0;-0.5];
>>c=a\b%因为n>m,矩阵除给出方程的最小二乘解
4.4.2 消去法rref()
方程的个数和未知数个数不相等,也可用消去法.将增广矩阵(由[A B]构成)化为简化阶梯形,若系数矩阵的秩不等于增广矩阵的秩,则方程组无解;若两者的秩相等,则方程组有解,方程组的解就是行简化阶梯形所对应的方程组的解.
>>a=[1 -1 1 -1 1;1 -1 -1 1 0;1 -1 -2 2 -0.5];%为增广矩阵,由[A B]构成
>>rref(a)
4.4.3 逆矩阵法inv()
inv()函数求矩阵的逆矩阵,若系数矩阵是方阵,且是满秩,则方程组有唯一解,可以通过求逆矩阵来求解.
>>a=[1 2 1 ;2 1 -1;2 2 2];
>>b=[0 2 1]′;
>>x=inv(a)*b;
4.4.4 函数linsolve
格式:X=linsolve(A,B)其中A,B是两个矩阵
如:A=[34 8 4;3 34 6;3 6 8];B=[4;6;2];X=linsolve(A,B)
使用linsolve(A,B)可以对变量个数多于方程的个数的方程组求解;但要求A是满秩的.
4.4.5 迭代法
在线性方程组中常用的迭代解法主要有Jacobi迭代法、Gauss-Seidel迭代法、SOR(超松弛)迭代法等.Matlab没有提供相应的函数,可以自己写出其函数.
练习
写一个Jacobi迭代法的程序,首部如下:
function tx=jacobi(A,b,imax,x0,tol)
其中线性方程组AX=b,迭代初值为x0,迭代次数由imax提供,精确度由tol提供.
注:Jacobi迭代法是将方程组AX=b写成:x=Bx+g的形式,其中B是将A中主对角线上的元素移至左边后再单位化后形成的矩阵.