LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
mmap_mixture_fit.m
1function [MMAP,PHs] = mmap_mixture_fit(P2,M1,M2,M3)
2% Fits a MMAP with m classes using a mixture of m^2 PH-distributions.
3% Each PH distribution represents the probability distribution conditioned
4% on the fact that the last arrival was of class i and the next arrival is
5% of class j. Currently, the PH distributions are of the second order,
6% hence the cross moments of order 1, 2 and 3 are required.
7%
8% INPUT
9% - P2: two-step class transition probabilities (use mtrace_sigma2)
10% - M1: matrix of first-order cross moments
11% - M2: matrix of first-order cross moments
12% - M3: matrix of first-order cross moments
13% OUTPUT
14% - MMAP: the fitted MMAP
15% - PHs: the fitted PH-distributions for each transition
16
17% number of classes
18m = size(M1,1);
19
20PHs = cell(m,m);
21for i = 1:m
22 for j = 1:m
23 % approximate fitting of second and third moments
24 m1 = M1(i,j);
25 PHs{i,j} = aph2_fit(m1, M2(i,j), M3(i,j));
26 % compare theoretical and fitted moments
27 % fprintf('PH{%d,%d}: M1 = %.3e, M2 = %.3e (%.3e), M3 = %.3e (%.3e)\n', i, j, m1, m2, M2(i,j), m3, M3(i,j));
28 end
29end
30
31MMAP = cell(1,2+m);
32MMAP{1} = zeros(2*m^2, 2*m^2);
33MMAP{2} = zeros(2*m^2, 2*m^2);
34for i = 1:m
35 MMAP{2+i} = zeros(2*m^2, 2*m^2);
36end
37k = 1;
38for i = 1:m
39 for j = 1:m
40 first = (k-1)*2+1;
41 last = k*2;
42 MMAP{1}(first:last,first:last) = PHs{i,j}{1};
43 k = k + 1;
44 end
45end
46k1 = 1;
47for i1 = 1:m
48 for j1 = 1:m
49 k2 = 1;
50 for i2 = 1:m
51 for j2 = 1:m
52 firstr = (k1-1)*2+1;
53 lastr = k1*2;
54 firstc = (k2-1)*2+1;
55 lastc = k2*2;
56 if j1 == i2
57 Q = (-PHs{i1,j1}{1}) * ones(2,1) * map_pie(PHs{i2,j2});
58 p = P2(i1,i2,j2)/sum(P2(i1,i2,:));
59 else
60 Q = zeros(2,2);
61 p = 0;
62 end
63 MMAP{2}(firstr:lastr,firstc:lastc) = p * Q;
64 MMAP{2+j1}(firstr:lastr,firstc:lastc) = p * Q;
65 k2 = k2 + 1;
66 end
67 end
68 k1 = k1 +1;
69 end
70end
71
72% normalize diagonal
73for i = 1:(m^2)
74 MMAP{1}(i,i) = 0;
75end
76for i = 1:(m^2)
77 MMAP{1}(i,i) = -sum(MMAP{1}(i,1:end)+MMAP{2}(i,:));
78end
79
80M = {M1, M2, M3};
81FM = cell(3,1);
82FM{1} = mmap_cross_moment(MMAP,1);
83FM{2} = mmap_cross_moment(MMAP,2);
84FM{3} = mmap_cross_moment(MMAP,3);
85
86% for i = 1:m
87% for j = 1:m
88% %fprintf('MMAP CROSS(%d,%d): ', i, j);
89% for h = 1:3
90% % fprintf('M%d = %.3e (%.3e)', h, FM{h}(i,j), M{h}(i,j));
91% if h < 3
92% fprintf(', ');
93% end
94% end
95% fprintf('\n');
96% end
97% end
98
99FP2 = mmap_sigma2(MMAP);
100% for i = 1:m
101% for j = 1:m
102% %fprintf('MMAP p(%d,%d,:): ', i, j);
103% for h = 1:m
104% % fprintf('p(%d,%d,%d) = %.3e (%.3e)', i, j, h, P2(i,j,h), FP2(i,j,h));
105% if h < m
106% fprintf(', ');
107% end
108% end
109% fprintf('\n');
110% end
111% end
112
113end % end function