LINE Solver (C++)
Templated C++ port of the LINE queueing solver
Loading...
Searching...
No Matches
solver_mam_transient_qbd.h File Reference

Transient analysis of a single-class open queue by the Laplace-domain transient QBD plus numerical inverse Laplace, the port of matlab/src/solvers/MAM/solver_mam_transient_qbd.m. More...

#include <algorithm>
#include <cmath>
#include <complex>
#include <cstddef>
#include <vector>
#include "line/api/mam/mam_transient2.h"
#include "line/api/mam/map_moment.h"
#include "line/api/mam/matlab_ilt.h"
#include "line/lang/distribution.h"
#include "line/lang/qn/network_struct.h"
#include "line/num/complex_number.h"
#include "line/solvers/mam/mam_types.h"
#include "line/solvers/mam/solver_mam_ldqbd_transient.h"
#include "line/util/error.h"
#include "line/util/linalg.h"
#include "line/util/matrix.h"
Include dependency graph for solver_mam_transient_qbd.h:

Go to the source code of this file.

Namespaces

namespace  line
namespace  line::mam

Functions

template<class T>
TranResult< T > line::mam::solver_mam_transient_qbd (const qn::NetworkStruct< T > &L, const MamOptions &opt)
 Port of solver_mam_transient_qbd.m.

Detailed Description

Transient analysis of a single-class open queue by the Laplace-domain transient QBD plus numerical inverse Laplace, the port of matlab/src/solvers/MAM/solver_mam_transient_qbd.m.

Covers MAP/MAP/1 (infinite buffer) and MAP/MAP/1/N (finite buffer): arrival and service are both read as (D0,D1) MAPs, so M/M/1, M/PH/1 and correlated arrival or service all go through the same construction. That is exactly the set the expm / libQBD fast path in solver_mam_ldqbd_transient cannot represent, which is why mam_transient_qbd_applicable routes here.

The level-to-level transform V(s,0,m) comes from mam_transient2_open (infinite) or mam_transient2 (finite) and is inverted per metric with the CME-based numerical inverse Laplace transform.

WHY THE INFINITE BRANCH IS EXACT RATHER THAN TRUNCATED. Above the boundary the chain is homogeneous, so V(s,0,m) = V(s,0,1) R^(m-1) for m >= 1 and the level sums close in closed form:

E[N](s) = pi0 V(s,0,1) (I-R)^-2 e
Tput(s) = pi0 V(s,0,1) (I-R)^-1 wDep
P0(s)   = pi0 V(s,0,0) e

so no level truncation enters the infinite-buffer answer at all.

ARITHMETIC. Double only. The transform is evaluated at complex quadrature nodes and the inversion weights are transcendental, so an exact instantiation refuses by name.

Definition in file solver_mam_transient_qbd.h.