Gauss-Jordan法求逆矩阵

转载来源于:

http://student.zjzk.cn/course_ware/web-gcsx/gcsx/chapter3/chapter3.2.htm

http://student.zjzk.cn/course_ware/web-gcsx/gcsx/chapter1/chapter1.2.htm#21



先回顾一下高斯消元法:

§1.2 消元法与矩阵的初等变换

定义1. 由m个方程,n个未知量组成的线性方程组的一般

形式是:

其中  未知量  是第i个方程中未知量  的系数 称为常数。如果   不全为零,则称方程组为非齐次线性方程组; 如果   全为零,则称方程组为齐次线性方程组

   线性方程组和矩阵有密切的关系,未知量的系数所组成的  矩阵

称为方程组的系数矩阵。常数项也可以组成一个  矩阵,

即列矩阵

如果把b添写在系数矩阵A的右边,便得到  矩阵

  

  为方程组的增广矩阵。显然,增广矩阵完全确定了线性方程组。

   如果存在一组常数:

 ,使得  满足方程组,称为方程组的一个解。如果两个线性方程组有相同的解,则称它们是同解的

 

  例1. 用消元法求解线性方程组

消去了 

上面最后这个方程组称为阶梯形方程组,其中各方程组所含未知量的个数,从上一方程到下一方程在逐步减少,因此它就是我们希望转化的形式。要解出方程组的解,现在只需逐步回代:先把 (19) 解出的  代入 (18),,得  在把    代入(17),得  ,于是得方程组得解:

      

分析上述消元的过程,容易看出它实际上只是对方程组反复施行一下3种变换:

