butools.reptrans.TransformToMonocyclic¶
-
butools.reptrans.
TransformToMonocyclic
()¶ Matlab: B = TransformToMonocyclic(A, maxSize, precision)
Mathematica: B = TransformToMonocyclic[A, maxSize, precision]
Python/Numpy: B = TransformToMonocyclic(A, maxSize, precision)
Transforms an arbitrary matrix to a Markovian monocyclic matrix (see [R47]).
Parameters: A : matrix, shape (N,N)
Matrix parameter of the initial representation
maxSize : int, optional
The maximal order of the resulting Markovian representation. The default value is 100
precision : double, optional
Matrix entries smaller than the precision are considered to be zeros. The default value is 1e-14
Returns: B : matrix, shape (M,M)
Transient generator matrix of the Markovian monocyclic representation. Note that M>N if there are complex eigenvalues.
Notes
Raises an exception if no Markovian monocyclic generator has been found up to the given size.
References
[R47] (1, 2) Mocanu, S., Commault, C.: “Sparse representations of phase-type distributions,” Stoch. Models 15, 759-778 (1999) Examples
For Matlab:
>>> A = [-1, 0, 0; 0, -3, 2; 0, -2, -3]; >>> B = TransformToMonocyclic(A); >>> disp(B); -1 1 0 0 0 0 -3 3 0 0 0 0 -3 3 0 0 0 0 -3 3 0 0.59259 0 0 -3 >>> Cm = SimilarityMatrix(A, B); >>> err = norm(A*Cm-Cm*B); >>> disp(err); 1.4306e-14
For Mathematica:
>>> A = {{-1, 0, 0},{0, -3, 2},{0, -2, -3}}; >>> B = TransformToMonocyclic[A]; >>> Print[B]; {{-1, 1, 0, 0, 0}, {0, -3, 3, 0, 0}, {0, 0, -3, 3, 0}, {0, 0, 0, -3, 3}, {0, 16/27, 0, 0, -3}} >>> Cm = SimilarityMatrix[A, B]; >>> err = Norm[A.Cm-Cm.B]; >>> Print[err]; 0
For Python/Numpy:
>>> A = ml.matrix([[-1, 0, 0],[0, -3, 2],[0, -2, -3]]) >>> B = TransformToMonocyclic(A) >>> print(B) [[-1. 1. 0. 0. 0. ] [ 0. -3. 3. 0. 0. ] [ 0. 0. -3. 3. 0. ] [ 0. 0. 0. -3. 3. ] [ 0. 0.59259 0. 0. -3. ]] >>> Cm = SimilarityMatrix(A, B) >>> err = la.norm(A*Cm-Cm*B) >>> print(err) 1.29225863835e-14