• 线性代数学习笔记7-2:矩阵对角化、求矩阵的幂、求一阶差分方程和Fibonacci数列(特征值的应用)


    知道如何求解特征值后,下面介绍特征值的具体应用

    类似消元法的LU分解、施密特正交化的QR分解,特征值部分可以引出对角化分解,但注意对角化的前提在于,矩阵A必须具有n个线性无关的特征向量(可能有/没有重复的特征值,没有重根 ⇒ \Rightarrow n个线性无关的特征向量,必要不充分条件)

    ps. 当矩阵不具有n个线性无关的特征向量,则无法对角化,但可以三角化

    矩阵对角化

    假设已经找到所有特征向量,将它们作为列向量构成矩阵 S = [ x 1 x 2 ⋯ x n ] \boldsymbol{S}=\left[

    x1x2xn" role="presentation" style="position: relative;">x1x2xn
    \right] S=[x1x2xn]
    那么,根据特征值的特点,有 A S = A [ x 1 x 2 ⋯ x n ] = [ λ 1 x 1 λ 2 x 2 ⋯ λ n x n ] = [ x 1 x 2 ⋯ x n ] [ λ 1 0 ⋯ 0 0 λ 2 0 ⋮ ⋱ ⋮ 0 ⋯ 0 λ n ] = S Λ
    AS=A[x1x2xn]=[λ1x1λ2x2λnxn]=[x1x2xn][λ1000λ2000λn]=SΛ" role="presentation">AS=A[x1x2xn]=[λ1x1λ2x2λnxn]=[x1x2xn][λ1000λ2000λn]=SΛ
    AS=A[x1x2xn]=[λ1x1λ2x2λnxn]=[x1x2xn]λ1000λ2000λn=SΛ

    其中,所有特征值作为对角元,组成矩阵 Λ = [ λ 1 0 ⋯ 0 0 λ 2 0 ⋮ ⋱ ⋮ 0 ⋯ 0 λ n ] \boldsymbol{\Lambda}=\left[
    λ1000λ2000λn" role="presentation" style="position: relative;">λ1000λ2000λn
    \right]
    Λ=λ1000λ2000λn

    再次强调,上述操作的前提是,矩阵A必须具有n个线性无关的特征向量,这样才保证 S \boldsymbol S S可逆
    最终,矩阵对角化表示为 A = S Λ S − 1 \boldsymbol{A}=\boldsymbol{S}\boldsymbol{\Lambda}\boldsymbol{S}^{-1} A=SΛS1

    之前说过,若矩阵 A \mathbf A A经过初等变换能得到矩阵 B \mathbf B B,则 A \mathbf A A B \mathbf B B等价(相抵),记为 A ≅ B \mathbf A \cong \mathbf B AB
    任何矩阵,有唯一的相抵标准形 A ≅ ( Ir ⁡ 0 0 0 ) \mathbf A\cong\left(

    Ir000" role="presentation" style="position: relative;">Ir000
    \right) A(Ir000),从而行秩=列秩
    消元和列操作能得到“相抵标准型”(只保留了最内核的秩信息),而这里得到“相似标准形”(保有矩阵操作的基本性质——特征值)

    可以相似对角化的前提条件:

    • n 阶 方 阵 A ∼ 对 角 矩 阵    ⟺    A 有 n 个 线 性 无 关 的 特 征 向 量 n阶方阵\mathbf A\sim 对角矩阵\iff \mathbf A有n个线性无关的特征向量 nAAn线(这条是可相似对角化的本质核心,后面都是推论)
    • n 阶 方 阵 A ∼ 对 角 矩 阵 d i a g ( λ 1 , λ 2 , . . . , λ n ) ⇒ λ 1 , λ 2 , . . . , λ n 就 是 A 的 全 部 特 征 值 n阶方阵\mathbf A\sim 对角矩阵diag(\lambda_1,\lambda_2,...,\lambda_n)\Rightarrow \lambda_1,\lambda_2,...,\lambda_n就是\mathbf A的全部特征值 nAdiag(λ1,λ2,...,λn)λ1,λ2,...,λnA
    • 上两条的推论: n 阶 方 阵 A ∼ 对 角 矩 阵    ⟺    A 的 每 个 k i 重 特 征 值 的 特 征 子 空 间 维 数 都 为 k i    ⟺    A 的 每 个 k i 重 特 征 值 都 对 应 k i 个 线 性 无 关 的 特 征 向 量    ⟺    A 的 每 个 k i 重 特 征 值 λ i 都 满 足 R a n k ( λ i I − A ) = k i n阶方阵\mathbf A\sim 对角矩阵\iff \\ \mathbf A的每个k_i重特征值的特征子空间维数都为k_i\iff \\ \mathbf A的每个k_i重特征值都对应k_i个线性无关的特征向量\iff \\ \mathbf A的每个k_i重特征值\lambda_i都满足Rank\mathbf{(\lambda_i I-A})=k_i nAAkikiAkiki线AkiλiRank(λiIA)=ki
    • n 阶 方 阵 A 的 特 征 值 都 不 相 同 / 都 是 单 根 ⇒ A ∼ 对 角 矩 阵 n阶方阵\mathbf A的特征值都不相同/都是单根\Rightarrow A\sim 对角矩阵 nA/A
      (相当于所有特征向量都线性无关)
    • 一个特别的情况:
      n 阶 方 阵 A 是 实 对 称 矩 阵 ⇒ A ∼ 对 角 矩 阵 n阶方阵\mathbf A是实对称矩阵\Rightarrow A\sim 对角矩阵 nAA

    另外,方阵 A \mathbf A A为实对称矩阵的情况下,其特性带来一些特殊的性质:

    • n阶实对称矩阵 A \mathbf A A的特征值都是实数,且不同特征值对应的特征向量相互正交(实对称矩阵一定有 n n n个无关正交向量)
    • 实对称矩阵正交相似于对角矩阵:n阶实对称矩阵 A \mathbf A A在相似对角化时,一定存在一个正交矩阵 C \mathbf C C,可以用于“变换坐标系”,即 C − 1 A C = d i a g ( λ 1 , λ 2 , . . . , λ n ) \mathbf {C^{-1}AC}=diag(\lambda_1,\lambda_2,...,\lambda_n) C1AC=diag(λ1,λ2,...,λn)

    应用:矩阵的幂

    对角化的应用之一,就是为我们提供了新的视角来看待矩阵的幂(前提:矩阵A具有n个线性无关的特征向量
    由于 A = S Λ S − 1 \boldsymbol{A}=\boldsymbol{S}\boldsymbol{\Lambda}\boldsymbol{S}^{-1} A=SΛS1,我们都能轻易得到 A \boldsymbol{A} A k k k次幂的 A k \boldsymbol{A}^k Ak的信息: A k = ( S Λ S − 1 ) ( S Λ S − 1 ) . . . ( S Λ S − 1 ) = S Λ k S − 1 \boldsymbol{A}^k=(\boldsymbol{S}\boldsymbol{\Lambda}\boldsymbol{S}^{-1})(\boldsymbol{S}\boldsymbol{\Lambda}\boldsymbol{S}^{-1})...(\boldsymbol{S}\boldsymbol{\Lambda}\boldsymbol{S}^{-1})=\boldsymbol{S}\boldsymbol{\Lambda}^k\boldsymbol{S}^{-1} Ak=(SΛS1)(SΛS1)...(SΛS1)=SΛkS1这就是说:

    • A k \boldsymbol{A}^k Ak的特征向量与 A \boldsymbol{A} A相同,而对应的特征值变为 Λ \boldsymbol{\Lambda} Λ的幂次 Λ k \boldsymbol{\Lambda}^k Λk
    • 矩阵的幂乘以向量 A k u 0 \boldsymbol{A}^k \mathbf{u}_{0} Aku0,可以简化表示为通式 A k u 0 = S Λ k S − 1 S c = S Λ k c = c 1 λ 1 k x 1 + c 2 λ 2 k x 2 + … + c n λ n k x n \boldsymbol{A}^k \mathbf{u}_{0}=\boldsymbol{S}\boldsymbol{\Lambda}^k\boldsymbol{S}^{-1}\boldsymbol{S} \mathbf{c}=\boldsymbol{S}\boldsymbol{\Lambda}^k\mathbf{c}=c_{1} \lambda_{1}^{k} \mathbf{x}_{1}+c_{2} \lambda_{2}^{k} \mathbf{x}_{2}+\ldots+c_{n} \lambda_{n}^{k} \mathbf{x}_{n} Aku0=SΛkS1Sc=SΛkc=c1λ1kx1+c2λ2kx2++cnλnkxn
      其中需要将 u 0 \mathbf{u}_{0} u0表示为特征向量的线性组合 u 0 = S c \mathbf{u}_{0}=\boldsymbol{S} \mathbf{c} u0=Sc,并且注意前提是需要一整套线性无关的特征向量/或者说特征向量矩阵 S \boldsymbol{S} S可逆(否则无法保证任意 u 0 \mathbf{u}_{0} u0都可以被拆解)
      具体细节后文会介绍

    推论:

    • 若矩阵A具有n个线性无关的特征向量,如果其所有特征值 ∣ λ i ∣ < 1 |\lambda_i|<1 λi<1,则 k → ∞ 时 A k → 0 k\rightarrow \infty时\boldsymbol{A}^k\rightarrow 0 kAk0(因为 Λ k → 0 \boldsymbol{\Lambda}^k\rightarrow 0 Λk0,故 A k = S Λ k S − 1 → 0 \boldsymbol{A}^k=\boldsymbol{S}\boldsymbol{\Lambda}^k\boldsymbol{S}^{-1}\rightarrow 0 Ak=SΛkS10

    应用:求差分方程

    对于一个一阶差分方程( u k \mathbf{u}_{k} uk为向量, A \boldsymbol{A} A为系数矩阵) u k + 1 = A u k \mathbf{u}_{k+1}=\boldsymbol{A} \mathbf{u}_{k} uk+1=Auk后一项由前一项 u k \mathbf{u}_{k} uk给出,已知条件是初始的 u 0 \mathbf{u}_{0} u0,现在希望求 u k \mathbf{u}_{k} uk

    首先,很容易求解得到 u k = A k u 0 \mathbf{u}_{k}=\boldsymbol{A}^k \mathbf{u}_{0} uk=Aku0,然而这样形式的解没有实际意义(仍需要计算大量矩阵的幂)

    注意这里再次出现「矩阵的幂」,那么容易想到进行对角化,向特征值和特征向量上靠拢
    具体而言,求解过程是:

    • 求出 A \boldsymbol{A} A的所有特征向量,(假设具有n个线性无关的特征向量,才能继续)则所有特征向量张成整个空间,从而将 u 0 \mathbf{u}_{0} u0表示为特征向量的线性组合 u 0 = c 1 x 1 + c 2 x 2 + … + c n x n = S c \mathbf{u}_{0}=c_{1} \mathbf{x}_{1}+c_{2} \mathbf{x}_{2}+\ldots+c_{n} \mathbf{x}_{n}=\boldsymbol{S} \mathbf{c} u0=c1x1+c2x2++cnxn=Sc其中,列向量 c \mathbf{c} c保存了各个特征向量的系数
    • 对角化得到 A = S Λ S − 1 \boldsymbol{A}=\boldsymbol{S}\boldsymbol{\Lambda}\boldsymbol{S}^{-1} A=SΛS1,则第 k k k u k \mathbf{u}_{k} uk A k u 0 = S Λ k S − 1 S c = S Λ k c = c 1 λ 1 k x 1 + c 2 λ 2 k x 2 + … + c n λ n k x n \boldsymbol{A}^k \mathbf{u}_{0}=\boldsymbol{S}\boldsymbol{\Lambda}^k\boldsymbol{S}^{-1}\boldsymbol{S} \mathbf{c}=\boldsymbol{S}\boldsymbol{\Lambda}^k\mathbf{c}=c_{1} \lambda_{1}^{k} \mathbf{x}_{1}+c_{2} \lambda_{2}^{k} \mathbf{x}_{2}+\ldots+c_{n} \lambda_{n}^{k} \mathbf{x}_{n} Aku0=SΛkS1Sc=SΛkc=c1λ1kx1+c2λ2kx2++cnλnkxn

    直观理解:找到特征向量,则不论多少次矩阵幂,始终都是对于特征向量进行缩放,则容易获得 A u 0 = c 1 λ 1 x 1 + c 2 λ 2 x 2 + … + c n λ n x n \boldsymbol{A} \mathbf{u}_{0}=c_{1} \lambda_{1} \mathbf{x}_{1}+c_{2} \lambda_{2} \mathbf{x}_{2}+\ldots+c_{n} \lambda_{n} \mathbf{x}_{n} Au0=c1λ1x1+c2λ2x2++cnλnxn A k u 0 = c 1 λ 1 k x 1 + c 2 λ 2 k x 2 + … + c n λ n k x n \boldsymbol{A}^{k} \mathbf{u}_{0}=c_{1} \lambda_{1}^{k} \mathbf{x}_{1}+c_{2} \lambda_{2}^{k} \mathbf{x}_{2}+\ldots+c_{n} \lambda_{n}^{k} \mathbf{x}_{n} Aku0=c1λ1kx1+c2λ2kx2++cnλnkxn

    关于“稳态”:
    • 对于实数特征值,征值 ∣ λ i ∣ < 1 |\lambda_i|<1 λi<1的项最终会消失,特征值 ∣ λ i ∣ = 1 |\lambda_i|=1 λi=1的项恒定,特征值 ∣ λ i ∣ > 1 |\lambda_i|>1 λi>1的项最终不断增长
    • 对于复数特征值,虚部引入了复平面上的“旋转”,故特征值的幅值仍然确定稳态,而相位则对应了每次做矩阵乘法时特征向量的旋转角度
      详见线性代数学习笔记7-5:复习——正交、投影、特征值、差分/微分方程
    • 那么,方程的解就是 u k = A k u 0 = S Λ k c \mathbf{u}_{k}=\boldsymbol{A}^{k} \mathbf{u}_{0}=\boldsymbol{S}\boldsymbol{\Lambda}^k\mathbf{c} uk=Aku0=SΛkc

    举例:求Fibonacci数列

    斐波那契数列为0,1,1,2,3,5,8,13,其通项公式为 F k + 2 = F k + 1 + F k F_{k+2}=F_{k+1}+F_{k} Fk+2=Fk+1+Fk,需要求 F 100 F_{100} F100

    首先要寻找/构造差分方程,由于通项公式给出的是二阶差分方程(同时出现了前后三项),我们可以额外增加一个方程,得到一个方程组(可表示为矩阵向量乘法),从而构造一阶的差分方程 { F k + 2 = F k + 1 + F k F k + 1 = F k + 1 \left\{

    Fk+2=Fk+1+FkFk+1=Fk+1" role="presentation" style="position: relative;">Fk+2=Fk+1+FkFk+1=Fk+1
    \right. {Fk+2=Fk+1+FkFk+1=Fk+1其中,将前后两项组成的列向量视为一个整体,即令 u k = [ F k + 1 F k ] \mathbf{u}_{k}=\left[
    Fk+1Fk" role="presentation" style="position: relative;">Fk+1Fk
    \right]
    uk=[Fk+1Fk]
    ,则出现一阶的差分方程 u k + 1 = [ 1 1 1 0 ] u k \mathbf{u}_{k+1}=\left[
    1110" role="presentation" style="position: relative;">1110
    \right] \mathbf{u}_{k}
    uk+1=[1110]uk

    至此,转化为上面的问题 u k + 1 = A u k \mathbf{u}_{k+1}=\boldsymbol{A} \mathbf{u}_{k} uk+1=Auk,其中 A = [ 1 1 1 0 ] \boldsymbol{A} =\left[
    1110" role="presentation" style="position: relative;">1110
    \right]
    A=[1110]
    ,给出初始的 u 0 \mathbf{u}_{0} u0,现在希望求 u 100 \mathbf{u}_{100} u100

    • A \boldsymbol{A} A为对称阵,特征值必为实数,且对称矩阵特征向量正交,可以求出 λ 1 = 1 + 5 2 ≈ 1.618 , x 1 = [ λ 1 1 ] \lambda_{1}=\frac{1+\sqrt{5}}{2}\approx 1.618,\quad\mathbf{x}_{1}=\left[
      λ11" role="presentation" style="position: relative;">λ11
      \right]
      λ1=21+5 1.618,x1=[λ11]
      λ 1 = 1 − 5 2 ≈ − 0.618 , x 2 = [ λ 2 1 ] \lambda_{1}=\frac{1-\sqrt{5}}{2}\approx -0.618,\quad\mathbf{x}_{2}=\left[
      λ21" role="presentation" style="position: relative;">λ21
      \right]
      λ1=215 0.618,x2=[λ21]
    • 分解 u 0 \mathbf u_0 u0得到 u 0 = [ F 1 F 0 ] = [ 1 0 ] = c 1 x 1 + c 2 x 2 , c 1 = 1 5 , c 2 = − 1 5 \mathbf{u}_{0}=\left[
      F1F0" role="presentation" style="position: relative;">F1F0
      \right]= \left[
      10" role="presentation" style="position: relative;">10
      \right]=c_{1} \mathbf{x}_{1}+c_{2} \mathbf{x}_{2}, \quad c_{1}=\frac{1}{\sqrt{5}}, c_{2}=-\frac{1}{\sqrt{5}}
      u0=[F1F0]=[10]=c1x1+c2x2,c1=5 1,c2=5 1

    这里求解特征向量时有一定技巧:
    求解 [ 1 − λ 1 1 − λ ] x = 0 \left[

    1λ11λ" role="presentation" style="position: relative;">1λ11λ
    \right]\boldsymbol x=0 [1λ11λ]x=0,由于 d e t ( A − λ I ) = 0 det \mathbf{( A-\lambda I)}=0 det(AλI)=0,则矩阵 ( A − λ I ) = [ 1 − λ 1 1 − λ ] \mathbf{( A-\lambda I)}=\left[
    1λ11λ" role="presentation" style="position: relative;">1λ11λ
    \right]
    (AλI)=[1λ11λ]
    必然是二阶的不可逆矩阵,从而方程的两行一定线性相关,解这个方程只需满足其中任意一行即可(必然同时满足另一行),由此,我们直接从第二行得到方程的解,即特征向量 x = [ λ 1 ] \mathbf{x} =\left[
    λ1" role="presentation" style="position: relative;">λ1
    \right]
    x=[λ1]

    最后可以验证,对于第一行就是特征多项式 det ⁡ ( A − λ I ) = ∣ 1 − λ 1 1 − λ ∣ = λ 2 − λ − 1 = 0 \operatorname{det}(\boldsymbol{A}-\lambda \boldsymbol{I})=\left|
    1λ11λ" role="presentation" style="position: relative;">1λ11λ
    \right|=\lambda^{2}-\lambda-1=0
    det(AλI)=1λ11λ=λ2λ1=0

    • 由上,有 u k = A k u 0 = S Λ k c = c 1 λ 1 k x 1 + c 2 λ 2 k x 2 \mathbf{u}_{k}=\boldsymbol{A}^k \mathbf{u}_{0}=\boldsymbol{S}\boldsymbol{\Lambda}^k\mathbf{c}=c_{1} \lambda_{1}^{k} \mathbf{x}_{1}+c_{2} \lambda_{2}^{k} \mathbf{x}_{2} uk=Aku0=SΛkc=c1λ1kx1+c2λ2kx2带入数据,可以得到 [ F 100 F 99 ] = A 99 [ F 1 F 0 ] = [ λ 1 λ 2 1 1 ] [ λ 1 99 λ 2 99 ] [ c 1 c 2 ] = [ c 1 λ 1 100 + c 2 λ 2 100 c 1 λ 1 99 + c 2 λ 2 99 ] \left[
      F100F99" role="presentation" style="position: relative;">F100F99
      \right]= \boldsymbol{A}^{99}\left[
      F1F0" role="presentation" style="position: relative;">F1F0
      \right] =\left[
      λ1λ211" role="presentation" style="position: relative;">λ1λ211
      \right] \left[
      λ199λ299" role="presentation" style="position: relative;">λ199λ299
      \right] \left[
      c1c2" role="presentation" style="position: relative;">c1c2
      \right] =\left[
      c1λ1100+c2λ2100c1λ199+c2λ299" role="presentation" style="position: relative;">c1λ1100+c2λ2100c1λ199+c2λ299
      \right]
      [F100F99]=A99[F1F0]=[λ11λ21][λ199λ299][c1c2]=[c1λ1100+c2λ2100c1λ199+c2λ299]

    分析:
    由于 ∣ λ 2 ∣ ≈ 0.618 < 1 |\lambda_2|\approx 0.618<1 λ20.618<1,则 k → ∞ 时 λ 2 k → 0 k\rightarrow \infty时\lambda_2^k\rightarrow 0 kλ2k0
    ∣ λ 1 ∣ ≈ 1.618 > 1 |\lambda_1|\approx 1.618>1 λ11.618>1,故 λ 1 \lambda_1 λ1控制着Fibonacci数列的增长;
    总体上,这个数列不断增长(不稳定),增长的速度由特征值决定

    • 最终可得, F 100 = c 1 λ 1 100 + c 2 λ 2 100 ≈ c 1 λ 1 100 F_{100}=c_{1} \lambda_{1}^{100}+c_{2} \lambda_{2}{ }^{100}\approx c_{1} \lambda_{1}^{100} F100=c1λ1100+c2λ2100c1λ1100
  • 相关阅读:
    记录一次Golang逃逸分析
    RabbitMQ忘记guestadmin 密码
    【ACM程序设计】动态规划 第二篇 LCS&LIS问题
    kafka:大规模实时数据流的必选
    英语牛津词典 + 例句 + 翻译 + 词性
    前端测试——端对端测试框架 Playwright 总结
    Java还是要系统学习,阿里面试失败的经验总结,最终获字节offer
    word 毕业论文格式调整
    “数字游民”热潮席卷全球,未来十年或将达到10亿人!
    如何使用 etcd 实现分布式 /etc 目录
  • 原文地址:https://blog.csdn.net/Insomnia_X/article/details/126326877