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

Derivatives at the origin of a MAP's complementary CDF and of its joint inter-arrival density. More...

#include <cstddef>
#include <vector>
#include "line/api/mam/map_moment.h"
#include "line/num/number.h"
#include "line/util/error.h"
#include "line/util/linalg.h"
#include "line/util/matrix.h"
Include dependency graph for map_joint_derivative.h:

Go to the source code of this file.

Namespaces

namespace  line
namespace  line::mam

Functions

template<class T>
line::mam::map_ccdf_derivative (const Map< T > &m, unsigned i)
 Derivative of order i at 0 of the MAP's complementary CDF, nu = pie D0^i e.
template<class T>
line::mam::map_jointpdf_derivative (const Map< T > &m, const std::vector< unsigned > &iset)
 Mixed partial derivative at the origin of the joint density of consecutive inter-arrival times, gamma = pie prod_j (D0^{i_j} D1) e.

Detailed Description

Derivatives at the origin of a MAP's complementary CDF and of its joint inter-arrival density.

Templated port of matlab/src/api/mam/map_ccdf_derivative.m and matlab/src/api/mam/map_jointpdf_derivative.m. Both are the building blocks of the joint-moment analysis of networks of MAP/MAP/1 queues in A. Horvath, G. Horvath, M. Telek, "A Joint Moments Based Analysis of Networks of MAP/MAP/1 Queues".

The CCDF of the inter-arrival time of a MAP is F^c(t) = pie exp(D0 t) e, so its i-th derivative at 0 is

nu_i = pie D0^i e.

The joint density of a run of consecutive inter-arrival times is f(t_1,...,t_k) = pie exp(D0 t_1) D1 ... exp(D0 t_k) D1 e, so the mixed partial derivative of orders (i_1,...,i_k) at the origin is

gamma = pie (D0^{i_1} D1) (D0^{i_2} D1) ... (D0^{i_k} D1) e.

ARITHMETIC. Both are finite products of the descriptor matrices with the embedded arrival vector pie, which is itself a linear solve, so the whole computation is rational in the entries of D0 and D1. Neither is gated: they instantiate at Rational, where the derivatives come out as exact fractions. That matters here because these derivatives alternate in sign and grow like i! ||D0||^i, so at double a moderately stiff MAP loses most of its significant digits by i = 6, and only the exact instantiation can tell a genuine near-cancellation from an accumulation of rounding.

Definition in file map_joint_derivative.h.