zoukankan      html  css  js  c++  java
  • 线性代数.22对角化和A的权利

    对角化

    上一节课我们知道了怎么求解特征值和特征向量。

    假设 (A)(n) 个线性无关特征向量,按列组成矩阵 (S) ,称其为特征向量矩阵。

    我们算一下 (A) 乘以 (S) 会发生什么。

    [egin{align} AS&=A. left( egin{array}{cccc} x_1 & x_2 & ... & x_n \ end{array} ight)\ &= left( egin{array}{cccc} lambda _1 x_1 & lambda _2 x_2 & ... & lambda _n x_n \ end{array} ight)\ &= left( egin{array}{cccc} x_1 & x_2 & ... & x_n \ end{array} ight) left( egin{array}{cccc} lambda _1 & 0 & 0 & 0 \ 0 & lambda _2 & 0 & 0 \ ... & ... & ... & ... \ 0 & 0 & 0 & lambda _n \ end{array} ight)\ &= SLambda end{align} ]

    注:(x) 表示列向量。

    (Lambda) 表示特征值矩阵,她是对角矩阵。

    我们得到公式

    [AS=SLambda ]

    左乘 (S^{-1})

    [S^{-1}AS=S^{-1}SLambda ]

    因为

    [S^{-1}S=I ]

    所以

    [S^{-1}AS=Lambda ]

    这就是对角化方法。

    还可以写成另一种形式,就是右乘 (S^{-1}) 的时候,可得

    [A=SLambda S^{-1} ]

    这是新的矩阵分解方法,以前我们已经有消元法中的 (LU) 矩阵和格拉姆-施密特正交化中的 (QR) 矩阵。

    前提条件是 (A)(n) 个线性无关特征向量,这其实也说明,(S) 必须可逆。

    意义

    对角化的意义是在求解矩阵幂的时候。

    例子1

    已知 (Ax=lambda x) , 求解 (A^2) 的特征值和特征向量

    两边同时乘以 (A) ,得

    [A^2x=lambda A x =lambda^2x ]

    所以,(A^2) 的特征向量还是 (x) ,但是特征值变为原来特征值的平方,即 (lambda^2)

    我们从对角化方法计算,

    [A^2=SLambda S^{-1}.SLambda S^{-1}=SLambda^2 S^{-1} ]

    对角化后,特征向量矩阵不变,表示矩阵平方后特征向量不变,但是特征值矩阵变为平方,表示矩阵平方后,特征值变为原来特征值的平方。

    和上个式子的结论一样,只是变成矩阵形式。

    对角化计算的美妙之处在于,我们可以轻易得到矩阵 (k) 次方的时候,特征值和特征向量的情况,即

    [A^K=S Lambda^k S^{-1} ]

    特征值变为原来的 (k) 次方。特征向量不变。

    但是如果用刚开始那种方法,就不这么简单。

    反过来理解,特征向量和特征值提供了理解、计算矩阵幂的好方法。

    定理

    当所有 (|lambda| <0) 时,有

    [A^{k} ightarrow 0 quad as quad k ightarrow ∞ ]

    此时我们称矩阵是稳定的。

    因为 (A^K=S Lambda^k S^{-1}) ,(S) 不变,(A^K) 随着幂次越高越小,只有 (Lambda^k) 也 随着幂次越高越小。

    我们想要了解矩阵幂的情况,从特征值上就能得到信息。

    这就是对角化的意义。

    可对角化的情况

    哪些矩阵可以对角化?(A) 必须存在 (n) 个线性无关特征向量。

    (A) 必然存在 (n) 个线性无关特征向量的一个很好的条件是,所有的 (lambda) 都不同,也就是说没有重复的特征值。

    但是如果有重复的 (lambda) ,就需要深入研究,可能但不一定存在 (n) 个线性无关特征向量。她不是一个肯定的结论。

    例子1

    一个 (10*10) 的单位阵,计算其特征值,结果都是 (1) .但是 (n) 阶单位阵的特征向量可以是任意 (n) 维向量。因为她们都满足 (Ax=lambda x)。我们可以完整的取到10个线性无关的特征向量。

    例子2

    假设有

    [A=left( egin{array}{cc} 2 & 1 \ 0 & 2 \ end{array} ight) ]

    我们想要对其对角化。

    先算特征向量和特征值。

    根据特征值方程

    [det(A-lambda I)=left| egin{array}{cc} 2-lambda & 1 \ 0 & 2-lambda \ end{array} ight|=(2-lambda)(2-lambda) ]

    解得

    [lambda_1=2,lambda_2=2 ]

    代入 ((A-lambda I)) ,有

    [A-lambda I= left( egin{array}{cc} 0& 1 \ 0 & 0 \ end{array} ight) ]

    计算该矩阵的零空间的基向量,可得

    [x= left( egin{array}{c} 1 \ 0 \ end{array} ight) ]

    只有一个特征向量。所以这个 (2*2) 矩阵的特征向量不完整,无法对角化。

    计算特征值重复次数时,我们用代数重度(algebraic multiplicity)表示。例子2的代数重度就是2,即特征值重复了两次,她体现在多项式根的时候用了两次。

    差分方程组求解

    一阶差分方程组的求解

    已知向量 (u_0),下一项等于矩阵 (A) 乘以前一项,即 (u_{k+1}=Au_k)。求解 (u_k) ,这是一阶差分方程组,由向量和矩阵组成。

    我们可以得到,

    (u_1=Au_0)

    (u_2=Au_1=A^2u_0),

    ...

    (u_k=A^ku_0).

    这是一阶差分方程组的解。

    问题是,如何根据初始值 (u_0) 来求解 (u_k) 的具体的数值。

    (u_0) 看称若干个线性无关特征向量(可以理解为基向量,她们的线性组合可以生成 (u_0) )相加:

    [u_0=c_1x_1+c_2x_2+...+c_nx_n ]

    其中,(c) 表示标量,是常数。

    (u_0) 左乘 (A)

    [egin{align} Au_0&=c_1Ax_1+c_2Ax_2+...+c_nAx_n\ &=c_1lambda_1x_1+c_2lambda_2x_2+...+c_nlambda_nx_n end{align} ]

    可得

    [egin{align} u_{100}= A^{100}u_0 &=c_1lambda_1^{100}x_1+c_2lambda_2^{100}x_2+...+c_nlambda_n^{100}x_n end{align} ]

    矩阵形式:

    [u_{100}=A^{100}u_0=Lambda^{100}SC ]

    (C) 是由(c_1、c_2...c_n) 构成的矩阵。

    总结:

    计算 (u_{100}) ,步骤如下

    1. 将初始向量展开成特征向量的组合
    2. 然后矩阵 (A^{100}) 乘以各个特征向量
    3. 矩阵 (A) 可以化简为特征值 (lambda) , (A^{100}) 化简为对应的 (lambda^{100}) .

    斐波那契数列(二阶差分方程组的求解)

    已知斐波那契数列:0、1、1、2、3、5、8...,我们想要知道,第100项 (F_{100}) 等于多少?以及她的增长速度有多快?

    前面我们讲过,矩阵增长稳定,最终趋向等于零,她的变化可以由特征值体现和决定。这里也是一样。数列的增长由特征值决定。

    斐波那契数列递归式:

    [F_{k+2}=F_{k+1}+F_{k} ]

    我们希望写成 (u_k=A^ku_0) 的形式。但目前只有一个方程,而且是二阶差分方程,就像含有二阶导数的微分方程,希望能化简为只含有一阶导数的微分方程,也就是一阶差分。怎么做?

    技巧是如何定义向量 (u_k).用一个 (2*2) 方程组代替原来的二阶差分方程。

    [u_k=left( egin{array}{c} F_{k+1} \ F_k \ end{array} ight) ]

    追加一个方程

    [F_{k+1}=F_{k+1} ]

    此时联立两个方程 (F_{k+2}=F_{k+1}+F_{k}、F_{k+1}=F_{k+1})。可以写出 (u_{k+1}) 表达式。

    可得

    [u_{k+1}= left( egin{array}{c} F_{k+2} \ F_{k+1} \ end{array} ight)= left( egin{array}{cc} 1 & 1 \ 1 & 0 \ end{array} ight) left( egin{array}{c} F_{k+1} \ F_k \ end{array} ight)=left( egin{array}{cc} 1 & 1 \ 1 & 0 \ end{array} ight)u_k=Au_k ]

    这里就将二阶差分方程变为一阶。

    同一阶差分一样,有 (u_k=A^ku_0) .

    得到 (A) ,就可以计算特征值和特征向量,通过特征值方程可得

    [det(A-lambda I)= left| egin{array}{cc} 1-lambda & 1 \ 1 & -lambda \ end{array} ight|=lambda^2-lambda-1 ]

    解得

    [lambda_1=frac{1}{2} left(1+sqrt{5} ight)≈1.618,lambda_2=frac{1}{2} left(1-sqrt{5} ight)≈-0.618 ]

    (lambda) 不同,(A) 可以对角化。

    [egin{align} u_{100}= A^{100}u_0 &=c_1lambda_1^{100}x_1+c_2lambda_2^{100}x_2 end{align} ]

    数列的增长由特征值决定。而 (lambda) 较大的一个起到决定性作用,因为根据对角化后的式子,(lambda_1^{n}) 越来越大,而 (lambda_2^{n}) 越来越小,趋向于0,因此我们可以将 (F_{100}) 写为

    [F_{100}≈c_1lambda_1^{100}=c_1(frac{1}{2} left(1+sqrt{5} ight))^{100} ]

    所以数列在第一百项的增长速率由 (lambda_1^{100}) 决定。

    求解特征向量,将两个 $lambda $ 分别代入((A-lambda I)x=0) ,可得

    [x_1=left( egin{array}{c} lambda _1 \ 1 \ end{array} ight), x_2=left( egin{array}{c} lambda _2 \ 1 \ end{array} ight) ]

    而初始向量

    [u_0=left( egin{array}{c} F_1 \ F_0 \ end{array} ight) =left( egin{array}{c} 1 \ 0 \ end{array} ight) ]

    展开成特征向量的组合

    [u_0=c_1x_1+c_2x_2=left( egin{array}{c} 1 \ 0 \ end{array} ight) ]

    知道 (x_1、x_2),可解得

    [c_1=frac{1}{sqrt{5}} ,c_2=-frac{1}{sqrt{5}} ]

    代入

    [F_{100}≈c_1lambda_1^{100}=c_1(frac{1}{2} left(1+sqrt{5} ight))^{100}≈3.54225 imes 10^{20} ]

  • 相关阅读:
    Delphi 消息窗口 Application.messagebox
    delphi绑定ComboBox数据
    delphi ComboBox AddObject 组合框下拉取值正确使用方法
    属性分类及其实现
    Delphi 在dbgrideh中表格输入数据时有效性的检查(转)
    XE下显示托盘图标(TrayIcon)
    delphi trayIcon控件,如何实现窗口最小化的时候到系统托盘?
    一步步开发自己的博客 番外篇(7、异步记录日志 和 文章阅读量统计)
    一步步开发自己的博客 .NET版 剧终篇(6、响应式布局 和 自定义样式)
    一步步开发自己的博客 .NET版(5、Lucenne.Net 和 必应站内搜索)
  • 原文地址:https://www.cnblogs.com/ckk-blog/p/13764612.html
Copyright © 2011-2022 走看看