不可对角化的情况与 Jordan 标准型4.7 不可对角化的情况
为什么需要这一节
对于可对角化的 A A A ,判断 r ( t ) = A r ( t − 1 ) \mathbf{r}(t) = A\mathbf{r}(t-1) r ( t ) = A r ( t − 1 ) 或 r ( t ) = e A t \mathbf{r}(t) = e^{At} r ( t ) = e A t 有没有失控危险,只要考察特征值即可 大多数情况下 A A A 都可对角化,所以前面的方法已经解决了大部分问题 但某些特殊的不可对角化 的 A A A ,前面的方法行不通 先给结论
离散时间系统 r ( t ) = A r ( t − 1 ) \mathbf{r}(t) = A\mathbf{r}(t-1) r ( t ) = A r ( t − 1 ) 存在特征值 ∣ λ ∣ > 1 |\lambda| > 1 ∣ λ ∣ > 1 → 有失控危险 所有 ∣ λ ∣ < 1 |\lambda| < 1 ∣ λ ∣ < 1 → 不会失控 所有 ∣ λ ∣ ≤ 1 |\lambda| \le 1 ∣ λ ∣ ≤ 1 但存在 ∣ λ ∣ = 1 |\lambda| = 1 ∣ λ ∣ = 1 → 仅凭特征值无法判断 连续时间系统 r ( t ) = e A t r ( 0 ) \mathbf{r}(t) = e^{At}\mathbf{r}(0) r ( t ) = e A t r ( 0 ) 存在 R e ( λ ) > 0 \mathrm{Re}(\lambda) > 0 R e ( λ ) > 0 → 有失控危险 所有 R e ( λ ) < 0 \mathrm{Re}(\lambda) < 0 R e ( λ ) < 0 → 不会失控 存在 R e ( λ ) = 0 \mathrm{Re}(\lambda) = 0 R e ( λ ) = 0 → 仅凭特征值无法判断 结论大体不变,差别只出现在「边界上」的情况 Jordan 标准型
满足条件的区块称为 Jordan 块 一个例子:J J J 由大小为 5 的 Jordan 块、大小为 2 的、大小为 1 的、大小为 3 的排列而成 对角矩阵也是 Jordan 标准型的一种:仅含大小为 1 的 Jordan 块的情况就是对角矩阵 什么样的区块算 Jordan 标准型对角线上是一堆数 右上方的斜线上全部是 1 但不是随便哪个都行,要满足 Jordan 标准型对区块的要求 书里的例子:J 1 , J 4 , J 5 J_1, J_4, J_5 J 1 , J 4 , J 5 是,J 2 , J 3 J_2, J_3 J 2 , J 3 不是J 1 , J 4 J_1, J_4 J 1 , J 4 含 2 个 Jordan 块,J 5 J_5 J 5 含 1 个,J 3 J_3 J 3 含 3 个 唯一性
如果不考虑区块的排列顺序,Jordan 标准型本质上只有一种 原因:Jordan 块是由 r a n k ( A − λ I ) \mathrm{rank}(A - \lambda I) r a n k ( A − λ I ) 固定下来的,没有任何灵活变通的余地 这和「对角化本质上是唯一的」是同一回事 Jordan 标准型的两个好处
可以看出特征值、特征向量的样子 可以进行乘方的具体计算 那个「无法判断」的边界这是整节的核心问题,值得单独想清楚。
可对角化时,A t = P D t P − 1 A^t = PD^tP^{-1} A t = P D t P − 1 ,D t D^t D t 的每个元素是 λ t \lambda^t λ t 。λ = 1 \lambda = 1 λ = 1 时 λ t = 1 \lambda^t = 1 λ t = 1 ,不增长也不衰减,看起来没问题。
但不可对角化时不一样。看最小的例子,2 × 2 2 \times 2 2 × 2 的 Jordan 块:
J = ( 1 1 0 1 ) J = \begin{pmatrix} 1 & 1 \\ 0 & 1 \end{pmatrix} J = ( 1 0 1 1 )
它的特征值是 1 1 1 和 1 1 1 (重复),但它不可对角化 (只有一个线性无关的特征向量)。计算它的幂:
J t = ( 1 t 0 1 ) J^t = \begin{pmatrix} 1 & t \\ 0 & 1 \end{pmatrix} J t = ( 1 0 t 1 )
右上角出现了 t t t 。系统 r ( t ) = J r ( t − 1 ) \mathbf{r}(t) = J\mathbf{r}(t-1) r ( t ) = J r ( t − 1 ) 展开后是 J t r ( 0 ) J^t \mathbf{r}(0) J t r ( 0 ) ,只要 r ( 0 ) \mathbf{r}(0) r ( 0 ) 的第二个分量非零,第二个分量就会随 t t t 线性增长 。
所以 ∣ λ ∣ = 1 |\lambda| = 1 ∣ λ ∣ = 1 时:
可对角化 → 不失控
不可对角化 → 可能线性增长,失控
光看特征值分辨不出来 ,必须知道 Jordan 块的结构。这就是 Jordan 标准型存在的意义。
连续时间情形类似,只是增长从 t t t 变成 e t ⋅ R e ( λ ) e^{t \cdot \mathrm{Re}(\lambda)} e t ⋅ R e ( λ ) ,在 R e ( λ ) = 0 \mathrm{Re}(\lambda) = 0 R e ( λ ) = 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 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]]
右上角恰好是 t t t 。特征值全都是 1,但矩阵的幂随时间线性增长。 这就是「仅凭特征值无法判断」的直接证据。
对比一下同样特征值但可对角化的情况:d i a g ( 1 , 1 ) = I \mathrm{diag}(1, 1) = I d i a g ( 1 , 1 ) = I ,它的任何次幂都是 I I I ,一点都不增长。
同样是 λ = 1 \lambda = 1 λ = 1 ,两个矩阵的行为天壤之别。差别全在 Jordan 块的结构。
什么时候不需要 Jordan 形实际中大多数时候不需要:
而更常见的情况是:问题本身就带阻尼(R e ( λ ) < 0 \mathrm{Re}(\lambda) < 0 R e ( λ ) < 0 ),特征值直接告诉你「稳定」,什么都不用多说。
所以 Jordan 标准型更像是一块补丁 ,而不是主线路径。书里 4.7 节把它放在最后,也是这个意思。