繁体   English   中英

如何找到矩阵的最大特征向量?

How to find the largest eigenvector of a matrix?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我试图实现这一点没有成功,我必须不使用外部模块numpy等来执行此操作。应用程序中有3个模块,我正在对此进行编码,Python和C#,C ++,但除标准库外没有其他精美的库。

在一个单独的应用程序上,我使用了numpy的svd,它的工作非常准确。 所以我用它来匹配我的结果。 我的方法是PCA,到目前为止一切都很好。 但是在计算对称协方差矩阵之后,我不知道如何找到最大的特征向量。

数据集始终为3d点x,y和z。

vector center;
for(point p in points):
    center += p;
center /= points.count;

sumxx = 0;
sumxy = 0;
sumxz = 0;
sumyy = 0;
sumyz = 0;
sumzz = 0;
for(point p in points):
    vector s = p - center;
    sumxx += s.x * s.x;
    sumxy += s.x * s.y;
    sumxz += s.x * s.z;
    sumyy += s.y * s.y;
    sumyz += s.y * s.z;
    sumzz += s.z * s.z;

matrix3 mat = invert(matrix3(sumxx, sumxy, sumxz, sumxy, sumyy, sumyz, sumxz, sumyz, sumzz));
vector n;
if (determinant(mat) > 0)
    normal = find_largest_eigenvalue
2 个回复

让我们回顾一下您的要求,以澄清:

  1. 求矩阵mat的特征向量
  2. 该特征向量应与矩阵的最大特征值相关联
  3. 该矩阵是主成分分析的对称协方差矩阵。 特别地,它是对称的。
  4. 您的矩阵是3乘3的正方形,如代码中matrix3 mat = ...所示,并在(现在已删除)注释中确认。

在这些非常特殊的情况下,适用以下答案。 但是,tmyklebu警告说,对于某些病理矩阵,此方法的数值不稳定,通常是在r接近-1


好吧,让我们从Wikipedia上有关特征多项式的页面开始阅读

在线性代数中,方阵的特征多项式是一个在矩阵相似性不变的情况下以特征值为根的多项式。 det(zI-A)

等等等等,让我们直接跳到特征值算法页面上3x3矩阵部分

如果A是3×3矩阵,则其特征方程可表示为: det(zI-A)

稍后(或多或少)此伪代码跟随几行, 用于对称矩阵 (如果我没记错的话,你说的是对称矩阵) -否则可能会有复杂的特征值):

p1 = A(1,2)^2 + A(1,3)^2 + A(2,3)^2
if (p1 == 0) 
   % A is diagonal.
   eig1 = A(1,1)
   eig2 = A(2,2)
   eig3 = A(3,3)
else
   q = (A(1,1) + A(2,2) + A(3,3)) / 3
   p2 = (A(1,1) - q)^2 + (A(2,2) - q)^2 + (A(3,3) - q)^2 + 2 * p1
   p = sqrt(p2 / 6)
   B = (1 / p) * (A - q * I)       % I is the identity matrix
   r = determinant(B) / 2

   % In exact arithmetic for a symmetric matrix  -1 <= r <= 1
   % but computation error can leave it slightly outside this range.
   if (r <= -1) 
      phi = pi / 3
   elseif (r >= 1)
      phi = 0
   else
      phi = acos(r) / 3
   end

   % the eigenvalues satisfy eig3 <= eig2 <= eig1
   eig1 = q + 2 * p * cos(phi)
   eig3 = q + 2 * p * cos(phi + (2*pi/3))
   eig2 = 3 * q - eig1 - eig3     % since trace(A) = eig1 + eig2 + eig3
end

因此,您希望在第一种情况下使用max(eig1,eig2,eig3) ,在第二种情况下使用eig1 让我们将此e称为最大特征值。

对于特征向量,您现在可以求解(Ae*I)x=0

查找特征值的算法不同。 有些工作从最小到最大,例如QR。 其他的则从大到小工作,例如幂迭代或Jacobi-Davidson。

