LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
mmdp_isfeasible.m
1function bool = mmdp_isfeasible(Q, R)
2% MMDP_ISFEASIBLE Check if (Q, R) defines a valid MMDP
3%
4% bool = MMDP_ISFEASIBLE(Q, R)
5%
6% Checks if the given matrices define a valid Markov-Modulated
7% Deterministic Process (MMDP).
8%
9% Requirements:
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
13%
14% Parameters:
15% Q (matrix): n×n generator matrix
16% R (matrix): n×n diagonal rate matrix
17%
18% Returns:
19% bool (logical): True if (Q, R) defines a valid MMDP
20%
21% Copyright (c) 2012-2026, Imperial College London
22% All rights reserved.
23
24 tol = 1e-10;
25
26 % Q must be square
27 [n, m] = size(Q);
28 if n ~= m
29 bool = false;
30 return;
31 end
32
33 % Q must be a valid generator
34 for i = 1:n
35 % Diagonal elements must be non-positive
36 if Q(i,i) > tol
37 bool = false;
38 return;
39 end
40 % Off-diagonal elements must be non-negative
41 for j = 1:n
42 if i ~= j && Q(i,j) < -tol
43 bool = false;
44 return;
45 end
46 end
47 % Row sums must be zero (or close to zero)
48 if abs(sum(Q(i,:))) > tol
49 bool = false;
50 return;
51 end
52 end
53
54 % R must be n×n
55 [nr, mr] = size(R);
56 if nr ~= n || mr ~= n
57 bool = false;
58 return;
59 end
60
61 % R must be diagonal with non-negative entries
62 for i = 1:n
63 % Diagonal entries must be non-negative
64 if R(i,i) < -tol
65 bool = false;
66 return;
67 end
68 % Off-diagonal entries must be zero
69 for j = 1:n
70 if i ~= j && abs(R(i,j)) > tol
71 bool = false;
72 return;
73 end
74 end
75 end
76
77 bool = true;
78end