eigen() 和正确的特征向量

eigen() and the correct eigenvectors

我的问题如下:

我正在尝试使用 R 来计算数值 this 问题。 所以我已经在我的控制台中正确设置了问题,然后我尝试计算特征向量。

但我希望与 lambda = 1 关联的特征向量是 (1,2,1) 而不是我在这里得到的。所以,缩放是正确的(0.4082483 实际上是 0.8164966 的一半),但我想获得一致的结果。

我最初的问题是使用 R 找到马尔可夫链的平稳分布,而不是在纸上做。因此,从概率的角度来看,我的平稳分布是一个向量,其分量之和等于 1。因此,我试图更改比例以获得我定义的“一致结果”。

我该怎么做?

C <- matrix(c(0.5,0.25,0,0.5,0.5,0.5,0,0.25,0.5),
            nrow=3)
ee <- eigen(t(C))$vectors

正如@Stéphane Laurent 在评论中所建议的那样,特征向量的缩放是任意的;仅指定相对值。 R中默认是特征向量的平方和(它们的范数)等于1; colSums(ee^2)是1s的向量。

在 link 之后,我们可以看到您希望每个特征向量的总和为 1。

ee2 <- sweep(ee,MARGIN=2,STATS=colSums(ee),FUN=`/`)

(即,将每个特征向量除以其总和)。

(这是一个很好的通用解决方案,但在这种情况下,第二个和第三个特征向量的总和都近似为零[理论上,它们是 零],所以这只对第一个特征向量有意义。)

R 返回的特征向量被归一化(对于平方范数)。如果 V 是特征向量,那么 s * V 也是任何非零标量 s 的特征向量。如果您想要 link 中的平稳分布,除以总和:

V / sum(V)

你会得到 (1/4, 1/2, 1/4).

所以:

ev <- eigen(t(C))$vectors
ev / colSums(ev)

一次获得所有解决方案。