【问题标题】:How to calculate the differences between a set of different matrices and a matrix如何计算一组不同矩阵和一个矩阵之间的差异
【发布时间】:2019-03-06 15:40:49
【问题描述】:

我已经得到以下代码

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,如图所示。

最后一个代码是错误的,我不知道如何解决这个问题。

【问题讨论】:

  • 您是要计算A 还是A^k?前者要复杂得多。
  • A^1=P^1-p^infinity, A^2=P^2-P^infinity,....,A^k=P^k-P^infinity

标签: r for-loop matrix


【解决方案1】:

这是计算A^k的解决方案:

假设您已经有了矩阵PP_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 的便捷方法。同样,这里有很多选择。

【讨论】:

    猜你喜欢
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    相关资源
    最近更新 更多