【python讲线代】S03E07 从矩阵映射的角度分析线性方程组的解

0.本集概览

1.系数方阵如果可逆,则线性方程组的解唯一
2.目标空间里的 $y$ 向量如果不在像空间中,则方程组无解
3.线性方程组如果有多个解,解的形式为任意某解加上核空间基底的线性组合

前面三集里,我们颇费周章的讲清楚了逆矩阵的概念和几何意义。逆问题的一个现实应用就是解线性方程组,在通晓逆矩阵概念的基础上再来谈这个问题,就一切水到渠成了。

比如:$A=\begin{bmatrix} 1 & 2&3&4\\ 5&6 & 7&8\\9 & 10&11&12\end{bmatrix}$ , $y=\begin{bmatrix} 3 \\ 1 \\4 \end{bmatrix}$ ,我们设 $x= \begin{bmatrix} x_{1}&x_{2}&x_{3}&x_{4}\end{bmatrix} ^{T}$ ,

那么 $Ax=y$ 按照矩阵的乘法进行分别相乘,就能得到了一个我们熟悉的线性方程组:

$x_{1}+2x_{2}+3x_{3}+4x_{4}=3$
$5x_{1}+6x_{2}+7x_{3}+8x_{4}=1$
$9x_{1}+10x_{2}+11x_{3}+12x_{4}=4$

我们这一节就专门来分析线性一次方程组的解的问题,我们分唯一解、无解、多个解这三种情况。

1.方程有唯一解的情况

我们依旧使用之前讨论的映射问题作为理论基础,即当我们的线性系数矩阵可逆时,自变量 $x= \begin{bmatrix} x_{1}&x_{2}&x_{3}&...&x_{m}\end{bmatrix} ^{T}$ 和因变量 $y= \begin{bmatrix} y_{1}&y_{2}&y_{3}&...&y_{m}\end{bmatrix} ^{T}$ 维数相同且一一对应,这种情况下对应的线性方程组的解 $x$ 是唯一的。

那么对于方程 $y=Ax$ ,我们直接用公式 $x=A^{-1}y$ 就用 $y$ 表示出了 $x$ ,方程的解就求出来了。但是实际上我们倒不用先求逆矩阵 $A^{-1}$ 再与 $y$ 相乘这么麻烦,python里有方法可以对方程进行求解,例如方程组:

$2x_{1}+3x_{2}+3x_{3}=9$
$3x_{1}+4x_{2}+2x_{3}=9 $
$-2x_{1}-2x_{2}+3x_{3}=2 $

那么,在这个方程中, $A=\begin{bmatrix} 2 & 3&3\\ 3&4 & 2\\-2 & -2&3\end{bmatrix}$ , $y=\begin{bmatrix} 9 \\ 9 \\2 \end{bmatrix}$
代码片段:

import numpy as np

A = np.array([[2, 3, 3],
              [3, 4, 2],
              [-2, -2, 3]])

print(np.linalg.matrix_rank(A))

运行结果:

3

在这段代码中,我们验证了一下,系数方阵的秩为 $3$,即这是一个满秩矩阵,可逆。符合解唯一的条件。于是,我们用scipy库中的方法来解方程组。

代码片段:

import numpy as np
from scipy import linalg

A = np.array([[2, 3, 3],
              [3, 4, 2],
              [-2, -2, 3]])

y = np.array([9, 9, 2])

x = linalg.solve(A, y)
print(x)

运行结果:

[ 3. -1.  2.]

很容易的,我们就得到了方程的解。

2.方程无解的情况

我们再讨论无解的情况,我们看下面的一个方程组:

$2x_{1}-4x_{2}=-2$
$4x_{1}-5x_{2}=2$
$5x_{1}-9x_{2}=1$

$A=\begin{bmatrix} 2 & -4\\ 4&-5 \\5 & -9\end{bmatrix}$ , $y=\begin{bmatrix} -2 \\ 2 \\1 \end{bmatrix} $ , $x=\begin{bmatrix} x_{1} \\ x_{2} \end{bmatrix}$

还是用刚才介绍过的方法来试试解方程,我们发现貌似用不了。
代码片段:

import numpy as np
from scipy import linalg

A = np.array([[2, -4],
              [4, -5],
              [5, -9]])

y = np.array([-2, 2, 1])

x = linalg.solve(A, y)
print(x)
top Created with Sketch.