矩阵对角化那些事

所有矩阵都可以对角化吗?

前几天某好友同学, 参加了某度算法岗的面试, 问了很多问题, 其中就有这么一个基础数学的问题: 所有矩阵都可以对角化吗?

实际上, 我立马就可以想出一个反例:

A = [ 1 1 0 1 ] . A = \begin{bmatrix} 1 & 1 \\[3pt] 0 & 1 \end{bmatrix}. A=[10​11​].

A 矩阵不可以对角化, 因为:

  • 求特征值
    显然特征值为

λ 1 = λ 2 = 1. \lambda_1 = \lambda_2 =1. λ1​=λ2​=1.

  • 求对应的特征向量

x 1 = x 2 = k [ 1 0 ] . {\rm x}_1 = {\rm x}_2 = k\begin{bmatrix} 1 \\[3pt] 0 \end{bmatrix}. x1​=x2​=k[10​].

其特征向量线性相关, 即 A A A 不可对角化, 所以 并不是所有的矩阵都可以对角化

上述矩阵 A A A 是最小的若尔当块.


矩阵对角化

矩阵对角化是什么?

可对角化矩阵 是线性代数 和矩阵论 中重要的一类矩阵. 如果一个方块矩阵 A A A 相似于对角矩阵, 也就是说: 如果存在一个可逆矩阵 P P P 使得 P − 1 A P P^{-1}AP P−1AP 是对角矩阵,则它就被称为可对角化的.

记 n n n 阶方阵 A A A 的特征值为(可能存在相同的特征指)

λ = { λ 1 , … , λ n } . {\rm \lambda }= \{\lambda_1, \dots, \lambda_n \}. λ={λ1​,…,λn​}.

以及线性无关的特征向量

S = [ x 1 , … , x n ] . S = [ {\rm x}_1, \dots, {\rm x}_n ]. S=[x1​,…,xn​].

其中 x i {\rm x}_i xi​ 为列向量. 则

A S = [ A x 1 , … , A x n ] = [ λ 1 x 1 , … , λ n x n ] = [ x 1 , … , x n ] [ λ 1 0 ⋯ 0 0 λ 2 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ λ n ] = S Λ . \begin{aligned} A S &= [ A{\rm x}_1, \dots, A{\rm x}_n ] \\[3pt] & = [\lambda_1{\rm x}_1, \dots, \lambda_n{\rm x}_n] \\ & = [ {\rm x}_1, \dots, {\rm x}_n ] \left[ \begin{array}{cccc} {\lambda_{1}} & {0} & {\cdots} & {0} \\ {0} & {\lambda_{2}} & {\cdots} & {0} \\ {\vdots} & {\vdots} & {\ddots} & {\vdots} \\ {0} & {0} & {\cdots} & {\lambda_{n}} \end{array} \right] \\ & = S\Lambda. \end{aligned} AS​=[Ax1​,…,Axn​]=[λ1​x1​,…,λn​xn​]=[x1​,…,xn​]⎣⎢⎢⎢⎡​λ1​0⋮0​0λ2​⋮0​⋯⋯⋱⋯​00⋮λn​​⎦⎥⎥⎥⎤​=SΛ.​

根据上式, 即得到一种矩阵分解

A = S A S − 1 . A = SAS^{-1}. A=SAS−1.


可对角化条件

我们已经知道, 并不是所有的矩阵都可以对角化, 那么矩阵 可对角化需要满足哪些条件呢?

  • 特征向量
    所有特征向量线性无关

  • 特征值

    • 若矩阵的特征值各不相同, 则矩阵一定可以对角化;
    • 若矩阵存在某特征值的重数大于 1, 矩阵则有可能可以对角化.
  • 空间
    全空间 V V V 可表示为各特征子空间的直和

课本上有一系列等价条件, 此处不再枚举.

实际上, 若尔当标准型理论可以完美解释对角化问题, 此处也不多介绍, 之后会专门说一说.


有趣的应用

以下内容的前提条件都是: 矩阵满足可对角化

矩阵的幂 A n A^n An

首先, 因为 A = S Λ S − 1 A = S\Lambda S^{-1} A=SΛS−1, 所以

