1% [G0, G1] = CanonicalFromDMAP2(D0, D1, prec)
3% Returns the canonical form of an order-2 discrete Markovian
8% D0 : matrix, shape (2,2)
9% The D0 matrix of the DMAP(2)
10% D1 : matrix, shape (2,2)
11% The D1 matrix of the DMAP(2)
12% prec : double, optional
13% Numerical precision to check the input,
default
18% G0 : matrix, shape (1,2)
19% The D0 matrix of the canonical DMAP(2)
20% G1 : matrix, shape (2,2)
21% The D1 matrix of the canonical DMAP(2)
23function [g0,g1]=CanonicalFromDMAP2(d0, d1)
25 global BuToolsCheckInput;
26 if isempty(BuToolsCheckInput)
27 BuToolsCheckInput = true;
30 if BuToolsCheckInput && ~CheckDMAPRepresentation(d0,d1)
31 error('DMAP2Canonical: Input isn''t a valid DMAP representation!');
35 error('DMAP2Canonical: Size
is not 2!');
43 [g0,g1]=CanonicalFromMAP2(d0-eye(2),d1);
50 av=DRPSolve(inv(eye(2)-d0)*d1);
51 gamma=EigSort(eig(inv(eye(2)-d0)*d1));
54 w1=1/(s1-s2)*(sum(d0,2)-s2*[1;1]);
62 a=-(1/(2*(-1+s1)*(-1+s1+s2)^2))*(1-4*s1+a1*s1+5*s1^2-a1*s1^2-2*s1^3-2*s2-a1*s2+5*s1*s2-3*s1^2*s2+s2^2+a1*s2^2-s1*s2^2-gamma+3*s1*gamma-a1*s1*gamma-3*s1^2*gamma+a1*s1^2*gamma+s1^3*gamma+s2*gamma+a1*s2*gamma-2*s1*s2*gamma+s1^2*s2*gamma-a1*s2^2*gamma+sqrt((-1+s1+s2)^2*((-1+s1^2*(-2+gamma)+gamma+s2*(1+a1-a1*gamma)+s1*(3-a1-s2-2*gamma+a1*gamma))^2-4*(-1+s1)*(-s1^3*(-1+gamma)+a1*(-1+s2)*s2*(-1+gamma)+s1^2*(-2+a1+s2+2*gamma-a1*gamma)+s1*(1-a1-s2-gamma+a1*gamma)))));
63 b=1+(a*(-1+s1+s2-s1*s2)*gamma)/((a-1)*(-s1*s2+a*(-1+s1+s2)));
65 g0=[s1+s2 a*(1-s1-s2); s1*s2/(a*(s1+s2-1)) 0];
66 g1=[(1-a)*(1-s1-s2) 0; b*(1+s1*s2/(a*(1-s1-s2))) (1-b)*(1+s1*s2/(a*(1-s1-s2)))];
69 a=(a1*s1-a1*s1^2+s2-a1*s2-3*s1*s2+2*s1^2*s2-s2^2+a1*s2^2+s1*s2^2+s1*gamma-a1*s1*gamma-2*s1^2*gamma+a1*s1^2*gamma+s1^3*gamma+a1*s2*gamma-a1*s2^2*gamma+sqrt(-4*(-1+s1)*s1*s2*(-1+s1+s2)*(a1*(s1-s2)*(-1+gamma)+(-1+s1)*(s2+(-1+s1)*gamma))+(a1*(-s1+s1^2+s2-s2^2)*(-1+gamma)+(-1+s1)*((-1+2*s1)*s2+s2^2+(-1+s1)*s1*gamma))^2))/(2*(-1+s1+s2)*(a1*(s1-s2)*(-1+gamma)+(-1+s1)*(s2+(-1+s1)*gamma)));
70 b=-((a*(1-s1)*(1-s2)*gamma)/((a-1)*(-a+a*s1+a*s2-s1*s2)));
72 g0=[s1+s2 a*(1-s1-s2); s1*s2/(a*(s1+s2-1)) 0];
73 g1=[0 (1-a)*(1-s1-s2); b*(1-s1*s2/(a*(s1+s2-1))) (1-b)*(1-s1*s2/(a*(s1+s2-1)))];