%Funkce pro vypocet stacionarniho rozlozeni
%
%Vstupni parametry: Q ... matice intenzit prechodu (musi byt ctvercova
%                         a kvazistochasticka)
%
%Vystupni parametry: a ... stacionarni rozlozeni
%
%syntaxe: function[a]=stac_roz(Q)
%
function[a]=stac_roz(Q)

% zjisteni velikosti matice Q (r=pocet radku, c=pocet sloupcu)
[r,c]=size(Q);

% kontrola, zda je matice Q ctvercova
if (r~=c)
  error='Chyba: Vstupni matice neni ctvercova!'
  return;
end

% transpozice matice Q
QT=Q';

% kontrola, zda je matice Q kvazistochasticka
if (sum(sum(QT)~=0)~=0)
  error='Chyba: Vstupni matice neni kvazistochasticka!'
  return;
end
if (sum(sum((Q<0)~=eye(r)))~=0)
  error='Chyba: Vstupni matice neni kvazistochasticka!'
  return;
end

% nahrazeni posledniho radku transponovane matice vektorem samych jednicek
QT(r,:)=ones(1,r);

% kontrola, zda je upravena matice QT regularni
if (det(QT)==0)
  result='Stacionarni rozlozeni je linearne zavisle => ma nekonecne mnoho reseni'
  return;
end

% vektor pravych stran (je nulovy krome posledni slozky, ktera je rovna 1)
b=zeros(r,1);
b(r)=1;

% vypocet stacionarniho rozlozeni
a=(QT\b)';
