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中主对角线上的元素移至左边后再单位化后形成的矩阵.