4 % @brief Laplace approximation
for normalizing constant.
10 % @brief Laplace approximation
for normalizing constant.
11 % @fn pfqn_lap(L, N, Z)
12 % @param L Service demand matrix.
13 % @param N Population vector.
14 % @param Z Think time vector.
15 % @
return logI Logarithm of normalizing constant approximation.
18function [logI] = pfqn_lap(L,N,Z)
19% [LOGI] = PFQN_LAP(L,N,Z)
21if ~isvector(L) || numel(L)~=numel(N)
22 line_error(mfilename,
'pfqn_lap expects per-class vectors for a single queueing station (repairman models): L, N, Z must be 1xR.');
24L = L(:)
'; N = N(:)'; Z = Z(:)
';
26% f = @(x) 1-x + sum((N+x*L)./(Z+x*L));
28% logIv = log(Ntot) - sum(factln(N)); % coeff
29% logIv = logIv - + sum(N.*log(Z+L.*expv0)); % f(u0)
30% logIv = logIv + 0.5*log(2*pi) - 0.5*log(sum((N./Ntot)./(Z./(Ntot.*L)+u0).^2)) ; % f''(u0)
31% logIv = logIv - 0.5*log(Ntot);
34f = @(x) 1-sum(N.*L./(Z+Ntot*L.*x));
35u0 = fzero(f,1,optimset('Display
','off
'));
40% f2 = sum((N./Ntot)./(Z./(Ntot.*L)+u0).^2);
41% logI = log(1-normcdf(0,u0,f2));
45 initSign = f(0.001)/abs(f(0.001));
48 if fu0/abs(fu0) ~= initSign
57logI = log(Ntot) - sum(factln(N)); % coeff
58logI = logI - Ntot*u0 + sum(N.*log(Z+L.*u0*Ntot)); % f(u0)
59logI = logI + 0.5*log(2*pi) - 0.5*log(sum((N./Ntot)./(Z./(Ntot.*L)+u0).^2)) ; % f''(u0)
60logI = logI - 0.5*log(Ntot);
62% absf2 = sum((N./Ntot)./(Z./(Ntot.*L)+u0).^2); % |f''(u0)|
63% f2 = sum((N./Ntot)./(Z./(Ntot.*L)+u0).^2);
64% f3 = -2 * sum((N./Ntot)./(Z./(Ntot.*L)+u0).^3);
65% f4 = 6 * sum((N./Ntot)./(Z./(Ntot.*L)+u0).^4);
67% logI3 = log(Ntot) - sum(factln(N)); % coeff
68% logI3 = logI3 - Ntot*u0 + sum(N.*log(Z+L.*u0*Ntot)); % f(u0)
69% logI3 = logI3 + (1/2)*log(2*pi/absf2) - (3/2)*log(Ntot);
70% logI3 = logI3 + log(f4/(8*f2^2) - 5*f3^2/(24*f2^3));