APP下载

线性方程组的解法及软件实现

2018-01-18田睿

课程教育研究 2018年42期
关键词:线性方程组

田睿

【摘要】一般线性方程组的性质和其求解方法是基础数学领域下代数分支的基本内容,在其解的研究发展中产生了矩阵、秩以及行列式等概念。本文围绕线性方程组的求解,从解的存在定理、解的三种基本解法等理论研究到手动求解。再从手动求解到利用软件进行求解做了一系列系统的探究,其中软件部分是针对MATLAB,Python的实际应用。

【关键词】线性方程组  解的存在定理  三種解法  Matlab  Python

【中图分类号】G633.6 【文献标识码】A 【文章编号】2095-3089(2018)42-0143-03

线性方程组及其解法涉及到秩、矩阵、行列式、向量等高阶线性代数的基本概念,是线性代数的基本内容。本篇论文中研究的线性方程组及其解法是我们小学、初高中线性方程组解法的更高阶的知识扩充,是用矩阵和行列式等概念将方程组本身和它的解的结构抽象出来,从简单的解具体线性方程组的现象中提炼出求解步骤的本质规律的过程。本篇论文从理论入手,介绍了线性方程组的定义,深入地研究了线性方程组的三种解法及其相互对比,然后用手动求解具体案例的方法加以应用,最后研究总结了如何利用Matlab和Python软件进行求解线性方程组。

1.线性方程组解的相关定义

1.1线性方程组及矩阵

一般线性方程组的形式为:

a11x1+a12x2+…+a1nxn=b1a21x1+a22x2+…+a2nxn=b2……am1x1+am2x2+…+amnxn=bm       (1)

其中x1,x2,…,xn是n个未知量(也称为“元”),其余都为常数项。

线性方程组(1)的系数矩阵记为:

A=■

线性方程组(1)的增广矩阵记为:

当b1,b2,…,bm全都等于0时所对应的方程组称为(1)的导出组。

1.2矩阵的乘法

两个矩阵相乘依然得出一个矩阵,且定义规定两个矩阵能够相乘当且仅当矩阵一的列数和等于矩阵二的行数,即设m、n、p均为常数,那么形状为m?鄢n与 n?鄢p的两个矩阵可以相乘,并且按照如下规则进行计算:

(AB)ij=■aikbkj=ai1b1j+ai2b2j+…+aipbpj

例如:

若A=■ B=■

则C=AB=■

2.线性方程组的求解方法

2.1高斯消元法

高斯消元法的本质是不断的利用三种初等变换对线性方程组进行消元,最后使得方程组呈现阶梯型。其中初等变换总共分为三种:

(1)让方程乘以一个非0的数

(2)两个方程相加

(3)互换两个方程的位置

其中基于的原理为:对方程组进行以上三种初等变换本质上只是对未知数前的系数进行乘法和加法,不会使得方程组的解有变化。根据最后所得的阶梯型矩阵的具体情况可知线性方程组的解分为三种情况:

(1)无解。若所得梯形方程组为:

c11x1+c12x2+…+c1rxr+…+c1nxn=d1,       c22x2+…+c2rxr+…+c2nxn=d2,                                  ……                    crrxr+…+crnxn=dr,                                 0=dr+1,                                    0=0,                                   ……                                    0=0.

其中d1,d2…dr,dr+1均不为零,由于0等于非0的数始终不成立,所以方程组无解。

(2)有唯一解:

若所得阶梯方程组为:

c11x1+c12x2+…+c1nxn=d1,       c22x2+…+c2nxn=d2,                      ……                   cnnxn=dn.

最终仍有n个非0的方程,那么通过xn=dn/cnn层层倒推可得出相应唯一的一组xn-1,…,x2,x1。

(3)有无数组解:

若所得阶梯方程组为:

c11x1+c12x2+…+c1rxr+c1r+1xr+1+…+c1nxn=d1,       c22x2+…+c2rxr+c2r+1xr+1+…+c2nxn=d2,                                           ……                    crrxr+crr+1xr+1+…+crnxn=dn.

此时r<n,可将任意一组满足条件的xr,xr+1,…xn带入第r个方程,再将第r个方程分别带入前r-1个方程,可分别求出一组x1,x2…xr-1。因为可找到无数组满足第r个方程的xr,xr+1…xn,所以线性方程组有无数组解。

综上所述,

(1)若r(A)≠ r([A,b]),则无解(其中r代表秩);

(2)若r(A)=r([A,b])=n,则有唯一解,

(3)若r(A)≠r([A,b])<n,则有无数解。

容易证明,在第情况(3)下,该方程组任意一个解,都可以用该线性方程组的一个特解及其导出组的基础解系刻画。

2.2 Cramer法则

行列式在数学中是一个函数,自变量是正方形矩阵,输出的是一个数,记作det(A)或 | A | 。

Cramer法则即:若| A |≠0,则方程组有唯一解。且| A |≠0时,方程组的唯一解有如下具体的计算公式:

x1=■,x2=■,…,xn=■

其中dj 是把矩阵A中第j 列换成方程组的常数项 b1,b2,…所成的矩阵的行列式,即

dj=■,j=1,2,…,n.

2.3 逆矩阵法

逆矩阵:设A、B均为方阵,若A?鄢B=E(其中E为单位矩阵),则B和A互为逆矩阵。

