用Eigen库求解矩阵的特征值和特征向量。

矩阵的特征值特征向量求解(EVD分解)

  • 一、EVD分解原理
    • 1.特征值
    • 2.特征值分解过程
  • 二、EVD分解举例
  • 三、Eigen库实求解特征值与特征向量
    • 1.C++代码
    • 2.输出结果

一、EVD分解原理

1.特征值

  如果说一个向量vvv是方阵An×nA_{n \times n}An×n​的特征向量,将一定可以表示成下面的形式:
Av=λvAv=\lambda vAv=λv
写成矩阵的形式为:
AP=P[λ1λ2⋱λn]AP=P \begin{bmatrix} \lambda _1 \\ & \lambda _2 \\ & & \ddots \\ & & & \lambda _n \\ \end{bmatrix} AP=P⎣⎢⎢⎡​λ1​​λ2​​⋱​λn​​⎦⎥⎥⎤​
即:
AP=PΣAP=P\Sigma AP=PΣ
其中,Pn×nP_{n\times n}Pn×n​为特征向量vin×1{v_i}_{n\times 1}vi​n×1​组成的矩阵:
P=[v1v2⋯vn]P=\begin{bmatrix} v_1 &v_2 & \cdots &v_n \end{bmatrix} P=[v1​​v2​​⋯​vn​​]

2.特征值分解过程

  如果矩阵AAA是一个n×nn\times nn×n的实对称矩阵(即A=ATA=A^TA=AT ),那么它可以被分解成如下的形式:
A=PΣPT=P[λ1λ2⋱λm]PTA=P\Sigma P^T=P \begin{bmatrix} \lambda _1 \\ & \lambda _2 \\ & & \ddots \\ & & & \lambda _m \\ \end{bmatrix} P^T A=PΣPT=P⎣⎢⎢⎡​λ1​​λ2​​⋱​λm​​⎦⎥⎥⎤​PT
其中Pn×nP_{n\times n}Pn×n​为标准正交阵(特征向量要归一化),即有PPT=I,PTP=IPP^T=I,P^TP=IPPT=I,PTP=I,Σ\SigmaΣ为对角矩阵,维度为n×nn\times nn×n。λi\lambda _iλi​为特征值。

二、EVD分解举例

A=[2−1−12]A= \begin{bmatrix} 2 &-1 \\ -1 & 2 \\ \end{bmatrix} A=[2−1​−12​]
由定义可知:
Av=λvAv=\lambda v Av=λv
于是有:
Av−λv=0Av-\lambda v=0 Av−λv=0
即:
(A−λI)v=0(A-\lambda I) v=0 (A−λI)v=0
其中III为单位矩阵。
若想得到vvv的非零解,则需要使得∣A−λI∣=0|A-\lambda I|=0∣A−λI∣=0,带入矩阵AAA:

则有:
A−λI=[2−λ−1−12−λ]A-\lambda I= \begin{bmatrix} 2-\lambda &-1 \\ -1 & 2-\lambda \\ \end{bmatrix} \quad A−λI=[2−λ−1​−12−λ​]
令其行列式为0:
∣A−λI∣=∣2−λ−1−12−λ∣=0|A-\lambda I|= \begin{vmatrix} 2-\lambda &-1 \\ -1 & 2-\lambda \end{vmatrix} =0 ∣A−λI∣=∣∣∣∣​2−λ−1​−12−λ​∣∣∣∣​=0
则有:
(2−λ)(2−λ)−1=0(2-\lambda)(2-\lambda)-1 =0 (2−λ)(2−λ)−1=0
对这个等式进行分解因式,求解结果可得λ1=3,λ2=1\lambda _1=3,\lambda _2=1λ1​=3,λ2​=1。
(λ−3)(λ−1)=0(\lambda -3)(\lambda -1)=0 (λ−3)(λ−1)=0
有了特征值,可以带回到下面这个方程:
(A−λI)v=0(A-\lambda I) v=0 (A−λI)v=0


λ1=3\lambda _1=3λ1​=3:
[2−λ−1−12−λ]v1=[2−3−1−12−3][v11v12]=0\begin{bmatrix} 2-\lambda &-1 \\ -1 & 2-\lambda \\ \end{bmatrix} v_1= \begin{bmatrix} 2-3 &-1 \\ -1 & 2-3 \\ \end{bmatrix} \begin{bmatrix} v_{11} \\ v_{12}\\ \end{bmatrix} =0 [2−λ−1​−12−λ​]v1​=[2−3−1​−12−3​][v11​v12​​]=0
解得v11=−v12v_{11}=-v_{12}v11​=−v12​,也就是说,v11v_{11}v11​和v12v_{12}v12​数值相反。可取向量v11=1v_{11}=1v11​=1,v12=−1v_{12}=-1v12​=−1,即v1=[1,−1]Tv_1=[1,-1]^Tv1​=[1,−1]T,归一化为v1=[22,−22]Tv_1=[\frac {\sqrt 2}{2},-\frac {\sqrt 2}{2}]^Tv1​=[22​​,−22​​]T。


