我已经获得了以下代码
P <- matrix(c(0.8,0.2,0.5,0.5),2,2,byrow=TRUE)
ev <- eigen(P)
rvec <- ev$vectors
lvec <- ginv(rvec)
pi_eig <-lvec[1,]/sum(lvec[1,])
powers <- 0:20
upowers <- lapply(powers, function(k) P %^% k)
A <- for (i in 1:20) {upowers[i]-pi_eig}
我想根据P的不同幂减去P的平稳分布来计算不同的A,如图所示。
最后一个代码是错误的,我不知道如何解决此问题。
答案 0 :(得分:0)
以下是计算A^k
的解决方案:
假设您已经有了矩阵P
和P_infty
,我将其称为Q
。然后,您可以执行以下操作
# Data
set.seed(123)
P <- matrix(runif(9), 3L, 3L)
Q <- matrix(runif(9), 3L, 3L)
# Computes P^k (matrix multiplication, not R's P^k!)
matMultK <- function (k) {
txt <- paste("P", paste(rep("%*% P", k), collapse = " "))
eval(expr = parse(text = txt))
}
# Compute the results
lapply(1:3, function (k) matMultK(k) - Q)
函数matMultK
将计算P^k
的矩阵幂P
不是 R的版本(在R P^k
中是按元素进行的) 。请注意,通过一些小的修改,您还可以将P
作为参数。
最后,使用lapply
是计算序列A^k
的便捷方法。同样,这里有很多选择。