6.2 对角化矩阵(1)

一、对角化矩阵

x \boldsymbol x x A A A 的一个特征值时,则 A A A 乘上 x \boldsymbol x x 就是一个数字 λ \lambda λ x \boldsymbol x x A x = λ x A\boldsymbol x=\lambda \boldsymbol x Ax=λx,这样矩阵所带来的困难就不存在了,我们就不用处理一个相互联系的系统,只需要分开处理特征向量。就像对角矩阵一样,它没有非对角线上的联系。对角矩阵的 100 100 100 次方就很容易计算。
我们使用合适的特征向量将矩阵 A A A 转换成对角矩阵 Λ \Lambda Λ 这个矩阵的形式是关键的概念,我们先由一个重要的计算开始, A X = X Λ AX=X\Lambda AX=XΛ

对角化 \kern 10pt 假设 n × n n\times n n×n 的矩阵 A A A n n n 个线性无关的特征向量 x 1 , x 2 , ⋯ , x n \boldsymbol x_1,\boldsymbol x_2,\cdots,\boldsymbol x_n x1,x2,,xn。将它们放在特征向量矩阵(egienvector matrix) X \pmb X X 的列中,则 X − 1 A X X^{-1}AX X1AX 就是特征值矩阵(eigenvalue matrix) Λ \pmb{\Lambda} Λ 特征向量矩阵 X 特征值矩阵 Λ X − 1 A X = Λ = [ λ 1 ⋱ λ n ] ( 6.2.1 ) \begin{array}{l}\pmb{特征向量矩阵\,X}\\\pmb{特征值矩阵\,\Lambda}\end{array}\kern 20pt{\color{blue}X^{-1}AX=\Lambda=\begin{bmatrix}\lambda_1&&\\&\ddots\\&&\lambda_n\end{bmatrix}}\kern 18pt(6.2.1) 特征向量矩阵X特征值矩阵ΛX1AX=Λ= λ1λn (6.2.1)

矩阵 A A A 被 “对角化(diagonalized)”,我们使用大些的 Λ \Lambda Λ 表示特征值矩阵,因为小的 λ ′ s \lambda's λs(特征值)都在它的对角线上。

例1 A A A 是三角矩阵,所有它的特征值在对角线上: λ = 1 \lambda=1 λ=1 λ = 6 \lambda=6 λ=6 特征向量进到 X 中 [ 1 0 ] [ 1 1 ] [ 1 − 1 0 1 ] [ 1 5 0 6 ] [ 1 1 0 1 ] = [ 1 0 0 6 ] X − 1 A X = Λ \boxed{特征向量进到\,X\,中\,\begin{bmatrix}1\\0\end{bmatrix}\,\begin{bmatrix}1\\1\end{bmatrix}}\kern 10pt\begin{bmatrix}1&-1\\0&\kern 7pt1\end{bmatrix}\begin{bmatrix}\pmb1&\pmb5\\0&\pmb6\end{bmatrix}\begin{bmatrix}1&1\\0&1\end{bmatrix}=\begin{bmatrix}\pmb1&0\\0&\pmb6\end{bmatrix}\\\kern 140pt\color{blue}X^{-1}\kern 23ptA\kern 25ptX\kern 13pt=\kern 13pt\Lambda 特征向量进到X[10][11][1011][1056][1011]=[1006]X1AX=Λ换一种写法, A = X Λ X − 1 A=X\Lambda X^{-1} A=XΛX1,则 A 2 = X Λ X − 1 X Λ X − 1 A^2=X\Lambda X^{-1}X\Lambda X^{-1} A2=XΛX1XΛX1,所以 A 2 = X Λ 2 X − 1 \pmb{A^2=X\Lambda^2X^{-1}} A2=XΛ2X1 A 2 有和 X 中相同的特征向量,在 Λ 2 中是 A 的特征值的平方。 \pmb{A^2\,有和\,X\,中相同的特征向量,在\,\Lambda^2\,中是\,A\,的特征值的平方。} A2有和X中相同的特征向量,在Λ2中是A的特征值的平方。为什么 A X = X Λ AX=X\Lambda AX=XΛ 呢? A A A 乘上它的特征向量(特征向量就是 X X X 的列), A X AX AX 的第一列是 A x 1 A\boldsymbol x_1 Ax1,就是 λ 1 x 1 \lambda_1\boldsymbol x_1 λ1x1 X X X 的每一列都被它的特征值乘: A 乘 X A X = A [ x 1 ⋯ x n ] = [ λ 1 x 1 ⋯ λ n x n ] {\color{blue}A\,乘\,X}\kern 20ptAX=A\begin{bmatrix}\\\boldsymbol x_1&\cdots&\boldsymbol x_n\\\,\end{bmatrix}=\begin{bmatrix}\\\lambda_1\boldsymbol x_1&\cdots&\lambda_n\boldsymbol x_n\\\,\end{bmatrix} AXAX=A x1xn = λ1x1λnxn 技巧是将矩阵 A X AX AX 分割成 X X X Λ \Lambda Λ X 乘 Λ [ λ 1 x 1 ⋯ λ n x n ] = [ x 1 ⋯ x n ] [ λ 1 ⋱ λ n ] = X Λ {\color{blue}X\,乘\,\Lambda}\kern 20pt\begin{bmatrix}\\\lambda_1\boldsymbol x_1&\cdots&\lambda_n\boldsymbol x_n\\\,\end{bmatrix}=\begin{bmatrix}\\\boldsymbol x_1&\cdots&\boldsymbol x_n\\\,\end{bmatrix}\begin{bmatrix}\lambda_1\\&\ddots\\&&\lambda_n\end{bmatrix}=X\Lambda XΛ λ1x1λnxn = x1xn λ1λn =XΛ这些矩阵保持右序,则 λ 1 \lambda_1 λ1 乘第一列 x 1 \boldsymbol x_1 x1 即如上式。此时我们完成了对角化,我们可以将 A X = X Λ AX=X\Lambda AX=XΛ 写成两种方式:

A X = X Λ 可以写成 X − 1 A X = Λ 或 A = X Λ X − 1 ( 6.2.2 ) AX=X\Lambda\kern 10pt可以写成\kern 5pt{\color{blue}X^{-1}AX=\Lambda}\kern 5pt或\kern 5pt{\color{blue}A=X\Lambda X^{-1}}\kern 16pt(6.2.2) AX=XΛ可以写成X1AX=ΛA=XΛX1(6.2.2)

