1function [Pnir,pi,runtime,fname] = solver_ctmc_margaggr(sn, options)
2% [PNIR,PI,RUNTIME,FNAME] = SOLVER_CTMC_MARGAGGR(QN, OPTIONS)
4% Copyright (c) 2012-2026, Imperial College London
8M = sn.nstations; %number of stations
9K = sn.nclasses; %number of
classes
15[Q,SS,SSq,~,~,~,sn] = solver_ctmc(sn, options);
19 save([fname,
'.mat'],
'Q',
'SSq')
20 line_printf('\nCTMC generator and state space saved in: ');
21 line_printf([fname, '.mat'])
23pi = ctmc_solve_reducible(Q);
24pi(pi<GlobalConstants.Zero)=0;
29 isf = sn.nodeToStateful(ind);
30 statesz(isf) = size(sn.space{isf},2);
33cstatesz = [0,cumsum(statesz)];
34Pnir = zeros(1,sn.nstations);
37 isf = sn.nodeToStateful(ind);
38 ist = sn.nodeToStation(ind);
39 state_i = [zeros(1,size(sn.space{isf},2)-length(state{isf})),state{isf}];
40 [~,nivec] = State.toMarginal(sn, ind, state{isf});
43 [~,sivec] = State.toMarginal(sn, ind, SS(s,(cstatesz(isf)+1):(cstatesz(isf)+length(state_i))));
44 if all(sivec == nivec)
45 Pnir(ist) = Pnir(ist) + pi(s);
54% line_printf(
'\nCTMC analysis completed. Runtime: %f seconds.\n',runtime);