A n = S Λ S − 1 ⋅ S Λ S − 1 ⋯ S Λ S − 1 = S Λ n S − 1 . A^n = S\Lambda S^{-1} \cdot S\Lambda S^{-1} \cdots S\Lambda S^{-1}=S\Lambda^{n}S^{-1}. An=SΛS−1⋅SΛS−1⋯SΛS−1=SΛnS−1.

其中,

Λ n = [ λ 1 n 0 ⋯ 0 0 λ 2 n ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ λ n n ] \Lambda^{n} = \left[ \begin{array}{cccc} {\lambda_{1}^n} & {0} & {\cdots} & {0} \\\\ {0} & {\lambda_{2}^n} & {\cdots} & {0} \\\\ {\vdots} & {\vdots} & {\ddots} & {\vdots} \\\\ {0} & {0} & {\cdots} & {\lambda_{n}^n} \end{array} \right] Λn=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡​λ1n​0⋮0​0λ2n​⋮0​⋯⋯⋱⋯​00⋮λnn​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤​

以上是利用特征值计算矩阵幂的方法, 而且可以得到: 矩阵的 n n n 次方后, 特征值相应地变为 n n n 次方, 而特征向量不变.

其次, 因为 A x = λ x A{\rm x} = \lambda {\rm x} Ax=λx, 所以

A 2 x = A λ x = λ A x = λ 2 x . A^2{\rm x} = A \lambda {\rm x} = \lambda A{\rm x} = \lambda^2{\rm x} . A2x=Aλx=λAx=λ2x.

递推可得 A n x = λ n x A^n{\rm x} = \lambda^n {\rm x} Anx=λnx

由上式同样得到: 矩阵的 n n n 次方后, 特征值相应地变为 n n n 次方, 而特征向量保持不变.

差分方程 u k + 1 = A u k u_{k+1} = Au_k uk+1​=Auk​

假设 u 2 = A u 1 u_2 = Au_1 u2​=Au1​, 由递推 u k + 1 = A u k u_{k+1} = Au_k uk+1​=Auk​ 可得 u k + 1 = A k u 1 u_{k+1} = A^ku_1 uk+1​=Aku1​, 那么, 已知 n n n 阶方阵 A , u 1 A, u_1 A,u1​, 如何计算 u k + 1 u_{k+1} uk+1​ ?

因为已知 A A A 可对角化, 所以矩阵 A A A 的特征向量线性无关, S = { x 1 , … , x n } S=\{{\rm x}_1, \dots, {\rm x}_n\} S={x1​,…,xn​} 可构成全空间 V V V 的一组基, 则 u 1 u_1 u1​ 可表示为:

u 1 = c 1 x 1 + c 2 x 2 + ⋯ + c n x n = S [ c 1 c 2 ⋮ c n ] = S c . \begin{aligned} u_1 &= c_1{\rm x}_1 + c_2{\rm x}_2 + \cdots + c_n{\rm x}_n \\ &= S \begin{bmatrix} c_1\\c_2 \\ \vdots \\ c_n\end{bmatrix} = Sc. \end{aligned} u1​​=c1​x1​+c2​x2​+⋯+cn​xn​=S⎣⎢⎢⎢⎡​c1​c2​⋮cn​​⎦⎥⎥⎥⎤​=Sc.​

继而,

u 2 = A u 1 = c 1 A x 1 + c 2 A x 2 + ⋯ + c n A x n = c 1 λ 1 x 1 + c 2 λ 2 x 2 + ⋯ + c n λ n x n = [ x 1 , … , x n ] [ λ 1 0 ⋯ 0 0 λ 2 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ λ n ] [ c 1 c 2 ⋮ c n ] = S Λ c . \begin{aligned} u_2 &= Au_1 = c_1A{\rm x}_1 + c_2A{\rm x}_2 + \cdots + c_nA{\rm x}_n \\ & = c_1\lambda_1{\rm x}_1 + c_2\lambda_2{\rm x}_2 + \cdots + c_n\lambda_n{\rm x}_n \\[3pt] & = [ {\rm x}_1, \dots, {\rm x}_n ] \left[ \begin{array}{cccc} {\lambda_{1}} & {0} & {\cdots} & {0} \\ {0} & {\lambda_{2}} & {\cdots} & {0} \\ {\vdots} & {\vdots} & {\ddots} & {\vdots} \\ {0} & {0} & {\cdots} & {\lambda_{n}} \end{array} \right] \begin{bmatrix} c_1\\ c_2 \\ \vdots \\ c_n\end{bmatrix} \\ & = S\Lambda c. \end{aligned} u2​​=Au1​=c1​Ax1​+c2​Ax2​+⋯+cn​Axn​=c1​λ1​x1​+c2​λ2​x2​+⋯+cn​λn​xn​=[x1​,…,xn​]⎣⎢⎢⎢⎡​λ1​0⋮0​0λ2​⋮0​⋯⋯⋱⋯​00⋮λn​​⎦⎥⎥⎥⎤​⎣⎢⎢⎢⎡​c1​c2​⋮cn​​⎦⎥⎥⎥⎤​=SΛc.​

