4

我已经看到了这个问题,它与我用 numPy 计算 Python 中的主要特征向量的尝试有关。

我正在尝试计算 nxn 矩阵的主要特征向量,而不必涉及太多繁重的线性代数。我对行列式、特征值、特征向量和特征多项式进行了粗略的研究,但我更愿意依靠 numPy 实现来查找特征值,因为我相信它比我自己的更有效。

我遇到的问题是我使用了这段代码:

    markov = array([[0.8,0.2],[.1,.9]])

    print eig(markov)

...作为测试,并得到以下输出:

    (array([ 0.7,  1. ]), array([[-0.89442719, -0.70710678],
           [ 0.4472136 , -0.70710678]]))

对此我担心的是,根据 Perron-Frobenius 定理,第二个特征向量的所有分量都应该是正的(因为根据维基百科,“具有正项的实方矩阵具有唯一的最大实特征值,并且对应的特征向量具有严格的正分量”)。

有人知道这里发生了什么吗?numPy 错了吗?我是否在 ZFC 中发现了不一致之处?还是只是我是线性代数、Python、numPy 或这三者的某种组合的菜鸟?

感谢您提供的任何帮助。此外,这是我的第一个 SO 问题(虽然我曾经在 cstheory.se 上很活跃),所以任何关于提高我的问题清晰度的建议也将不胜感激。

4

1 回答 1

9

你只是误解了eigreturn 。根据文档,第二个返回参数是

归一化(单位“长度”)特征向量,使得列 v[:,i] 是对应于特征值 w[i] 的特征向量。

所以特征值对应的特征向量1不是[ 0.4472136 , -0.70710678],而是[-0.70710678, -0.70710678],可以很容易地验证:

>>> markov.dot([ 0.4472136 , -0.70710678]) # not an eigenvector
array([ 0.21634952, -0.59167474])
>>> markov.dot([-0.70710678, -0.70710678]) # an eigenvector
array([-0.70710678, -0.70710678])
于 2013-09-10T00:52:14.070 回答