1function [Pnir,runtime,fname] = solver_ctmc_marg(sn, options)
2% [PNIR,RUNTIME,FNAME] = SOLVER_CTMC_MARG(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);
18 save([fname,
'.mat'],
'Q',
'SSq')
19 line_printf('\nCTMC generator and state space saved in: ');
20 line_printf([fname, '.mat'])
22pi = ctmc_solve_reducible(Q);
23pi(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 Pnir(ist) = sum(pi(findrows(SS(:,(cstatesz(isf)+1):(cstatesz(isf)+length(state_i))), state_i)));
47% line_printf(
'\nCTMC analysis completed. Runtime: %f seconds.\n',runtime);