线性代数
矩阵的基本运算和消元
乘法
规定矩阵乘法 (A imes B) 必须满足 (A) 的列数等于 (B) 的行数,此时:
直观来看,即是左边矩阵一行中的各个数,分别与右边矩阵一列中的各个数相乘,然后相加作为新矩阵的一项:
这个简单的运算有很多种理解及计算方法
-
行向量线性组合
以左矩阵的一行乘右矩阵的各列:
[\ egin{bmatrix} color{teal}a_1 & color{teal}a_2 & color{teal}a_3 \ b_1 & b_2 & b_3\ end{bmatrix} imes egin{bmatrix} color{coral}x_1 & color{coral}y_1 \ color{olive}x_2 & color{olive}y_2 \ color{green}x_3 & color{green}y_3 end{bmatrix} = egin{bmatrix} color{teal}a_1 imes color{coral}x_1+color{teal}a_2 imes color{olive}x_2+color{teal}a_3 imes color{green}x_3 & color{teal}a_1 imes color{coral}y_1+color{teal}a_2 imes color{olive}y_2+color{teal}a_3 imes color{green}y_3 \ cdotscdotscdotscdotscdotscdotscdotscdots & cdotscdotscdotscdotscdotscdotscdotscdots end{bmatrix} ]可以发现,所得矩阵 (C) 其实是 (B) 中行向量线性组合的结果。
-
列向量线性组合
以右矩阵的一列乘左矩阵的各列:
[egin{bmatrix} color{coral}x_1 & color{olive}x_2 & color{green}x_3\ color{coral}y_1 & color{olive}y_2 & color{green}y_3 end{bmatrix} imes egin{bmatrix} color{teal}a_1 & b_1\ color{teal}a_2 & b_2\ color{teal}a_3 & b_3 end{bmatrix} = egin{bmatrix} color{teal}a_1 imes color{coral}x_1+color{teal}a_2 imes color{olive}x_2+color{teal}a_3 imes color{green}x_3 & cdotscdotscdotscdotscdotscdotscdotscdots \ color{teal}a_1 imes color{coral}y_1+color{teal}a_2 imes color{olive}y_2+color{teal}a_3 imes color{green}y_3 & cdotscdotscdotscdotscdotscdotscdotscdots end{bmatrix} ]和上面类似, (C) 是 (A) 中列向量的线性组合。
-
行乘列
我们先举一个简单的例子:
[egin{bmatrix} 1 \ 4\ 9 end{bmatrix} imes egin{bmatrix} 1 & 3 end{bmatrix} = egin{bmatrix} 1 & 3\ 4 & 12\ 9 & 27 end{bmatrix} ]可以发现 (C) 矩阵中第一列是 (A) 的一倍,第二列是 (A) 的两倍。
而对于多行多列的矩阵:
[egin{bmatrix} 1 & 2\ 4 & 3\ 9 & 4 end{bmatrix} imes egin{bmatrix} 1 & 3\ 2 & 2 end{bmatrix} = egin{bmatrix} 1 \ 4\ 9 end{bmatrix} imes egin{bmatrix} 1 & 3 end{bmatrix} + egin{bmatrix} 2 \ 3\ 4 end{bmatrix} imes egin{bmatrix} 2 & 2 end{bmatrix} ] -
块乘块
我们可以把矩阵分成小块的矩阵相乘:
[egin{bmatrix} A_1 & A_2\ A_3 & A_4 end{bmatrix} imes egin{bmatrix} B_1 & B_2\ B_3 & B_4 end{bmatrix} = egin{bmatrix} A_1 imes B_1 +A_2 imes B_3 & A_1 imes B_2 +A_2 imes B_4\ A_3 imes B_1 +A_4 imes B_3 & A_3 imes B_2 +A_4 imes B_4 end{bmatrix} ]原矩阵行列数要能相乘( (j_A = i_B) ),分成块后行列上块数也要能相乘( (n_A=m_B) ),自然分出的小块矩阵能够相乘( (frac{j_A}{n_A}=frac{i_B}{m_B}) )。
逆
矩阵的逆如此定义:$ A imes A^{-1}=I $ ,其中 $ I $ 为单位矩阵,$ A^{-1} $ 表示矩阵 (A) 的逆。
矩阵是不一定有逆的(有逆的叫非奇异矩阵,无逆为奇异矩阵),从线性方程组来理解,我们知道矩阵代表的方程组若线性相关就无法消元成单位矩阵。
矩阵的逆满足:
且方阵的逆(广义上有非方阵的逆)满足左逆等于右逆。
转置
矩阵的转置就像是把矩阵以主对角线为轴翻转了一个平面:
矩阵的转置满足:$ (A imes B)T=BT imes A^T $ ,证明……真就是算一遍,就不赘述。
若一个矩阵的转置等于本身,我们称其为对称矩阵。有一个快速获得对称矩阵的方法,因为
$ (A imes AT)T=A imes A^T $ ,所以一个矩阵和其转置相乘必为对称矩阵。
最后还有一个性质:
$ A $ 的 $ LU $ 分解
我们熟悉了矩阵的基本运算,现在来看看矩阵的消元。
我们从具体例子入手,对于一个 $ 3 imes 3 $ 的非奇异的,不需要置换行即可消元的矩阵 $ A $ :
我们定义消元矩阵为 $ E_{ji} $ ,依次乘上消元矩阵得到上三角矩阵 $ U $:
我们来看一下这几个值:
我们再尝试乘上逆把消元矩阵移到右侧:
消元矩阵的逆非常好求,即是消元的反操作,把对角线以外的那个值取负即可,我们再看一下这几个矩阵:
比上面的结果好看很多,直接就是消元矩阵的逆相加。动手试过便知,在第一种乘法中,颠倒了消元顺序,结果中消元的系数相互干扰了,而第二种乘法则是刚好按照消元的顺序,各个系数不会干扰。因为乘出的结果是个下三角矩阵,我们记作 $ L $ 。
上面结果是在 $ A $ 行分布很好,不需要置换行的情况下,而若需换行,我们就要再在 $ A $ 前乘上置换矩阵 $ P $ 。
我们思考一下一个 $ n imes n $ 的矩阵有多少个行置换矩阵:可以想见,每一个置换矩阵都对应一个置换后的状态,而状态数明显是 $ n! $ ,故 $ n imes n $ 的矩阵有 $ n! $ 个行置换矩阵。同理,不管如何置换,终究还是在这些状态中,所以置换矩阵的乘法是 封闭 的。
除此之外,置换矩阵还有如此性质:$ PT=P{-1} $ 。我们知道 $ P^{-1} $ 就是这个矩阵的逆操作,而 $ P_{ij} $ 若为 $ 1 $ 即表示把 $ j $ 行换到 $ i $ 行的位置,转置后 $ P_{ji} $ 就为 $ 1 $ ,表示把 $ i $ 行换到 $ j $ 行的位置,刚好是逆操作 。
那么对于一个必须置换才能消元的矩阵,只需提前换好行即可,最终表示为:
$ Gauss-Jordan $ 消元法
我们之前了解了矩阵的逆,现在来了解一种求逆的方法。
给矩阵 $ A $ 加上一个增广单位矩阵,我们对 $ A $ 的运算都同样对这个增广运算:
我们将 $ A $ 消元成单位矩阵:$ EA=I $ ,同时对增广进行同样操作:$ EI=E $ 。我们知道 $ E $ 就是矩阵 $ A $ 的逆,那么一套操作下来增广就变成 $ A $ 的逆了。
向量空间与方程的解
向量空间与子空间
三维空间可以被三个正交的向量表示出来。我们可以用一些 $ n $ 维向量表示出来一个向量空间。比如说,$ n $ 个 $ n $ 维向量在一定条件下就能表示出一个 $ n $ 维空间,我们可以记作 $ R^n $ 。举几个栗子:
若以每行为一个向量,栗子 $ (1) $ 很明显是一个 $ R^3 $ 的向量空间,而栗子 $ (2) $ 明显不足以称作 $ R^3 $ ,它只表示了三维空间中的一个平面,但也不能说是 $ R^2 $ ,因为其有三个坐标参数。这个向量空间是三维空间中的一个二维平面,我们称作是向量空间 $ R^3 $ 的一个子空间,同样 $ R^3 $ 中也可以有表示一条线,一个点的子空间,但它们可并不是 $ R^1 ( 、) R^0 $,它们是由三维向量组成的。
那么,任意一个三维空间中的平面都可以是 $ R^3 $ 的子空间了吗?显然不是,这时我们就要回到向量空间的最本质要求上:向量空间对线性变换封闭 。线性变换,其实也就是两个操作:$ v=lambda w $ 、$ v+w=n $ ,即向量的数乘和相加。也就是说,在向量空间内,我们无论怎么进行数乘和相加,其结果仍在向量空间内。
很明显,由于数乘可以乘 $ 0 $ ,所以向量空间至少得包含零向量(事实上,零向量是唯一一个点向量空间)。我们所谓的子空间,必定是过该空间原点的。 比如原点本身,三维空间中的过原点平面、直线,七维空间中的过原点五位元素……虽然我们想象不出来,但是我们仍能抽象计算它们。
那么问题来了,如果 $ R^n $ 中有两个子空间 $ P $ 和 $ L $ 。它们的并和交是不是子空间呢?先考虑并集,就拿三维空间中的两个二维子空间举例,两条线中的向量相加,可能产生一个不属于它们两的向量,所以非特殊情况(其中一个子空间包含另一个),两子空间的并不是子空间。
相反,两子空间的交集必定是子空间:
同理数乘也封闭。
向量空间的严格条件有 $ 8 $ 条,还有一些是运算规律,向量本身就满足就不用了就不用管了。但是这写严格条件可以让我们把很多奇奇怪怪的运算抽象成向量空间。
基和维数
上文提到过我们可以用 $ n $ 个 $ n $ 维向量在一定条件下表示一个空间。但是我们既没有说是什么条件,也没有说维数的定义。
实际上,这个条件是线性不相关( $ independence $ ) 。即这 $ n $ 个向量不能线性组合出零向量(系数全为零的组合除外)。如果有这么一些向量,它们线性不相关,且可以表示一个特定的向量空间,那么我们称其为这个空间的基。
可以发现,一个特定的空间的基所包含的向量数量是固定的,这个固定的数量被称作维数( $ dimension $ )。
方程的解
说了这么多,我们可以步入求解方程的步骤。
首先,我们要对一个矩阵进行简化为简化行阶梯形式( $ reduced;row;echelon;form $ ),例如:
我们一般选择逐列消元,若是下一列此时全为 $ 0 $ ,则代表这一列是前面某些列的线性组合结果,所以解方程时此列的未知数取何值都没有关系,称为自由列( $ free;variable;column $ ),有时矩阵行数大于列数,导致有些变量随意取值也有解,这些列也会称作自由列。相对应,不能随意取值的变量则为主元( $ pivot $ ),这些列为主列。
得到了简化矩阵 $ R $ 后,我们调换一下变量位置使得主列在一起,自由列在一起:
这里我们提一下前面忘记说的概念:列空间、行空间和零空间。列空间是指矩阵所有列向量所生成( $ span $ )的向量空间,也就是所有列向量的所有线性组合的集合。行空间同理,是所有行向量生成的空间。零空间是指满足 $ Ax=0 $ 的所有 $ x $ 构成的空间。可以发现,这些向量 $ x $ 和 $ A $ 的行向量相乘都为 $ 0 $ ,即为,零空间和原矩阵的行空间相垂直。并且,我们刚才所作的除调换变量位置以外的所有操作都没有影响行空间和零空间。
然后我们再回到简化后的矩阵,其可以简写成如上图形式,包含主元构成的单位阵,自由变量和 $ 0 $ 。我们很容易找出一组特解:
而我们知道零空间与原矩阵行空间垂直,那么零空间的维数就是列数减去秩:$ col-r $,刚好是自由变量的个数。这样我们就获得了零空间的一组基。
得到了 $ Ax=0 $ 的解,我们再来思考一下 $ Ax=b $ 的解(如果有的话)。设我们已知特解 $ x_p $ ,则有 $ A(x-x_p)=0 $ ,所以 $ x=x_p+x_n $ 。这样我们再找出一组特解就可以得到方程的全部解。
特解当然很容易找,因为自由列可以取任意值,我们先将其设为特定值(一般是设为 $ 0 $ )就能解出一组特解。
然后将特解与零空间中的向量相加,就得到了解的形式:
方程的可解性和满秩
我们先举一个栗子:
可以看到最后有 $ 0 $ 行,那么左侧的 $ b $ 也要经过相同变化后在 $ 0 $ 行为 $ 0 $ 才能有解。
我们单独讨论下满秩的情况,如果我们有一个 $ m imes n $ 的矩阵:
-
$ r=n<m $
我们一般把 $ r=n $ 或 $ r=m $ 称为满秩,而这种情况就是列满秩。列满秩说明所有未知数都是主元。此时矩阵的零空间只有零向量。而同时行不满秩说明留有很多 $ 0 $ 行,可能会有没有解的情况。
所以这种情况下,方程的解有 $ 0 $ 或 $ 1 $ 个。
-
$ r=m<n $
行满秩说明没有 $ 0 $ 行出现,这样方程是必定有解的。
-
$ r=m=n $
行列都满秩的矩阵满足上两个情况的性质,必定有解且只有唯一解。
值得一提的是,这样的矩阵会是可逆矩阵,因为其既然有解且是方阵,那么就可以化为消元矩阵乘单位阵的形式,我们知道消元矩阵和单位阵都是可逆的,所以说这样的矩阵也是可逆。
其实很符合我们先前的认识:$ n $ 个未知数需要有 $ n $ 个独立的方程才能解。
四个基本子空间
我们仍用这个矩阵做栗子:
我们前面其实已经提到过列空间,行空间,零空间。其中列空间,零空间分别表示为:(C(A)) ,(N(A))。而行空间其实可以表示为:$ C(A^T) $ 。同样,仿照零空间,我们也可以定义出一个行空间对应的零空间,其名字叫做 左零空间 ,记为 $ N(A^T) $ 。
首先解决这些空间的维数问题,对于一个给定的 $ m imes n $ 矩阵 $ A $ ,它们的维数和所属向量空间如下表:
结果非常巧妙,一个矩阵的零空间和行空间刚好加起来为列数。这是因为行空间和列空间维数代表着主元个数,零空间代表着自由变量个数。
然后让我们看看能否系统地求出这四个空间的基。
首先,在消元过程中,列空间会改变,行空间不会改变,消元到最后的主元所在的行向量其实就是行空间的基,而记录下主列位置后原矩阵这些位置的列向量就是列空间的基。再根据 方程的解 这部分提到的解法,零空间的基可以用 $ rref(A) $ 快速得到。那么我们的问题就主要集中在左零空间。
我们再回顾一下零空间的定义,是满足 $ Ax=0 $ 的所有向量 $ x $ 组成的向量空间。我们可以理解为这些向量 $ x $ 与行向量相乘全为 $ 0 $ ,即与行空间垂直。也可以理解为 $ A $ 的各列向量按照 $ x $ 的各个系数线性组合得到 $ 0 $ 向量。推而广之,左零空间中就是将这些定义中的行、列互换。
我们再回顾消元过程,若是我们记录下消元矩阵 $ E $ 。就有:$ EA=R $ 。这个 $ E $ 是一个 $ m imes m $ 的矩阵。其与 $ A $ 相乘的意义可以理解为:将 $ A $ 的各行向量以 $ E $ 中的一行为系数进行线性组合生成新矩阵 $ R $ 的一行。我们知道,$ N(A^T) $ 的维数是 $ m-r $ ,是自由变量的数目。那么消元完的矩阵 $ R $ 最下面 $ m-r $ 列全为零向量。也就是说, $ E $ 的最下面 $ m-r $ 行表示的向量与 $ A $ 的列向量相乘全为 $ 0 $ ,或将 $ A $ 的各行向量以 $ E $ 中的最下面 $ m-r $ 行为系数进行线性组合生成零向量。所以说,消元矩阵的最下面 $ m-r $ 个行向量就是左零矩阵的基。左零矩阵的 “左” 也是出于消元矩阵是左乘原矩阵的。
秩 $ 1 $ 矩阵
我们来简略的介绍一下一种很简单的矩阵:秩 $ 1 $ 矩阵。如其名,就是秩为 $ 1 $ 的矩阵,比如:
这种矩阵的行和列其实都是一个向量的倍数,我们可以将其拆解得非常好看:
秩 $ 1 $ 矩阵的行列式和特征值有非常好性质,这个我们之后再说。重要的是,任何秩 $ 1 $ 矩阵可以表示为 $ A=UV^T $ 的形式,而对于任意一个秩为 $ n $ 的矩阵,我们可以将其分解成 $ n $ 个秩 $ 1 $ 矩阵。秩 $ 1 $ 矩阵可以当成“积木”用。
更多向量空间
我们之前都是在讨论以向量为元素的向量空间。现在来看看一些更抽象的向量空间。
我们先举个仍在向量范围内的栗子。我们把所有满足:$ A=egin{bmatrix}1 & 1& 1&1end{bmatrix},,Av=0 $ 的向量 $ v $ 看作一个向量空间 $ S $ 。很明显,$ v $ 的四个坐标值之和为 $ 0 $ 。因为 $ S $ 其实就是 $ A $ 的零空间,我们很容易知道 $ S $ 的维数是 $ 3 $ 。为何一个有四个坐标的向量空间只有四维呢?是因为有坐标值之和为 $ 0 $ 的限制条件,有三个坐标确定后,最后一个坐标也随之确定。这么看来,对于更抽象的向量空间,我们可以用自由度来判断其维数。
然后,我们再看看第二个栗子。
我们尝试用所有的 $ 3 imes 3 $ 矩阵生成一个向量空间 $ M $ 。既然是向量空间,我们首要关注其维数和基。
不难看出这个向量空间的维数是 $ 9 $ ,因为其有 $ 9 $ 个可以自由变换的标量,或者说有 $ 9 $ 个自由度。同样,我们也可以列出一组基:
那么子空间呢?
(3 imes 3) 的对称($ Symmetric ()矩阵、对角() Diagonal ()矩阵、上三角() Upper;triangular ()阵和下三角()Lower;triangular $ )矩阵都是其子空间,也不难得出他们的维数分别是:$ dim(S)=6 $ ,$ dim(D)=3 $ ,$ dim(U)=6 (,) dim(L)=6 $ 。
容易发现,其实 $ Scap U=D $ 。但是 $ Scup U $ 不是一个向量空间,我们可以定义一个向量空间的 $ + $ 运算,意为两个向量空间的所有线性组合,这样 $ S+U $ 就是一个向量空间了,而且刚好就是我们 $ 3 imes 3 $ 矩阵空间 $ M $ 。
这时候我们就能发现,(dim(S)+dim(U)=dim(D)+dim(M)) 。我们不妨大胆猜测:
这个式子似乎叫向量空间的维数定理(:
证明其实很简单,我们知道一个向量空间的维数就是其基向量的个数。而 $ dim(S)+dim(U) $ 和 $ dim(S+U) $ 有区别就是因为前者将 $ U、S $ 中重复的基向量算了两遍,我们只需要在等式右侧再加上这部分( $ dim(Scap U) $ )即可。
其他美味的栗子
学习了这么多理论内容,让我们通过实际应用再来体会下线代的美妙(
第一个栗子是关于解偏微分方程。
比如有个二阶偏微分方程:$ af''(x)+bf'(x)+cf(x)=0 $ 。其实就等价于求:
具体解的过程就不赘述。但是我们知道矩阵 $ A $ 是秩 $ 1 $ 矩阵,它的零空间是二维的。所以我们应该有两组线性不相关的 $ x $ ,也就是有两个线性不相关的函数 $ varphi $ 。因此,当我们解出重根时才要再设个 $ frac{y}{e^{lambda x}}=u(x) $ 来获得一个线性不相关的解;以及在解出共轭复根时,才能通过两个解的线性变换把复数部分消去。
另一个栗子是关于图。
我们用列代表每个点,行代表一条边,将上面的图表示如下,这里的正负指的是边上值的正方向,不是指有向边:
这种矩阵当然很浪费空间,被称作稀疏( $ sparse $ )矩阵。通过观察,我们可以发现 $ row_1+ row_2+row_3=0 $ ,而确实在图中这三条边形成了一个回路,由此可想,对这个矩阵的消元实际就是在求这个图的生成树(个人感觉好像把边按边权排个序再消元就是最小生成树了)。我们发现回路数就等于自由变量的个数,即 $ num(loop)=m-r $ ,而 $ m $ 是边的个数, $ r $ 是生成树的边数,就是点数减一。于是我们得到:$ num(loop)=num(edge)-num(node)+1 $ ,也就是传说中的欧拉定理。
我们再把这个图具体化一下,假设这是个电路图。我们来看看 $ Ax=b $ 的含义:
很明显就是每一条边的电压值,而 $ Ax=0 $ 其实就在表示基尔霍夫定律。而另一条基尔霍夫定律也可以被表示出来:
将这两个式子用电导 $ C $ 关联起来就是:$ Ax=V,;A^Ti=0,;i=CVimplies A^TCAx=0 $ 。
这是个很妙的式子,其中的 $ A^TCA $ 的形式很有妙用,与其相关的最小二乘法我们将在下一部分介绍。
正交和最小二乘法
正交
我们对向量的正交( $ orthogonal $ )非常熟悉,即两个向量的点积为 $ 0 $ ,现在我们要把正交的概念扩展到空间。何为两个空间的正交?我们这样定义:
可以很明显地看出空间正交和垂直( $ perpendicular $ )的不同,我们要求两个空间的所有向量互相垂直,这说明两个相交(不为零向量)的空间是绝对不正交的。
回想我们之前提到的零空间的定义:$ Ax=0 $ ,其实就表明了 $ A $ 的零空间中的所有向量和 $ A $ 的行空间垂直,那么我们就可以说这两个空间是正交的。并且这还是一个特别的正交,零空间和行空间的维数加起来刚好是 $ n $ ,相当于这两个正交子空间把一个 $ R^n $ 的空间刚好分割成了两部分,这种正交称为正交补( $ orthogonal;complement $ )。同理,一个矩阵的左零空间和列空间也是正交的。
可以发现,一个子空间占据了一个空间的一部分基向量(如果是一组互相垂直的基),那么这个子空间的正交空间就只能在其他基向量的方向发展了,所以两个正交空间的维数加起来最大就是这两个子空间所属空间的维数。
如何解一个无解的方程
第一眼看上去是个非常荒谬的问题,其实不然。
我们在实际问题测算中,经常要多次测量,列出多个方程,这些方程中还难免有一些误差和错误。所以我们处理方程 $ Ax=b $ 时,经常会有 $ A $ 的行数远远大于列数的情况,而且大概率是无解的。我们当然不能说处理的问题无解了,我们要找到一个尽量符合方程的解,让结果尽量拟合实际数据。
对于 $ Ax= b $ 无解的情况,我们知道是因为 $ A $ 消元消出了零行,或者说 $ A $ 是不可逆的。
在之前,我们提到过一个神奇的式子:$ A^TA $ 。我们这里先贴一个结论:
根据这个结论,我们知道当 $ A $ 的列向量全部线性不相关时,$ A^TA $ (是个 $ n imes n $ 的方阵)可逆。而根据我们刚才的讨论,方程 $ Ax=b $ 无解是因为方程间的冲突,也就是行向量线性相关,列向量的线性相关对方程的有解性是没有影响的,如果有列向量相关,将它们对应的未知数并入主元中即可。这样一来,我们能保证矩阵 $ A $ 列满秩 。也就能保证 $ A^TA $ 是可逆的。
接下来我们来讨论如何利用 $ A^TA $ 是可逆的求出一组解,如何求出最能拟合的解。
投影
我们知道方程 $ Ax= b $ 无解的一个解释是 $ b $ 不在 $ A $ 矩阵的列空间里。而我们要找到近似解,就要找到 $ A $ 列空间里与 $ b $ 最接近的一个向量 $ p $ 。对于一个在 $ A $ 列空间里的 $ p =Ahat{x} $(理解为 $ p $ 是 $ A $ 各列的线性组合) 都有一个误差向量 $ e=b-p $ ,要使误差最小,当然是让 $ p $ 为向量 $ b $ 在 $ A $ 列空间上的投影( $ project $ ),这样 $ e $ 就与 $ A $ 的列空间正交。
我们默认 $ A $ 满秩,那么其每一列都是列空间的一个基向量。于是有:
乍一看这个投影矩阵好像可以化简:$ P=A(ATA){-1}AT=AA{-1}(AT){-1}A^T=I $ ,但是结果明显不合理。这是因为 $ A $ 一般不是可逆矩阵,甚至不是方阵,不能套用这个计算规则。而当 $ A $ 可逆时,相当于是满秩矩阵,列空间就是整个空间,这时 $ b $ 在列空间中的投影就是它本身,符合上面的 $ P=I $ 。
我们不妨再尝试几个情况,当 $ b $ 在 $ A $ 的列空间内时,$ b=Ax' (,) Pb=A(ATA){-1}A^TAx'=Ax'=b $ ;当 $ b $ 与 $ A $ 的列空间正交时,$ A^Tb=0 (,显然有) Pb=A(ATA){-1}A^Tb=0 $ 。都符合我们的几何认知。
除此之外,我们还能发现 $ P^T=P $ ,$ P^n=P $ 。第一个不难证明,此处不赘述。第二个可以先证明 $ P^2=P $ ,只需将式子列出: $ P2=A(ATA){-1}ATA(ATA){-1}AT=A(ATA){-1}AT $ 。第二个性质也有很好的几何解释:任何向量只要投影一次就在目标空间上了,再投影也不会有变化。
上面的推导过程可以总结成三个重要的式子:
我们照着下面这个 形象 的图来再理解下这几个式子。
当我们拿到无解的方程 $ Ax=b $ 时,我们要将 $ b $ 投影到 $ A $ 的列空间得出一组最佳拟合解 $ hat{x} $ ,于是将问题转化成了 $ Ahat{x}=p $ 。通过正交性质我们得到了方程 $ ATAhat{x}=ATb $ ,并回代 $ hat{x} $ 得到了投影矩阵 $ P $ 。
由于 $ e $ 与 $ A $ 的列空间正交,所以 $ e $ 在矩阵 $ A $ 的左零空间中,左零空间和列空间互为正交补,投影过程就像是将 $ b $ 正交分解了 。根据 $ e+p=b $ ,$ (I-P) $ 就是将 $ b $ 投影到 $ N(A^T) $ 上的投影矩阵,也满足上述的投影矩阵的性质。
虽然从实际意义上我们应该解 $ Ahat{x}=p $ 来得到近似解,但是翻译正交关系得到的方程 $ ATAhat{x}=ATb $ 就已经提供了 $ hat{x} $ ,再去解出投影矩阵回代就绕了远路,再根据前面提到的 $ A^TA $ 必定有逆,我们直接解这个式子就能得到答案。
最小二乘法
我们回到最小二乘的概念上来,最小二乘是要保证拟合值和实际值相差的平方和最小,即 $ Minsum{(hat{y_i}-y_i)^2} $ ,用线性代数的语言其实就是求 $ Min,|Ahat{x}-b|^2 $ ,也就是求 $ Min,|e|^2 $ ,而垂直的向量当然是最短的。这就是线性代数表示的最小二乘。
我们不妨举个栗子来具体体会下:
试求 $ (1,1) (,) (2,2) (,) (3,2) $ 的最佳拟合直线。
我们先将这个问题转化成矩阵表示的形式:
计算时利用 $ A^TA $ 的对称性质可以减少计算量。同理可以由此简化投影矩阵 $ P $ 的计算。
用线性代数方法算完后,我们再尝试下用微积分方法计算下上面的栗子:
结果当然是一样的(
最后我们以最开始的结论的证明作结:$ N(A^TA)=N(A) $ 。
最小二乘虽然是一种非常重要的拟合方法,但是明显其受误差较大的数据影响较大。实际情况一般要加上一些优化。
正交基和 $ Gram-Schmidt $ 正交化
在之前的消元中,我们直接将线性不相关的 $ A $ 的各列作为列空间的基,这虽然已经很方便了,但我们能找到更好的基。就像我们偏好在一个正交的坐标系中处理问题,我们期望找到一组正交的单位向量作为列空间的基。
我们称这样一组基为标准正交( $ orthonormal $ )基 $ Q $,表示为:
因为,每一个向量都相互正交,以这些向量为列向量的 $ Q $ 将有非常好的性质:$ Q^TQ=I $ ,尤其对于 $ Q $ 是方阵的情况,$ QT=Q{-1} $ 。 由于 $ A $ 和 $ Q $ 的列空间是完全一样的,我们的投影矩阵就可以简化成 $ P=QQ^T $ 。
那么为了求得这个正交基 $ Q $ ,我们仍要利用投影的方法。之前我们是利用 $ P $ 将一个向量投影到另一个空间上,同时我们也提到了使用 $ I-P $ 可以将一个向量在这个平面的投影减掉,产生一个垂直于当前空间的向量。那么对于基向量 $ a_1,a_2 $ ,我们可以以 $ a_1 $ 作基准( $ a_1'=a_1 $ ),将 $ a_2 $ 减去其在 $ a_1 $ 上的投影:$ a_2'=a_2-frac{a_1'a_1'T}{a_1'Ta_1'}a_2 $ ,可以发现 $ a_1'^Ta_1' $ 和 $ a_1'^Ta_2 $ 都是常数,于是我们可以改写为:$ a_2'=a_2-frac{a_1'Ta_2}{a_1'Ta_1'}a_1' $ 。以此类推,新的正交基为:
然后我们再将每一个向量除以自身的模化成单位向量即可 :$ q_i= frac{a_i'}{|a_i'|} $ 。
根据这个原理,$ Gram $ 和 $ Schmidt $ 给出了一种公式化的求正交向量的方法。和高斯消元时极为相似,我们也将矩阵 $ A $ 进行分解,分解成 $ A=QR $ 。因为 $ A $ 和 $ Q $ 列空间相同,右乘一个矩阵将列向量线性组合就能得到对方。和 $ LU $ 分解不同的是,$ q_i $ 的产生需要 $ q_{j<i} $ 的参与,这样按处理步骤来乘 $ R $ 会造成很多必须要手算的项。若是乘个逆将 $ R $ 移到右侧,反着操作顺序乘, $ R $ 的每一项就有直观的含义了(请参考 $ A=LU $ 中为何将消元矩阵移到右侧理解)。
除此之外,由正交性质可知, $ R $ 还是个上三角矩阵(且可逆):
接下来将详细介绍如何得到 $ R $ 和 $ Q $
我们将从 $ 1 $ 到 $ n $ 对每一个 $ k $ 进行如下操作:
1 .
[r_{kk}=sqrt{sum_{i=1}^{m}{a_{ik}^2}}=|a_k| ]
2 .
[{scr对于 it\, i=1,2cdots m} quad q_{ik}=frac{a_{ik}}{r_{kk}}implies q_k=frac{a_k}{|a_k|} ]
3 .
[{scr对于\,it j=1,2cdots n}quad r_{kj}=sum_{i=1}^{m}{q_{ik}a_{ij}}implies r_{kj}=frac{a_k^Ta_j}{|a_k|} ]
4 .
[{scr对于 it\,j=k+1,k+2cdots n;,;i=1,2cdots m}quad \ a_{ij}=a_{ij}-r_{kj}q_{ik}implies a_j=a_j-frac{a_k^Ta_j}{a_k^Ta_k}a_k ]
对于一个 $ k $ ,我们通过前两步得到 $ q_k $ ,并从后面所有的 $ a_{i};(i>k) $ 中减去 $ frac{a_kTa_i}{a_kTa_k}a_k $ ,也就是说,我们在操作到 $ k $ 时,所有的 $ a_i;(ileq k) $ 已经变成 $ a_i' $ 了,而 $ r_{kj} $ 自然变成了 $ q_k^Ta_j $ 。于是我们最终就能得到 $ A' $ , $ Q $ 和 $ R $ ,且计算次数的数量级只有 $ n^2m $ 。
之后,我们将 $ A $ 分解,将 (A^TAhat{x}=A^Tb) 化为 $ RTQTQRhat{x}= RTQTb $ ,由于 $ Q^TQ= I $ 以及 $ R^T $ 是可逆的,最终简化成了 $ Rhat{x}=Q^Tb $ 。我们求出的 $ R $ 又是个上三角矩阵,甚至连消元都不用就能解出 $ hat{x} $ 。
TO BE CONTINUED
tip:m=n=r的矩阵必是可逆矩阵,因为其可以消元变化成单位矩阵,而单位矩阵和消元矩阵都是可逆的。
tip:消元和相关性相对应,例如列向量相关,则行消元时就会出现自由变量(下一行出现0)
tip:消元时优先用考前的行,若后面有线性相关的行,则能通过上面消为0,列的相关则见上一条。
tip:秩并不属于行或者列,秩既是主列个数也是主行个数。而主元个数既是主列数也是主行数,参考上两条