Что такое октавный эквивалент eig (X, «нобаланс») - PullRequest
2 голосов
/ 13 ноября 2010

Я пытаюсь найти равновесное распределение цепочки Маркова, что означает нахождение собственных значений матрицы перехода, представляющей ее, однако функция eig автоматически нормализует собственные векторы, которые она возвращает, в MatLab есть флаг, который вы можете передатьк функции, чтобы остановить это поведение

eig (X, 'nobalance')

, где X - матрица.См. http://www.mathworks.com/help/techdoc/ref/eig.html. Однако, когда я пытаюсь сделать это в октаве, я просто получаю сообщение об ошибке:

ошибка: eig: неверный аргумент типа `sq_string '

Isесть какая-то другая функция, которую я должен вызывать?

Приветствия

1 Ответ

1 голос
/ 14 ноября 2010

Если ваша цель - вычислить равновесное распределение цепи Маркова, взгляните на реализацию функции mcStatDist из набора инструментов PMTK3 .Здесь показаны четыре разных способа вычисления результата.Пример:

TR = rand(3,3);                          %# random transition matrix
TR = bsxfun(@rdivide, TR, sum(TR,2));    %# normalize so that rows sum to one

[V,D] = eig(TR');                        %'# eigen-decomposition
EQ = V(:,1) ./ sum(V(:,1));              %# state equilibrium distribution

Как отмечено в комментариях к связанному коду, этот метод может быть численно нестабильным в некоторых случаях, поэтому вы можете рассмотреть один из других вариантов ...

...