LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
pfqn_mmint2_gausslaguerre.m
1%{
2%{
3 % @file pfqn_mmint2_gausslaguerre.m
4 % @brief McKenna-Mitra integral with Gauss-Laguerre quadrature.
5%}
6%}
7
8%{
9%{
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.
18%}
19%}
20function [G,lG]= pfqn_mmint2_gausslaguerre(L,N,Z,m)
21% [G,LOGG] = PFQN_MMINT2_GAUSSLAGUERRE(L,N,Z,m)
22%
23% Integrate with Gauss-Laguerre
24
25if nargin<4
26 m=1;
27end
28
29persistent gausslaguerreNodes;
30persistent gausslaguerreWeights;
31
32if isempty(gausslaguerreNodes)
33 [ gausslaguerreNodes,gausslaguerreWeights ] = gengausslegquadrule(300,10^-5);
34end
35
36lambda = 0*N;
37nonzeroClasses = find(N);
38
39% repairmen integration
40f= @(u) N(nonzeroClasses)*log(Z(nonzeroClasses)+L(nonzeroClasses)*u)';
41x = gausslaguerreNodes;
42w = gausslaguerreWeights;
43n = min(300,2*sum(N)+1);
44F = zeros(size(x));
45for i=1:length(x)
46 F(i)=(m-1)*log(x(i))+f(x(i));
47end
48g = log(w) + F - sum(factln(N))- factln(m-1);
49lG = log(sum(exp(g)));
50if ~isfinite(lG) % if numerical difficulties switch to logsumexp trick
51 lG = logsumexp(g);
52end
53G = exp(lG);
54end