Исходный код для расчета стационарного распределения в R - PullRequest
0 голосов
/ 10 мая 2019

Взгляните на эту ссылку .

Я пытаюсь понять следующий исходный код, предназначенный для нахождения стационарного распределения матрицы:

# Stationary distribution of discrete-time Markov chain
# (uses eigenvectors)
stationary <- function(mat)
{
    x = eigen(t(mat))$vectors[,1]
    as.double(x/sum(x))
}

Я сам протестировал следующий исходный код:

> rm(list=ls())
>
> P <- matrix(c(0.66, 0.34,
+               0.66, 0.34), nrow=2, ncol=2, byrow = TRUE)
>
> x <- eigen(t(P))
> x$values
[1] 1 0

$vectors
          [,1]       [,2]
[1,] 0.8889746 -0.7071068
[2,] 0.4579566  0.7071068

> y <- x$vectors[,1]
> y
[1] 0.8889746 0.4579566
>  

выглядит как команда

y <- x$vectors[,1]

выбирает 1-й столбец матрицы.

Почему это не было написано просто так:

# Stationary distribution of discrete-time Markov chain
# (uses eigenvectors)
stationary <- function(mat)
{
    x = eigen(t(mat))
    y = x[,1]
    as.double(y/sum(y))
}

В чем причина введения знака доллара и векторного ключевого слова?

1 Ответ

1 голос
/ 11 мая 2019

Давайте проверим ваше предложение:

> P <- matrix(c(0.66, 0.34, 0.66, 0.34), nrow=2, ncol=2, byrow = TRUE)
> x <- eigen(t(P))
> print(x)
eigen() decomposition
$values
[1] 1 0

$vectors
          [,1]       [,2]
[1,] 0.8889746 -0.7071068
[2,] 0.4579566  0.7071068

> y = x[,1]

Это приведет к следующему сообщению об ошибке:

Error in x[, 1] : incorrect number of dimensions

eigen возвращает именованный список с именами собственных значений и именами собственных вектороввекторы.Для доступа к этому компоненту списка.мы используем знак доллара.Следовательно, именно поэтому код x $ векторов, которые извлекают матрицу.

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