Получение стационарного распределения для цепи Маркова с использованием собственных векторов из большой матрицы в MATLAB - PullRequest
2 голосов
/ 28 января 2020

Я пытаюсь найти стационарное распределение цепи Маркова. У меня есть матрица вероятности перехода (TPM). Вот код:

[V, D] = eigs(double(TPM'),1); 
Py = abs(V)/sum(V);

Моя проблема в том, что sum(V) < 0, поэтому он дает мне некоторые отрицательные значения в векторе Py. Я проверил код, используя другую матрицу вероятностей, и он дает sum(V) > 0.

Я не знаю, в чем проблема, это TPM или код, который я использую?

РЕДАКТИРОВАТЬ:

Вот более «разработанная» версия кода (включая ответ «SecretAgentMan», см. Метод 3):

function [Py1, Py2, Py3] = testStatDist(TPM)

% method 1
[V1, D1] = eigs(double(TPM'),1);

% method 2
[V2, D2] = iterator(TPM);

% method 3
V3 = null(eye(size(TPM))-TPM.'); 

if(abs(D1 - 1) > 1e-5)
    warning(0, 'testStatDist.m: Check Transition Matrix');
    exit;
end

if(abs(D2 - 1) > 1e-5)
    warning(0, 'testStatDist.m: Check Transition Matrix');
    exit;
end

% res 1
Py1 = abs(V1)/sum(V1);

% res 2
Py2 = abs(V2)/sum(V2);

% res 3
Py3 = abs(V3)/sum(V3);
end

Вот функция «итератор»:

function [V, D] = iterator(TPM)

pi(1:length(TPM)) = 1/length(TPM);
error = 1;
budget = 1000;
while(error >= 1e-10)
    pi2 = pi*TPM;
    error = sum((pi - pi2).^2);
    pi = pi2;
    budget = budget - 1;
    if(budget == 0)
        break;
    end
end
V = pi';
D = 1;

А вот один из TPM, который я использую:

TPM = [0.987665198237886    0.000220264317180617    0.000440528634361233    0.000660792951541850    0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0.000881057268722467    0.985682819383260   0.00110132158590308 0.00132158590308370 0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0.00154185022026432 0.00176211453744493 0.983700440528634   0.00198237885462555 0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0.988986784140969   0   0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0.00440528634361233 0   0   0   0.983259911894273   0.000220264317180617    0.000440528634361233    0.000660792951541850    0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0.00440528634361233 0   0   0.000881057268722467    0.981277533039648   0.00110132158590308 0.00132158590308370 0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0.00440528634361233 0   0.00154185022026432 0.00176211453744493 0.979295154185022   0.00198237885462555 0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0.00440528634361233 0   0   0   0.984581497797357   0   0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0.00881057268722467 0   0   0   0.978854625550661   0.000220264317180617    0.000440528634361233    0.000660792951541850    0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0.00881057268722467 0   0   0.000881057268722467    0.976872246696035   0.00110132158590308 0.00132158590308370 0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0.00881057268722467 0   0.00154185022026432 0.00176211453744493 0.974889867841410   0.00198237885462555 0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0.00881057268722467 0   0   0   0.980176211453745   0   0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0.0132158590308370  0   0   0   0.974449339207049   0.000220264317180617    0.000440528634361233    0.000660792951541850    0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0.0132158590308370  0   0   0.000881057268722467    0.972466960352423   0.00110132158590308 0.00132158590308370 0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0.0132158590308370  0   0.00154185022026432 0.00176211453744493 0.970484581497797   0.00198237885462555 0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0.0132158590308370  0   0   0   0.975770925110132   0   0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0.0176211453744493  0   0   0   0.970044052863436   0.000220264317180617    0.000440528634361233    0.000660792951541850    0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0.0176211453744493  0   0   0.000881057268722467    0.968061674008811   0.00110132158590308 0.00132158590308370 0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0176211453744493  0   0.00154185022026432 0.00176211453744493 0.966079295154185   0.00198237885462555 0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0176211453744493  0   0   0   0.971365638766520   0   0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0220264317180617  0   0   0   0.965638766519824   0.000220264317180617    0.000440528634361233    0.000660792951541850    0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0220264317180617  0   0   0.000881057268722467    0.963656387665198   0.00110132158590308 0.00132158590308370 0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0220264317180617  0   0.00154185022026432 0.00176211453744493 0.961674008810573   0.00198237885462555 0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0220264317180617  0   0   0   0.966960352422908   0   0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0264317180616740  0   0   0   0.961233480176212   0.000220264317180617    0.000440528634361233    0.000660792951541850    0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0264317180616740  0   0   0.000881057268722467    0.959251101321586   0.00110132158590308 0.00132158590308370 0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0264317180616740  0   0.00154185022026432 0.00176211453744493 0.957268722466960   0.00198237885462555 0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0264317180616740  0   0   0   0.962555066079295   0   0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0308370044052863  0   0   0   0.956828193832599   0.000220264317180617    0.000440528634361233    0.000660792951541850    0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0308370044052863  0   0   0.000881057268722467    0.954845814977974   0.00110132158590308 0.00132158590308370 0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0308370044052863  0   0.00154185022026432 0.00176211453744493 0.952863436123348   0.00198237885462555 0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0308370044052863  0   0   0   0.958149779735683   0   0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0352422907488987  0   0   0   0.952422907488987   0.000220264317180617    0.000440528634361233    0.000660792951541850    0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0352422907488987  0   0   0.000881057268722467    0.950440528634361   0.00110132158590308 0.00132158590308370 0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0352422907488987  0   0.00154185022026432 0.00176211453744493 0.948458149779736   0.00198237885462555 0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0352422907488987  0   0   0   0.953744493392071   0   0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0396475770925110  0   0   0   0.948017621145375   0.000220264317180617    0.000440528634361233    0.000660792951541850    0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0396475770925110  0   0   0.000881057268722467    0.946035242290749   0.00110132158590308 0.00132158590308370 0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0396475770925110  0   0.00154185022026432 0.00176211453744493 0.944052863436123   0.00198237885462555 0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0396475770925110  0   0   0   0.949339207048458   0   0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0440528634361234  0   0   0   0.943612334801762   0.000220264317180617    0.000440528634361233    0.000660792951541850    0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0440528634361234  0   0   0.000881057268722467    0.941629955947137   0.00110132158590308 0.00132158590308370 0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0440528634361234  0   0.00154185022026432 0.00176211453744493 0.939647577092511   0.00198237885462555 0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0440528634361234  0   0   0   0.944933920704846   0   0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0484581497797357  0   0   0   0.939207048458150   0.000220264317180617    0.000440528634361233    0.000660792951541850    0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0484581497797357  0   0   0.000881057268722467    0.937224669603524   0.00110132158590308 0.00132158590308370 0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0484581497797357  0   0.00154185022026432 0.00176211453744493 0.935242290748899   0.00198237885462555 0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0484581497797357  0   0   0   0.940528634361234   0   0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0528634361233480  0   0   0   0.934801762114538   0.000220264317180617    0.000440528634361233    0.000660792951541850    0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0528634361233480  0   0   0.000881057268722467    0.932819383259912   0.00110132158590308 0.00132158590308370 0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0528634361233480  0   0.00154185022026432 0.00176211453744493 0.930837004405286   0.00198237885462555 0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0528634361233480  0   0   0   0.936123348017621   0   0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0572687224669604  0   0   0   0.930396475770925   0.000220264317180617    0.000440528634361233    0.000660792951541850    0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0572687224669604  0   0   0.000881057268722467    0.928414096916300   0.00110132158590308 0.00132158590308370 0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0572687224669604  0   0.00154185022026432 0.00176211453744493 0.926431718061674   0.00198237885462555 0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0572687224669604  0   0   0   0.931718061674009   0   0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0616740088105727  0   0   0   0.925991189427313   0.000220264317180617    0.000440528634361233    0.000660792951541850    0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0616740088105727  0   0   0.000881057268722467    0.924008810572687   0.00110132158590308 0.00132158590308370 0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0616740088105727  0   0.00154185022026432 0.00176211453744493 0.922026431718062   0.00198237885462555 0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0616740088105727  0   0   0   0.927312775330397   0   0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0660792951541850  0   0   0   0.921585903083701   0.000220264317180617    0.000440528634361233    0.000660792951541850    0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0660792951541850  0   0   0.000881057268722467    0.919603524229075   0.00110132158590308 0.00132158590308370 0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0660792951541850  0   0.00154185022026432 0.00176211453744493 0.917621145374449   0.00198237885462555 0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0660792951541850  0   0   0   0.922907488986784   0   0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0704845814977974  0   0   0   0.917180616740088   0.000220264317180617    0.000440528634361233    0.000660792951541850    0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0704845814977974  0   0   0.000881057268722467    0.915198237885463   0.00110132158590308 0.00132158590308370 0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0704845814977974  0   0.00154185022026432 0.00176211453744493 0.913215859030837   0.00198237885462555 0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0704845814977974  0   0   0   0.918502202643172   0   0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0748898678414097  0   0   0   0.912775330396476   0.000220264317180617    0.000440528634361233    0.000660792951541850    0.0110132158590308  0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0748898678414097  0   0   0.000881057268722467    0.910792951541850   0.00110132158590308 0.00132158590308370 0   0.0110132158590308  0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0748898678414097  0   0.00154185022026432 0.00176211453744493 0.908810572687225   0.00198237885462555 0   0   0.0110132158590308  0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0748898678414097  0   0   0   0.914096916299560   0   0   0   0.0110132158590308  0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0792951541850220  0   0   0   0.908370044052864   0.000220264317180617    0.000440528634361233    0.000660792951541850    0.0110132158590308  0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0792951541850220  0   0   0.000881057268722467    0.906387665198238   0.00110132158590308 0.00132158590308370 0   0.0110132158590308  0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0792951541850220  0   0.00154185022026432 0.00176211453744493 0.904405286343612   0.00198237885462555 0   0   0.0110132158590308  0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0792951541850220  0   0   0   0.909691629955947   0   0   0   0.0110132158590308  0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0837004405286344  0   0   0   0.903964757709251   0.000220264317180617    0.000440528634361233    0.000660792951541850    0.0110132158590308  0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0837004405286344  0   0   0.000881057268722467    0.901982378854626   0.00110132158590308 0.00132158590308370 0   0.0110132158590308  0   0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0837004405286344  0   0.00154185022026432 0.00176211453744493 0.900000000000000   0.00198237885462555 0   0   0.0110132158590308  0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0837004405286344  0   0   0   0.905286343612335   0   0   0   0.0110132158590308
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0881057268722467  0   0   0   0.910572687224670   0.000220264317180617    0.000440528634361233    0.000660792951541850
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0881057268722467  0   0   0.000881057268722467    0.908590308370044   0.00110132158590308 0.00132158590308370
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0881057268722467  0   0.00154185022026432 0.00176211453744493 0.906607929515419   0.00198237885462555
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0.0881057268722467  0   0   0   0.911894273127753];

Вопрос 1:

Каждый из 3 методов дает разные результаты, и я не уверен, какой из них использовать. Я знаю, что для метода итератора это приближение, которое можно использовать в случае больших TPM.

Почему существует такая разница в значениях?

Вопрос 2:

Почему я получаю отрицательные значения в стационарном распределении? Я использовал больший TPM размером 2600x2600, и я не получаю никаких отрицательных значений, но здесь трудно поместить матрицу 2600x2600.

1 Ответ

2 голосов
/ 28 января 2020

Набор инструментов не требуется:
Мы знаем, что вероятности стационарного состояния являются уникальным решением приведенных ниже уравнений для цепи Маркова с дискретным временем (DTM C).

Equations to find steady state distribution (probabilities) for a discrete time Markov chain

Вы можете переписать это, чтобы показать, что это распределение должно l ie в пустом пространстве матрицы вероятностей перехода (см. Ниже). Это позволяет использовать MATLAB null().

Rewriting the steady state equations to show the steady state distribution lies in the null space of the transition probability matrix

Нормализация суммы дает единственное решение и удовлетворяет другому уравнению.

P = [.2 .3 .3 0 .2;
    .1 .2 .3 .4 0;
    0 .5 .4 .1 0;
    .2 .2 .2 .3 .1;
    .5 .2 .1 .1 .1];
ssp0 = null(eye(size(P))-P.');
SteadyStateProb = ssp0./sum(ssp0)          % [0.1263 0.3017 0.2969 0.2224 0.0528]

Обратите внимание, что промежуточный ssp0 имеет отрицательные значения, но окончательный ответ, SteadyStateProb, является верным в том смысле, что все значения являются действительными вероятностями, а все вероятности составляют 1.


Обновление на основе правки ОП : подготовка матрицы

Одна из проблем с матрицей вероятности перехода, размер 84 × 84 TPM в редактировании , что сумма строки больше единицы. Вы можете проверить это с помощью find(sum(TPM,2) > 1), чтобы получить индексы строк, где это происходит. Кроме того, этот «избыток» очень мал: max(sum(TPM,2))-1 показывает, что наибольшая сумма строк превышает 1 на 4.4409e-16, для меня это в два раза больше eps (2.2204e-16).

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

% Re-Normalize:  Divide the kth row by the sum of that row
TPM2 = TPM;
for k = 1:size(TPM2,1)
    TPM2(k,:) = TPM2(k,:)/sum(TPM2(k,:));   
end

В результате сумма строк не будет больше единицы; вы можете проверить с помощью find(sum(TPM2,2) > 1), который возвращает пустой двойной вектор-столбец 0 × 1.

Без дальнейшего массирования матрицы мы можем получить распределение в устойчивом состоянии.

ssp0 = null(eye(size(TPM2))-TPM2.');
SteadyStateProb_TPM2 = ssp0./sum(ssp0);

Обратите внимание, что min(SteadyStateProb_TPM2) равно -9.6502e-16 (ноль!), А сумма по существу равна 1 (abs(1-sum(SteadyStateProb_TPM2))).

Я бы сейчас просто навязал неотрицательность.

SteadyStateProb_TPM2(SteadyStateProb_TPM2<0) = 0; 

Сравните с итерационным приближением:
Мы знаем, что TPM2^n сходится к SteadyStateProb_TPM2, когда n становится достаточно большим. Итак, давайте проверим это.

Мы умножаем матрицу перехода многократно (здесь мы получаем матрицу перехода с 2500 шагами). Мы можем видеть, что она кажется более или менее сходящейся к цели.

Approx = TPM2^500;
Approx = Approx*Approx*Approx*Approx*Approx; 

ind = find(SteadyStateProb_TPM2 > 0.05); % find states with steady state prob > 0.05

SteadyStateProb_TPM2(ind).'
Approx(1:6,ind)

Обратите внимание, что состояния [4 8 12 16 20 24].

ans =

0.0821    0.2052    0.2565    0.2138    0.1336    0.0668

ans =

0.0727    0.1818    0.2273    0.1894    0.1184    0.0592
0.0760    0.1900    0.2374    0.1979    0.1237    0.0618
0.0763    0.1908    0.2385    0.1988    0.1242    0.0621
0.0821    0.2052    0.2565    0.2138    0.1336    0.0668
0.0727    0.1818    0.2273    0.1894    0.1184    0.0592
0.0760    0.1900    0.2374    0.1979    0.1237    0.0618

В зависимости от вашего приложения вы можете считать этот метод итерации достаточно хорошим, но я бы не стал использовать его, когда методы прямого анализа c все еще жизнеспособны. Я полагаю, что матрица 2600 × 2600 выполнима в MATLAB, если вам нужно время, чтобы убедиться, что она хорошо подготовлена.

Обновление re: Комментарий ОП : А как насчет метода собственных значений?

Он работает нормально.

% Using the 5x5 P matrix from above
[V,D] = eigs(double(P.'),1);
Py = -abs(V)/sum(V)

Или, альтернативно,

Pyalt = V./sum(V)

Вы можете проверить это также на 84x84:

[V2,D2] = eigs(double(TPM2'),1);
Py_TPM2 = -abs(V2)/sum(V2);
Py_TPM2alt = V2./sum(V2); 

% Evaluate to compare
SteadyStateProb_TPM2(ind).'         
Py_TPM2(ind).'
Py_TPM2alt(ind).'

, что дает следующее. Обратите внимание, что состояния [4 8 12 16 20 24].

SteadyStateProb_TPM2(ind).' = 0.0821 0.2052 0.2565 0.2138 0.1336 0.0668
Py_TPM2(ind).' = 0.0821 0.2052 0.2565 0.2138 0.1336 0.0668
Py_TPM2alt(ind).' = 0.0821 0.2052 0.2565 0.2138 0.1336 0.0668

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