另外, 上述结果同样由以下矩阵形式得到

u 2 = A u 1 = S Λ S − 1 S c = S Λ c . u_2 = Au_1 = S\Lambda S^{-1} Sc = S\Lambda c. u2​=Au1​=SΛS−1Sc=SΛc.

递推, 就可以得到

u k + 1 = A k u 1 = S Λ k c . ( ∗ ) u_{k+1} = A^{k}u_1 = S\Lambda^kc. \qquad (*) uk+1​=Aku1​=SΛkc.(∗)

该公式可用于以下 生兔子问题

斐波那契数列 (Fibonacci sequence)

数列 F = { 0 , 1 , 1 , 2 , 3 , 5 , …   } F = \{ 0, 1, 1, 2, 3, 5, \dots \} F={0,1,1,2,3,5,…}, 即满足如下递推式 F n = F n − 1 + F n − 2 . F_n = F_{n-1} + F_{n-2}. Fn​=Fn−1​+Fn−2​.
试求 F n F_n Fn​ 的表达式.

设 u 1 = [ F 2 F 1 ] u_1 = \begin{bmatrix} F_2 \\ F_1 \end{bmatrix} u1​=[F2​F1​​], 则

u 2 = [ F 3 F 2 ] = [ 1 1 1 0 ] [ F 2 F 1 ] = A u 1 . u_2 = \begin{bmatrix} F_3 \\ F_2 \end{bmatrix} = \begin{bmatrix} 1 & 1 \\ 1 & 0 \end{bmatrix}\begin{bmatrix} F_2 \\ F_1 \end{bmatrix} = Au_1. u2​=[F3​F2​​]=[11​10​][F2​F1​​]=Au1​.

计算矩阵 A A A 的特征值和特征向量:
特征多项式

∣ λ I − A ∣ = ∣ λ − 1 − 1 − 1 λ ∣ = λ 2 − λ − 1. \left| \lambda I - A \right| = \begin{vmatrix} \lambda -1 & -1 \\\\ -1 & \lambda \end{vmatrix} = \lambda^2 - \lambda - 1. ∣λI−A∣=∣∣∣∣∣∣​λ−1−1​−1λ​∣∣∣∣∣∣​=λ2−λ−1.

从而得到

λ 1 = 1 + 5 2 \lambda_1 = \frac{1+\sqrt{5}}{2} λ1​=21+5 ​​

对应的特征向量 x 1 = [ λ 1 , 1 ] T {\rm x}_1 = [\lambda_1, 1]^{\sf T} x1​=[λ1​,1]T.

λ 2 = 1 − 5 2 \lambda_2 = \frac{1-\sqrt{5}}{2} λ2​=21−5 ​​

对应的特征向量 x 2 = [ λ 2 , 1 ] T {\rm x}_2 = [\lambda_2, 1]^{\sf T} x2​=[λ2​,1]T.

计算特征向量可由观察得到:

λ I − A = [ λ − 1 − 1 − 1 λ ] [ a b ] = 0 \lambda I - A = \begin{bmatrix} \lambda -1 & -1 \\ -1 & \lambda \end{bmatrix}\begin{bmatrix} a \\ b \end{bmatrix} = 0 λI−A=[λ−1−1​−1λ​][ab​]=0

因为 λ 2 − λ − 1 = 0 \lambda^2 - \lambda - 1 = 0 λ2−λ−1=0, 所以

