3 % @file pfqn_mmint2_gausslaguerre.m
4 % @brief McKenna-Mitra integral with Gauss-Laguerre quadrature.
10 % @brief McKenna-Mitra integral with Gauss-Laguerre quadrature.
11 % @fn pfqn_mmint2_gausslaguerre(L, N, Z, m)
12 % @param L Service demand vector.
13 % @param N Population vector.
14 % @param Z Think time vector.
15 % @param m Replication factor (
default: 1).
16 % @return G Normalizing constant.
17 % @return lG Logarithm of normalizing constant.
20function [G,lG]= pfqn_mmint2_gausslaguerre(L,N,Z,m)
21% [G,LOGG] = PFQN_MMINT2_GAUSSLAGUERRE(L,N,Z,m)
23% Integrate with Gauss-Laguerre
29persistent gausslaguerreNodes;
30persistent gausslaguerreWeights;
32if isempty(gausslaguerreNodes)
33 [gausslaguerreNodes, gausslaguerreWeights] = load_gausslaguerre_data();
36x = gausslaguerreNodes;
37w = gausslaguerreWeights;
44 F(i) = F(i) + N(r) * log(Z(r)+L(r)*x(i));
48g = log(w) + F - sum(factln(N))- factln(m-1);
50if ~isfinite(lG) %
if numerical difficulties
switch to logsumexp trick
56function [
nodes, weights] = load_gausslaguerre_data()
57if coder.target('MATLAB')
58 data = load('gausslaguerre-data.mat', 'gausslaguerreNodes', 'gausslaguerreWeights');
60 data = coder.load('gausslaguerre-data.mat', 'gausslaguerreNodes', 'gausslaguerreWeights');
62nodes = data.gausslaguerreNodes;
63weights = data.gausslaguerreWeights;