butools.ph.CheckMERepresentation

butools.ph.CheckMERepresentation()
Matlab: r = CheckMERepresentation(alpha, A, prec)
Mathematica: r = CheckMERepresentation[alpha, A, prec]
Python/Numpy: r = CheckMERepresentation(alpha, A, prec)

Checks if the given vector and matrix define a valid matrix- exponential representation.

Parameters:

alpha : matrix, shape (1,M)

Initial vector of the matrix-exponential distribution to check

A : matrix, shape (M,M)

Matrix parameter of the matrix-exponential distribution to check

prec : double, optional

Numerical precision. The default value is 1e-14.

Returns:

r : bool

True, if the matrix is a square matrix, the vector and the matrix have the same size, the dominant eigenvalue is negative and real

Notes

This procedure does not check the positivity of the density! Call ‘CheckMEPositiveDensity’ if it is needed, but keep in mind that it can be time-consuming, while this procedure is fast.

Examples

For Matlab:

>>> a = [-0.2,0.2];
>>> A = [1, -1; 1, -2];
>>> flag = CheckMERepresentation(a, A);
CheckMERepresentation: There is an eigenvalue of the matrix with non-negative real part (at precision 1e-12)!
>>> disp(flag);
     0
>>> a = [-0.2,0.4,0.8];
>>> A = [-2, 0, 3; 0, -1, 1; 0, -1, -1];
>>> flag = CheckMERepresentation(a, A);
CheckMERepresentation: The dominant eigenvalue of the matrix is not real!
>>> disp(flag);
     0
>>> a = [0.2,0.3,0.5];
>>> A = [-1, 0, 0; 0, -3, 2; 0, -2, -3];
>>> flag = CheckMERepresentation(a, A);
>>> disp(flag);
     1

For Mathematica:

>>> a = {-0.2,0.2};
>>> A = {{1, -1},{1, -2}};
>>> flag = CheckMERepresentation[a, A];
"CheckMERepresentation: There is an eigenvalue of the matrix with not negative real part at precision "1.*^-12")!"
>>> Print[flag];
False
>>> a = {-0.2,0.4,0.8};
>>> A = {{-2, 0, 3},{0, -1, 1},{0, -1, -1}};
>>> flag = CheckMERepresentation[a, A];
"CheckMERepresentation: The dominant eigenvalue of the matrix is not real at precision "1.*^-12")!"
>>> Print[flag];
False
>>> a = {0.2,0.3,0.5};
>>> A = {{-1, 0, 0},{0, -3, 2},{0, -2, -3}};
>>> flag = CheckMERepresentation[a, A];
>>> Print[flag];
True

For Python/Numpy:

>>> a = ml.matrix([[-0.2,0.2]])
>>> A = ml.matrix([[1, -1],[1, -2]])
>>> flag = CheckMERepresentation(a, A)
CheckMERepresentation: There is an eigenvalue of the matrix with non-negative real part!
>>> print(flag)
False
>>> a = ml.matrix([[-0.2,0.4,0.8]])
>>> A = ml.matrix([[-2, 0, 3],[0, -1, 1],[0, -1, -1]])
>>> flag = CheckMERepresentation(a, A)
CheckMERepresentation: The dominant eigenvalue of the matrix is not real!
>>> print(flag)
False
>>> a = ml.matrix([[0.2,0.3,0.5]])
>>> A = ml.matrix([[-1, 0, 0],[0, -3, 2],[0, -2, -3]])
>>> flag = CheckMERepresentation(a, A)
>>> print(flag)
True