第七节-求解Ax=0,主变量,特解

A x = 0 Ax=0 Ax=0算法

上一节我们讲解了列空间和零空间的定义,这些子空间包含哪些向量,那如何找到这些向量呢?本节将介绍零空间的计算方法,下一节讨论列空间。
还是从一个例子开始,假设矩阵 A = [ 1 2 2 2 2 4 6 8 3 6 8 10 ] A=\left[\begin{array}{ccc}1&2&2&2\\2&4&6&8\\3&6&8&10\end{array}\right] A=⎣⎡​123​246​268​2810​⎦⎤​,我们的算法还是从消元开始,因为消元不会改变方程组的解,也就是说不会改变列空间,这里有点特殊的地方是:

  • 右边都为 0 0 0,可以省略
  • 如果遇到主元为 0 0 0的情况(行交换无法解决),继续寻找下一个主元继续消元

A = [ 1 2 2 2 2 4 6 8 3 6 8 10 ] ⇒ [ [ 1 ] 2 2 2 0 0 2 4 0 0 2 4 ] ⇒ [ [ 1 ] 2 2 2 0 0 [ 2 ] 4 0 0 0 0 ] = U A=\left[\begin{array}{ccc}1&2&2&2\\2&4&6&8\\3&6&8&10\end{array}\right]\Rightarrow \left[\begin{array}{ccc}[1]&2&2&2\\0&0&2&4\\0&0&2&4\end{array}\right]\Rightarrow \left[\begin{array}{ccc}[1]&2&2&2\\0&0&[2]&4\\0&0&0&0\end{array}\right]=U A=⎣⎡​123​246​268​2810​⎦⎤​⇒⎣⎡​[1]00​200​222​244​⎦⎤​⇒⎣⎡​[1]00​200​2[2]0​240​⎦⎤​=U
观察最终得到得矩阵 U U U,非零元素以阶梯形式出现,我们称为阶梯形式(echelon form)矩阵,这里主元又称为主变量(pivot variable),称主元的个数为矩阵的秩(rank),这个例子里是 2 2 2。
接下来只要计算 U x = 0 Ux=0 Ux=0即可:
[ [ 1 ] 2 2 2 0 0 [ 2 ] 4 0 0 0 0 ] [ x 1 x 2 x 3 x 4 ] = 0 \left[\begin{array}{ccc}[1]&2&2&2\\0&0&[2]&4\\0&0&0&0\end{array}\right]\left[\begin{array}{ccc}x_1\\x_2\\x_3\\x_4\end{array}\right] = 0 ⎣⎡​[1]00​200​2[2]0​240​⎦⎤​⎣⎢⎢⎡​x1​x2​x3​x4​​⎦⎥⎥⎤​=0
我们把矩阵 U U U中包含主变量的列称为主列(pivot column),其余列为*列(free column),主列的个数显然就是矩阵的秩 r r r,*列的个数就是 n − r n-r n−r
主列很好理解,这里的*列表示,其可以*或任意分配数值,在这个例子里就是 x 2 x_2 x2​与 x 4 x_4 x4​,然后通过回代求解 x 1 x_1 x1​与 x 3 x_3 x3​即可。如:

  • 假设 x 2 = 1 , x 4 = 0 x_2=1,x_4=0 x2​=1,x4​=0,则可以得到 x ′ = [ − 2 1 0 0 ] x^{'}=\left[\begin{array}{ccc}-2\\1\\0\\0\end{array}\right] x′=⎣⎢⎢⎡​−2100​⎦⎥⎥⎤​
  • 假设 x 2 = 0 , x 4 = 1 x_2=0,x_4=1 x2​=0,x4​=1,则可以得到 x ′ ′ = [ 2 0 − 2 1 ] x^{''}=\left[\begin{array}{ccc}2\\0\\-2\\1\end{array}\right] x′′=⎣⎢⎢⎡​20−21​⎦⎥⎥⎤​

这样求得的解,我们称为方程的特解,由上节所讲零空间性质可以知道,零空间所包含的就是所有特解的线性组合,那特解有多少个呢?特解的个数等于*列的个数,即 n − r n-r n−r

简化行阶梯形式

**简化行阶梯形式(reduce row echelon form)**是针对消元矩阵 U U U进行的进一步简化。它主要需要达到以下目的:

  1. 通过向上消元使得主元以上的元素也变为 0 0 0
  2. 将主元都变为 1 1 1

U = [ [ 1 ] 2 2 2 0 0 [ 2 ] 4 0 0 0 0 ] ⇒ [ [ 1 ] 2 0 − 2 0 0 [ 2 ] 4 0 0 0 0 ] ⇒ [ [ 1 ] 2 0 − 2 0 0 [ 1 ] 2 0 0 0 0 ] = R U=\left[\begin{array}{ccc}[1]&2&2&2\\0&0&[2]&4\\0&0&0&0\end{array}\right]\Rightarrow \left[\begin{array}{ccc}[1]&2&0&-2\\0&0&[2]&4\\0&0&0&0\end{array}\right]\Rightarrow \left[\begin{array}{ccc}[1]&2&0&-2\\0&0&[1]&2\\0&0&0&0\end{array}\right]=R U=⎣⎡​[1]00​200​2[2]0​240​⎦⎤​⇒⎣⎡​[1]00​200​0[2]0​−240​⎦⎤​⇒⎣⎡​[1]00​200​0[1]0​−220​⎦⎤​=R
相当于Matlab里的 r r e f ( A ) rref(A) rref(A)命令。可以知道以上简化步骤不影响方程的解,因此我们求解就变成了 R x = 0 Rx=0 Rx=0,接下来我们把主列放在一起,把*列放一起(交换未知数的位置)可以得到以下形式:
[ [ 1 ] 0 2 − 2 0 [ 1 ] 0 2 0 0 0 0 ] ⇒ [ I F 0 0 ] \left[\begin{array}{cc|cc}[1]&0&2&-2\\0&[1]&0&2\\\hline0&0&0&0\end{array}\right]\Rightarrow \left[\begin{array}{c|c}I&F\\\hline0&0\end{array}\right] ⎣⎡​[1]00​0[1]0​200​−220​​⎦⎤​⇒[I0​F0​​]
转换成这种形式是为了一次性得到所有特解,这样就可以得到了整个零空间,想象一下所有特解的组合应该是一个矩阵,形式我们把这种所有特解作为列的矩阵称为”零空间矩阵“,即为 N N N。那么如何得到这样的矩阵呢?即求解 R N = 0 RN=0 RN=0,由于我们做了列交换,方程变成了以下形式:
[ I F ] N = 0 ⇒ N = [ − F I ] \left[\begin{array}{cc}I&F\\\end{array}\right]N=0\Rightarrow N=\left[\begin{array}{c}-F\\I\\\end{array}\right] [I​F​]N=0⇒N=[−FI​]
在本例中就是 [ − 2 2 0 2 1 0 0 1 ] \left[\begin{array}{cc}-2&2\\0&2\\1&0\\0&1\end{array}\right] ⎣⎢⎢⎡​−2010​2201​⎦⎥⎥⎤​。这两个特解跟之前通过求得的特解是一致的。
Matlab可以通过 n u l l null null指令求得 N N N,这个指令是如何工作的呢?

  1. 先通过 r r e f ( A ) rref(A) rref(A)指令求得 R R R,然后找出主变量和*变量
  2. 把 1 1 1和 0 0 0分配到*变量,主变量通过回代进行计算,这里回代就非常简单了,即求解 [ I F ] [ x p i v o t x f r e e ] ⇒ x p i v o t = − F x f r e e ⇒ x p i v o t = − F \left[\begin{array}{cc}I&F\\\end{array}\right]\left[\begin{array}{cc}x_{pivot}\\x_{free}\\\end{array}\right]\Rightarrow x_{pivot}=-Fx_{free} \Rightarrow x_{pivot}=-F [I​F​][xpivot​xfree​​]⇒xpivot​=−Fxfree​⇒xpivot​=−F

这就是我们计算零空间矩阵的算法,下面我们再举一个例子来回顾一下这个过程,这里以 A T A^{\mathrm {T}} AT为例:

  1. 先进行消元计算 U U U

A = [ 1 2 3 2 4 6 2 6 8 2 8 10 ] ⇒ [ [ 1 ] 2 3 0 [ 2 ] 2 0 0 0 0 0 0 ] = U A=\left[\begin{array}{ccc}1&2&3\\2&4&6\\2&6&8\\2&8&10\end{array}\right]\Rightarrow \left[\begin{array}{ccc}[1]&2&3\\0&[2]&2\\0&0&0\\0&0&0\end{array}\right]=U A=⎣⎢⎢⎡​1222​2468​36810​⎦⎥⎥⎤​⇒⎣⎢⎢⎡​[1]000​2[2]00​3200​⎦⎥⎥⎤​=U
这里的秩也为 2 2 2,矩阵与其转置的秩是相同的。这里的*列数为 1 1 1,特解的个数也为 1 1 1,令 x 3 = 1 x_3=1 x3​=1,可以求得 x = [ − 1 − 1 1 ] x=\left[\begin{array}{ccc}-1\\-1\\1\end{array}\right] x=⎣⎡​−1−11​⎦⎤​,这里的零空间就为 c [ − 1 − 1 1 ] c\left[\begin{array}{ccc}-1\\-1\\1\end{array}\right] c⎣⎡​−1−11​⎦⎤​,这是一条直线。

  1. 下面求解简化行阶梯矩阵

U = [ [ 1 ] 2 3 0 [ 2 ] 2 0 0 0 0 0 0 ] ⇒ [ [ 1 ] 0 1 0 [ 1 ] 1 0 0 0 0 0 0 ] U=\left[\begin{array}{ccc}[1]&2&3\\0&[2]&2\\0&0&0\\0&0&0\end{array}\right]\Rightarrow \left[\begin{array}{ccc}[1]&0&1\\0&[1]&1\\0&0&0\\0&0&0\end{array}\right] U=⎣⎢⎢⎡​[1]000​2[2]00​3200​⎦⎥⎥⎤​⇒⎣⎢⎢⎡​[1]000​0[1]00​1100​⎦⎥⎥⎤​
可以看出这里 F = [ 1 1 ] F=\left[\begin{array}{ccc}1\\1\end{array}\right] F=[11​],由于*变量个数为 1 1 1,因此 I = 1 I=1 I=1,可以求得零空间矩阵为 [ − 1 − 1 1 ] \left[\begin{array}{ccc}-1\\-1\\1\end{array}\right] ⎣⎡​−1−11​⎦⎤​

上一篇:数组与指针


下一篇:电动吸鼻器要做CCC认证吗?