矩阵 X X X 有逆矩阵,因为它的列( A A A 的特征向量)刚开始我们假设是线性无关的,如果没有 n n n 个无关的特征向量,我们就无法对角化。
A A A Λ \Lambda Λ 有相同的特征值 λ 1 , λ 2 , ⋯ , λ n \lambda_1,\lambda_2,\cdots,\lambda_n λ1,λ2,,λn,它们的特征向量不同。原始的特征向量 x 1 , x 2 , ⋯ , x n \boldsymbol x_1,\boldsymbol x_2,\cdots,\boldsymbol x_n x1,x2,,xn 的工作就是对角化 A A A,这些在 X X X 中的特征向量得到 A = X Λ X − 1 A=X\Lambda X^{-1} A=XΛX1,这个式子简洁,但是它有重要意义。 第 k k k 次方是 A k = X Λ k X − 1 A^{k} = X\Lambda^kX^{-1} Ak=XΛkX1,这个很容易计算: A k = ( X Λ X − 1 ) ( X Λ X − 1 ) ⋯ ( X Λ X − 1 ) = X Λ k X − 1 \pmb{A^k=(X\Lambda X^{-1})(X\Lambda X^{-1})\cdots(X\Lambda X^{-1})=X\Lambda^kX^{-1}} Ak=(XΛX1)(XΛX1)(XΛX1)=XΛkX1 例 1 的幂 [ 1 5 0 6 ] k = [ 1 1 0 1 ] [ 1 6 k ] [ 1 − 1 0 1 ] = [ 1 6 k − 1 0 6 k ] = A k \pmb{例\,1\,的幂}\kern 15pt\begin{bmatrix}1&5\\0&6\end{bmatrix}^k=\begin{bmatrix}1&1\\0&1\end{bmatrix}\begin{bmatrix}1\\&6^k\end{bmatrix}\begin{bmatrix}1&-1\\0&\kern 7pt1\end{bmatrix}=\begin{bmatrix}\pmb1&\pmb{6^k-1}\\0&\pmb{6^k}\end{bmatrix}=A^k 1的幂[1056]k=[1011][16k][1011]=[106k16k]=Ak k = 1 k=1 k=1 时得到 A A A;当 k = 0 k=0 k=0 时得 A 0 = I A^0=I A0=I λ 0 = 1 \lambda^0=1 λ0=1);当 k = − 1 k=-1 k=1 时得到 A − 1 A^{-1} A1;当 k = 2 k=2 k=2 A 2 = [ 1 35 0 36 ] A^2=\begin{bmatrix}1&35\\0&36\end{bmatrix} A2=[103536] 这个公式都适用。
下面是关于 Λ \Lambda Λ 4 4 4 个小注解:

注解1: 假设特征值 λ 1 , λ 2 , ⋯ , λ n \lambda_1,\lambda_2,\cdots,\lambda_n λ1,λ2,,λn 都不相同,则 n n n 个特征向量 x 1 , x 2 , ⋯ , x n \boldsymbol x_1,\boldsymbol x_2,\cdots,\boldsymbol x_n x1,x2,,xn 会自动无关,特征向量矩阵 X X X 可逆。任何的没有重复特征值的矩阵 A A A 都可以对角化。

注解2: 我们可以用任意的非零常数乘上特征向量 A ( c x ) = λ ( c x ) A(c\boldsymbol x)=\lambda(c\boldsymbol x) A(cx)=λ(cx) 任然成立。例 1 1 1 中,我们可以将 x = ( 1 , 1 ) \boldsymbol x=(1,1) x=(1,1) 除以 2 \sqrt2 2 来生成一个单位向量。
MATLAB 和几乎所有的其它代码都是得到长度 ∣ ∣ x ∣ ∣ = 1 ||\boldsymbol x||=1 ∣∣x∣∣=1 的特征向量。

注解3: X X X 中的特征向量的顺序和 Λ \Lambda Λ 中特征值的顺序一样。要反转 Λ \Lambda Λ 的顺序,也要在 X X X 中将特征向量 ( 1 , 1 ) (1,1) (1,1) 放在 $(1,0) $ 前: 新顺序 6 , 1 [ 0 1 1 − 1 ] [ 1 5 0 6 ] [ 1 1 1 0 ] = [ 6 0 0 1 ] = Λ new \pmb{新顺序\,6,1}\kern 15pt\begin{bmatrix}0&\kern 7pt1\\1&-1\end{bmatrix}\begin{bmatrix}1&5\\0&6\end{bmatrix}\begin{bmatrix}1&1\\1&0\end{bmatrix}=\begin{bmatrix}6&0\\0&1\end{bmatrix}=\Lambda_{\pmb{\textrm{new}}} 新顺序6,1[0111][1056][1110]=[6001]=Λnew要对角化 A A A 一定要使用特征向量矩阵,由 X − 1 A X = Λ X^{-1}AX=\Lambda X1AX=Λ 可知 A X = X Λ AX=X\Lambda AX=XΛ,假设 X X X 的第一列是 x \boldsymbol x x,则 A X AX AX X Λ X\Lambda XΛ 的第一列是 A x A\boldsymbol x Ax λ 1 x \lambda_1\boldsymbol x λ1x,要想它们相等,则 x \boldsymbol x x 一定要是特征向量。

注解4:(重复特征值的重复警告)有些矩阵的特征向量很少,这种矩阵无法对角化,下面是两个示例: 无法对角化 A = [ 1 − 1 1 − 1 ] 和 B = [ 0 1 0 1 ] \pmb{无法对角化}\kern 15ptA=\begin{bmatrix}1&-1\\1&-1\end{bmatrix}\kern 5pt和\kern 5ptB=\begin{bmatrix}0&1\\0&1\end{bmatrix} 无法对角化A=[1111]B=[0011]它们的特征值恰好都是 0 0 0 0 0 0 λ = 0 \lambda=0 λ=0 并没有什么特殊的,它们的问题是 λ \lambda λ 的重复,第一个矩阵所有的特征向量都是 ( 1 , 1 ) (1,1) (1,1) 的倍数: 特征向量只有一条直线 A x = 0 x 表示 [ 1 − 1 1 − 1 ] [ x ] = [ 0 0 ] 且 x = c [ 1 1 ] \pmb{特征向量只有一条直线}\kern 6ptA\boldsymbol x=0\boldsymbol x\kern 3pt表示\kern 3pt\begin{bmatrix}1&-1\\1&-1\end{bmatrix}\Big[\boldsymbol x\Big]=\begin{bmatrix}0\\0\end{bmatrix}且\kern 3pt\boldsymbol x=c\begin{bmatrix}1\\1\end{bmatrix} 特征向量只有一条直线Ax=0x表示[1111][x]=[00]x=c[11]并没有第二个方向的特征向量,所有这个不同寻常的矩阵 A A A 无法对角化。
这些矩阵是用来判断关于特征向量叙述的最佳例子,在很多判断问题中,无法对角化的矩阵会得到错误的结果。
注意可逆与可对角化之间没有什么联系:

  • 可逆性特征值有关( λ = 0 \lambda=0 λ=0 λ ≠ 0 \lambda\neq0 λ=0
  • 可对角化特征向量相关( X X X 中的特征向量是否足够)

每个特征值至少有一个特征向量! A − λ I A-\lambda I AλI 是奇异的,如果 ( A − λ I ) x = 0 (A-\lambda I)\boldsymbol x=\boldsymbol 0 (AλI)x=0 可以得到 x = 0 \boldsymbol x=\boldsymbol 0 x=0,则 λ \lambda λ 不是特征值。这说明在求解 det ⁡ ( A − λ I ) = 0 \det(A-\lambda I)=0 det(AλI)=0 时出现了错误。

不同的 λ \lambda λ 有无关的 x \boldsymbol x x \kern 8pt 全部不相同的特征值对应的特征向量 x 1 , x 2 , ⋯ , x j \boldsymbol x_1,\boldsymbol x_2,\cdots,\boldsymbol x_j x1,x2,,xj 都是线性无关的。任意的 n × n n\times n n×n 矩阵有 n n n 个不同的特征值(没有重复的 λ ′ s \lambda's λs)一定可以对角化。

证明: 假设 c 1 x 1 + c 2 x 2 = 0 c_1\boldsymbol x_1+c_2\boldsymbol x_2=\boldsymbol 0 c1x1+c2x2=0。左乘 A A A 得到 c 1 λ 1 x 1 + c 2 λ 2 x 2 = 0 c_1\lambda_1\boldsymbol x_1+c_2\lambda_2\boldsymbol x_2=\boldsymbol 0 c1λ1x1+c2λ2x2=0,用 λ 2 \lambda_2 λ2 乘得到 c 1 λ 2 x 1 + c 2 λ 2 x 2 = 0 c_1\lambda_2\boldsymbol x_1+c_2\lambda_2\boldsymbol x_2=\boldsymbol 0 c1λ2x1+c2λ2x2=0,然后将两式相减: 相减得到 ( λ 1 − λ 2 ) c 1 x 1 = 0 因此 c 1 = 0 相减得到\kern 10pt(\lambda_1-\lambda_2)c_1\boldsymbol x_1=\boldsymbol 0\kern 12pt因此\kern 2ptc_1=0 相减得到(λ1λ2)c1x1=0因此c1=0由于 λ ′ s \lambda's λs 都不相同且 x 1 ≠ 0 \boldsymbol x_1\neq\boldsymbol 0 x1=0,所有我们可以得到 c 1 = 0 c_1=0 c1=0。同理可得 c 2 = 0 c_2=0 c2=0。只有组合 c 1 = c 2 = 0 c_1=c_2=0 c1=c2=0 可以得到 c 1 x 1 + c 2 x 2 = 0 c_1\boldsymbol x_1+c_2\boldsymbol x_2=\boldsymbol 0 c1x1+c2x2=0,所以特征向量 x 1 \boldsymbol x_1 x1 x 2 \boldsymbol x_2 x2 一定是无关的。
这个证明可以直接扩展到 j j j 个特征向量,假设 c 1 x 1 + c 2 x 2 + ⋯ + c j x j = 0 c_1\boldsymbol x_1+c_2\boldsymbol x_2+\cdots+c_j\boldsymbol x_j=\boldsymbol 0 c1x1+c2x2++cjxj=0 A A A 乘上式,然后 λ j \lambda_j λj 乘上式,得到的两个式子相减,则 x j \boldsymbol x_j xj 的系数是 λ j − λ j = 0 \lambda_j-\lambda_j=0 λjλj=0,所以可以消去 x j \boldsymbol x_j xj;然后分别用 A A A λ j − 1 \lambda_{j-1} λj1 乘得到的式子再相减,就可以消去 x j − 1 \boldsymbol x_{j-1} xj1,最终只剩下 x 1 \boldsymbol x_1 x1 我们得到 ( λ 1 − λ 2 ) ( λ 1 − λ 3 ) ⋯ ( λ 1 − λ j ) c 1 x 1 = 0 一定有 c 1 = 0 ( 6.2.3 ) 我们得到\kern 10pt(\lambda_1-\lambda_2)(\lambda_1-\lambda_3)\cdots(\lambda_1-\lambda_j)c_1\boldsymbol x_1=\boldsymbol 0\kern 5pt一定有\kern 5ptc_1=0\kern 15pt(6.2.3) 我们得到(λ1λ2)(λ1λ3)(λ1λj)c1x1=0一定有c1=0(6.2.3)同理可得每个 c i = 0 c_i=0 ci=0,当所有的 λ ′ s \lambda's λs 都不相等,特征向量无关。所有的特征向量构成特征向量矩阵 X X X 的列。

例2 A 的幂 \pmb{A\,的幂}\kern 9pt A的幂马尔可夫矩阵 A = [ 0.8 0.3 0.2 0.7 ] A=\begin{bmatrix}0.8&0.3\\0.2&0.7\end{bmatrix} A=[0.80.20.30.7] 的特征值 λ 1 = 1 \lambda_1=1 λ1=1 λ 2 = 0.5 \lambda_2=0.5 λ2=0.5 A = X Λ X − 1 A=X\Lambda X^{-1} A=XΛX1 使得这些特征值在 Λ \Lambda Λ 的对角线上: 马尔可夫例子 [ 0.8 0.3 0.2 0.7 ] = [ 0.6 1 0.4 − 1 ] [ 1 0 0 0.5 ] [ 1 1 0.4 − 0.6 ] = X Λ X − 1 \pmb{马尔可夫例子}\kern 10pt\begin{bmatrix}0.8&0.3\\0.2&0.7\end{bmatrix}=\begin{bmatrix}0.6&\kern 7pt1\\0.4&-1\end{bmatrix}\begin{bmatrix}1&0\\0&0.5\end{bmatrix}\begin{bmatrix}1&1\\0.4&-0.6\end{bmatrix}=X\Lambda X^{-1} 马尔可夫例子[0.80.20.30.7]=[0.60.411][1000.5][10.410.6]=XΛX1特征向量 ( 0.6 , 0.4 ) (0.6,0.4) (0.6,0.4) ( 1 , − 1 ) (1,-1) (1,1) X X X 的列,它们也是 A 2 A^2 A2 的特征向量。 A 2 A^2 A2 有同样的 X X X A 2 A^2 A2 的特征向量矩阵是 Λ 2 \Lambda^2 Λ2

A 2 A^2 A2 有相同的 X X\kern 15pt X A 2 = X Λ X − 1 X Λ X − 1 = X Λ 2 X − 1 ( 6.2.4 ) {\color{blue}A^2}=X\Lambda X^{-1}X\Lambda X^{-1}={\color{blue}X\Lambda^2 X^{-1}}\kern 20pt(6.2.4) A2=XΛX1XΛX1=XΛ2X1(6.2.4)

保持这个形式,就可以看到为什么高次幂 A k A^k Ak 趋近一个 “稳定状态”: A 的幂 A k = X Λ k X − 1 = [ 0.6 1 0.4 − 1 ] [ 1 k 0 0 ( 0.5 ) k ] [ 1 1 0.4 − 0.6 ] \pmb{A\,的幂}\kern 25ptA^k=X\Lambda^kX^{-1}=\begin{bmatrix}0.6&\kern 7pt1\\0.4&-1\end{bmatrix}\begin{bmatrix}1^k&0\\0&(0.5)^k\end{bmatrix}\begin{bmatrix}1&1\\0.4&-0.6\end{bmatrix} A的幂Ak=XΛkX1=[0.60.411][1k00(0.5)k][10.410.6] k k k 变大, ( 0.5 ) k (0.5)^k (0.5)k 变小,极限时会消失,这个极限就是 A ∞ A^\infty A 极限 k → ∞ A ∞ = [ 0.6 1 0.4 − 1 ] [ 1 0 0 0 ] [ 1 1 0.4 − . 6 ] = [ 0.6 0.6 0.4 0.4 ] \pmb{极限\,k\rightarrow\infty}\kern 20ptA^\infty=\begin{bmatrix}0.6&1\\0.4&-1\end{bmatrix}\begin{bmatrix}1&0\\0&0\end{bmatrix}\begin{bmatrix}1&1\\0.4&-.6\end{bmatrix}=\begin{bmatrix}0.6&0.6\\0.4&0.4\end{bmatrix} 极限kA=[0.60.411][1000][10.41.6]=[0.60.40.60.4]这个极限的两个列都是特征向量 x 1 \boldsymbol x_1 x1

问题 什么时候 A k → 零矩阵 答案 所有的 ∣ λ ∣ < 1 {\color{blue}问题}\kern 5pt\boxed{什么时候 A^k\rightarrow 零矩阵}\kern 15pt{\color{blue}答案}\kern 5pt\boxed{所有的\,|\lambda|<1} 问题什么时候Ak零矩阵答案所有的λ<1

二、相似矩阵:相同的特征值

假设特征值矩阵 Λ \Lambda Λ 固定,随着特征向量矩阵 X X X 的改变,我们得到一整个家族里的不同矩阵 A = X Λ X − 1 A=X\Lambda X^{-1} A=XΛX1 —— 它们都和 Λ \Lambda Λ 有相同的特征值。所有的这些矩阵 A A A(有相同的 Λ \Lambda Λ)称为相似(similar)。
这个概念可以扩展至无法对角化的矩阵,我们选择一个常数矩阵(不需要是 Λ \Lambda Λ),我们观察一下这整个家族的矩阵 A = B C B − 1 \pmb{A=BCB^{-1}} A=BCB1,这里任意的可逆矩阵 B B B 都可以,同样有 A A A C C C 相似
我们用 C C C 代替 Λ \Lambda Λ,因为 C C C 不一定是对角矩阵;用 B B B 代替 X X X,因为 B B B 的列不一定是特征向量。我们只需要 B B B 是可逆的 —— 它的列可以是 R n \pmb{\textrm R}^n Rn 的任意一组基。只要满足这些条件的就是相似矩阵。相似矩阵 A A A C C C 有相同的特征值。

所有的矩阵 A = B C B − 1 A=BCB^{-1} A=BCB1 都是 “相似” 的,它们和 C C C 有相同的特征值。

证明: 假设 C x = λ x C\boldsymbol x=\lambda\boldsymbol x Cx=λx,则 B C B − 1 BCB^{-1} BCB1 有相同的特征值 λ \lambda λ 和新的特征向量 B x B\boldsymbol x Bx 相同的 λ ( B C B − 1 ) ( B x ) = B C x = B λ x = λ ( B x ) ( 6.2.5 ) \pmb{相同的\,\lambda}\kern 20pt(BCB^{-1})(B\boldsymbol x)=BC\boldsymbol x=B\lambda\boldsymbol x=\lambda(B\boldsymbol x)\kern 17pt(6.2.5) 相同的λ(BCB1)(Bx)=BCx=Bλx=λ(Bx)(6.2.5)一个固定的矩阵 C C C 可以生成一个家族的相似矩阵 B C B − 1 BCB^{-1} BCB1 B B B 是任意的可逆矩阵。当 C C C 是单位矩阵时,这个家族很小,唯一的成员是 B I B − 1 = I BIB^{-1}=I BIB1=I,单位矩阵是唯一的所有的特征值 λ = 1 \lambda=1 λ=1 且可以对角化的矩阵。
λ = 1 \lambda=1 λ=1 1 1 1 但是只有一个特征向量(无法对角化)时,这个家族会大一些。最简单的 C C C 是若尔当形(Jordan form)。所有相似的 A ′ s A's As 有两个参数 r r r s s s,它们不同时为零:总是有行列式 det ⁡ = 1 \det=1 det=1 和迹 t r a c e = 2 trace=2 trace=2 C = [ 1 1 0 1 ] = 若尔当形得到的 A = B C B − 1 = [ 1 − r s r 2 − s 2 1 + r s ] ( 6.2.6 ) C=\begin{bmatrix}\pmb1&\pmb1\\0&\pmb1\end{bmatrix}=若尔当形得到的\,A=BCB^{-1}=\begin{bmatrix}1-rs&r^2\\-s^2&1+rs\end{bmatrix}\kern 13pt(6.2.6) C=[1011]=若尔当形得到的A=BCB1=[1rss2r21+rs](6.2.6)另一个重要的例子是 λ = 1 \lambda=1 λ=1 0 0 0,这是不重复的两个特征值。则现在的整个家族都可以对角化,且有相同的特征值矩阵 Λ \Lambda Λ。我们得到任意的 2 × 2 2\times2 2×2 的矩阵特征值都是 1 1 1 0 0 0,迹是 1 1 1 且行列式为零: 所有的相似矩阵 Λ = [ 1 0 0 0 ] A = [ 1 1 0 0 ] 或 A = [ 0.5 0.5 0.5 0.5 ] 或 任意的 A = x y T x T y \pmb{所有的相似矩阵}\kern 10pt\Lambda=\begin{bmatrix}\pmb1&0\\0&\pmb0\end{bmatrix}\kern 10ptA=\begin{bmatrix}1&1\\0&0\end{bmatrix}\,或\,A=\begin{bmatrix}0.5&0.5\\0.5&0.5\end{bmatrix}\,或\,任意的\,A=\frac{\boldsymbol x\boldsymbol y^T}{\boldsymbol x^T\boldsymbol y} 所有的相似矩阵Λ=[1000]A=[1010]A=[0.50.50.50.5]任意的A=xTyxyT这个家族包含所有的 A 2 = A A^2=A A2=A 的矩阵、包含当 B = I B=I B=I 时的 A = Λ A=\Lambda A=Λ。当 A A A 对称时这些也是投影矩阵。特征值 1 1 1 0 0 0 让生活变得简单。

三、斐波那契数

斐波那契数(Fibonacci Numbers)是很著名的数列,特征值可以告诉我们斐波那契数是如何快速增长的。每个新的斐波那契数都是前两个斐波那契数 F ′ s F's Fs 的和:

序列 0 , 1 , 1 , 2 , 3 , 5 , 8 , 13 , ⋯ \kern 8pt\color{blue}0,1,1,2,3,5,8,13,\cdots\kern 10pt 0,1,1,2,3,5,8,13,来自于 F k + 2 = F k + 1 + F k \kern 10pt\color{blue}F_{k+2}=F_{k+1}+F_k Fk+2=Fk+1+Fk

这些数字会以各种神奇的方式出现。植物和树是以螺旋形式生长的,如果把位于枝干或茎的周围的同一方向的最近的两片叶子作为周期的开始和结束,这个周期中的叶子会沿着枝干或茎绕很多圈。梨树有 8 8 8 片叶子共绕 3 3 3 圈,柳树有 13 13 13 片叶子绕 5 5 5 圈。而向日葵花盘的螺旋线也符合斐波那契数,比较大的向日葵逆顺螺旋线有 144 144 144 233 233 233 个,这是斐波那契数列中的 F 12 F_{12} F12 F 13 F_{13} F13。我们的问题比较基础。
问题:求出斐波那契数 F 100 \pmb{F_{100}} F100 使用公式 F k + 2 = F k + 1 + F k F_{k+2}=F_{k+1}+F_{k} Fk+2=Fk+1+Fk 一步一步的计算是很慢的方法。将 F 6 = 8 F_6=8 F6=8 加上 F 7 = 13 F_7=13 F7=13 可以得到 F 8 = 21 F_8=21 F8=21,最终可以求得 F 100 F_{100} F100。但是线性代数提供了更好的方法。
关键是由一个矩阵方程 u k + 1 = A u k \boldsymbol u_{k+1}=A\boldsymbol u_{k} uk+1=Auk 开始,这是第一步。第二步我们将两个斐波那契数放在一个向量中来应用适配这些规则,就可以得到矩阵 A A A

u k = [ F k + 1 F k ] \kern 8pt{\color{blue}\boldsymbol u_k=\begin{bmatrix}F_{k+1}\\\\F_k\end{bmatrix}}\kern 5pt uk= Fk+1Fk 规则 F k + 2 = F k + 1 + F k F k + 1 = F k + 1 \begin{array}{l}F_{k+2}=F_{k+1}+F_k\\F_{k+1}=F_{k+1}\end{array}\kern 5pt Fk+2=Fk+1+FkFk+1=Fk+1 就是 u k + 1 = [ 1 1 1 0 ] u k \kern 5pt\color{blue}\boldsymbol u_{k+1}=\begin{bmatrix}1&1\\\\1&0\end{bmatrix}\boldsymbol u_k uk+1= 1110 uk ( 6.2.7 ) \kern 60pt(6.2.7) (6.2.7)

每一步左乘 A = [ 1 1 1 0 ] A=\begin{bmatrix}1&1\\1&0\end{bmatrix} A=[1110] 100 100 100 步后就可以得到 u 100 = A 100 u 0 \boldsymbol u_{100}=A^{100}\boldsymbol u_0 u100=A100u0 u 0 = [ 1 0 ] , u 1 = [ 1 1 ] , u 2 = [ 2 1 ] , u 3 = [ 3 2 ] , ⋯ , u 100 = [ F 101 F 100 ] \boldsymbol u_0=\begin{bmatrix}1\\0\end{bmatrix},\boldsymbol u_1=\begin{bmatrix}1\\1\end{bmatrix},\boldsymbol u_2=\begin{bmatrix}2\\1\end{bmatrix},\boldsymbol u_3=\begin{bmatrix}3\\2\end{bmatrix},\cdots,\boldsymbol u_{100}=\begin{bmatrix}F_{101}\\F_{100}\end{bmatrix} u0=[10],u1=[11],u2=[21],u3=[32],,u100=[F101F100]这个问题就变成了特征值问题,从 A A A 的对角线减去 λ \lambda λ 得: A − λ I = [ 1 − λ 1 1 − λ ] 得 det ⁡ ( A − λ I ) = λ 2 − λ − 1 A-\lambda I=\begin{bmatrix}1-\lambda&1\\1&-\lambda\end{bmatrix}\kern 10pt得\kern 10pt\det(A-\lambda I)=\lambda^2-\lambda-1 AλI=[1λ11λ]det(AλI)=λ2λ1方程 λ 2 − λ − 1 = 0 \lambda^2-\lambda-1=0 λ2λ1=0 由求根公式 − b ± b 2 − 4 a c 2 a \displaystyle\frac{-b±\sqrt{b^2-4ac}}{2a} 2ab±b24ac 可以解出两个特征值: 特征值 λ 1 = 1 + 5 2 ≈ 1.618 和 λ 2 = 1 − 5 2 ≈ − 0.618 \pmb{特征值}\kern 10pt{\color{blue}\lambda_1=\frac{1+\sqrt5}{2}\approx1.618}\kern 4pt和\kern 4pt{\color{blue}\lambda_2=\frac{1-\sqrt5}{2}\approx-0.618} 特征值λ1=21+5 1.618λ2=215 0.618由特征值可以求得特征向量 x 1 = ( λ 1 , 1 ) \boldsymbol x_1=(\lambda_1,1) x1=(λ1,1) x 2 = ( λ 2 , 1 ) \boldsymbol x_2=(\lambda_2,1) x2=(λ2,1),然后找出得到 u 0 = ( 1 , 0 ) \boldsymbol u_0=(1,0) u0=(1,0) 的特征向量的组合: [ 1 0 ] = 1 λ 1 − λ 2 ( [ λ 1 1 ] − [ λ 2 1 ] ) 或 u 0 = x 1 − x 2 λ 1 − λ 2 ( 6.2.8 ) \begin{bmatrix}1\\0\end{bmatrix}=\frac{1}{\lambda_1-\lambda_2}\Big(\begin{bmatrix}\lambda_1\\1\end{bmatrix}-\begin{bmatrix}\lambda_2\\1\end{bmatrix}\Big)\kern 3pt或\kern 3pt\boldsymbol u_0=\frac{\boldsymbol x_1-\boldsymbol x_2}{\lambda_1-\lambda_2}\kern 20pt(6.2.8) [10]=λ1λ21([λ11][λ21])u0=λ1λ2x1x2(6.2.8)第三步是 u 0 \boldsymbol u_0 u0 左乘 A 100 A^{100} A100 得到 u 100 \boldsymbol u_{100} u100,特征向量 x 1 \boldsymbol x_1 x1 x 2 \boldsymbol x_2 x2 仍然分开,分别用 ( λ 1 ) 100 (\lambda_1)^{100} (λ1)100 ( λ 2 ) 100 (\lambda_2)^{100} (λ2)100 乘上它们: 来自 u 0 的第 100 步 u 100 = ( λ 1 ) 100 x 1 − ( λ 2 ) 100 x 2 λ 1 − λ 2 ( 6.2.9 ) \pmb{来自\,\boldsymbol u_0\,的第\,100\,步}\kern 20pt{\color{blue}\boldsymbol u_{100}=\frac{(\lambda_1)^{100}\boldsymbol x_1-(\lambda_2)^{100}\boldsymbol x_2}{\lambda_1-\lambda_2}}\kern 15pt(6.2.9) 来自u0的第100u100=λ1λ2(λ1)100x1(λ2)100x2(6.2.9)我们需要的 F 100 F_{100} F100 等于 u 100 \boldsymbol u_{100} u100 的第二个分量, x 1 \boldsymbol x_1 x1 x 2 \boldsymbol x_2 x2 的第二分量都是 1 1 1 λ 1 = 1 + 5 2 \lambda_1=\displaystyle\frac{1+\sqrt5}{2} λ1=21+5 λ 2 = 1 − 5 2 \lambda_2=\displaystyle\frac{1-\sqrt5}{2} λ2=215 的差是 5 \sqrt5 5 ,且 λ 2 100 ≈ 0 \lambda_2^{100}\approx0 λ21000 第 100 个斐波那契数 = λ 1 100 − λ 2 100 λ 1 − λ 2 = 最接近 1 5 ( 1 + 5 2 ) 100 的整数 ( 2.6.10 ) 第\,100\,个斐波那契数=\frac{\lambda^{100}_1-\lambda^{100}_2}{\lambda_1-\lambda_2}=最接近\,\frac{1}{\sqrt5}\Big(\frac{1+\sqrt5}{2}\Big)^{100}\,的整数\kern 12pt(2.6.10) 100个斐波那契数=λ1λ2λ1100λ2100=最接近5 1(21+5 )100的整数(2.6.10)每个 F k F_k Fk 都是整数,比值 F 101 / F 100 F_{101}/F_{100} F101/F100 非常接近比值 ( 1 + 5 ) / 2 (1+\sqrt5)/2 (1+5 )/2。希腊人称这个数是 “黄金分割(golden mean)”,因为某些原因,矩阵的边长比例是 1.618 1.618 1.618 1 1 1 时会非常优美。
由特征值我们可以求得斐波那契数的通项公式 F n = 1 5 [ ( 1 + 5 2 ) n − ( 1 − 5 2 ) n ] F_n=\displaystyle\frac{1}{\sqrt5}\Big[\Big(\frac{1+\sqrt5}{2}\Big)^{n}-\Big(\frac{1-\sqrt5}{2}\Big)^{n}\Big] Fn=5 1[(21+5 )n(215 )n],第 100 100 100 项是 F 100 = 354224848179261915075 F_{100}=354224848179261915075 F100=354224848179261915075

四、矩阵的幂 A k A^k Ak

斐波那契的例子是典型的差分方程 u k + 1 = A u k \boldsymbol u_{k+1}=A\boldsymbol u_k uk+1=Auk每步都左乘 A A A 解是 u k = A k u 0 \boldsymbol u_k=A^k\boldsymbol u_0 uk=Aku0。我们要在三步内使用对角化矩阵快速计算 A k A^k Ak u k \boldsymbol u_k uk
特征向量矩阵 X X X 可以得到 A = X Λ X − 1 A=X\Lambda X^{-1} A=XΛX1,这也是矩阵的一种分解,就像 A = L U A=LU A=LU A = Q R A=QR A=QR 分解一样。新的分解方法很适合计算矩阵的幂,因为每次 X − 1 X^{-1} X1 X X X 都会得到 I I I A 的幂 A k u 0 = ( X Λ X − 1 ) ( X Λ X − 1 ) ⋯ ( X Λ X − 1 ) u 0 = X Λ k X − 1 u 0 \pmb{A\,的幂}\kern 8ptA^k\boldsymbol u_0=(X\Lambda X^{-1})(X\Lambda X^{-1})\cdots(X\Lambda X^{-1})\boldsymbol u_0=X\Lambda^k X^{-1}\boldsymbol u_0 A的幂Aku0=(XΛX1)(XΛX1)(XΛX1)u0=XΛkX1u0下面将 X Λ k X − 1 u 0 X\Lambda^kX^{-1}\boldsymbol u_0 XΛkX1u0 分解成三步,以展示其中特征值是如何起作用的:

  1. 将 u 0 写成特征向量的组合 c 1 x 1 + c 2 x 2 + ⋯ + c n x n \color{blue}将\, \boldsymbol u_0 写成特征向量的组合 c_1\boldsymbol x_1+c_2\boldsymbol x_2+\cdots+c_n\boldsymbol x_n u0写成特征向量的组合c1x1+c2x2++cnxn。则 c = X − 1 u 0 \boldsymbol c=X^{-1}\boldsymbol u_0 c=X1u0
  2. 每个特征向量 x i 乘上 ( λ i ) k \color{blue}每个特征向量\,\boldsymbol x_i\,乘上\,(\lambda_i)^k 每个特征向量xi乘上(λi)k。现在我们有 Λ k X − 1 u 0 = Λ k c \Lambda^kX^{-1}\boldsymbol u_0=\Lambda^k\boldsymbol c ΛkX1u0=Λkc c = X − 1 X c \boldsymbol c=X^{-1}X\boldsymbol c c=X1Xc 中的特征向量矩阵 X X X 中的 x i \boldsymbol x_i xi 每个乘上 ( λ i ) k (\lambda_i)^k (λi)k,即得到 Λ k c \Lambda^k\boldsymbol c Λkc
  3. 将每一部分的 c i ( λ i ) k x i 加起来求出解 u k = A k u 0 \color{blue}将每一部分的\,c_i(\lambda_i)^k\boldsymbol x_i\,加起来求出解\,\boldsymbol u_k=A^k\boldsymbol u_0 将每一部分的ci(λi)kxi加起来求出解uk=Aku0。这个就是 X Λ k X − 1 u 0 X\Lambda^k X^{-1}\boldsymbol u_0 XΛkX1u0

u k + 1 = A u k 的解 u k = A k u 0 = c 1 ( λ 1 ) k x 1 + c 2 ( λ 2 ) k x 2 + ⋯ + c n ( λ n ) k x n ( 6.2.11 ) \boldsymbol u_{k+1}=A\boldsymbol u_k\,\boldsymbol{的解}\kern 20pt{\color{blue}\boldsymbol u_k=A^k\boldsymbol u_0=c_1(\lambda_1)^k\boldsymbol x_1+c_2(\lambda_2)^k\boldsymbol x_2+\cdots+c_n(\lambda_n)^k\boldsymbol x_n}\kern 15pt(6.2.11) uk+1=Auk的解uk=Aku0=c1(λ1)kx1+c2(λ2)kx2++cn(λn)kxn(6.2.11)

使用矩阵语言 A k A^k Ak 等于 ( X Λ X − 1 ) k (X\Lambda X^{-1})^k (XΛX1)k 就是 X X X Λ k \Lambda^k Λk X − 1 X^{-1} X1。在步骤 1 1 1 中, X X X 中的特征向量得到组合 u 0 = c 1 x 1 + c 2 x 2 + ⋯ + c n x n \boldsymbol u_0=c_1\boldsymbol x_1+c_2\boldsymbol x_2+\cdots+c_n\boldsymbol x_n u0=c1x1+c2x2++cnxn 中的 c ′ s c's cs 步骤 1 u 0 = [ x 1 ⋯ x n ] [ c 1 ⋮ c n ] ,这个就是 u 0 = X c ( 6.2.12 ) \boldsymbol{步骤\,1}\kern 10pt\boldsymbol u_0=\begin{bmatrix}\,\\\boldsymbol x_1&\cdots&\boldsymbol x_n\\\,\end{bmatrix}\begin{bmatrix}c_1\\\vdots\\c_n\end{bmatrix},这个就是\,{\color{blue}\boldsymbol u_0=X\boldsymbol c}\kern 15pt(6.2.12) 步骤1u0= x1xn c1cn ,这个就是u0=Xc(6.2.12)步骤 1 1 1 的系数是 c = X − 1 u 0 \boldsymbol c=X^{-1}\boldsymbol u_0 c=X1u0。然后步骤 2 2 2 左乘 Λ k \Lambda^k Λk,最终的结果是步骤 3 3 3 u k = ∑ c i ( λ i ) k x i \boldsymbol u_k=\sum c_i(\lambda_i)^k\boldsymbol x_i uk=ci(λi)kxi,这个就是 X X X Λ k \Lambda^k Λk X − 1 u 0 X^{-1}\boldsymbol u_0 X1u0 的乘积: A k u 0 = X Λ k X − 1 u 0 = X Λ k c = [ x 1 ⋯ x n ] [ ( λ 1 ) k ⋱ ( λ n ) k ] [ c 1 ⋮ c n ] ( 6.2.13 ) {\color{blue}A^k\boldsymbol u_0}=X\Lambda^kX^{-1}\boldsymbol u_0=X\Lambda^k\boldsymbol c=\begin{bmatrix}\\\color{blue}\boldsymbol x_1&\color{blue}\cdots&\color{blue}\boldsymbol x_n\\\,\end{bmatrix}\begin{bmatrix}\color{blue}(\lambda_1)^k\\\,&\color{blue}\ddots\\\,&&\color{blue}(\lambda_n)^k\end{bmatrix}\begin{bmatrix}\color{blue}c_1\\\color{blue}\vdots\\\color{blue}c_n\end{bmatrix}\kern 15pt(6.2.13) Aku0=XΛkX1u0=XΛkc= x1xn (λ1)k(λn)k c1cn (6.2.13)这个结果就是 u k = c 1 ( λ 1 ) k x 1 + c 2 ( λ 2 ) k x 2 + ⋯ + c n ( λ n ) k x n \boldsymbol u_k=c_1(\lambda_1)^k\boldsymbol x_1+c_2(\lambda_2)^k\boldsymbol x_2+\cdots+c_n(\lambda_n)^k\boldsymbol x_n uk=c1(λ1)kx1+c2(λ2)kx2++cn(λn)kxn,它是 u k + 1 = A u k \boldsymbol u_{k+1}=A\boldsymbol u_k uk+1=Auk 的解。

例3】从 u 0 = ( 1 , 0 ) \boldsymbol u_0=(1,0) u0=(1,0) 开始,计算这个快速斐波那契数的 A k u 0 A^k\boldsymbol u_0 Aku0 A = [ 1 2 1 0 ] 有 λ 1 = 2 , x 1 = [ 2 1 ] 和 λ 2 = − 1 , x 2 = [ 1 − 1 ] A=\begin{bmatrix}1&2\\1&0\end{bmatrix}有\,\lambda_1=\pmb2,\kern 3pt\boldsymbol x_1=\begin{bmatrix}2\\1\end{bmatrix}和\,\lambda_2=\pmb{-1},\kern 3pt\boldsymbol x_2=\begin{bmatrix}\kern 7pt1\\-1\end{bmatrix} A=[1120]λ1=2,x1=[21]λ2=1,x2=[11]这个矩阵很像斐波那契数,只是规则改为了 F k + 2 = F k + 1 + 2 F k F_{k+2}=F_{k+1}+\pmb2F_k Fk+2=Fk+1+2Fk,新的数列从 0 , 1 , 1 , 3 0,1,1,3 0,1,1,3 开始,由于 λ = 2 \lambda=2 λ=2,所有它们增长的比斐波那契数要更快。

用 3 步求出 u k = A k u 0 u 0 = c 1 x 1 + c 2 x 2 和 u k = c 1 ( λ 1 ) k x 1 + c 2 ( λ 2 ) k x 2 \pmb 用 \,3\,\pmb{步求出}\,\boldsymbol u_k=A^k\boldsymbol u_0\kern 10pt\boldsymbol u_0=c_1\boldsymbol x_1+c_2\boldsymbol x_2\,和\,\boldsymbol u_k=c_1(\lambda_1)^k\boldsymbol x_1+c_2(\lambda_2)^k\boldsymbol x_2 3步求出uk=Aku0u0=c1x1+c2x2uk=c1(λ1)kx1+c2(λ2)kx2 步骤 1 u 0 = [ 1 0 ] = 1 3 [ 2 1 ] + 1 3 [ 1 − 1 ] , 所以 c 1 = c 2 = 1 3 步骤 2 分别左乘两部分 ( λ 1 ) k = 2 k 和 ( λ 2 ) k = ( − 1 ) k 步骤 3 组合特征向量 c 1 ( λ 1 ) k x 1 和 c 2 ( λ 2 ) k x 2 得到 u k : u k = A k u 0 u k = 1 3 2 k [ 2 1 ] + 1 3 ( − 1 ) k [ 1 − 1 ] = [ F k + 1 F k ] \begin{array}{l}\boldsymbol{步骤\,1}\kern 15pt\boldsymbol u_0=\begin{bmatrix}1\\0\end{bmatrix}=\displaystyle\frac{1}{3}\begin{bmatrix}2\\1\end{bmatrix}+\frac{1}{3}\begin{bmatrix}\kern 7pt1\\-1\end{bmatrix},\kern 5pt所以\,c_1=c_2=\frac{1}{3}\\\,\\\boldsymbol{步骤\,2}\kern 15pt分别左乘两部分\,(\lambda_1)^k=2^k\,和\,(\lambda_2)^k=(-1)^k\\\,\\\boldsymbol{步骤3}\kern 15pt组合特征向量\,c_1(\lambda_1)^k\boldsymbol x_1\,和\,c_2(\lambda_2)^k\boldsymbol x_2\,得到\,\boldsymbol u_k:\end{array}\\\,\\\boldsymbol u_k=A^k\boldsymbol u_0\kern 15pt\boldsymbol u_k=\frac{1}{3}2^k\begin{bmatrix}2\\1\end{bmatrix}+\frac{1}{3}(-1)^k\begin{bmatrix}\kern 7pt1\\-1\end{bmatrix}=\begin{bmatrix}F_{k+1}\\F_k\end{bmatrix} 步骤1u0=[10]=31[21]+31[11],所以c1=c2=31步骤2分别左乘两部分(λ1)k=2k(λ2)k=(1)k步骤3组合特征向量c1(λ1)kx1c2(λ2)kx2得到uk:uk=Aku0uk=312k[21]+31(1)k[11]=[Fk+1Fk]新的数是 F k = 2 k − ( − 1 ) k 3 F_k=\displaystyle\frac{2^k-(-1)^k}{3} Fk=32k(1)k,在 0 , 1 , 1 , 3 0,1,1,3 0,1,1,3 后的数字是 F 4 = 15 3 = 5 F_4=\displaystyle\frac{15}{3}=5 F4=315=5
这些数字的例子后面都有一个基本的思想:跟随特征向量。它是从线性代数到微分方程的重要链接( λ k \lambda^k λk 会变成 e λ t e^{\lambda t} eλt);变化到特征向量基也会用到,最好的例子就是傅里叶级数(Fourier series),是由 d / d x \textrm d/\textrm dx d/dx 的特征向量 e i k x e^{ikx} eikx 创建的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/13304.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构 | C++】小明的账单

小明的账单 背景 Special for beginners 描述 小明在一次聚会中&#xff0c;不慎遗失了自己的钱包&#xff0c;在接下来的日子&#xff0c;面对小明的将是一系列的补卡手续和堆积的账单。 在小明的百般恳求下&#xff0c;老板最终同意延缓账单的支付时间。可老板又提出&#…

深入FastAPI:路径参数、查询参数及其检校

引言 大家好&#xff0c;我是GISer Liu&#x1f601;&#xff0c;一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年11月学习赛的FastAPI学习总结文档&#xff1b;本文主要讲解路径参数、查询参数及其检校机制。&#x1f495;&#x1f495;&#x1f60a; 介绍 F…

图数据库 | 5、图数据库三大组件之一 之 图计算 (下)

书接上文&#xff1a;图数据库 | 4、图数据库三大组件之一 ——图计算 &#xff08;上&#xff09;-CSDN博客 结合计算效率来评估与设计图计算所需的数据结构。 存储低效性或许是相邻矩阵或关联矩阵等数据结构的最大缺点&#xff0c;尽管它有着O(1)的访问时间复杂度。例如通过…

由播客转向个人定制的音频频道(1)平台搭建

项目的背景 最近开始听喜马拉雅播客的内容&#xff0c;但是发现许多不方便的地方。 休息的时候收听喜马拉雅&#xff0c;但是还需要不断地选择喜马拉雅的内容&#xff0c;比较麻烦&#xff0c;而且黑灯操作反而伤眼睛。 喜马拉雅为代表的播客平台都是VOD 形式的&#xff0…

被抛弃的八股文之keep-alive

还记得在我毕业面试时&#xff0c;经常看到碰到的面试题中都有着TCP中的keep-alive和Http中的keep-alive有什么区别。但是现在的八股文中已经再也见不到了&#xff08;燕子&#xff0c;我们还会再见吗&#xff09; 话说回来&#xff0c;这两个不同的协议中&#xff0c;keep-ali…

衡石分析平台系统分析人员手册-指标管理

指标管理​ 指标平台通过业务主题管理指标&#xff0c;对指标进行授权使用。在指标管理中业务管理员根据业务情况创建相关的主题&#xff0c;将与业务相关的指标添加到主题中&#xff0c;对指标进行上下线管理&#xff0c;将主题及其下面的指标授权给平台内其他用户使用。 本…

【万码优才,等你到来】一款针对程序员求职的平台

hello&#xff0c;大家好我是万码优才推荐官→Aic山鱼&#xff0c;在面对广大程序员找工作的前期我为大家推荐一款超牛的求职平台 ——万码优才 针对当前的求职情况山鱼君也做了一写总结与分析&#xff0c;也结合了其他求职平台给出了“为什么要使用万码优才 这个平台”的原因 …

echarts bar3D画出圆角立方体模拟建筑

结果展示 重点 bar3D中圆角属性&#xff1a;roundCap: true //开启圆角&#xff08;echarts官方文档中没有&#xff09;bevelSize: .6 //圆角程度barSize: 12.5 //立方体大小半球形使用 surface 类型,曲线方程如下 parametricEquation: {u: {min: 0,max: Math.PI,step: Ma…

从建立TRUST到实现FAIR:可持续海洋经济的数据管理

1. 引言 随着我们对信息管理方式的信任&#xff0c;我们的社会对数字化数据的以来呈指数级增长。为了跟上大数据的需求&#xff0c;通过不断的努力和持续实践&#xff0c;对“good”数据管理方式的共识也在不断发展和演变。 加拿大正在建设国家基础设施和服务以及研究数据管理…

CTF-RE 从0到N: perl 逆向

WMCTF2020 easy_re 1.寻找字符串Script 2.通过下一个call 3.将rax的值解析为字符串

RecyclerView详解——(二)优劣,ItemDecoration,SnapHelper

本文主要讲述RecyclerView和ListView的区别&#xff0c;ItemDecoration实现分割线&#xff0c;边距和背景&#xff0c;以及SnapHelper的使用。 一、RecyclerView和ListView 1. 性能和视图重用 ListView 使用的是 ViewHolder 模式来实现视图的重用&#xff0c;但需要手动配置…

[运维][Nginx]Nginx学习(2/5)-Nginx高级

Nginx服务器基础配置实例 前面我们已经对Nginx服务器默认配置文件的结构和涉及的基本指令做了详细的阐述。通过这些指令的合理配置&#xff0c;我们就可以让一台Nginx服务器正常工作&#xff0c;并且提供基本的web服务器功能。 接下来我们将通过一个比较完整和最简单的基础配…

动态规划习题其四【力扣】【算法学习day.26】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非常非常高滴&am…

candence : 原理图如何导出原理库?

原理图如何导出原理库&#xff1f; 1、打开要需要导出原理图库的工程文件&#xff0c;新建一个原理图库&#xff1a; 2、copy 需要导出的原理图的库文件 3、粘贴到 刚刚新建的原理图库文件中即可 完成 可以一个一个复制&#xff0c;也可以多可一起复制。

二叉树的遍历

普通二叉树的遍历 前序遍历:根 左子树 右子树 中序遍历:左子树 根 右子树 后序遍历:左子树 右子树 根 一颗普通二叉树的实现 #include<stdlib.h> //树的定义 typedef int BTDataType; typedef struct BinaryTreeNode {BTDataType data;struct BinaryTreeNode* left;s…

WebStorm 如何调试 Vue 项目

前言 在日常开发和各种教程中&#xff0c;最常见的 debug 方式就是在代码中插入 console.log 语句&#xff0c;然后在 Chrome 控制台中查看日志。显而易见&#xff0c;插入console.log 的效率不高&#xff0c;那是否有更高效的 debug 方式呢&#xff1f;断点调试允许开发者在代…

timedatectl status显示系统时间相关信息

timedatectl status命令用于显示当前系统的时间和日期相关信息。 下面是每行含义&#xff1a; Local time: 当前系统的本地时间Universal time: 当前系统的协调世界时&#xff08;UTC&#xff09;RTC time: 硬件时钟&#xff08;Real Time Clock&#xff09;的时间Time zone:…

【网页设计】HTML5 和 CSS3 提高

目标 能够说出 3~5 个 HTML5 新增布局和表单标签能够说出 CSS3 的新增特性有哪些 1. HTML5 的新特性 注&#xff1a;该部分所有内容可参考菜鸟教程菜鸟教程 - 学的不仅是技术&#xff0c;更是梦想&#xff01; (runoob.com) HTML5 的新增特性主要是针对于以前的不足&#xf…

09C++结构体

/*结构体属于用户自定义的数据类型&#xff0c; 允许用户存储不同的数据类型, 语法:struct 结构体名{结构体成员列表} ;*/ //struct 结构体名 变量名 #include <iostream> #include <string> using namespace std; struct student { string name; int age;int s…

软件测试之白盒测试(超详细总结)

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 白盒测试 白盒测试&#xff08;White Box Testing&#xff09;又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试只测试软件产品的内部结…