как рассчитать разницу между набором разных матриц и матриц - PullRequest
0 голосов
/ 06 марта 2019

Я уже получил следующие коды

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}

Я хочу вычислить разные значения A из разных степеней P за вычетом стационарного распределения P, как показано на рисунке.

enter image description here

Последний код неверен, и я не мог понять, как решить эту проблему.

1 Ответ

0 голосов
/ 06 марта 2019

Вот решение для вычисления 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. Здесь снова есть много альтернатив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...