1function
bool = mmdp_isfeasible(Q, R)
2% MMDP_ISFEASIBLE Check
if (Q, R) defines a valid MMDP
4%
bool = MMDP_ISFEASIBLE(Q, R)
6% Checks
if the given matrices define a valid Markov-Modulated
7% Deterministic Process (MMDP).
10% - Q must be a valid generator (square, row sums = 0, proper signs)
11% - R must be diagonal with non-negative entries
12% - Q and R must have compatible dimensions
15% Q (matrix): n×n generator matrix
16% R (matrix): n×n diagonal rate matrix
19% bool (logical): True if (Q, R) defines a valid MMDP
21% Copyright (c) 2012-2026, Imperial College London
33 % Q must be a valid generator
35 % Diagonal elements must be non-positive
40 % Off-diagonal elements must be non-negative
42 if i ~= j && Q(i,j) < -tol
47 % Row sums must be zero (or close to zero)
48 if abs(sum(Q(i,:))) > tol
61 % R must be diagonal with non-negative entries
63 % Diagonal entries must be non-negative
68 % Off-diagonal entries must be zero
70 if i ~= j && abs(R(i,j)) > tol