1function RET = mmap_modulate(
P, HT,
MMAP)
2% MMAP_MODULATE. Modulates in continuous time a set of MMAPs according to
3% a given holding time distribution
for each MMAP.
4% SMMAP = MMAP_MODULATE(HT,
MMAP)
5% HT{j}: phase-type distribution
for holding time in state group j
6% MMAPP{j}: departure process
while in state group j
10 error(
'The HT and MMAP cell arrays must have the same length.');
14 if length(
MMAP{j})==2 % MAP
21 error(
'The MMAPs must have the same number of types.');
26nh = cellfun(@(ph) length(ph{1}), HT); % nh(j): states in PH{j}
27nm = cellfun(@(mmap) length(mmap{1}),
MMAP); % nm(j): states in
MMAP{j}
30RET = cell(1,2+K); % a marked MAP
36 Q{j}{1} = krons(HT{j}{1},
MMAP{j}{1});
37 %Q{j}{2} = krons(HT{j}{2},
MMAP{j}{2});
38 Q{j}{3} = kron(HT{j}{2}, eye(nm(j)));
40 Q{j}{3+k} = kron( eye(nh(j)),
MMAP{j}{2+k} );
49 MOD_j{1} = [MOD_j{1}, Q{j}{1}];
51 MOD_j{2+k} = [MOD_j{2+k}, Q{j}{3+k}];
54 entry_i = kron(map_pie(HT{i}),map_pie(
MMAP{i}));
55 MOD_j{1} = [MOD_j{1},
P(j,i)*Q{j}{3}*ones(nq,1)*entry_i];
57 MOD_j{2+k} = [MOD_j{2+k}, 0*
P(j,i)*Q{j}{3}*ones(nq,1)*entry_i];
62 RET{1} = [RET{1}; MOD_j{1}];
64 RET{2+k} = [RET{2+k}; MOD_j{2+k}];
67RET = mmap_normalize(RET);