线性代数原文 MIT 18.06 线性代数笔记
矩阵论笔记来自 工程矩阵理论
综合线性代数 机器学习的数学基础
配合视频 线性代数 工程矩阵理论
在本讲的开始,先接着上一讲来继续说一说正定矩阵。
正定矩阵的逆矩阵有什么性质?我们将正定矩阵分解为 A = S Λ S − 1 A=S\Lambda S^{-1} A=SΛS−1,引入其逆矩阵 A − 1 = S Λ − 1 S − 1 A^{-1}=S\Lambda^{-1}S^{-1} A−1=SΛ−1S−1(正定矩阵的顺序主子式大于零,因此必可逆),我们知道正定矩阵的特征值均为正值,所以其逆矩阵的特征值也必为正值(即原矩阵特征值的倒数)所以,正定矩阵的逆矩阵也是正定的。
如果 A , B A,\ B A, B均为正定矩阵,那么 A + B A+B A+B呢?我们可以从判定 x T ( A + B ) x x^T(A+B)x xT(A+B)x入手,根据条件有 x T A x > 0 , x T B x > 0 x^TAx>0,\ x^TBx>0 xTAx>0, xTBx>0,将两式相加即得到 x T ( A + B ) x > 0 x^T(A+B)x>0 xT(A+B)x>0。所以正定矩阵之和也是正定矩阵。
再来看有 m × n m\times n m×n矩阵 A A A,则 A T A A^TA ATA具有什么性质?我们在投影部分经常使用 A T A A^TA ATA,这个运算会得到一个对称矩阵,这个形式的运算用数字打比方就像是一个平方,用向量打比方就像是向量的长度平方,而对于矩阵,有 A T A A^TA ATA正定:在式子两边分别乘向量及其转置得到 x T A T A x x^TA^TAx xTATAx,分组得到 ( A x ) T ( A x ) (Ax)^T(Ax) (Ax)T(Ax),相当于得到了向量 A x Ax Ax的长度平方,则 ∣ A x ∣ 2 ≥ 0 |Ax|^2\geq0 ∣Ax∣2≥0。要保证模不为零,则需要 A x Ax Ax的零空间中仅有零向量,即 A A A的各列线性无关( r a n k ( A ) = n rank(A)=n rank(A)=n)即可保证 ∣ A x ∣ 2 > 0 |Ax|^2>0 ∣Ax∣2>0, A T A A^TA ATA正定。
另外,在矩阵数值计算中,正定矩阵消元不需要进行“行交换”操作,也不必担心主元过小或为零,正定矩阵具有良好的计算性质。
一组相似矩阵表示的是同样的线性变换,就像是对一个人从不同的角度(即基不同)拍照,照片是不一样的,但实际上都是在拍用一个人
先列出定义:矩阵 A , B A,\ B A, B对于某矩阵 M M M满足 B = M − 1 A M B=M^{-1}AM B=M−1AM时,成 A , B A,\ B A, B互为相似矩阵。
对于在对角化一讲(第二十二讲)中学过的式子 S − 1 A S = Λ S^{-1}AS=\Lambda S−1AS=Λ,则有 A A A相似于 Λ \Lambda Λ。
举个例子, A = [ 2 1 1 2 ] A=\begin{bmatrix}2&1\\1&2\end{bmatrix} A=[2112],容易通过其特征值得到相应的对角矩阵 Λ = [ 3 0 0 1 ] \Lambda=\begin{bmatrix}3&0\\0&1\end{bmatrix} Λ=[3001],取 M = [ 1 4 0 1 ] M=\begin{bmatrix}1&4\\0&1\end{bmatrix} M=[1041],则 B = M − 1 A M = [ 1 − 4 0 1 ] [ 2 1 1 2 ] [ 1 4 0 1 ] = [ − 2 − 15 1 6 ] B=M^{-1}AM=\begin{bmatrix}1&-4\\0&1\end{bmatrix}\begin{bmatrix}2&1\\1&2\end{bmatrix}\begin{bmatrix}1&4\\0&1\end{bmatrix}=\begin{bmatrix}-2&-15\\1&6\end{bmatrix} B=M−1AM=[10−41][2112][1041]=[−21−156]。
我们来计算这几个矩阵的的特征值(利用迹与行列式的性质), λ Λ = 3 , 1 \lambda_{\Lambda}=3,\ 1 λΛ=3, 1、 λ A = 3 , 1 \lambda_A=3,\ 1 λA=3, 1、 λ B = 3 , 1 \lambda_B=3,\ 1 λB=3, 1。
所以,相似矩阵有相同的特征值。
现在我们来证明这个性质,有 A x = λ x , B = M − 1 A M Ax=\lambda x,\ B=M^{-1}AM Ax=λx, B=M−1AM,第一个式子化为 A M M − 1 x = λ x AMM^{-1}x=\lambda x AMM−1x=λx,接着两边同时左乘 M − 1 M^{-1} M−1得 M − 1 A M M − 1 x = λ M − 1 x M^{-1}AMM^{-1}x=\lambda M^{-1}x M−1AMM−1x=λM−1x,进行适当的分组得 ( M − 1 A M ) M − 1 x = λ M − 1 x \left(M^{-1}AM\right)M^{-1}x=\lambda M^{-1}x (M−1AM)M−1x=λM−1x即 B M − 1 x = λ M − 1 x BM^{-1}x=\lambda M^{-1}x BM−1x=λM−1x。
B M − 1 x = λ M − 1 x BM^{-1}x=\lambda M^{-1}x BM−1x=λM−1x可以解读成矩阵 B B B与向量 M − 1 x M^{-1}x M−1x之积等于 λ \lambda λ与向量 M − 1 x M^{-1}x M−1x之积,也就是 B B B的特征值仍为 λ \lambda λ,而特征向量变为 M − 1 x M^{-1}x M−1x。
以上就是我们得到的一族特征值为 3 , 1 3,\ 1 3, 1的矩阵,它们具有相同的特征值。接下来看特征值重复时的情形。
若尔当形在过去是线性代数的核心知识,但现在不是了(现在是下一讲的奇异值分解),因为它并不容易计算。
矩阵 A A A和 B B B相似有如下性质
∣ λ E − A ∣ = ∣ λ E − B ∣ |\lambda E-A|=|\lambda E-B| ∣λE−A∣=∣λE−B∣
r ( A ) = r ( B ) r(A)=r(B) r(A)=r(B)
A A A和 B B B有相同的特征值
∣ A ∣ = ∣ B ∣ = 特 征 值 之 积 |A|=|B|=特征值之积 ∣A∣=∣B∣=特征值之积
t r a ( A ) = t r a ( B ) = 特 征 值 之 和 tra(A)=tra(B)=特征值之和 tra(A)=tra(B)=特征值之和
矩阵特征值只有可能是化零多项式的零点,但化零多项式的零点不一定是特征值
化零多项式的解可以用 P − 1 A P P^{-1}AP P−1AP表达, A A A是对角阵,对角线元素是化零多项式的零点,每个零点个数不定
化零多项式无重根(代数重度不确定) ⇒ \Rightarrow ⇒ 最小多项式无重根(最小多项式能整除化零多项式) ⇒ \Rightarrow ⇒ 矩阵可对角化
J o r d a n Jordan Jordan块可以写成 J = λ E k + N J=\lambda E_k+N J=λEk+N,即 N N N矩阵(幂零矩阵)和数量矩阵(对角阵)
对于方阵 A A A和方阵 B B B,若 ∣ A ∣ ≠ 0 |A|{\neq}0 ∣A∣=0,那么 A B AB AB和 B A BA BA相似
再来看一个更加“糟糕”的矩阵:
矩阵 [ 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ] \begin{bmatrix}0&1&0&0\\0&0&1&0\\0&0&0&0\\0&0&0&0\end{bmatrix} ⎣⎢⎢⎡0000100001000000⎦⎥⎥⎤,其特征值为四个零。很明显矩阵的秩为 2 2 2,所以其零空间的维数为 4 − 2 = 2 4-2=2 4−2=2,即该矩阵有两个特征向量。
另一个例子, [ 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 ] \begin{bmatrix}0&1&0&0\\0&0&0&0\\0&0&0&1\\0&0&0&0\end{bmatrix} ⎣⎢⎢⎡0000100000000010⎦⎥⎥⎤,从特征向量的数目看来这两个矩阵是相似的,其实不然。
若尔当认为第一个矩阵是由一个 3 × 3 3\times 3 3×3的块与一个 1 × 1 1\times 1 1×1的块组成的 [ 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 ] \left[\begin{array}{ccc|c}0&1&0&0\\0&0&1&0\\0&0&0&0\\\hline0&0&0&0\end{array}\right] ⎣⎢⎢⎡0000100001000000⎦⎥⎥⎤,而第二个矩阵是由两个 2 × 2 2\times 2 2×2矩阵组成的 [ 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 ] \left[\begin{array}{cc|cc}0&1&0&0\\0&0&0&0\\\hline0&0&0&1\\0&0&0&0\end{array}\right] ⎣⎢⎢⎡0000100000000010⎦⎥⎥⎤,这些分块被称为若尔当块。
若尔当块的定义型为 J i = [ λ i 1 ⋯ λ i 1 ⋯ λ i ⋯ ⋮ ⋮ ⋮ ⋱ λ i ] J_i=\begin{bmatrix}\lambda_i&1&&\cdots&\\&\lambda_i&1&\cdots&\\&&\lambda_i&\cdots&\\\vdots&\vdots&\vdots&\ddots&\\&&&&\lambda_i\end{bmatrix} Ji=⎣⎢⎢⎢⎢⎢⎡λi⋮1λi⋮1λi⋮⋯⋯⋯⋱λi⎦⎥⎥⎥⎥⎥⎤,它的对角线上只为同一个数,仅有一个特征向量。
所以,每一个矩阵 A A A都相似于一个若尔当矩阵,型为 J = [ J 1 J 2 ⋱ J d ] J=\left[\begin{array}{c|c|c|c}J_1&&&\\\hline&J_2&&\\\hline&&\ddots&\\\hline&&&J_d\end{array}\right] J=⎣⎢⎢⎡J1J2⋱Jd⎦⎥⎥⎤。注意,对角线上方还有 1 1 1。若尔当块的个数即为矩阵特征值的个数。
在矩阵为“好矩阵”的情况下, n n n阶矩阵将有 n n n个不同的特征值,那么它可以对角化,所以它的若尔当矩阵就是 Λ \Lambda Λ,共 n n n个特征向量,有 n n n个若尔当块。
任意矩阵 A A A都一定相似于唯一的 J o r d a n Jordan Jordan标准形(忽略 J o r d a n Jordan Jordan块的次序),对于给定的矩阵 A A A可以尝试以下方法寻找它对应的 J o r d a n Jordan Jordan标准形:
本讲我们将一个矩阵分解为 A = U Σ V T A=U\varSigma V^T A=UΣVT,分解的因子分别为正交矩阵、对角矩阵、正交矩阵,与前面几讲的分解不同的是,这两个正交矩阵通常是不同的,而且这个式子可以对任意矩阵使用,不仅限于方阵、可对角化的方阵等。
在正定一讲中(第二十八讲)我们知道一个正定矩阵(正定矩阵概念不同,部分教材定义正定二次型的矩阵称为正定矩阵)可以分解为 A = Q Λ Q T A=Q\Lambda Q^T A=QΛQT的形式,由于 A A A是对称的,其特征向量是正交的,且其 Λ \Lambda Λ矩阵中的元素皆为正,这就是正定矩阵的奇异值分解。在这种特殊的分解中,我们只需要一个正交矩阵 Q Q Q就可以使等式成立。
在对角化一讲中(第二十二讲),我们知道可对角化的矩阵能够分解为 A = S Λ S T A=S\Lambda S^T A=SΛST的形式,其中 S S S的列向量由 A A A的特征向量组成,但 S S S并不是正交矩阵,所以这不是我们希望得到的奇异值分解。
我们现在要做的是,在 A A A的列空间中找到一组特殊的正交基 v 1 , v 2 , ⋯ , v r v_1,v_2,\cdots,v_r v1,v2,⋯,vr,这组基在 A A A的作用下可以转换为 A A A的行空间中的一组正交基 u 1 , u 2 , ⋯ , u r u_1,u_2,\cdots,u_r u1,u2,⋯,ur
用矩阵语言描述为 A [ v 1 v 2 ⋯ v r ] = [ σ 1 u 1 σ 2 u 2 ⋯ σ r u r ] = [ u 1 u 2 ⋯ u r ] [ σ 1 σ 2 ⋱ σ n ] A\Bigg[v_1\ v_2\ \cdots\ v_r\Bigg]=\Bigg[\sigma_1u_1\ \sigma_2u_2\ \cdots\ \sigma_ru_r\Bigg]=\Bigg[u_1\ u_2\ \cdots\ u_r\Bigg]\begin{bmatrix}\sigma_1&&&\\&\sigma_2&&\\&&\ddots&\\&&&\sigma_n\end{bmatrix} A[v1 v2 ⋯ vr]=[σ1u1 σ2u2 ⋯ σrur]=[u1 u2 ⋯ ur]⎣⎢⎢⎡σ1σ2⋱σn⎦⎥⎥⎤,即 A v 1 = σ 1 u 1 , A v 2 = σ 2 u 2 , ⋯ , A v r = σ r u r Av_1=\sigma_1u_1,\ Av_2=\sigma_2u_2,\cdots,Av_r=\sigma_ru_r Av1=σ1u1, Av2=σ2u2,⋯,Avr=σrur,这些 σ \sigma σ是缩放因子,表示在转换过程中有拉伸或压缩。而 A A A的左零空间和零空间将体现在 σ \sigma σ的零值中。
另外,如果算上左零、零空间,我们同样可以对左零、零空间取标准正交基,然后写为 A [ v 1 v 2 ⋯ v r v r + 1 ⋯ v m ] = [ u 1 u 2 ⋯ u r u r + 1 ⋯ u n ] [ σ 1 ⋱ σ r [ 0 ] ] A\Bigg[v_1\ v_2\ \cdots\ v_r\ v_{r+1}\ \cdots\ v_m\Bigg]=\Bigg[u_1\ u_2\ \cdots\ u_r\ u_{r+1}\ \cdots \ u_n\Bigg]\left[\begin{array}{c c c|c}\sigma_1&&&\\&\ddots&&\\&&\sigma_r&\\\hline&&&\begin{bmatrix}0\end{bmatrix}\end{array}\right] A[v1 v2 ⋯ vr vr+1 ⋯ vm]=[u1 u2 ⋯ ur ur+1 ⋯ un]⎣⎢⎢⎡σ1⋱σr[0]⎦⎥⎥⎤,此时 U U U是 m × m m\times m m×m正交矩阵, Σ \varSigma Σ是 m × n m\times n m×n对角矩阵, V T V^T VT是 n × n n\times n n×n正交矩阵。
最终可以写为 A V = U Σ AV=U\varSigma AV=UΣ,可以看出这十分类似对角化的公式,矩阵 A A A被转化为对角矩阵 Σ \varSigma Σ,我们也注意到 U , V U,\ V U, V是两组不同的正交基。(在正定的情况下, U , V U,\ V U, V都变成了 Q Q Q。)进一步可以写作 A = U Σ V − 1 A=U\varSigma V^{-1} A=UΣV−1,因为 V V V是标准正交矩阵所以可以写为 A = U Σ V T A=U\varSigma V^T A=UΣVT
计算一个例子, A = [ 4 4 − 3 3 ] A=\begin{bmatrix}4&4\\-3&3\end{bmatrix} A=[4−343],我们需要找到:
在 A = U Σ V T A=U\varSigma V^T A=UΣVT中有两个标准正交矩阵需要求解,我们希望一次只解一个,如何先将 U U U消去来求 V V V?
这个技巧会经常出现在长方形矩阵中:求 A T A A^TA ATA,这是一个对称半正定矩阵,于是有 A T A = V Σ T U T U Σ V T A^TA=V\varSigma^TU^TU\varSigma V^T ATA=VΣTUTUΣVT,由于 U U U是标准正交矩阵,所以 U T U = E U^TU=E UTU=E,而 Σ T Σ \varSigma^T\varSigma ΣTΣ是对角线元素为 σ 2 \sigma^2 σ2的对角矩阵。
现在有 A T A = V [ σ 1 σ 2 ⋱ σ n ] V T A^TA=V\begin{bmatrix}\sigma_1&&&\\&\sigma_2&&\\&&\ddots&\\&&&\sigma_n\end{bmatrix}V^T ATA=V⎣⎢⎢⎡σ1σ2⋱σn⎦⎥⎥⎤VT,这个式子中 V V V即是 A T A A^TA ATA的特征向量矩阵而 Σ 2 \varSigma^2 Σ2是其特征值矩阵,因此 A A A的奇异值实际是 A T A 的 特 征 值 \sqrt{A^TA的特征值} ATA的特征值
同理,我们只想求 U U U时,用 A A T AA^T AAT消掉 V V V即可。
我们来计算 A T A = [ 4 − 3 4 3 ] [ 4 4 − 3 3 ] = [ 25 7 7 25 ] A^TA=\begin{bmatrix}4&-3\\4&3\end{bmatrix}\begin{bmatrix}4&4\\-3&3\end{bmatrix}=\begin{bmatrix}25&7\\7&25\end{bmatrix} ATA=[44−33][4−343]=[257725],对于简单的矩阵可以直接观察得到特征向量 A T A [ 1 1 ] = 32 [ 1 1 ] , A T A [ 1 − 1 ] = 18 [ 1 − 1 ] A^TA\begin{bmatrix}1\\1\end{bmatrix}=32\begin{bmatrix}1\\1\end{bmatrix},\ A^TA\begin{bmatrix}1\\-1\end{bmatrix}=18\begin{bmatrix}1\\-1\end{bmatrix} ATA[11]=32[11], ATA[1−1]=18[1−1],化为单位向量有 σ 1 = 32 , v 1 = [ 1 2 1 2 ] , σ 2 = 18 , v 2 = [ 1 2 − 1 2 ] \sigma_1=32,\ v_1=\begin{bmatrix}\frac{1}{\sqrt{2}}\\\frac{1}{\sqrt{2}}\end{bmatrix},\ \sigma_2=18,\ v_2=\begin{bmatrix}\frac{1}{\sqrt{2}}\\-\frac{1}{\sqrt{2}}\end{bmatrix} σ1=32, v1=[2121], σ2=18, v2=[21−21]。
到目前为止,我们得到 [ 4 4 − 3 3 ] = [ u ? u ? u ? u ? ] [ 32 0 0 18 ] [ 1 2 1 2 1 2 − 1 2 ] \begin{bmatrix}4&4\\-3&3\end{bmatrix}=\begin{bmatrix}u_?&u_?\\u_?&u_?\end{bmatrix}\begin{bmatrix}\sqrt{32}&0\\0&\sqrt{18}\end{bmatrix}\begin{bmatrix}\frac{1}{\sqrt{2}}&\frac{1}{\sqrt{2}}\\\frac{1}{\sqrt{2}}&-\frac{1}{\sqrt{2}}\end{bmatrix} [4−343]=[u?u?u?u?][320018][212121−21],接下来继续求解 U U U。
A A T = U Σ V T V Σ T U T = U Σ 2 U T AA^T=U\varSigma V^TV\varSigma^TU^T=U\varSigma^2U^T AAT=UΣVTVΣTUT=UΣ2UT,求出 A A T AA^T AAT的特征向量即可得到 U U U, [ 4 4 − 3 3 ] [ 4 − 3 4 3 ] = [ 32 0 0 18 ] \begin{bmatrix}4&4\\-3&3\end{bmatrix}\begin{bmatrix}4&-3\\4&3\end{bmatrix}=\begin{bmatrix}32&0\\0&18\end{bmatrix} [4−343][44−33]=[320018],观察得 A A T [ 1 0 ] = 32 [ 1 0 ] , A A T [ 0 1 ] = 18 [ 0 1 ] AA^T\begin{bmatrix}1\\0\end{bmatrix}=32\begin{bmatrix}1\\0\end{bmatrix},\ AA^T\begin{bmatrix}0\\1\end{bmatrix}=18\begin{bmatrix}0\\1\end{bmatrix} AAT[10]=32[10], AAT[01]=18[01]。但是我们不能直接使用这一组特征向量,因为式子 A V = U Σ AV=U\varSigma AV=UΣ明确告诉我们,一旦 V V V确定下来, U U U也必须取能够满足该式的向量,所以此处 A v 2 = [ 0 − 18 ] = u 2 σ 2 = [ 0 − 1 ] 18 Av_2=\begin{bmatrix}0\\-\sqrt{18}\end{bmatrix}=u_2\sigma_2=\begin{bmatrix}0\\-1\end{bmatrix}\sqrt{18} Av2=[0−18]=u2σ2=[0−1]18,则 u 1 = [ 1 0 ] , u 2 = [ 0 − 1 ] u_1=\begin{bmatrix}1\\0\end{bmatrix},\ u_2=\begin{bmatrix}0\\-1\end{bmatrix} u1=[10], u2=[0−1]。(这个问题在本讲的官方笔记中有详细说明。)
最终,我们得到 [ 4 4 − 3 3 ] = [ 1 0 0 − 1 ] [ 32 0 0 18 ] [ 1 2 1 2 1 2 − 1 2 ] \begin{bmatrix}4&4\\-3&3\end{bmatrix}=\begin{bmatrix}1&0\\0&-1\end{bmatrix}\begin{bmatrix}\sqrt{32}&0\\0&\sqrt{18}\end{bmatrix}\begin{bmatrix}\frac{1}{\sqrt{2}}&\frac{1}{\sqrt{2}}\\\frac{1}{\sqrt{2}}&-\frac{1}{\sqrt{2}}\end{bmatrix} [4−343]=[100−1][320018][212121−21]。
再做一个例子, A = [ 4 3 8 6 ] A=\begin{bmatrix}4&3\\8&6\end{bmatrix} A=[4836],这是个秩一矩阵,有零空间。 A A A的行空间为 [ 4 3 ] \begin{bmatrix}4\\3\end{bmatrix} [43]的倍数, A A A的列空间为 [ 4 8 ] \begin{bmatrix}4\\8\end{bmatrix} [48]的倍数。
最终得到 [ 4 3 8 6 ] = [ 1 2 ‾ 2 − 1 ‾ ] [ 125 0 0 0 ‾ ] [ 0.8 0.6 0.6 ‾ − 0.8 ‾ ] \begin{bmatrix}4&3\\8&6\end{bmatrix}=\begin{bmatrix}1&\underline {2}\\2&\underline{-1}\end{bmatrix}\begin{bmatrix}\sqrt{125}&0\\0&\underline{0}\end{bmatrix}\begin{bmatrix}0.8&0.6\\\underline{0.6}&\underline{-0.8}\end{bmatrix} [4836]=[122−1][125000][0.80.60.6−0.8],其中下划线部分都是与零空间相关的部分。
通过将矩阵写为 A v i = σ i u i Av_i=\sigma_iu_i Avi=σiui形式,将矩阵对角化,向量 u , v u,\ v u, v之间没有耦合, A A A乘以每个 v v v都能得到一个相应的 u u u。
如何判断一个操作是不是线性变换?线性变换需满足以下两个要求:
T ( v + w ) = T ( v ) + T ( w ) T ( c v ) = c T ( v ) T(v+w)=T(v)+T(w)\\ T(cv)=cT(v) T(v+w)=T(v)+T(w)T(cv)=cT(v)
即变换 T T T需要同时满足加法和数乘不变的性质。将两个性质合成一个式子为: T ( c v + d w ) = c T ( v ) + d T ( w ) T(cv+dw)=cT(v)+dT(w) T(cv+dw)=cT(v)+dT(w)
例1,二维空间中的投影操作, T : R 2 → R 2 T: \mathbb{R}^2\to\mathbb{R}^2 T:R2→R2,它可以将某向量投影在一条特定直线上。检查一下投影操作,如果我们将向量长度翻倍,则其投影也翻倍;两向量相加后做投影与两向量做投影再相加结果一致。所以投影操作是线性变换。
“坏”例1,二维空间的平移操作,即平面平移:
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
fig = plt.figure()
sp1 = plt.subplot(221)
vectors_1 = np.array([[0,0,3,2],])
X_1, Y_1, U_1, V_1 = zip(*vectors_1)
plt.axhline(y=0, c='black')
plt.axvline(x=0, c='black')
sp1.quiver(X_1, Y_1, U_1, V_1, angles='xy', scale_units='xy', scale=1)
sp1.set_xlim(0, 10)
sp1.set_ylim(0, 5)
sp1.set_xlabel("before shifted")
sp2 = plt.subplot(222)
vector_2 = np.array([[0,0,3,2],
[3,2,2,0],
[0,0,5,2],
[0,0,10,4]])
X_2,Y_2,U_2,V_2 = zip(*vector_2)
plt.axhline(y=0, c='black')
plt.axvline(x=0, c='black')
sp2.quiver(X_2, Y_2, U_2, V_2, angles='xy', scale_units='xy', scale=1)
sp2.set_xlim(0, 10)
sp2.set_ylim(0, 5)
sp2.set_xlabel("shifted by horizontal 2 then double")
sp3 = plt.subplot(223)
vectors_1 = np.array([[0,0,6,4],])
X_1, Y_1, U_1, V_1 = zip(*vectors_1)
plt.axhline(y=0, c='black')
plt.axvline(x=0, c='black')
sp3.quiver(X_1, Y_1, U_1, V_1, angles='xy', scale_units='xy', scale=1)
sp3.set_xlim(0, 10)
sp3.set_ylim(0, 5)
sp3.set_xlabel("double the vector")
sp4 = plt.subplot(224)
vector_2 = np.array([[0,0,6,4],
[6,4,2,0],
[0,0,8,4]])
X_2,Y_2,U_2,V_2 = zip(*vector_2)
plt.axhline(y=0, c='black')
plt.axvline(x=0, c='black')
sp4.quiver(X_2, Y_2, U_2, V_2, angles='xy', scale_units='xy', scale=1)
sp4.set_xlim(0, 10)
sp4.set_ylim(0, 5)
sp4.set_xlabel("doubled vector shifted by horizontal 2")
plt.subplots_adjust(hspace=0.33)
plt.draw()
plt.close(fig)
比如,上图中向量长度翻倍,再做平移,明显与向量平移后再翻倍的结果不一致。
有时我们也可以用一个简单的特例判断线性变换,检查 T ( 0 ) = ? 0 T(0)\stackrel{?}{=}0 T(0)=?0。零向量平移后结果并不为零。
所以平面平移操作并不是线性变换。
“坏”例2,求模运算, T ( v ) = ∥ v ∥ , T : R 3 → R 1 T(v)=\|v\|,\ T:\mathbb{R}^3\to\mathbb{R}^1 T(v)=∥v∥, T:R3→R1,这显然不是线性变换,比如如果我们将向量翻倍则其模翻倍,但如果我将向量翻倍取负,则其模依然翻倍。所以 T ( − v ) ≠ − T ( v ) T(-v)\neq -T(v) T(−v)=−T(v)
例2,旋转 4 5 ∘ 45^\circ 45∘操作, T : R 2 → R 2 T:\mathbb{R}^2\to\mathbb{R}^2 T:R2→R2,也就是将平面内一个向量映射为平面内另一个向量。检查可知,如果向量翻倍,则旋转后同样翻倍;两个向量先旋转后相加,与这两个向量先相加后旋转得到的结果一样。
所以从上面的例子我们知道,投影与旋转都是线性变换。
例3,矩阵乘以向量, T ( v ) = A v T(v)=Av T(v)=Av,这也是一个(一系列)线性变换,不同的矩阵代表不同的线性变换。根据矩阵的运算法则有 A ( v + w ) = A ( v ) + A ( w ) , A ( c v ) = c A v A(v+w)=A(v)+A(w),\ A(cv)=cAv A(v+w)=A(v)+A(w), A(cv)=cAv。比如取 A = [ 1 0 0 − 1 ] A=\begin{bmatrix}1&0\\0&-1\end{bmatrix} A=[100−1],作用于平面上的向量 v v v,会导致 v v v的 x x x分量不变,而 y y y分量取反,也就是图像沿 x x x轴翻转。
线性变换的核心,就是该变换使用的相应的矩阵。
比如我们需要做一个线性变换,将一个三维向量降至二维, T : R 3 → R 2 T:\mathbb{R}^3\to\mathbb{R}^2 T:R3→R2,则在 T ( v ) = A v T(v)=Av T(v)=Av中, v ∈ R 3 , T ( v ) ∈ R 2 v\in\mathbb{R}^3,\ T(v)\in\mathbb{R}^2 v∈R3, T(v)∈R2,所以 A A A应当是一个 2 × 3 2\times 3 2×3矩阵。
如果我们希望知道线性变换 T T T对整个输入空间 R n \mathbb{R}^n Rn的影响,我们可以找到空间的一组基 v 1 , v 2 , ⋯ , v n v_1,\ v_2,\ \cdots,\ v_n v1, v2, ⋯, vn,检查 T T T对每一个基的影响 T ( v 1 ) , T ( v 2 ) , ⋯ , T ( v n ) T(v_1),\ T(v_2),\ \cdots,\ T(v_n) T(v1), T(v2), ⋯, T(vn),由于输入空间中的任意向量都满足:
v = c 1 v 1 + c 2 v 2 + ⋯ + c n v n (1) v=c_1v_1+c_2v_2+\cdots+c_nv_n\tag{1} v=c1v1+c2v2+⋯+cnvn(1)
所以我们可以根据 T ( v ) T(v) T(v)推出线性变换 T T T对空间内任意向量的影响,得到:
T ( v ) = c 1 T ( v 1 ) + c 2 T ( v 2 ) + ⋯ + c n T ( v n ) (2) T(v)=c_1T(v_1)+c_2T(v_2)+\cdots+c_nT(v_n)\tag{2} T(v)=c1T(v1)+c2T(v2)+⋯+cnT(vn)(2)
现在我们需要考虑,如何把一个与坐标无关的线性变换变成一个与坐标有关的矩阵呢?
在 1 1 1式中, c 1 , c 2 , ⋯ , c n c_1,c_2,\cdots,c_n c1,c2,⋯,cn就是向量 v v v在基 v 1 , v 2 , ⋯ , v n v_1,v_2,\cdots,v_n v1,v2,⋯,vn上的坐标,比如分解向量 v = [ 3 2 4 ] = 3 [ 1 0 0 ] + 2 [ 0 1 0 ] + 4 [ 0 0 1 ] v=\begin{bmatrix}3\\2\\4\end{bmatrix}=3\begin{bmatrix}1\\0\\0\end{bmatrix}+2\begin{bmatrix}0\\1\\0\end{bmatrix}+4\begin{bmatrix}0\\0\\1\end{bmatrix} v=⎣⎡324⎦⎤=3⎣⎡100⎦⎤+2⎣⎡010⎦⎤+4⎣⎡001⎦⎤,式子将向量 v v v分解在一组标准正交基 [ 1 0 0 ] , [ 0 1 0 ] , [ 0 0 1 ] \begin{bmatrix}1\\0\\0\end{bmatrix},\begin{bmatrix}0\\1\\0\end{bmatrix},\begin{bmatrix}0\\0\\1\end{bmatrix} ⎣⎡100⎦⎤,⎣⎡010⎦⎤,⎣⎡001⎦⎤上。当然,我们也可以选用矩阵的特征向量作为基向量,基的选择是多种多样的。
我们打算构造一个矩阵 A A A用以表示线性变换 T : R n → R m T:\mathbb{R}^n\to\mathbb{R}^m T:Rn→Rm。我们需要两组基,一组用以表示输入向量,一组用以表示输出向量。令 v 1 , v 2 , ⋯ , v n v_1,v_2,\cdots,v_n v1,v2,⋯,vn为输入向量的基,这些向量来自 R n \mathbb{R}^n Rn; w 1 , w 2 , ⋯ , w m w_1,w_2,\cdots,w_m w1,w2,⋯,wm作为输出向量的基,这些向量来自 R m \mathbb{R}^m Rm。
我们用二维空间的投影矩阵作为例子:
fig = plt.figure()
vectors_1 = np.array([[0, 0, 3, 2],
[0, 0, -2, 3]])
X_1, Y_1, U_1, V_1 = zip(*vectors_1)
plt.axis('equal')
plt.axhline(y=0, c='black')
plt.axvline(x=0, c='black')
plt.quiver(X_1, Y_1, U_1, V_1, angles='xy', scale_units='xy', scale=1)
plt.plot([-6, 12], [-4, 8])
plt.annotate('$v_1=w_1$', xy=(1.5, 1), xytext=(10, -20), textcoords='offset points', size=14, arrowprops=dict(arrowstyle="->"))
plt.annotate('$v_2=w_2$', xy=(-1, 1.5), xytext=(-60, -20), textcoords='offset points', size=14, arrowprops=dict(arrowstyle="->"))
plt.annotate('project line', xy=(4.5, 3), xytext=(-90, 10), textcoords='offset points', size=14, arrowprops=dict(arrowstyle="->"))
ax = plt.gca()
ax.set_xlim(-5, 5)
ax.set_ylim(-4, 4)
ax.set_xlabel("Project Example")
plt.draw()
plt.close(fig)
从图中可以看到,设输入向量的基为 v 1 , v 2 v_1,v_2 v1,v2, v 1 v_1 v1就在投影上,而 v 2 v_2 v2垂直于投影方向,输出向量的基为 w 1 , w 2 w_1,w_2 w1,w2,而 v 1 = w 1 , v 2 = w 2 v_1=w_1,v_2=w_2 v1=w1,v2=w2。那么如果输入向量为 v = c 1 v 1 + c 2 v 2 v=c_1v_1+c_2v_2 v=c1v1+c2v2,则输出向量为 T ( v ) = c 1 v 1 T(v)=c_1v_1 T(v)=c1v1,也就是线性变换去掉了法线方向的分量,输入坐标为 ( c 1 , c 2 ) (c_1,c_2) (c1,c2),输出坐标变为 ( c 1 , 0 ) (c_1,0) (c1,0)。
找出这个矩阵并不困难, A v = w Av=w Av=w,则有 [ 1 0 0 0 ] [ c 1 c 2 ] = [ c 1 0 ] \begin{bmatrix}1&0\\0&0\end{bmatrix}\begin{bmatrix}c_1\\c_2\end{bmatrix}=\begin{bmatrix}c_1\\0\end{bmatrix} [1000][c1c2]=[c10]。
本例中我们选取的基极为特殊,一个沿投影方向,另一个沿投影法线方向,其实这两个向量都是投影矩阵的特征向量,所以我们得到的线性变换矩阵是一个对角矩阵,这是一组很好的基。
所以,如果我们选取投影矩阵的特征向量作为基,则得到的线性变换矩阵将是一个包含投影矩阵特征值的对角矩阵。
继续这个例子,我们不再选取特征向量作为基,而使用标准基 v 1 = [ 1 0 ] , v 2 = [ 0 1 ] v_1=\begin{bmatrix}1\\0\end{bmatrix},v_2=\begin{bmatrix}0\\1\end{bmatrix} v1=[10],v2=[01],我们继续使用相同的基作为输出空间的基,即 v 1 = w 1 , v 2 = w 2 v_1=w_1,v_2=w_2 v1=w1,v2=w2。此时投影矩阵为 P = a a T a T a = [ 1 2 1 2 1 2 1 2 ] P=\frac{aa^T}{a^Ta}=\begin{bmatrix}\frac{1}{2}&\frac{1}{2}\\\frac{1}{2}&\frac{1}{2}\end{bmatrix} P=aTaaaT=[21212121],这个矩阵明显没有上一个矩阵“好”,不过这个矩阵也是一个不错的对称矩阵。
总结通用的计算线性变换矩阵 A A A的方法:
最后我们介绍一种不一样的线性变换, T = d d x T=\frac{\mathrm{d}}{\mathrm{d}x} T=dxd:
设输入为 c 1 + c 2 x + c 3 x 3 c_1+c_2x+c_3x^3 c1+c2x+c3x3,基为 1 , x , x 2 1,x,x^2 1,x,x2;
则输出为导数: c 2 + 2 c 3 x c_2+2c_3x c2+2c3x,基为 1 , x 1,x 1,x;
所以我们需要求一个从三维输入空间到二维输出空间的线性变换,目的是求导。求导运算其实是线性变换,因此我们只要知道少量函数的求导法则(如 sin x , cos x , e x \sin x, \cos x, e^x sinx,cosx,ex),就能求出它们的线性组合的导数。
有 A [ c 1 c 2 c 3 ] = [ c 2 2 c 3 ] A\begin{bmatrix}c_1\\c_2\\c_3\end{bmatrix}=\begin{bmatrix}c_2\\2c_3\end{bmatrix} A⎣⎡c1c2c3⎦⎤=[c22c3],从输入输出的空间维数可知, A A A是一个 2 × 3 2\times 3 2×3矩阵, A = [ 0 1 0 0 0 2 ] A=\begin{bmatrix}0&1&0\\0&0&2\end{bmatrix} A=[001002]。
最后,矩阵的逆相当于对应线性变换的逆运算,矩阵的乘积相当于线性变换的乘积,实际上矩阵乘法也源于线性变换。
线性变换的核子空间 K ( f ) K(f) K(f) ⟺ \iff ⟺ 矩阵 A A A的零空间
线性变换的值域空间 R ( f ) R(f) R(f) ⟺ \iff ⟺ 矩阵 A A A的列空间,矩阵 A A A列满秩 ⟺ \iff ⟺ 矩阵 A A A的零空间只有零向量 ⟺ \iff ⟺ K ( f ) = { 0 } K(f)=\{0\} K(f)={0} ⟺ \iff ⟺ f f f是单射
矩阵 A A A列满秩 ⟺ \iff ⟺ 矩阵 A A A的零空间只有零向量 ⟺ \iff ⟺ K ( f ) = { 0 } K(f)=\{0\} K(f)={0} ⟺ \iff ⟺ f f f是单射 ⇒ \Rightarrow ⇒ r ( A B ) = r ( B ) , 即 f 是 秩 恒 等 映 射 r(AB)=r(B),即f是秩恒等映射 r(AB)=r(B),即f是秩恒等映射
线性变换把线性空间变换为线性空间,这两个空间的关系是,变换后的空间维度不会增加,只可能减小( r ( A B ) ≤ r ( A ) , r ( B ) r(AB)\le r(A),r(B) r(AB)≤r(A),r(B))。矩阵的秩越大,认为矩阵包含的信息量越多,例如 0 0 0秩矩阵是零矩阵,无任何信息。满秩矩阵,列向量组是基,包含信息最多,因为基可以表示空间任意向量。 行满秩矩阵,列向量组的极大无关组是基,包含信息也最多,但其包含冗余信息,因为除了基向量外,还有其它向量,这些向量就是冗余向量。从信息量角度看,线性变换可能会损失矩阵的信息,因为秩变小了,所以是有损变换。只有变换矩阵的列向量组是无关组时,才是无损变换(秩恒等映射)。再从一个角度看,矩阵 A A A是列满秩时,是无损变换,若此时矩阵 A m × n A_{m \times n} Am×n的行数 m m m大于等于列数 n n n,矩阵 B n × m B_{n \times m} Bn×m列向量维度是 n n n ,变换后矩阵 C = A B C=AB C=AB列向量维度是 m m m,维度提高了。所以线性变换只有升维变换才有可能保持秩不变,信息量不减小,降维变换可能会损失信息
寻找线性变换 f f f对应的矩阵 A A A: