本站原创文章,转载请说明来自 《老饼讲解-深度学习》 www.bbbdata.com
矩阵的对角化,是指通过一个可逆P,将方阵A进行对角化,以简化矩阵对应的变换
本文讲解矩阵对角化的定义、本质与目的,并展示对角化的具体流程和代码实现
通过本文,可以了解什么是矩阵的对角化,对角化是为了什么,以及如何将矩阵对角化
01. 什么是矩阵的对角化
本节讲解什么是矩阵的对角化,包括它的定义与本质
矩阵对角化的定义
矩阵的对角化是指: 对于矩阵A,求一个可逆P,使得P − 1 A P \small P^{-1}AP P − 1 A P 是一个对角矩阵 数学表述如下: P − 1 A P = Λ P^{-1}AP=\Lambda P − 1 A P = Λ 其中, Λ \Lambda Λ 是一个对角矩阵 一般地,把 P P P 的各列称为A的特征向量 Λ \Lambda Λ 对角上的元素λ \lambda λ 称为矩阵A的特征值 备注:矩阵的对角化只相对方阵而言,且,不是所有方阵都能对角化
如何理解矩阵对角化
矩阵与线性变换 不太严谨地说,变换就是把空间的一个向量,线性映射到该空间的另一个向量之中 线性变换可以使用矩阵来描述,对应地,每个矩阵,背后都指代着一个线性变换 如下所示,矩阵A所代表的变换 σ \sigma σ ,将向量(1,0)变换到了(1.5,0)中 因此每个矩阵A,都可以当作某个变换σ \sigma σ 的数学描述 备注:矩阵A并不完全等价于变换 σ \sigma σ ,因为 σ \sigma σ 是绝对的,而A只是它的其中一种表述 如何理解矩阵的对角化 由P − 1 A P = Λ P^{-1}AP=\Lambda P − 1 A P = Λ 可得: A P = P Λ AP=P\Lambda A P = P Λ 即对于P的每一列P i P_i P i 都有: A P i = λ i P i AP_i=\lambda_i P_i A P i = λ i P i 即P的每一列在矩阵A指代的线性变换σ \sigma σ 下,都保持方向不变,只是长度进行了λ i \lambda_i λ i 的伸缩 所以矩阵的对角化,实际就是找出n个向量,这n个向量在A的变换 σ \sigma σ 下只进行伸缩 这n个在变换A下不变的向量,称为A的特征向量,它们的伸缩倍数λ \lambda λ 则称为A的特征值
02. 矩阵对角化的基本目的
本节讲解矩阵对角化的基本目的,从而知道为什么要将矩阵对角化
矩阵对角化的基本目的
矩阵对角化的最基本目的是为了揭示矩阵A所对应的变换是个什么东西 由于A特征向量(即P)在变换A下只进行简单的伸缩 因此,如果把特征向量(即P)作为基,则可以简化变换 对于任意向量q,记它在基P下的坐标为 x ′ x' x ′ ,则: q = x 1 ′ P 1 + x 2 ′ P 2 + . . . + x n ′ P n q =x'_1P_1+x'_2P_2+...+x'_nP_n q = x 1 ′ P 1 + x 2 ′ P 2 + ... + x n ′ P n 由于每个 P i P_i P i 在A所指代的线性变换 σ \sigma σ 下只进行简单的伸缩 因此有: σ ( q ) = σ ( x 1 ′ P 1 + x 2 ′ P 2 + . . . + x n ′ P n ) = σ ( x 1 ′ P 1 ) + σ ( x 2 ′ P 2 ) + . . . + σ ( x n ′ P n ) = x 1 ′ σ ( P 1 ) + x 2 ′ σ ( P 2 ) + . . . + x n ′ σ ( P n ) = x 1 ′ λ 1 P 1 + x 2 ′ λ 2 P 2 + . . . + x n ′ λ n P n \begin{aligned}
\sigma(q) &=\sigma(x'_1P_1+x'_2P_2+...+x'_nP_n)
\\ &=\sigma(x'_1P_1)+\sigma(x'_2P_2)+...+\sigma(x'_nP_n)
\\ &=x'_1\sigma(P_1)+x'_2\sigma(P_2)+...+x'_n\sigma(P_n)
\\ &=x'_1\lambda_1P_1+x'_2\lambda_2P_2+...+x'_n\lambda_nP_n
\end{aligned} σ ( q ) = σ ( x 1 ′ P 1 + x 2 ′ P 2 + ... + x n ′ P n ) = σ ( x 1 ′ P 1 ) + σ ( x 2 ′ P 2 ) + ... + σ ( x n ′ P n ) = x 1 ′ σ ( P 1 ) + x 2 ′ σ ( P 2 ) + ... + x n ′ σ ( P n ) = x 1 ′ λ 1 P 1 + x 2 ′ λ 2 P 2 + ... + x n ′ λ n P n 可得, σ ( q ) \sigma(q) σ ( q ) 的坐标为 [ x 1 ′ λ 1 , x 2 ′ λ 2 , . . . , x n ′ λ n ] = Λ x ′ [x_1'\lambda_1,x_2'\lambda_2,...,x_n'\lambda_n]=\Lambda x' [ x 1 ′ λ 1 , x 2 ′ λ 2 , ... , x n ′ λ n ] = Λ x ′ 因此,站在基P的角度来看,变换σ \sigma σ 就是将x ′ x' x ′ 变换为Λ x ′ \Lambda x' Λ x ′ 即,站在基P的角度来看, A所指代的变换σ \sigma σ 表示为Λ \Lambda Λ ,它仅仅是将第i维进行λ i \lambda_i λ i 的伸缩 因此,矩阵A对角化的意义就是,找出一个基P,使得在基P的视角下,变换A是一个对角变换 Λ \Lambda Λ 即矩阵对角化,可以换一个视角来简化变换A,从而更简单地、更本质地来研究、使用A
矩阵对角化的基本目的-举例
下面通过一个例子,展示矩阵对角化,是如何清晰的抓住矩阵对应的线性变换的特性的 设 A = [ 1.5 0.5 0.5 1.5 ] A=
\begin{bmatrix}
1.5 & 0.5\\
0.5 &1.5
\end{bmatrix} A = [ 1.5 0.5 0.5 1.5 ] 将A进行对角化,可得: A = P Λ P − 1 = [ 0.707 − 0.707 0.707 0.707 ] ∗ [ 2 0 0 1 ] ∗ [ 0.707 − 0.707 0.707 0.707 ] − 1 \small A=P\Lambda P^{-1}=\begin{bmatrix}
0.707 & -0.707\\
0.707 &0.707
\end{bmatrix}*
\begin{bmatrix}
2 & 0\\
0 &1
\end{bmatrix}*\begin{bmatrix}
0.707 & -0.707\\
0.707 &0.707
\end{bmatrix}^{-1} A = P Λ P − 1 = [ 0.707 0.707 − 0.707 0.707 ] ∗ [ 2 0 0 1 ] ∗ [ 0.707 0.707 − 0.707 0.707 ] − 1 未对角化前对线性变换的认识 以向量q = [1,0]为例,如果直接看A, 那么只知道它所指代的变换σ \sigma σ ,会将q变换到σ ( q ) = A ∗ [ 0 , 1 ] = [ 1.5 , 0.5 ] \sigma(q) = A*[0,1]=[1.5,0.5] σ ( q ) = A ∗ [ 0 , 1 ] = [ 1.5 , 0.5 ] ,如下 光是这样看,是很难了解A所指代的变换σ \sigma σ 的特性的,只知道它把(1,0)变换到了(1.5,0.5) 对角化后对线性变换的认识 通过对角化后,可得到P = [ 0.707 − 0.707 0.707 0.707 ] \small P=\begin{bmatrix}
0.707 & -0.707\\
0.707 &0.707
\end{bmatrix} P = [ 0.707 0.707 − 0.707 0.707 ] ,以P为基,则有: 以P为基,变换σ \sigma σ 其实就是将q点的P1、P2方向伸缩2、1倍 因此,变换σ \sigma σ 在原来坐标系的表示为A,很难理解σ \sigma σ 是个什么样的变换 而用P作为基,则σ \sigma σ 就只是在各个坐标轴中进行伸缩的变换,一下子就简单得多了~ 一个矩阵如果可以对角化,则说明它背后所指的变换实质是某组基下的伸缩变换 而变换总是各种各样的,并不永远都是伸缩变换,所以不会所有的矩阵都能对角化
03.矩阵对角化的方法
本节展示如何对矩阵进行对角化,以及代码实现方法
矩阵对角化的理论方法
矩阵对角化的思路 由于对于每个特征向量x \textbf{x} x 有: A x = λ x A\textbf{x}=\lambda \textbf{x} A x = λ x 因此有: A x − λ x = 0 A\textbf{x}-\lambda \textbf{x}=\textbf{0} A x − λ x = 0 即: ( A − λ I ) x = 0 (A-\lambda I)\textbf{x} = \textbf{0} ( A − λ I ) x = 0 上式说明A − λ I A-\lambda I A − λ I 线性相关,因此: ∣ A − λ I ∣ = 0 |A-\lambda I|=0 ∣ A − λ I ∣ = 0 而∣ A − λ I ∣ |A-\lambda I| ∣ A − λ I ∣ 展开后是一个关于λ \lambda λ 的n次多项式,即 ∣ A − λ I ∣ = f n ( λ ) = 0 |A-\lambda I|=f^{n}(\lambda)=0 ∣ A − λ I ∣ = f n ( λ ) = 0 求解多项式f n ( λ ) = 0 f^{n}(\lambda)=0 f n ( λ ) = 0 求得多个λ \lambda λ 将各个特征值λ \lambda λ 代入( A − λ I ) x = 0 (A-\lambda I)\textbf{x} = \textbf{0} ( A − λ I ) x = 0 ,就可以解得对应的特征向量x \textbf{x} x 矩阵对角化-例子解说 以 A = [ 1.5 0.5 0.5 1.5 ] \small A=
\begin{bmatrix}
1.5 & 0.5\\
0.5 &1.5
\end{bmatrix} A = [ 1.5 0.5 0.5 1.5 ] 为例,将它对角化的实操过程如下: 1. 计算特征多项式 f ( λ ) = ∣ A − λ I ∣ = ∣ [ 1.5 0.5 0.5 1.5 ] − λ I ∣ = ∣ 1.5 − λ 0.5 0.5 1.5 − λ ∣ = ( 1.5 − λ ) ∗ ( 1.5 − λ ) − 0.5 ∗ 0.5 = 1. 5 2 + λ 2 − 3 λ − 0.25 = λ 2 − 3 λ + 2 \small \begin{aligned}
f(\lambda) = |A-\lambda I|
&=
\left|\begin{bmatrix}
1.5 & 0.5\\
0.5 &1.5
\end{bmatrix}-\lambda I \right|
\\&=
\begin{vmatrix}
1.5-\lambda & 0.5\\
0.5 &1.5-\lambda
\end{vmatrix}
\\&=(1.5-\lambda )*(1.5-\lambda )-0.5*0.5
\\&=1.5^2+\lambda^2-3\lambda-0.25
\\&=\lambda^2-3\lambda+2
\end{aligned} f ( λ ) = ∣ A − λ I ∣ = ∣ ∣ [ 1.5 0.5 0.5 1.5 ] − λ I ∣ ∣ = ∣ ∣ 1.5 − λ 0.5 0.5 1.5 − λ ∣ ∣ = ( 1.5 − λ ) ∗ ( 1.5 − λ ) − 0.5 ∗ 0.5 = 1. 5 2 + λ 2 − 3 λ − 0.25 = λ 2 − 3 λ + 2 2. 求解特征值 由 f ( λ ) = λ 2 − 3 λ + 1 \small f(\lambda) =\lambda^2-3\lambda+1 f ( λ ) = λ 2 − 3 λ + 1 解得: λ 1 = 2 , λ 2 = 1 \small \lambda_1 = 2,\lambda_2=1 λ 1 = 2 , λ 2 = 1 3. 求解特征向量 (1) 将λ 1 = 2 \lambda_1=2 λ 1 = 2 代入 ( A − λ I ) x = 0 \small (A-\lambda I)\textbf{x} = \textbf{0} ( A − λ I ) x = 0 ,可得: ( A − λ 1 I ) x = ( [ 1.5 0.5 0.5 1.5 ] − [ 2 0 0 2 ] ) x = [ − 0.5 0.5 0.5 − 0.5 ] x = 0 \small \left ( A-\lambda_1I \right )\textbf{x} =
\left ( \begin{bmatrix}
1.5 & 0.5\\
0.5 &1.5
\end{bmatrix}-\begin{bmatrix}
2 & 0\\
0 &2
\end{bmatrix} \right ) \textbf{x}=
\begin{bmatrix}
-0.5 & 0.5\\
0.5 &-0.5
\end{bmatrix}\textbf{x}
= \textbf{0} ( A − λ 1 I ) x = ( [ 1.5 0.5 0.5 1.5 ] − [ 2 0 0 2 ] ) x = [ − 0.5 0.5 0.5 − 0.5 ] x = 0 解得特征向量 x = [ 1 1 ] \small \textbf{x}=
\begin{bmatrix}
1\\
1
\end{bmatrix} x = [ 1 1 ] (2) 将λ 2 = 1 \small \lambda_2=1 λ 2 = 1 代入 ( A − λ I ) x = 0 \small (A-\lambda I)\textbf{x} = \textbf{0} ( A − λ I ) x = 0 ,可得: ( A − λ 2 I ) x = ( [ 1.5 0.5 0.5 1.5 ] − [ 1 0 0 1 ] ) x = [ 0.5 0.5 0.5 0.5 ] x = 0 \small \left ( A-\lambda_2I \right )\textbf{x} =
\left ( \begin{bmatrix}
1.5 & 0.5\\
0.5 &1.5
\end{bmatrix}-\begin{bmatrix}
1 & 0\\
0 &1
\end{bmatrix} \right ) \textbf{x}=
\begin{bmatrix}
0.5 & 0.5\\
0.5 &0.5
\end{bmatrix}\textbf{x}
= \textbf{0} ( A − λ 2 I ) x = ( [ 1.5 0.5 0.5 1.5 ] − [ 1 0 0 1 ] ) x = [ 0.5 0.5 0.5 0.5 ] x = 0 解得特征向量 x = [ − 1 1 ] \small \textbf{x}=
\begin{bmatrix}
-1\\
1
\end{bmatrix} x = [ − 1 1 ] 4. 组装与单位化P 将两个特征向量按列组装,可得到 P = [ 1 − 1 1 1 ] \small P=
\begin{bmatrix}
1&-1\\
1&1
\end{bmatrix} P = [ 1 1 − 1 1 ] 进一步将它按列单位化后得到: P = [ 0.7071 − 0.7071 0.7071 0.7071 ] \small P=
\begin{bmatrix}
0.7071& -0.7071\\
0.7071& 0.7071
\end{bmatrix} P = [ 0.7071 0.7071 − 0.7071 0.7071 ] 5. 验证 可进一步验证: P − 1 A P = [ 0.7071 − 0.7071 0.7071 0.7071 ] − 1 [ 1.5 0.5 0.5 1.5 ] [ 0.7071 − 0.7071 − 0.7071 0.7071 ] = [ 2 0 0 1 ] \small P^{-1}AP=
\begin{bmatrix}
0.7071&- 0.7071\\
0.7071& 0.7071
\end{bmatrix}^{-1}
\begin{bmatrix}
1.5 & 0.5\\
0.5 &1.5
\end{bmatrix}
\begin{bmatrix}
0.7071& -0.7071\\
- 0.7071& 0.7071
\end{bmatrix} = \begin{bmatrix}
2& 0\\
0& 1
\end{bmatrix} P − 1 A P = [ 0.7071 0.7071 − 0.7071 0.7071 ] − 1 [ 1.5 0.5 0.5 1.5 ] [ 0.7071 − 0.7071 − 0.7071 0.7071 ] = [ 2 0 0 1 ]
矩阵对角化-代码实现
在python中可以使用numpy来实现矩阵的对角化 具体代码示例如下: import numpy as np
A = np. array( [ [ 1.5 , 0.5 ] , [ 0.5 , 1.5 ] ] )
d, P = np. linalg. eig( A)
L = np. linalg. inv( P) @ A @ P
print ( "\n原始矩阵A:\n" , A)
print ( "\n特征向量矩阵P:\n" , P)
print ( "\n对角化后的特征值L:\n" , L)
代码运行结果如下: 可以看到,使用矩阵P对A进行对角化后,得到了对角矩阵L
好了,以上就是矩阵的对角化,以及它的意义和对角化流程了~