Matlab 矩阵特征值排序问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Matlab 矩阵特征值排序问题相关的知识,希望对你有一定的参考价值。

参考技术A 矩阵的特征值分解是非常重要的数学工具。在matlab中一般使用eig()函数完成矩阵特征值和特征向量的提取,其用法如下

结果如下:

显然eig()就是一般意义上的计算矩阵的特征值和特征向量

E = eig(A) 返回方阵A的所有特征值,构成列向量E。
[V,D] = eig(A) 返回方阵A的特征值和特征向量,其中特征值排满对角阵D的对角元素,对应的特征向量排列为方阵V的每一列。

而eigs()也能求取矩阵的特征值和特征向量,不过其返回的方阵幅值最大的6个特征值和特征向量,用法和eig()类似。不过eigs()通过迭代的方式来求解特征值,所以其在加快运算速度的同时降低了准确度。另外,一般eigs()处理的大型稀疏矩阵。

[V,D] = eigs(A) 返回方阵A的前6个最大特征特征值和特征向量。
[V,D] = eigs(A,k) 返回前k个最大特征值和特征向量。

一般情况下,eig()和eigs()返回的特征值是从大到小排列,然而这并不是一定的。经过测试,两者的特征值排序都可能为乱序,所以,在对顺序有要求的情况下,需要通过sort()函数来自动排序。

如下

按特征值大小排序结果如下:

John D'Errico设计了一个eigenshuffle.m函数能够得到排序后的特征值和特征向量。该方法排序方式为特征值大小降序排列。
速度测试:

结果:

显然eigenshuffle函数的速度比传统方法略低。

参考: https://cn.mathworks.com/matlabcentral/fileexchange/22885-eigenshuffle

在matlab中,关于PCA降维运算,求得特征向量矩阵之后,又要如何才能得到我需要的投影矩阵呢?

比如:现在有100*30维的数据矩阵,求得特征向量矩阵为30*30维,现在需要一个30*10维的特征向量矩阵。(大一连线代课还没上,可能这个比如描述得就有错,还望大神不吝赐教!卡住学不走的感觉好痛苦)

参考技术A 把你的特征根从大到小排序。取对应的前10个特征向量。追问

嗯嗯嗯~_~,先谢谢了!可是现在的问题关键在于取了10个特征向量之后怎么得到30*10维的投影矩阵呢?得到这个投影矩阵的计算步骤是什么?(抱歉没有导师,有时候问的东西可能比较2)

追答

原来的不是30x30的嘛,排好序后写成30x10的就好了。后面那20个是没用的。
这样两个矩阵相乘
100x30和30x10,乘完就正好是100x10的了

追问

谢了!其实还是不太明白“排好序后写成30x10的”,因为是在协方差对角阵里面取的10个较大的数值,取出来的新对角阵就是10x10的了。还有如何判别哪些是它们(新对角阵里的这10个数据)对应的特征向量呢?还望再解答下!(不常玩知道,分不多,就只多给了5分。)

本回答被提问者采纳
参考技术B 用你原来的100*30维的数据矩阵乘以30*10维德特征向量矩阵追问

是的是的,这个我知道,可是30*10维的特征向量矩阵怎么得到呢?我只知道求出一个30*30的特征向量矩阵,之后就不知道怎么做了。。

以上是关于Matlab 矩阵特征值排序问题的主要内容,如果未能解决你的问题,请参考以下文章

matlab求矩阵的特征值和特征向量

matlab如何求矩阵特征值

MATLAB中关于协方差矩阵特征值的问题

急求,matlab中, 已知矩阵A,已完成对A的QR分解,下一步求A的特征值和特征向量,程序怎么编写?

用matlab如何求矩阵的前k个最大特征值

matlab用QR方法怎么求特征值,把程序写出来,谢谢