也许您想要的是算法切换。 尝试电源方法,看看是否有帮助。

https://scicomp.stackexchange.com/questions/1681/what-is-the-fast-way-to-calculate-the-largest-eigenvalue-of-a-general-matrix

1 从矩阵中找到特征向量

我正在尝试使用此视频制作一个AHP程序(4:50)。 我一直在寻找标准权重的特征向量。 我从该网页使用了一个类库,但结果相差很大。 这是我到目前为止编写的测试代码。 ...

2016-08-28 11:58:17 2 741   c#/ matrix
3 由Python计算的矩阵的特征向量似乎不是特征向量

预先道歉,Python不是我的强项。 与该矩阵的真实特征值相对应的特征向量(由Python计算)似乎不是特征向量,而由Wolfram Alpha计算的特征向量似乎起作用。 (尽管我没有成绩单,但我的同事确认在R中执行计算时似乎也出现了相同的病理情况。)代码段: 请注意,将evec ...

4 8×8矩阵的特征向量和特征值

我有一个8 x 8的浮点数矩阵,需要从中计算特征向量和特征值。 这是为了使用PCA(主成分分析)减少功能,如果通过传统方法完成,这是一项耗时的工作。 我尝试使用幂方法,因为Y = C * X,其中X是我的8×8矩阵。 我知道这是不正确的,但无法弄清楚。 我需要帮助来使用幂方法或者更 ...

5 如何找到具有不同特征值的两个矩阵的公共特征向量

我正在寻找或构建两个矩阵A和B之间的公共特征向量矩阵 X,例如: 其中A和B是可对角化的方阵。 我查看了一个类似的帖子,但没有得出结论,即当我构建由以下定义的最终想要的内同态F时得到有效结果: F = PDP^-1 我还阅读了维基百科主题和这篇有趣的论文,但不必提取非常容易实现的方法。 特 ...

6 Matlab不返回特征向量的正交矩阵

当我试图在Matlab中找到具有重复特征值但没有缺陷的矩阵的特征分解时,它不返回eignevectors的标准正交矩阵。 例如: 我发现我的特征向量矩阵V_A不是正交的,即V_A*V_A'不等于单位矩阵(考虑到舍入误差)。 我的印象是,如果我的矩阵是真实的并且是对称的,那么Mat ...

7 非对称矩阵的特征向量

我正在尝试计算非对称矩阵的特征向量。 我使用了来自 https://github.com/bytefish/opencv/blob/master/lda/include/decomposition.hpp 这是我的计算方式: 它给了我正确的特征值,但没有正确的特征向量 ...

2015-07-24 09:36:32 0 798   opencv
8 稀疏矩阵特征向量的快速计算

我正在研究一个涉及计算非常大的稀疏矩阵的特征向量的项目。 更具体地说,我有一个矩阵,它是一个大图的拉普拉斯,我有兴趣找到与第二个最小特征值相关的特征向量。 当然,Matlab需要很长时间来计算特征向量,即使它计算所有特征向量。 有什么建议么? 非常感谢Andrea ...

9 跟踪1参数矩阵族的特征向量

我的问题是这样的:我正在尝试通过(截断的)Karhunen-Loeve变换对随机过程进行频谱分解,但是我的协方差矩阵实际上是一个1参数矩阵族,我需要一种方法来估算/可视化我的随机过程取决于此参数。 为此,我需要一种跟踪numpy.linalg.eigh()产生的特征向量的方法。 为了让您 ...

10 在Java中找到对称矩阵的第二个最小特征向量

我正在为Java中的聚类算法编写一些代码。 我需要计算出一些相当大的对称(稀疏)矩阵的第二个最小特征向量,目前,我使用一个库来计算所有特征值。 是否有人对我们如何仅计算/估计最小特征向量有任何提示/建议? 我希望这会更有效率:) 计算所有这些显然很慢。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM