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)
一次获得所有解决方案。
我的问题如下:
我正在尝试使用 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)
一次获得所有解决方案。