λ2=1\lambda _2=1λ2​=1:
[2−λ−1−12−λ]v2=[2−1−1−12−1][v21v22]=0\begin{bmatrix} 2-\lambda &-1 \\ -1 & 2-\lambda \\ \end{bmatrix} v_2= \begin{bmatrix} 2-1&-1 \\ -1 & 2-1 \\ \end{bmatrix} \begin{bmatrix} v_{21} \\ v_{22}\\ \end{bmatrix} =0 [2−λ−1​−12−λ​]v2​=[2−1−1​−12−1​][v21​v22​​]=0
解得v21=v22v_{21}=v_{22}v21​=v22​,也就是说,v22v_{22}v22​等于v21v_{21}v21​。可取向量v21=1,v22=1v_{21}=1,v_{22}=1v21​=1,v22​=1,即v2=[1,1]Tv_2=[1,1]^Tv2​=[1,1]T,归一化为v2=[22,22]Tv_2=[\frac {\sqrt 2}{2},\frac {\sqrt 2}{2}]^Tv2​=[22​​,22​​]T。


P=[2222−2222]P=\begin{bmatrix} \frac {\sqrt 2}{2}&\frac {\sqrt 2}{2} \\ -\frac {\sqrt 2}{2} &\frac {\sqrt 2}{2} \\ \end{bmatrix} P=[22​​−22​​​22​​22​​​]
A[2222−2222]=[2222−2222][31]A\begin{bmatrix} \frac {\sqrt 2}{2}&\frac {\sqrt 2}{2} \\ -\frac {\sqrt 2}{2} &\frac {\sqrt 2}{2} \\ \end{bmatrix}= \begin{bmatrix} \frac {\sqrt 2}{2}&\frac {\sqrt 2}{2} \\ -\frac {\sqrt 2}{2}&\frac {\sqrt 2}{2} \\ \end{bmatrix} \begin{bmatrix} 3 \\ &1 \\ \end{bmatrix} A[22​​−22​​​22​​22​​​]=[22​​−22​​​22​​22​​​][3​1​]
[2−1−12][2222−2222]=[2222−2222][31]\begin{bmatrix} 2 &-1 \\ -1 & 2 \\ \end{bmatrix} \begin{bmatrix} \frac {\sqrt 2}{2}&\frac {\sqrt 2}{2} \\ -\frac {\sqrt 2}{2} &\frac {\sqrt 2}{2}\\ \end{bmatrix}= \begin{bmatrix} \frac {\sqrt 2}{2}&\frac {\sqrt 2}{2} \\ -\frac {\sqrt 2}{2} &\frac {\sqrt 2}{2}\\ \end{bmatrix} \begin{bmatrix} 3 \\ &1 \\ \end{bmatrix} [2−1​−12​][22​​−22​​​22​​22​​​]=[22​​−22​​​22​​22​​​][3​1​]
刚好等式成立,对于EVD分解A=PΣPTA=P\Sigma P^TA=PΣPT有如下等式成立:
A=[2222−2222][31][2222−2222]TA= \begin{bmatrix} \frac {\sqrt 2}{2}&\frac {\sqrt 2}{2} \\ -\frac {\sqrt 2}{2} &\frac {\sqrt 2}{2} \\ \end{bmatrix} \begin{bmatrix} 3 \\ &1 \\ \end{bmatrix} \begin{bmatrix} \frac {\sqrt 2}{2}&\frac {\sqrt 2}{2} \\ -\frac {\sqrt 2}{2} &\frac {\sqrt 2}{2} \\ \end{bmatrix}^T A=[22​​−22​​​22​​22​​​][3​1​][22​​−22​​​22​​22​​​]T

三、Eigen库实求解特征值与特征向量

1.C++代码

#include <iostream>
#include <Eigen/Dense>using namespace std;
using namespace Eigen;int main()
{Matrix2d A;A<< 2,-1,-1,2;cout << "Here is a  2x2 matrix, A:" << endl << A << endl << endl;EigenSolver<Matrix2d> es(A);//下面是输出特征值和特征向量的实部,可以不用这种方式//cout << "The eigenvalues of A are:" << endl << es.eigenvalues().real()[0]<<"," << es.eigenvalues().real()[1] << endl;//cout << "The matrix of eigenvectors, V, is:" << endl << es.eigenvectors().real() << endl << endl;//求解特征值Matrix2d  d = es.pseudoEigenvalueMatrix();cout << d<< endl;//求解特征向量Matrix2d  v = es.pseudoEigenvectors();cout << v << endl;system("pause");return 0;
}

2.输出结果

Here is a  2x2 matrix, A:2 -1
-1  23 0
0 10.707107  0.707107
-0.707107  0.707107

