function realizace = simulovani_MR(P,p0,n)
% funkce generuje prvnich n realizaci MR
% syntaxe: [realizace]=simulovani_MR(P,p0,n)
% vstupni parametry: 
% P ... matice prechodu
% p0 ... vektor pocatecnich pravdepodobnosti (radkovy)
% n ... pocet kroku simulace
% vystupni parametr: realizace ... vektor realizaci MR

    realizace = zeros(n, 1);
    realizace(1) = randomQ(p0);

    for i=2:n
        realizace(i) = randomQ(P(realizace(i-1), :));
    end
    plot(realizace, 'o');
    axis([-1 n+2 0.8 size(p0,2)+0.2]);
end

function q = randomQ(prob)
% funkce vygeneruje nahodny stav q dle vektoru pravdepobnosti
% syntaxe: q=randomQ(prob)
% vstupni parametr:
% prob ... radkovy vektor pravdepodobnosti (napr. [0.5 0.4 0.1])
% vystupni parametr:
% q: nahodny index vstupniho vektoru
%napr. 1 s pravd. 0.5, 2 s pravd. 0.4, 3 s pravd. 0.1

    r = random('unif', 0, 1);
   
    leng = size(prob, 2);
    sum = 0;
    for q = 1:leng
        sum = sum+prob(q);
        if(r <= sum) 
            break;
        end        
    end
end

