1function [W, Wq, U, Q] = qsys_mxm1(lambda_batch, mu, E_X, E_X2_or_Var_X, varargin)
2% QSYS_MXM1 - MX/M/1 queue with batch arrivals
4% [W, Wq, U, Q] = QSYS_MXM1(LAMBDA_BATCH, MU, E_X, E_X2)
5% [W, Wq, U, Q] = QSYS_MXM1(LAMBDA_BATCH, MU, BATCH_SIZES, PMF)
7% Analytical solution
for MX/M/1 queueing system with batch Markovian arrivals
8% and exponential service.
11% 1. Moment-based: qsys_mxm1(lambda_batch, mu, E_X, E_X2)
12% - lambda_batch: Batch arrival rate
14% - E_X: Mean batch size
15% - E_X2: Second moment of batch size
17% 2. PMF-based: qsys_mxm1(lambda_batch, mu, batch_sizes, pmf)
18% - lambda_batch: Batch arrival rate
20% - batch_sizes: Array of batch sizes (e.g., [1, 2, 4, 8])
21% - pmf: Probability mass function
for batch sizes
23% 3. Variance-based: qsys_mxm1(lambda_batch, mu, E_X, Var_X,
'variance')
24% - lambda_batch: Batch arrival rate
26% - E_X: Mean batch size
27% - Var_X: Variance of batch size
28% -
'variance': Flag to indicate variance mode
31% W - Mean time in system
32% Wq - Mean waiting time in queue
33% U - Server utilization
34% Q - Mean queue length (including service)
36% The formula accounts
for both queueing delay and internal batch delay:
37% Wq = rho/(mu*(1-rho)) + (E[X²] - E[X])/(2*mu*E[X]*(1-rho))
38% ^M/M/1 term ^Internal batch delay
40% Copyright (c) 2012-2026, Imperial College London
43% Determine which input format
is used
44if nargin >= 5 && ischar(varargin{1}) && strcmpi(varargin{1},
'variance')
45 % Format 3: Variance-based
47 Var_X = E_X2_or_Var_X;
49elseif nargin == 4 && isvector(E_X) && length(E_X) > 1
50 % Format 2: PMF-based (E_X
is actually batch_sizes, E_X2_or_Var_X
is pmf)
55 if length(batch_sizes) ~= length(pmf)
56 line_error(mfilename,
'Batch sizes and PMF must have the same length');
63 E_X = sum(batch_sizes .* pmf);
64 E_X2 = sum(batch_sizes.^2 .* pmf);
66 % Format 1: Moment-based (
default)
70% Compute effective job arrival rate
71lambda = lambda_batch * E_X;
76% Check stability condition
78 line_error(mfilename, sprintf(
'System is unstable: rho = %.6f >= 1', rho));
81% Mean waiting time in queue includes:
82% 1. M/M/1 queueing delay: rho/(mu*(1-rho))
83% 2. Internal batch delay: (E[X²] - E[X])/(2*mu*E[X]*(1-rho))
84Wq = rho / (mu * (1 - rho)) + (E_X2 - E_X) / (2 * mu * E_X * (1 - rho));
92% Mean queue length (Little
's Law)