笔记9-《程序员的数学3:线性代数》不可对角化的情况与Jordan标准型  

目录
  1. 不可对角化的情况与 Jordan 标准型
  2. 那个「无法判断」的边界
  3. 用 Ruby 验证 Jordan 块的幂
  4. 什么时候不需要 Jordan 形

不可对角化的情况与 Jordan 标准型

  • 4.7 不可对角化的情况

    • 为什么需要这一节

      • 对于可对角化的 AA,判断 r(t)=Ar(t−1)\mathbf{r}(t) = A\mathbf{r}(t-1) 或 r(t)=eAt\mathbf{r}(t) = e^{At} 有没有失控危险,只要考察特征值即可
      • 大多数情况下 AA 都可对角化,所以前面的方法已经解决了大部分问题
      • 但某些特殊的不可对角化的 AA,前面的方法行不通
    • 先给结论

      • 离散时间系统 r(t)=Ar(t−1)\mathbf{r}(t) = A\mathbf{r}(t-1)
        • 存在特征值 ∣λ∣>1|\lambda| > 1 → 有失控危险
        • 所有 ∣λ∣<1|\lambda| < 1 → 不会失控
        • 所有 ∣λ∣≤1|\lambda| \le 1 但存在 ∣λ∣=1|\lambda| = 1 → 仅凭特征值无法判断
      • 连续时间系统 r(t)=eAtr(0)\mathbf{r}(t) = e^{At}\mathbf{r}(0)
        • 存在 Re(λ)>0\mathrm{Re}(\lambda) > 0 → 有失控危险
        • 所有 Re(λ)<0\mathrm{Re}(\lambda) < 0 → 不会失控
        • 存在 Re(λ)=0\mathrm{Re}(\lambda) = 0 → 仅凭特征值无法判断
      • 结论大体不变,差别只出现在「边界上」的情况
    • Jordan 标准型

      • 满足条件的区块称为 Jordan 块
      • 一个例子:JJ 由大小为 5 的 Jordan 块、大小为 2 的、大小为 1 的、大小为 3 的排列而成
      • 对角矩阵也是 Jordan 标准型的一种:仅含大小为 1 的 Jordan 块的情况就是对角矩阵
      • 什么样的区块算 Jordan 标准型
        • 对角线上是一堆数
        • 右上方的斜线上全部是 1
        • 但不是随便哪个都行,要满足 Jordan 标准型对区块的要求
        • 书里的例子:J1,J4,J5J_1, J_4, J_5 是,J2,J3J_2, J_3 不是
          • J1,J4J_1, J_4 含 2 个 Jordan 块,J5J_5 含 1 个,J3J_3 含 3 个
    • 唯一性

      • 如果不考虑区块的排列顺序,Jordan 标准型本质上只有一种
      • 原因:Jordan 块是由 rank(A−λI)\mathrm{rank}(A - \lambda I) 固定下来的,没有任何灵活变通的余地
      • 这和「对角化本质上是唯一的」是同一回事
    • Jordan 标准型的两个好处

      • 可以看出特征值、特征向量的样子
      • 可以进行乘方的具体计算

那个「无法判断」的边界

这是整节的核心问题,值得单独想清楚。

可对角化时,At=PDtP−1A^t = PD^tP^{-1},DtD^t 的每个元素是 λt\lambda^t。λ=1\lambda = 1 时 λt=1\lambda^t = 1,不增长也不衰减,看起来没问题。

但不可对角化时不一样。看最小的例子,2×22 \times 2 的 Jordan 块:

J=(1101)J = \begin{pmatrix} 1 & 1 \\ 0 & 1 \end{pmatrix}

它的特征值是 11 和 11(重复),但它不可对角化(只有一个线性无关的特征向量)。计算它的幂:

Jt=(1t01)J^t = \begin{pmatrix} 1 & t \\ 0 & 1 \end{pmatrix}

右上角出现了 tt。系统 r(t)=Jr(t−1)\mathbf{r}(t) = J\mathbf{r}(t-1) 展开后是 Jtr(0)J^t \mathbf{r}(0),只要 r(0)\mathbf{r}(0) 的第二个分量非零,第二个分量就会随 tt 线性增长。

所以 ∣λ∣=1|\lambda| = 1 时:

  • 可对角化 → 不失控

  • 不可对角化 → 可能线性增长,失控

光看特征值分辨不出来,必须知道 Jordan 块的结构。这就是 Jordan 标准型存在的意义。

连续时间情形类似,只是增长从 tt 变成 et⋅Re(λ)e^{t \cdot \mathrm{Re}(\lambda)},在 Re(λ)=0\mathrm{Re}(\lambda) = 0 时要看 Jordan 块的层数。

用 Ruby 验证 Jordan 块的幂

def mat_mul(a, b)
n = a.size
m = b[0].size
k = b.size
n.times.map { |i| m.times.map { |j| k.times.sum { |t| a[i][t] * b[t][j] } } }
end

def mat_pow(a, e)
r = a.size
res = Array.new(r) { |i| Array.new(r) { |j| i == j ? 1.0 : 0.0 } }
base = a
while e > 0
res = mat_mul(res, base) if e & 1 == 1
base = mat_mul(base, base)
e >>= 1
end
res
end

# 2x2 的 Jordan 块
j = [[1.0, 1.0], [0.0, 1.0]]

[1, 2, 5, 10].each do |t|
p = mat_pow(j, t)
puts "t=#{t} J^#{t} = #{p.each_index.map { |i| p[i].map { |v| v.round(6) } }}"
end

输出:

t=1  J^1 = [[1.0, 1.0], [0.0, 1.0]]
t=2 J^2 = [[1.0, 2.0], [0.0, 1.0]]
t=5 J^5 = [[1.0, 5.0], [0.0, 1.0]]
t=10 J^10 = [[1.0, 10.0], [0.0, 1.0]]

右上角恰好是 tt。特征值全都是 1,但矩阵的幂随时间线性增长。 这就是「仅凭特征值无法判断」的直接证据。

对比一下同样特征值但可对角化的情况:diag(1,1)=I\mathrm{diag}(1, 1) = I,它的任何次幂都是 II,一点都不增长。

同样是 λ=1\lambda = 1,两个矩阵的行为天壤之别。差别全在 Jordan 块的结构。

什么时候不需要 Jordan 形

实际中大多数时候不需要:

  • 只需要判断「会不会失控」的话,先算特征值

  • 如果所有 ∣λ∣≠1|\lambda| \ne 1,特征值就已经给出答案

  • 只有当存在 ∣λ∣=1|\lambda| = 1(或 Re(λ)=0\mathrm{Re}(\lambda) = 0)时,才需要进一步看 Jordan 块

而更常见的情况是:问题本身就带阻尼(Re(λ)<0\mathrm{Re}(\lambda) < 0),特征值直接告诉你「稳定」,什么都不用多说。

所以 Jordan 标准型更像是一块补丁,而不是主线路径。书里 4.7 节把它放在最后,也是这个意思。

123.8k