(1)             交换变换:交换第i 行与第j 行的位置 (记为  

(2)             倍法变换:用非零数k乘第i行(记为  ,或  

(3)             消法变换:把第i 行的k倍加到第j行上去(记为  或   

分别称为矩阵的第一种,第二种,第三种初等行变换,统称为矩阵的初等行变换

因此,对方程组施行的初等变换,相当于对方程组的增广矩阵施行相应的初等行变换。

例2.

上面最后这个矩阵称为阶梯形矩阵,与它对应的方程组就是前面的阶梯形方程组。阶梯形矩阵是线性代数中常用的一种矩阵,它的定义是:

定义2. 称满足下列两个条件的矩阵为阶梯形矩阵

(1)如果存在零行(元素全是零的行),则零都在非零行(元素不全为零的行)的下边;

(2)每个首非零元(非零行最左边的非零元素)所在的列中,位于这个非零元下边的元素全是零。

例如,下列矩阵都是阶梯形矩阵。

列矩阵都不是阶梯形矩阵:

例2. 用初等行变换将矩阵

化成首非零元都是1 的阶梯形矩阵

解: 

前面我们给出了矩阵初等行变换的定义,如果将这个定义中的“行”都换成“列”,它就是矩阵初等列变换的定义(约定今后用记号“  ” ,“ ”,“  ” 等,分别表示矩阵的第一种,第二种,和第三种初等列变换)。

定义3. 矩阵的初等行变换和初等列变换统称为矩阵的初等变换 

如果矩 阵A经过若干次初等行(列)变换后变成了矩 阵B,则称A与B行(列)等价,或称A行(列)等价于B,简称A等价于B,记为  。

行数列数均相同的二个矩阵称为同型矩阵

矩阵等价是同型矩阵之间的一种关系。这种关系具有下列基本性质:

(1)          反身性:  

(2)          对称性:若  ,则  

(3)          传递性:若    ,则  

     矩阵行等价和矩阵列等价统称为矩阵等价。




§3.2.高斯—约当消元法

在1.2节曾对求解线性方程组的消元法作过初步讨论,下面我们通过矩阵的初等变换,对消元法作进一步的研究。

我们可通过消法变换把矩阵化为成标准型和上三角形等。用以下定理得到的算法,规律性强,更适宜于用计算机解题。

定理一. 任意一个非零矩阵  可经初等变换化为下

面形式的矩阵

     

该矩阵称为矩阵A的标准形

证明  因A≠0,不妨设a11≠0,这是因为,假若a11=0,

我们可用交换变换,将A中的某一非零元素调换到第一行第一列

上去。对A施行初等变换,得

    

    

     ,

如果A1=0,则B已是标准形了,如果A1¹0,同样可不妨设

b22≠0,继续对B进行等变换,得

 

     

              ,

同样,若A2=0,则是C已是标准形,若A2≠0,重复上述步骤,

必可得到矩阵的标准形。特别,当 r=m<n时,A的标准形为

                          [Em,0]

当r=m>n时,A的标准形为

                           ,

当r=m=n时,A的标准形为En

 

例1.

    

 

     

    

此法常用来求矩阵的秩。注意,此法有列变换,不适宜于解线性方程组。

 

定理二.任一非零阵A=(aijm×n,可经消法变换化为上三角阵

    

……®A*

下面写出此消元法的算法:(设akk(k)¹0)

当m>n

 当m<n

当m=n

 

例2

A= 

此方法通常称为高斯消元法,常用于解线性方程组和矩阵的秩的计算。如例2中矩阵A的秩r(A)=3。

例3. 

解:

   AX = B*   为   

x3=2,

 

定理三. 任一非零方阵A=(aij)n×n可经初等行变换化为标准型。

证明:

与定理一的区别在于

1)不用列变换。

2)第j列消元时,不只是消去1的下方的元素,而是同时消去

   j列中除主对角线元素之外的所有元素。

3)对第n列也需要消元。

 

下面写出此消元法的算法:(若 akk ¹ 0)

例4

 

 

 =I

此方法通常称为高斯—约当方法,常用于解线性方程组和求

逆矩阵

 从例子可见,高斯—约当方法把一个非奇异的矩阵A变成了单位矩阵I,也就是相当于在A的左边乘上了A-1,于是对增广矩阵  ,A-1b=x即为线性方程组Ax=b的解。  增广的部分就是A-1

例5.求矩阵

 的逆矩阵

 得  

高斯—约当消元法也可以同时解几个系数矩阵相同的方程组。

 

例6.

 一起解

解    由于

对应矩阵可逆,于是可用初等行变换求解。

             

得矩阵方程的解    

其实是同时解了

             

二个线性方程组。

 

例7 

解:  再从最下边的一个主元1开始,依次把每个主元1上边的元素都化成零:

这就把  化成了简化行阶梯形矩阵,对应的同解方程组是

其中未知量x1,x2,x3对应于主元1,我们称它们为约束未知量(通常我们把对应于单位向量的未知量作为约束未知量);而把方程组中除约束未知量外的其它未知量(这里只有x4)称为自由未知量。由上面的方程组中解出约束未知量,这只要将自由未知量移到方程右端去,即得 

解有无穷多组,表示了此方程组的全部解。若任给x4的一个值,由上式就可唯一的定出x1,x2,x3的一组解,从而连同给定的x4的值,就可得到方程组的一个解。例如,令x4=2,代入上式就得到方程组的一个解  x1=-3,x2=-1,  x3=1,  x4=2

如果令x4=-4,代入上式就得到方程组的另一个解

x1=6,x2=5,  x3=-2,  x4=-4

 

定义1. ,用自由未知量表示约束未知量的表达式称为线性方程组的通解。表示了线性方程组的全部解。

以下是使用 Python 实现 Gauss-Jordan 消元法的代码,其中包括了列主元选取的方法: ```python import numpy as np def pivot_matrix(M): """Returns the pivoting matrix for M, used in Doolittle's method.""" m = len(M) # Create an identity matrix, with floating point values id_mat = [[float(i ==j) for i in range(m)] for j in range(m)] # Rearrange the identity matrix such that the largest element of # each column of M is placed on the diagonal of of M for j in range(m): row = max(range(j, m), key=lambda i: abs(M[i][j])) if j != row: # Swap the rows id_mat[j], id_mat[row] = id_mat[row], id_mat[j] return id_mat def gauss_jordan(A, b): """Solves the equation Ax = b via Gauss-Jordan elimination.""" # Create the augmented matrix M = np.column_stack((A, b)) n, m = M.shape # Create the pivoting matrix P and the inverse of P id_mat = pivot_matrix(M) P = np.matrix(id_mat) P_inv = np.linalg.inv(P) # Apply the pivoting matrix to M M = P * M # Perform the Gauss-Jordan elimination for j in range(n): div = M[j, j] M[j, :] /= div for i in range(n): if i != j: sub = M[i, j] M[i, :] -= sub * M[j, :] # Separate the results (x) from the augmented matrix x = M[:, :-1] return P_inv * x # Example usage: A = np.array([[2, 1, -1], [3, 2, 1], [1, 0, 1]]) b = np.array([8, 13, 2]) x = gauss_jordan(A, b) print(x) ``` 在这个例子中,我们使用了 NumPy 库来处理矩阵运算。函数 `pivot_matrix()` 生成了一个大小为 $n \times n$ 的矩阵,其中第 $i$ 行和第 $j$ 行交换,是为了使得第 $j$ 列的最大元素出现在第 $j$ 行。函数 `gauss_jordan()` 对输入的矩阵 A 和向量 b 进行了消元操作,并返回解向量 x。在最后一个例子中,我们使用这个函数解了一个线性方程组。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值