Class Ctmc_fau
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final classTransient distribution of a fast adaptive uniformization sweep, together with the diagnostics that make its error auditable. -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intDefault cap on the number of birth steps, so a pathological horizon fails loudly throughCtmc_fau.CtmcFauResult.truncatedrather than running forever. -
Method Summary
Modifier and TypeMethodDescriptionstatic Ctmc_fau.CtmcFauResultReturn the transient distribution of the CTMC at time t by fast adaptive uniformization, at the default tolerances.static Ctmc_fau.CtmcFauResultReturn the transient distribution of the CTMC at time t by fast adaptive uniformization.
-
Field Details
-
FAU_MAX_STEPS
public static final int FAU_MAX_STEPSDefault cap on the number of birth steps, so a pathological horizon fails loudly throughCtmc_fau.CtmcFauResult.truncatedrather than running forever.- See Also:
-
-
Method Details
-
ctmc_fau
Return the transient distribution of the CTMC at time t by fast adaptive uniformization, at the default tolerances.- Parameters:
pi0- Initial distribution of the CTMCQ- Infinitesimal generator of the CTMCt- Transient analysis period boundary [0,t]- Returns:
- Distribution at time t with its error diagnostics
-
ctmc_fau
public static Ctmc_fau.CtmcFauResult ctmc_fau(Matrix pi0, Matrix Q, double t, double epsilon, double delta, int maxsteps) Return the transient distribution of the CTMC at time t by fast adaptive uniformization.Ordinary uniformization fixes one rate q >= max_i |q_ii| over the whole state space and mixes the powers of P = I + Q/q against a Poisson(q*t) law, so its cost is set by the fastest state anywhere, including states that carry no probability at time t. Adaptive uniformization instead picks a rate per step from the states the iterate occupies,
Lambda_n >= max{|q_ii| : i in supp(u^(n))}, u^(n+1) = u^(n)(I + Q/Lambda_n),which keeps every entry of u^(n+1) nonnegative. The subordinating process is then the pure birth process N(t) with rates Lambda_0, Lambda_1, ... and pi(t) = sum_n P{N(t) = n} u^(n). The fast variant drops an entry below delta rather than propagating it, so the support tracks the states of non-negligible occupancy instead of the reachable set.
Nothing is renormalized anywhere, so the error is not estimated but measured: the birth index truncated at K, the Poisson window of the weight computation and the delta threshold each remove mass and none puts any back, whence 0 <= pi(t) - pit componentwise and |pi(t) - pit|_1 = sum(pi0) - sum(pit) = errorBound.
The birth weights are exact rather than quadratured: the rates generate a bidiagonal generator on the birth index plus one absorbing overflow index, and its transient distribution is obtained by uniformizing that scalar chain at Lstar = max_n Lambda_n and applying the Fox-Glynn weights. The sweep runs twice because b_n(t) needs the rates up to n, which are not known before the sweep ends, while u^(n) is needed after them, and storing every iterate would cost K times the support. Stopping is certified by the stochastic domination of the birth epochs by an Erlang, so this method never takes more steps than uniformization at the largest rate it visited.
This is a transient method: it produces no stationary distribution.
- Parameters:
pi0- Initial distribution of the CTMCQ- Infinitesimal generator of the CTMCt- Transient analysis period boundary [0,t]epsilon- Birth-process truncation tolerancedelta- Occupancy threshold below which a state is droppedmaxsteps- Cap on birth steps; nonpositive for the default cap- Returns:
- Distribution at time t with its error diagnostics
-