首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >矩阵的特征分解(推导+手算+python计算+对称矩阵的特征分解性质)

矩阵的特征分解(推导+手算+python计算+对称矩阵的特征分解性质)

原创
作者头像
算法一只狗
发布2024-12-08 18:44:34
发布2024-12-08 18:44:34
6980
举报
文章被收录于专栏:算法一只狗算法一只狗

好事发生

推荐文章:https://cloud.tencent.com/developer/article/2470928?shareByChannel=link

这篇文章详细介绍了如何在 Linux Ubuntu 系统中使用 Docker 部署 Paint Board,并结合 cpolar 内网穿透工具实现远程访问。以下是推荐理由:

  • 实用性强:文章提供了从环境准备、代码下载、镜像构建到容器运行的完整步骤,适合希望在本地搭建 Paint Board 的用户。
  • 工具结合:通过引入 cpolar 内网穿透工具,解决了本地服务无法被外网访问的问题,拓展了 Paint Board 的使用场景。
  • 图文并茂:文章配有详细的截图和命令行示例,便于读者理解和操作。
  • 适用广泛:无论是个人用户还是团队协作,都可以通过该方法实现远程访问本地部署的 Paint Board,提升工作效率。

总而言之,这篇文章为希望在 Linux 环境下部署并远程访问 Paint Board 的用户提供了清晰、实用的指导,值得推荐。


1. 前言

要学会矩阵的特征分解,可以提前看矩阵的一些基础知识:

https://blog.csdn.net/qq_30232405/article/details/104588293

2.矩阵的进阶知识

2.1 特征分解(谱分解)=>只可以用在方阵上

2.1.1 特征分解的原理

如果说一个向量v是方阵A的特征向量,将一定可以表示成下面的形式:

Av=\lambda v \tag{2-1}
  • 这种形式在数学上的含义:描述的是矩阵A对向量v的变换效果只有拉伸,没有旋转。(因为\lambda这个值是一个数值)
  • 这时候\lambda就被称为特征向量v对应的特征值

也可以看成矩阵A,向量v,系数\lambda这三者建立了一种联系,但显然我们无法通过式(2-1)来用v\lambda表示A,因为这个式子不是完备的,对于一个秩为 m的矩阵A,应该存在m个这样的式子,完备式子应该是:

A(v_1,v_2,...,v_m)=(\lambda_1 v_1,\lambda_2 v_2,...,\lambda_m v_m)=(v_1,v_2,...,v_m) \begin{bmatrix} \lambda_1 & ... & 0 \\ \vdots & \ddots & \vdots \\ 0 & ... & \lambda_m \\ \end{bmatrix}
AV=V\Lambda \tag{2-2}

根据公式(2-2)就可以得到矩阵A的特征分解公式:

A=V\Lambda V^{-1} \tag{2-3}
  • 矩阵的一组特征向量V是一组正交向量。
  • 其中V是这个矩阵A的特征向量组成的矩阵,\Lambda是一个对角阵,每一个对角线上的元素就是一个特征值。

总结:特征分解,可以得到m个特征向量和特征值,利用这m个特征(代表这个矩阵最重要的特征),就可以近似这个矩阵。

2.1.2 特征分解的合理性

一个矩阵和该矩阵的非特征向量相乘是对该向量的旋转变换;一个矩阵和该矩阵的特征向量相乘是对该向量的伸缩变换,其中伸缩程度取决于特征值大小。

矩阵在特征向量所指的方向上具有 增强(或减弱)特征向量 的作用。这也就是说,如果矩阵持续地叠代作用于向量,那么特征向量的就会突显出来,利用python进行计算:

  • 首先举一个例子,假设矩阵A和向量V:

用矩阵A去反复左乘一个向量V,python代码如下:

代码语言:python
复制
import numpy as np
import copy
A = np.array([[4, 1, 1], [1, 2, 1], [3, 2, 3]])
V = np.array([[-1], [5], [3]])
dot_nums = [1, 3, 5, 10]
for i in range(len(dot_nums)):
    A_ = copy.copy(A)
    for _ in range(dot_nums[i] - 1):
        A_ = np.dot(A_, A)
    B = np.dot(A_, V)
    B = np.abs(B)
    C = B / np.sum(B)
    print("dot number: %d" % dot_nums[i])
    print(C)

得到结果:

可以看到不断左乘A后,变换后的归一化向量在(0.33,0.2,0.46)附近徘徊,这与计算出来的最大特征值对应的特征向量归一化后的结果是一致的,这也就佐证了矩阵是具有某种不变的特性的。因此为了提取矩阵这种“不变性”,或者说是为了描述变换(矩阵惩罚是一种线性变换)的主要方向是非常有必要的。

2.1.3 特征分解的计算

在 (2-1) 式的基础上,进行一些变形 :

根据线性方程组理论,为了使这个方程有非零解,矩阵(\lambda I-A)的行列式必须是零:

上式也被称为是A的特征方程,计算出所有\lambda的取值后,再代入(\lambda I-A)v = 0求解对应的v

注意:要注意特征值是重根时的情况。。。。

(1)手算

求矩阵A的特征值和特征向量:

可以得到结果:

\lambda=6时,(6I-A)v=0:

result: v_1 = 5, v_2=3, v_3=7

\lambda=2时,(2I-A)v=0:

result: v_1 = 1, v_2=-1, v_3=1

\lambda=1时,(I-A)v=0:

result: v_1 = 0, v_2=1, v_3=-1

(2)python计算

使用python中自带的库eig,其中V为特征向量矩阵,D为特征值。V中的列是对应的每一个特征向量

代码语言:python
复制
import numpy as np
import copy
A = np.array([[4, 1, 1], [1, 2, 1], [3, 2, 3]])
D, V = np.linalg.eig(A)
if np.equal(np.dot(A, V), np.dot(V, np.diag(D))):
    print(True)

结果为:

发现python计算的和手算的特征向量值不同,但比例是一样的,这是因为特征向量不是唯一的,特征向量来自齐次线性方程组的解,是齐次线性方程组的基础解系的非零线性组合。

2.1.4 对称矩阵的特征分解(这个性质后面SVD推导用到)

定理:假设矩阵A是一个对称矩阵,则其不同特征值对应的特征向量两两正交

证明:

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 前言
  • 2.矩阵的进阶知识
    • 2.1 特征分解(谱分解)=>只可以用在方阵上
      • 2.1.1 特征分解的原理
      • 2.1.2 特征分解的合理性
      • 2.1.3 特征分解的计算
      • 2.1.4 对称矩阵的特征分解(这个性质后面SVD推导用到)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档