LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
mam_transient2_open.m
1function V = mam_transient2_open(B, L, F, Lv, T, n, m, s)
2%MAM_TRANSIENT2_OPEN Laplace-domain transient V(s,n,m) for an open (infinite) QBD.
3% V = MAM_TRANSIENT2_OPEN(B, L, F, Lv, T, n, m, s) returns the Laplace
4% transform (at complex argument s) of the transient transition-probability
5% matrix from level n to level m of a piecewise level-dependent QBD with
6% regime thresholds T (the last regime repeats to infinity).
7%
8% Block cell arrays are indexed by regime k = 1..K (K = length(T)):
9% B{k} backward (level-down) block for regime k
10% L{k} local (level-internal) block used on repeating levels of regime k
11% F{k} forward (level-up) block for regime k
12% Lv{k} local block on the boundary level T(k) of regime k
13%
14% Ported from the transient-QBD research code (Horvath et al. formulation).
15%
16% Copyright (c) 2012-2026, Imperial College London
17% All rights reserved.
18 K = length(T);
19
20 Gs = cell(K, 1);
21 Rs = cell(K, 1);
22 Ghs = cell(K, 1);
23 Rhs = cell(K, 1);
24 for k = 1:K
25 if k < K && T(k+1) - T(k) == 1
26 Gs{k} = [];
27 Rs{k} = [];
28 Ghs{k} = [];
29 Rhs{k} = [];
30 else
31 Ik = eye(size(L{k}, 1));
32 [G, R] = qbd_fundmat(B{k}, L{k} - s*Ik, F{k}, 'GR');
33 Gs{k} = G; Rs{k} = R;
34 [G, R] = qbd_fundmat(F{k}, L{k} - s*Ik, B{k}, 'GR');
35 Ghs{k} = G; Rhs{k} = R;
36 end
37 end
38
39 SvHn = cell(K-1, 1);
40 SvH0 = cell(K-1, 1);
41 SvHhn = cell(K-1, 1);
42 SvHh0 = cell(K-1, 1);
43 for k = 1:K-1
44 NN = size(Lv{k}, 1);
45 if T(k+1) - T(k) > 1
46 d = T(k+1) - T(k);
47 Ik = eye(NN);
48 num = [mxpow(Ghs{k}, d-1), Gs{k}; Ghs{k}, mxpow(Gs{k}, d-1)];
49 den = [Ik, mxpow(Gs{k}, d);
50 mxpow(Ghs{k}, d), Ik];
51 SH = num / den;
52 SvHn{k} = SH(1:NN, 1:NN);
53 SvH0{k} = SH(1:NN, NN+1:2*NN);
54 SvHhn{k} = SH(NN+1:2*NN, 1:NN);
55 SvHh0{k} = SH(NN+1:2*NN, NN+1:2*NN);
56 else
57 NN1 = size(Lv{k+1}, 1);
58 SvH0{k} = zeros(NN1, NN);
59 SvHh0{k} = eye(NN);
60 SvHhn{k} = zeros(NN, NN1);
61 SvHn{k} = eye(NN1);
62 end
63 end
64
65 SY = cell(K, 1);
66 SY{K} = Gs{K};
67 for k = K-1:-1:1
68 NNk1 = size(Lv{k+1}, 1);
69 SY{k} = SvH0{k} + SvHn{k} * ((s*eye(NNk1) - Lv{k+1} - F{k+1}*SY{k+1} - B{k}*SvHhn{k}) \ (B{k} * SvHh0{k}));
70 end
71
72 NN1 = size(Lv{1}, 1);
73 SYh = cell(K-1, 1);
74 if K >= 1
75 SYh{1} = SvHhn{1} + SvHh0{1} * ((s*eye(NN1) - Lv{1} - F{1}*SvH0{1}) \ (F{1} * SvHn{1}));
76 end
77 for k = 2:K-1
78 NNk = size(Lv{k}, 1);
79 SYh{k} = SvHhn{k} + SvHh0{k} * ((s*eye(NNk) - Lv{k} - B{k-1}*SYh{k-1} - F{k}*SvH0{k}) \ (F{k} * SvHn{k}));
80 end
81
82 SV = cell(K, K);
83 for l = 0:K-1
84 if l == 0
85 SV{l+1, l+1} = (s*eye(NN1) - Lv{1} - F{1}*SY{1}) \ eye(NN1);
86 else
87 NNl1 = size(Lv{l+1}, 1);
88 SV{l+1, l+1} = (s*eye(NNl1) - Lv{l+1} - F{l+1}*SY{l+1} - B{l}*SYh{l}) \ eye(NNl1);
89 end
90 for k = l+1:K-1
91 NNk1 = size(Lv{k+1}, 1);
92 SV{k+1, l+1} = (s*eye(NNk1) - Lv{k+1} - F{k+1}*SY{k+1} - B{k}*SvHhn{k}) \ (B{k} * SvHh0{k} * SV{k, l+1});
93 end
94 for k = l-1:-1:1
95 NNk1 = size(Lv{k+1}, 1);
96 SV{k+1, l+1} = (s*eye(NNk1) - Lv{k+1} - F{k+1}*SvH0{k+1} - B{k}*SYh{k}) \ (F{k+1} * SvHn{k+1} * SV{k+2, l+1});
97 end
98 if l > 0
99 SV{1, l+1} = (s*eye(NN1) - Lv{1} - F{1}*SvH0{1}) \ (F{1} * SvHn{1} * SV{2, l+1});
100 end
101 end
102
103 pos = find(T > n, 1);
104 if isempty(pos), kn = K; else, kn = pos - 1; end
105 pos = find(T > m, 1);
106 if isempty(pos), km = K; else, km = pos - 1; end
107
108 NN = size(Lv{kn}, 1);
109 II = eye(NN);
110
111 Vu = []; Lu = [];
112 thresholdN = (T(kn) == n);
113 if thresholdN
114 if T(km) == m
115 V = SV{kn, km};
116 return;
117 end
118 Vl = SV{kn, km};
119 Ll = T(km);
120 if km < K
121 Vu = SV{kn, km+1};
122 Lu = T(km+1);
123 end
124 else
125 if kn < K
126 d1 = T(kn+1) - n;
127 num = [mxpow(Ghs{kn}, d1-1), Gs{kn}; Ghs{kn}, mxpow(Gs{kn}, d1-1)];
128 den = [II, mxpow(Gs{kn}, d1); mxpow(Ghs{kn}, d1), II];
129 Tmp = num / den;
130 HTnn = Tmp(1:NN, 1:NN);
131 HTn0 = Tmp(1:NN, NN+1:2*NN);
132 HhTnn = Tmp(NN+1:2*NN, 1:NN);
133 HhTn0 = Tmp(NN+1:2*NN, NN+1:2*NN);
134
135 d2 = n - T(kn);
136 num = [mxpow(Ghs{kn}, d2-1), Gs{kn}; Ghs{kn}, mxpow(Gs{kn}, d2-1)];
137 den = [II, mxpow(Gs{kn}, d2); mxpow(Ghs{kn}, d2), II];
138 Tmp = num / den;
139 HnTn = Tmp(1:NN, 1:NN);
140 HnT0 = Tmp(1:NN, NN+1:2*NN);
141 HhnTn = Tmp(NN+1:2*NN, 1:NN);
142 HhnT0 = Tmp(NN+1:2*NN, NN+1:2*NN);
143
144 NNkn1 = size(Lv{kn+1}, 1);
145 Yn = HTn0 + HTnn * ((s*eye(NNkn1) - Lv{kn+1} - F{kn+1}*SY{kn+1} - B{kn}*HhTnn) \ (B{kn} * HhTn0));
146 else
147 d2 = n - T(kn);
148 num = [mxpow(Ghs{kn}, d2-1), Gs{kn}; Ghs{kn}, mxpow(Gs{kn}, d2-1)];
149 den = [II, mxpow(Gs{kn}, d2); mxpow(Ghs{kn}, d2), II];
150 Tmp = num / den;
151 HnTn = Tmp(1:NN, 1:NN);
152 HnT0 = Tmp(1:NN, NN+1:2*NN);
153 HhnTn = Tmp(NN+1:2*NN, 1:NN);
154 HhnT0 = Tmp(NN+1:2*NN, NN+1:2*NN);
155 HTnn = []; HTn0 = []; HhTnn = []; HhTn0 = [];
156 Yn = Gs{kn};
157 end
158
159 if kn == 1
160 Yhn = HhnTn + HhnT0 * ((s*eye(NN1) - Lv{1} - F{1}*HnT0) \ (F{1} * HnTn));
161 else
162 NNkn = size(Lv{kn}, 1);
163 Yhn = HhnTn + HhnT0 * ((s*eye(NNkn) - Lv{kn} - B{kn-1}*SYh{kn-1} - F{kn}*HnT0) \ (F{kn} * HnTn));
164 end
165
166 Mkn = s*eye(size(L{kn},1)) - L{kn};
167 if T(km) < n
168 Vnl = (Mkn - B{kn}*HhnTn - F{kn}*Yn) \ (B{kn} * HhnT0 * SV{kn, km});
169 else
170 Vnl = (Mkn - F{kn}*HTn0 - B{kn}*Yhn) \ (F{kn} * HTnn * SV{kn+1, km});
171 end
172 if m == T(km)
173 V = Vnl;
174 return;
175 end
176
177 Vnu = [];
178 if km < K
179 if T(km+1) < n
180 Vnu = (Mkn - B{kn}*HhnTn - F{kn}*Yn) \ (B{kn} * HhnT0 * SV{kn, km+1});
181 else
182 Vnu = (Mkn - F{kn}*HTn0 - B{kn}*Yhn) \ (F{kn} * HTnn * SV{kn+1, km+1});
183 end
184 end
185 Vnn = (s*II - L{kn} - B{kn}*Yhn - F{kn}*Yn) \ II;
186 if n == m
187 V = Vnn;
188 return;
189 end
190 if km == K && n < m
191 if kn < K
192 V = Vnl * mxpow(Rs{km}, m - T(km));
193 else
194 V = Vnn * mxpow(Rs{km}, m - n);
195 end
196 return;
197 end
198 if kn ~= km
199 Vu = Vnu; Vl = Vnl; Lu = T(km+1); Ll = T(km);
200 elseif n <= m
201 Vu = Vnu; Vl = Vnn; Lu = T(km+1); Ll = n;
202 else
203 Vu = Vnn; Vl = Vnl; Lu = n; Ll = T(km);
204 end
205 end
206
207 if km == K && n < m
208 if kn < K
209 V = Vl * mxpow(Rs{km}, m - T(km));
210 else
211 V = SV{kn, kn} * mxpow(Rs{km}, m - n);
212 end
213 return;
214 end
215
216 NN = size(Rs{km}, 1);
217 II = eye(NN);
218 Zden = [II, mxpow(Rs{km}, Lu-Ll); mxpow(Rhs{km}, Lu-Ll), II];
219 Znum = [mxpow(Rs{km}, m-Ll); mxpow(Rhs{km}, Lu-m)];
220 Z = Zden \ Znum;
221 V = Vl * Z(1:NN, :) + Vu * Z(NN+1:2*NN, :);
222end
Definition Station.m:245