LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
ctmc_uniformization.m
1%{ @file ctmc_uniformization.m
2 % @brief Computes transient probabilities using uniformization
3 %
4 % @author LINE Development Team
5%}
6
7%{
8 % @brief Computes transient probabilities using uniformization
9 %
10 % @details
11 % Applies the uniformization method to compute transient state probabilities.
12 %
13 % @par Syntax:
14 % @code
15 % [pi, kmax] = ctmc_uniformization(pi0, Q, t)
16 % [pi, kmax] = ctmc_uniformization(pi0, Q, t, tol, maxiter)
17 % @endcode
18 %
19 % @par Parameters:
20 % <table>
21 % <tr><th>Name<th>Description
22 % <tr><td>pi0<td>Initial probability distribution vector
23 % <tr><td>Q<td>Infinitesimal generator matrix
24 % <tr><td>t<td>Time point for transient analysis
25 % <tr><td>tol<td>(Optional) Error tolerance. Default: 1e-12
26 % <tr><td>maxiter<td>(Optional) Maximum number of iterations. Default: 100
27 % </table>
28 %
29 % @par Returns:
30 % <table>
31 % <tr><th>Name<th>Description
32 % <tr><td>pi<td>Probability distribution vector at time t
33 % <tr><td>kmax<td>Number of iterations performed
34 % </table>
35%}
36function [pi,kmax]=ctmc_uniformization(pi0,Q,t,tol,maxiter)
37if ~exist('tol','var')
38 tol = 1e-12;
39end
40if ~exist('maxiter','var')
41 maxiter = 100;
42end
43q=1.1*max(abs(diag(Q)));
44Qs=speye(size(Q))+sparse(Q)/q;
45k=0;
46s=1;
47r=1;
48iter=0;
49kmax=1;
50while iter<maxiter
51 iter=iter+1;
52 k=k+1;
53 r=r*(q*t)/k;
54 s=s+r;
55 if (1-exp(-q*t)*s)<=tol
56 kmax=k;
57 break;
58 end
59end
60
61pi=pi0*(exp(-q*t));
62P=pi0;
63ri=exp(-q*t);
64for j=1:kmax
65 P=P*Qs;
66 ri=ri*(q*t/j);
67 pi=pi+ri*P;
68end
69end