4 % @brief Bard-Schweitzer Approximate Mean Value Analysis (MVA).
8function [XN,QN,UN,RN,it]=pfqn_bs(L,N,Z,tol,maxiter,QN0,type)
11 % @brief Bard-Schweitzer Approximate Mean Value Analysis (MVA).
12 % @fn pfqn_bs(L, N, Z, tol, maxiter, QN0, type)
13 % @param L Service demand matrix.
14 % @param N Population vector.
15 % @param Z Think time vector.
16 % @param tol Tolerance
for convergence.
17 % @param maxiter Maximum number of iterations.
18 % @param QN0 Initial guess
for queue lengths.
19 % @param type Scheduling strategy type (
default: PS).
20 % @return XN System throughput.
21 % @return QN Mean queue lengths.
22 % @return UN Utilization.
23 % @return RN Residence times.
24 % @return it Number of iterations performed.
27% [XN,QN,UN,RN]=PFQN_BS(L,N,Z,TOL,MAXITER,QN)
29if nargin<3%~exist(
'Z',
'var')
32if nargin<4%~exist(
'tol',
'var')
35if nargin<5%~exist('maxiter','var')
41if nargin<6 || isempty(QN0) %~exist('QN','var')
47 type = SchedStrategy.PS * ones(M,1);
58 % 0 service demand at this station => this class does not visit the current node
63 if type(ist) == SchedStrategy.FCFS
64 CN(ist,r) = CN(ist,r) + L(ist,s)*QN(ist,s);
66 CN(ist,r) = CN(ist,r) + L(ist,r)*QN(ist,s);
69 CN(ist,r) = CN(ist,r) + L(ist,r)*QN(ist,r)*(N(r)-1)/N(r);
73 XN(r) = N(r)/(Z(r)+sum(CN(:,r)));
77 QN(ist,r) = XN(r)*CN(ist,r);
82 UN(ist,r) = XN(r)*L(ist,r);
85 if max(abs(1-QN./QN_1)) < tol
89RN = QN ./ repmat(XN,M,1);