对于方程组

a11x1+a12x2+…+a1nxn=b1a21x1+a22x2+…+a2nxn=b2……am1x1+am2x2+…+amnxn=bm

A=■ X=■ B=■

翻译成矩阵的“语言”,上式等价于AX=B,若A的逆矩阵存在,左右两边同时乘以A-1,则等式变为X=A-1B,从而得到了方程组的解。因此只要求得矩阵A的逆矩阵便可求得方程租的解,可用如下方法求得逆矩阵:

行初等变换法求逆矩阵:

A=■

E=■(E共有n行n列)

(A|E)=■

对(A|E)进行初等变换,并将左边化为单位矩阵,那么与之得出的对应的右边部分即为A-1,即得到(E| A-1):

(E|A∧(-1))=■

则A的逆矩阵为:

A∧(-1)=■

由此可求得方程组的解。

2.4 线性方程组三种解法对比及联系

(1)高斯消元法的缺点

不适用于未知数多或方程个数多的情况,过于繁琐。

(2)若A为方阵,可先用Cramer法则确定线性方程组是否有唯一解后,再选择用或不用高斯消元法求解。

若| A |=0,则可用高斯消元法求得方程组唯一解。

若| A |≠0,则方程组无解或有无数组解。此时,当r<n时,方程组有无数组解;反之无解。

(3)Cramer法则缺点

①求解效率较低。

②当| A |=0时,不能确定是无解还是有无穷多组解。

③只适用于n?鄢n的矩阵。

2.5 三种解法的实际运用举例

x1-2x2+3x3-4x4=4x2-x3+x4=-3x1+3x2+x4=1-7x2+3x3+x4=-3

(1)高斯消元法

■→■→■ 由此方程组化为:

x1-2x2+3x3-4x4=4       x2-x3+x4=-3       -x3+2x4=-6          -2x3=-12→x1=-8x2=3x3=6x4=0

(2)Cramer法则

系数矩阵的行列式=■

=■+2■+3■+4■

=(0-3+7+3-0+9)+2(0-0+0+1-0+3)+3(0-0+0-1-0-7)+4(0-0+0-3-0+7)=16+8-24+16=16≠0,因此有唯一解

d=16

d1=■=■-3■-■

=(2+6+3+21+28-12)-3(-4-12-9+9+12+36)-(12-28+18+6+9+63)=48-96-80=-128

d2=■=■-4■+3■+4■

=(0+9+1+3+3+0)-4(0+0+1+0+0+3)+3(0+0+3+0+0+3)+4(0+0+9+0+0+3)=16-16+18+48=66

d3=■=96 d4=■=0

x1=d1/d=-8x2=d2/d=3x3=d3/d=6x4=d4/d=0

(3)逆矩陣乘积法

(A|E)=■→■ →■→■→■

因此A^(-1)=■

X= A^(-1)B=■ ■=■

x1=-8x23x3=6x4=0

3.利用软件求解线性方程组

3.1 利用MATLAB进行求解

方法一:X=A\b

对m×n的线性方程组,用函数rank()查看A和(A,b)的秩,

(1)若rank(A)= rank (|A,b|)=n,则X=A\b输出方程的唯一解。

(2)若rank (A)= rank (|A,b|)<n,方程组有无数组解,此时X=A\b的输出结果为方程租的一个特解,需进一步用null(A)或null(A.‘r)(其中r为A的秩)找到方程组的基础解系。

(3)若rank (A) ≠rank (|A,b|),此时输出结果为空。

方法二:X=inv(A)?鄢b

此方法为逆矩阵法。适用于m=n=rank (A)的情形。

方法三:X=pinv(A)?鄢b

适用于无解的情形,输出的为近似解。

方法四:用Cramer法则直接带入行列式公式(行列式用det()函数),适用于有唯一解的情况。

3.2利用Python进行求解

利用sympy包中的solve函数:

示例:

from sympy import?鄢

a=Matrix([[1,1,3],[1,2,4]]) #定義系数矩阵

b=Matrix([[1,2]])   #定义等号右边常数向量

x=symarray(‘x,3)  #定义未知数个数

solve(a?鄢x-b)

若结果为空,则方程组无解;

若结果为常数解,则其为唯一的解;

若结果带有自由变量,类似于{x_0:-2x_2,x_1:-x_2+1},则方程组有无数组解。

参考文献:

[1]夏磊.线性方程组的解法探讨及MAPLE实现[J].淮南职业技术学院学报,2017(6):74-77

[2]曾振新.关于线性变换乘法和矩阵乘法[J].数学学习与研究,2016,19:149-151

[3]王萼芳,石生明.高等代数[M].北京:高等教育出版社,2003:178-179

[4]肖滢.逆矩阵的判定及计算方法[J].高等数学研究,2016(4):73-76

[5]陈永胜,刘洋萍.基于MATLAB求解非齐次线性方程组[J].赤峰学院学报.2009(10):1-2

猜你喜欢

线性方程组
一类整系数齐次线性方程组的整数解存在性问题
求解非线性方程组的Newton迭代与Newton-Kazcmarz迭代的吸引域
H-矩阵线性方程组的一类预条件并行多分裂SOR迭代法
线性方程组解的判别
保护私有信息的一般线性方程组计算协议
基于Matlab实现线性方程组的迭代解法