function [ok,msg]=pchk(testcase,p,P) % pchk(1,p) kontrollerar att p är en fördelningsvektor. % pchk(2,P) kontrollerar att P är en övergångsmatris. % pchk(3,p,P) kontrollerar att p är en fördelningsvektor % att P är en övergångsmatris, % och att dimensionerna överensstämmer. % Om allt är OK returneras 1, annars 0. % Finn Lindgren 1999-11-24 Eps=1e-10; msg=''; switch (testcase) case 1, ok = size(p,1)==1; if ~ok msg = 'Fördelningen skall vara en radvektor.'; else ok = all(p>=0); if ~ok msg = 'Fördelningen skall ha alla element >=0.'; else ok = (sum(p)<1+Eps) & (sum(p)>1-Eps); if ~ok msg = 'Fördelningen skall ha summa =1.'; end end end case 2, P=p; ok = (size(P,1)==size(P,2)); if ~ok msg = 'Övergångsmatrisen skall vara kvadratisk.'; else ok = all(P(:)>=0); if ~ok msg = 'Övergångsmatrisen skall ha alla element >=0.'; else ok = all((sum(P')>1-Eps) & (sum(P')<1+Eps)); if ~ok msg = 'Övergångsmatrisen skall ha alla radsummor =1.'; end end end case 3, [ok,msg]=pchk(1,p); if ok [ok,msg]=pchk(2,P); if ok ok = (size(p,2)==size(P,1)); if ~ok msg = ['Dimensionerna för fördelning resp övergångsmatris ',... 'passar inte ihop.']; end end end otherwise, ok=logical(0); msg = 'Okänt testfall!'; end