Package jline.api.mc

Class Ctmc_fau

java.lang.Object
jline.api.mc.Ctmc_fau

public final class Ctmc_fau extends Object
  • Field Details

  • Method Details

    • ctmc_fau

      public static Ctmc_fau.CtmcFauResult ctmc_fau(Matrix pi0, Matrix Q, double t)
      Return the transient distribution of the CTMC at time t by fast adaptive uniformization, at the default tolerances.
      Parameters:
      pi0 - Initial distribution of the CTMC
      Q - Infinitesimal generator of the CTMC
      t - 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 CTMC
      Q - Infinitesimal generator of the CTMC
      t - Transient analysis period boundary [0,t]
      epsilon - Birth-process truncation tolerance
      delta - Occupancy threshold below which a state is dropped
      maxsteps - Cap on birth steps; nonpositive for the default cap
      Returns:
      Distribution at time t with its error diagnostics