{ a = λ , b = 1. \begin{cases} a = \lambda, \\[3pt] b = 1. \end{cases} {a=λ,b=1.​

所以 S = [ x 1 x 2 ] = [ λ 1 λ 2 1 1 ] S = \begin{bmatrix}{\rm x}_1 & {\rm x}_2\end{bmatrix} = \begin{bmatrix} \lambda_1 & \lambda_2 \\ 1 & 1 \end{bmatrix} S=[x1​​x2​​]=[λ1​1​λ2​1​].

继而,

u 1 = [ 1 0 ] = c 1 x 1 + c 2 x 2 = c 1 [ λ 1 1 ] + c 2 [ λ 2 1 ] . \begin{aligned} u_1 = \begin{bmatrix} 1 \\[3pt] 0 \end{bmatrix} &= c_1{\rm x}_1 + c_2{\rm x}_2 \\ & = c_1 \begin{bmatrix} \lambda_1 \\[3pt] 1 \end{bmatrix} + c_2\begin{bmatrix} \lambda_2 \\[3pt] 1 \end{bmatrix}. \end{aligned} u1​=[10​]​=c1​x1​+c2​x2​=c1​[λ1​1​]+c2​[λ2​1​].​

解得

{ c 1 = 1 λ 1 − λ 2 , c 2 = − c 1 . \begin{cases} c_1 = \frac{1}{\lambda_1 - \lambda_2}, \\[3pt] c_2 = -c_1. \end{cases} {c1​=λ1​−λ2​1​,c2​=−c1​.​

带入 ( ∗ ) (*) (∗) 式

u _ n = S Λ n − 1 c = [ λ 1 λ 2 1 1 ] [ λ 1 n − 1 0 0 λ 2 n − 1 ] [ 1 λ 1 − λ 2 − 1 λ 1 − λ 2 ] = 1 λ 1 − λ 2 [ λ 1 n − λ 2 n λ 1 n − 1 − λ 2 n − 1 ] \begin{aligned} u\_n = S\Lambda^{n-1}c &=\begin{bmatrix} \lambda_1 & \lambda_2 \\[3pt] 1 & 1 \end{bmatrix}\begin{bmatrix} \lambda_1^{n-1} & 0 \\[3pt] 0 & \lambda_2^{n-1} \end{bmatrix} \begin{bmatrix} \frac{1}{\lambda_1 - \lambda_2} \\[3pt] -\frac{1}{\lambda_1 - \lambda_2} \end{bmatrix} \\[3pt] & = \frac{1}{\lambda_1 - \lambda_2} \begin{bmatrix} \lambda_1^n - \lambda_2^n \\[3pt] \lambda_1^{n-1} - \lambda_2^{n-1} \end{bmatrix} \end{aligned} u_n=SΛn−1c​=[λ1​1​λ2​1​][λ1n−1​0​0λ2n−1​​][λ1​−λ2​1​−λ1​−λ2​1​​]=λ1​−λ2​1​[λ1n​−λ2n​λ1n−1​−λ2n−1​​]​

所以,

F n = λ 1 n − 1 − λ 2 n − 1 λ 1 − λ 2 . F_n = \frac{\lambda_1^{n-1} - \lambda_2^{n-1}}{\lambda_1 - \lambda_2}. Fn​=λ1​−λ2​λ1n−1​−λ2n−1​​.

指数矩阵 e A t e^{At} eAt

你能证明 e A t = S e Λ t S − 1 e^{At} = Se^{\Lambda t}S^{-1} eAt=SeΛtS−1 吗?
其中,

e Λ t = [ e λ 1 t 0 ⋯ 0 0 e λ 2 t ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ e λ n t ] e^{\Lambda t} = \left[\begin{array}{cccc} {\mathrm{e}^{\lambda_{1} \mathrm{t}}} & {0} & {\cdots} & {0} \\\\ {0} & {\mathrm{e}^{\lambda_{2} \mathrm{t}}} & {\cdots} & {0} \\\\ {\vdots} & {\vdots} & {\ddots} & {\vdots} \\\\ {0} & {0} & {\cdots} & {\mathrm{e}^{\lambda_{n} \mathrm{t}}} \end{array}\right] eΛt=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡​eλ1​t0⋮0​0eλ2​t⋮0​⋯⋯⋱⋯​00⋮eλn​t​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤​

原文链接: matnoble.me/posts/diag/