Eigen 矩阵的特征值特征向量求解(EVD分解)相关推荐

  1. 三阶矩阵的特征值一般求解

    这里先简单介绍一下,对于一个给定的三阶矩阵,相信学过线性代数的大部分同学都会求解他的特征值,但是,在解特定的题目的时候我们是否发现有一般的规律呢,下面我们就简单介绍一下(一般解的形式这里也没有给出,不 ...

  2. 如何用计算机求特征值特征向量,利用QR算法求解矩阵的特征值和特征向量

    利用QR算法求解矩阵的特征值和特征向量 为了求解一般矩阵(不是那种幼稚到shi的2 x 2矩阵)的特征值. 根据定义的话,很可能需要求解高阶方程... 这明显是个坑...高阶方程你肿么破... 折腾了 ...

  3. C语言通过QR分解计算矩阵的特征值和特征向量

    #include <stdio.h> #include <stdlib.h> #include <math.h> #include <time.h>// ...

  4. 利用QR算法求解矩阵的特征值和特征向量

    利用QR算法求解矩阵的特征值和特征向量 为了求解一般矩阵(不是那种幼稚到shi的2 x 2矩阵)的特征值. 根据定义的话,很可能需要求解高阶方程... 这明显是个坑...高阶方程你肿么破... 折腾了 ...

  5. 特征向量矩阵,特征值矩阵,矩阵的对角化分解

    特征向量矩阵S,由矩阵A的所有线性无关的特征向量按列排列组成的矩阵. 特征值矩阵,有矩阵A的所有特征值放在对角线位置组成的对角矩阵. 矩阵对角化:AS = S(讲AS展开可以推导出这个公式) 上式两边 ...

  6. 线性代数之 矩阵的特征值,特征向量,特征分解

    线性代数之 矩阵的特征值,特征向量和特征分解 前言 特征值和特征向量 求矩阵特征值 矩阵的特征分解 补充:实对称矩阵 后记 前言 矩阵的特征分解是比较基础的知识了,但是应用却十分广泛,比如主成分分析. ...

  7. 雅可比旋转求解对称二维矩阵的特征值和特征向量

    问题描述: 给定一个矩阵,如下: A=[a11a21a12a22] A=\begin{bmatrix} a_{11}&a_{12}\\ a_{21}& a_{22} \end{bmat ...

  8. matlab矩阵正交变换,在线计算专题(12):矩阵的特征值、特征向量、正交变换与二次型与常见矩阵分解...

    1.计算特征多项式 例 计算以下矩阵的特征多项式 参考输入表达式为characteristic polynomial {{-1,1,0},{-4,3,0},{1,0,2}} 执行计算得到的结果如下. ...

  9. 矩阵的特征值、特征向量、特征值分解、奇异值分解之间的关系

    可逆矩阵 A⋅A−1=A−1⋅A=EA\cdot A^{-1}=A^{-1}\cdot A = EA⋅A−1=A−1⋅A=E 矩阵的几何意义是对一组向量进行变换,包括方向和模长的变化.而逆矩阵表示对其 ...

最新文章

  1. 时间管理大师!一程序员同时给谷歌和 Facebook 打工??
  2. FreeBSD下查看各软件版本命令
  3. TableView的集合
  4. MySql 数据库 - 重置数据库、重置初始密码方法,数据库初始化方法,长时间不用忘记密码暴力解决方法
  5. CCNA——网络初认识
  6. 1.3MB 的超轻YOLO算法!全平台通用,准确率接近YOLOv3,速度快上45%丨开源
  7. iar atof 问题
  8. java中扫描类_java类扫描
  9. 佛祖保佑代码无bug图片_程序员都有哪些奇趣的代码注释,细思极恐
  10. C#调用API函数EnumWindows枚举窗口的方法
  11. LNMP环境下搭建SVN服务器
  12. oracle VM manager 3.1 试验备忘录
  13. excel制图小技巧
  14. 去携程面试,问HR待遇如何,HR说我太看重钱,不录取我
  15. 使用spark-submit工具提交Spark作业
  16. php excel加密,excel工作表加密怎么设置?
  17. MiniGUI——第一个程序helloworld
  18. chrome无法打开任何网站提示证书过期
  19. 《算法分析与设计》复习笔记
  20. 关于“硬解码”与“软解码”

热门文章

  1. java apk签名证书_Android签名证书的生成
  2. 字符集问题的初步探讨
  3. 图文并茂——从Kubernetes的诞生背景到什么是Kubernetes, 带你深度解析Kubernetes
  4. 灰色关联度矩阵——MATLAB在数学建模中的应用
  5. 零基础学算法-P4-常用算法-排序
  6. 水深则流缓,人贵则语迟,有悟性的人请进
  7. 【pygame游戏】用Python实现一个蔡徐坤大战篮球的小游戏,可还行?【附源码】
  8. CJ Affiliate如何收款?多号操作怎么避免关联?
  9. python版亲戚关系计算器
  10. Day305.设计模式七大原则 -Java设计模式