changeset 9991:88af7493d626 octave-forge

improved documentation
author mmarzolla
date Mon, 09 Apr 2012 12:50:58 +0000
parents 4b1a8882cdc3
children 3dae0b025ccb
files main/queueing/doc/gettingstarted.txi main/queueing/doc/markovchains.txi main/queueing/doc/munge-texi.m main/queueing/doc/queueing.html main/queueing/doc/queueing.pdf main/queueing/doc/queueing.texi main/queueing/doc/queueingnetworks.txi main/queueing/doc/references.txi
diffstat 8 files changed, 1056 insertions(+), 1216 deletions(-) [+]
line wrap: on
line diff
--- a/main/queueing/doc/gettingstarted.txi	Sun Apr 08 20:54:02 2012 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,316 +0,0 @@
-@c -*- texinfo -*-
-
-@c Copyright (C) 2008, 2009, 2010, 2011, 2012 Moreno Marzolla
-@c
-@c This file is part of the queueing toolbox, a Queueing Networks
-@c analysis package for GNU Octave.
-@c
-@c The queueing toolbox is free software; you can redistribute it
-@c and/or modify it under the terms of the GNU General Public License
-@c as published by the Free Software Foundation; either version 3 of
-@c the License, or (at your option) any later version.
-@c
-@c The queueing toolbox is distributed in the hope that it will be
-@c useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-@c of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-@c GNU General Public License for more details.
-@c
-@c You should have received a copy of the GNU General Public License
-@c along with the queueing toolbox; see the file COPYING.  If not, see
-@c <http://www.gnu.org/licenses/>.
-
-@node Getting Started
-@chapter Introduction and Getting Started
-
-@menu
-* Analysis of Closed Networks::
-* Analysis of Open Networks::
-@end menu
-
-In this chapter we give some usage examples of the @code{queueing}
-package. The reader is assumed to be familiar with Queueing Networks
-(although some basic terminology and notation will be given
-here). Additional usage examples are embedded in most of the function
-files; to display and execute the demos associated with function
-@emph{fname} you can type @command{demo @emph{fname}} at the Octave
-prompt. For example
-
-@example
-@kbd{demo qnclosed}
-@end example
-
-@noindent executes all demos (if any) for the @command{qnclosed} function.
-
-@node Analysis of Closed Networks
-@section Analysis of Closed Networks
-
-Let us consider a simple closed network with @math{K=3} service
-centers. Each center is of type @math{M/M/1}--FCFS. We denote with
-@math{S_i} the average service time at center @math{i}, @math{i=1, 2,
-3}. Let @math{S_1 = 1.0}, @math{S_2 = 2.0} and @math{S_3 = 0.8}. The
-routing of jobs within the network is described with a @emph{routing
-probability matrix} @math{P}. Specifically, a request completing
-service at center @math{i} is enqueued at center @math{j} with
-probability @math{P_{i, j}}.  Let us assume the following routing
-probability matrix:
-
-@iftex
-@tex
-$$
-P = \pmatrix{ 0 & 0.3 & 0.7 \cr
-              1 & 0 & 0 \cr
-              1 & 0 & 0 }
-$$
-@end tex
-@end iftex
-@ifnottex
-@example
-    [ 0  0.3  0.7 ] 
-P = [ 1  0    0   ]
-    [ 1  0    0   ]
-@end example
-@end ifnottex
-
-For example, according to matric @math{P} a job completing service at
-center 1 is routed to center 2 with probability 0.3, and is routed to
-center 3 with probability 0.7.
-
-The network above can be analyzed with the @command{qnclosed}
-function; if there is just a single class of requests, as in the
-example above, @command{qnclosed} calls @command{qnclosedsinglemva}
-which implements the Mean Value Analysys (MVA) algorithm for
-single-class, product-form network.
-
-@command{qnclosed} requires the following parameters:
-
-@table @var
-
-@item N
-Number of requests in the network (since we are considering a closed
-network, the number of requests is fixed)
-
-@item S
-Array of average service times at the centers: @code{@var{S}(k)} is
-the average service time at center @math{k}.
-
-@item V
-Array of visit ratios: @code{@var{V}(k)} is the average number of
-visits to center @math{k}.
-
-@end table
-
-As can be seen, we must compute the @emph{visit ratios} (or visit
-counts) @math{V_k} for each center @math{k}. The visit counts satisfy
-the following equations:
-
-@iftex
-@tex
-$$
-V_j = \sum_{i=1}^K V_i P_{i, j}
-$$
-@end tex
-@end iftex
-@ifnottex
-@example     
-V_j = sum_i V_i P_ij
-@end example
-@end ifnottex
-
-We can compute @math{V_k} from the routing probability matrix
-@math{P_{i, j}} using the @command{qnvisits} function:
-
-@example
-@group
-@kbd{P = [0 0.3 0.7; 1 0 0; 1 0 0];}
-@kbd{V = qnvisits(P)}
-   @result{} V = 1.00000 0.30000 0.70000
-@end group
-@end example
-
-We can check that the computed values satisfy the above equation by
-evaluating the following expression:
-
-@example
-@kbd{V*P}
-     @result{} ans = 1.00000 0.30000 0.70000
-@end example
-
-@noindent which is equal to @math{V}.
-Hence, we can analyze the network for a given population size @math{N}
-(for example, @math{N=10}) as follows:
-
-@example
-@group
-@kbd{N = 10;}
-@kbd{S = [1 2 0.8];}
-@kbd{P = [0 0.3 0.7; 1 0 0; 1 0 0];}
-@kbd{V = qnvisits(P);}
-@kbd{[U R Q X] = qnclosed( N, S, V )}
-   @result{} U = 0.99139 0.59483 0.55518 
-   @result{} R = 7.4360  4.7531  1.7500 
-   @result{} Q = 7.3719  1.4136  1.2144 
-   @result{} X = 0.99139 0.29742 0.69397 
-@end group
-@end example
-
-The output of @command{qnclosed} includes the vector of utilizations
-@math{U_k} at center @math{k}, response time @math{R_k}, average
-number of customers @math{Q_k} and throughput @math{X_k}. In our
-example, the throughput of center 1 is @math{X_1 = 0.99139}, and the
-average number of requests in center 3 is @math{Q_3 = 1.2144}. The
-utilization of center 1 is @math{U_1 = 0.99139}, which is the higher
-value among the service centers. Tus, center 1 is the @emph{bottleneck
-device}.
-
-This network can also be analyzed with the @command{qnsolve}
-function. @command{qnsolve} can handle open, closed or mixed networks,
-and allows the network to be described in a very flexible way.  First,
-let @var{Q1}, @var{Q2} and @var{Q3} be the variables describing the
-service centers. Each variable is instantiated with the
-@command{qnmknode} function.
-
-@example
-@group
-@kbd{Q1 = qnmknode( "m/m/m-fcfs", 1 );}
-@kbd{Q2 = qnmknode( "m/m/m-fcfs", 2 );}
-@kbd{Q3 = qnmknode( "m/m/m-fcfs", 0.8 );}
-@end group
-@end example
-
-The first parameter of @command{qnmknode} is a string describing the
-type of the node. Here we use @code{"m/m/m-fcfs"} to denote a
-@math{M/M/m}--FCFS center. The second parameter gives the average
-service time. An optional third parameter can be used to specify the
-number @math{m} of service centers. If omitted, it is assumed
-@math{m=1} (single-server node).
-
-Now, the network can be analyzed as follows:
-
-@example
-@group
-@kbd{N = 10;}
-@kbd{V = [1 0.3 0.7];}
-@kbd{[U R Q X] = qnsolve( "closed", N, @{ Q1, Q2, Q3 @}, V )}
-   @result{} U = 0.99139 0.59483 0.55518 
-   @result{} R = 7.4360  4.7531  1.7500 
-   @result{} Q = 7.3719  1.4136  1.2144 
-   @result{} X = 0.99139 0.29742 0.69397 
-@end group
-@end example
-
-Of course, we get exactly the same results. Other functions can be used
-for closed networks, @pxref{Algorithms for Product-Form QNs}.
-
-@node Analysis of Open Networks
-@section Analysis of Open Networks
-
-Open networks can be analyzed in a similar way. Let us consider
-an open network with @math{K=3} service centers, and routing
-probability matrix as follows:
-
-@iftex
-@tex
-$$
-P = \pmatrix{ 0 & 0.3 & 0.5 \cr
-              1 & 0 & 0 \cr
-              1 & 0 & 0 }
-$$
-@end tex
-@end iftex
-@ifnottex
-@example
-    [ 0  0.3  0.5 ]
-P = [ 1  0    0   ]
-    [ 1  0    0   ]
-@end example
-@end ifnottex
-
-In this network, requests can leave the system from center 1 with
-probability @math{(1-(0.3+0.5) = 0.2}. We suppose that external jobs
-arrive at center 1 with rate @math{\lambda_1 = 0.15}; there are no
-arrivals at centers 2 and 3.
-
-Similarly to closed networks, we first need to compute the visit
-counts @math{V_k} to center @math{k}. Again, we use the
-@command{qnvisits} function as follows:
-
-@example
-@group
-@kbd{P = [0 0.3 0.5; 1 0 0; 1 0 0];}
-@kbd{lambda = [0.15 0 0];}
-@kbd{V = qnvisits(P, lambda)}
-   @result{} V = 5.00000 1.50000 2.50000
-@end group
-@end example
-
-@noindent where @code{@var{lambda}(k)} is the arrival rate at center @math{k},
-and @var{P} is the routing matrix. The visit counts @math{V_k} for
-open networks satisfy the following equation:
-
-@iftex
-@tex
-$$
-V_j = P_{0, j} + \sum_{i=1}^K V_i P_{i, j}
-$$
-@end tex
-@end iftex
-@ifnottex
-@example
-V_j = sum_i V_i P_ij
-@end example
-@end ifnottex
-
-where @math{P_{0, j}} is the probability of an external arrival to
-center @math{j}. This can be computed as:
-
-@tex
-$$
-P_{0, j} = {\lambda_j  \over \sum_{i=1}^K \lambda_i }
-$$
-@end tex
-
-Assuming the same service times as in the previous example, the
-network can be analyzed with the @command{qnopen} function, as
-follows:
-
-@example
-@group
-@kbd{S = [1 2 0.8];}
-@kbd{[U R Q X] = qnopen( sum(lambda), S, V )}
-   @result{} U = 0.75000 0.45000 0.30000 
-   @result{} R = 4.0000  3.6364  1.1429
-   @result{} Q = 3.00000 0.81818 0.42857
-   @result{} X = 0.75000 0.22500 0.37500 
-@end group
-@end example
-
-The first parameter of the @command{qnopen} function is the (scalar)
-aggregate arrival rate.
-
-Again, it is possible to use the @command{qnsolve} high-level function:
-
-@example
-@group
-@kbd{Q1 = qnmknode( "m/m/m-fcfs", 1 );}
-@kbd{Q2 = qnmknode( "m/m/m-fcfs", 2 );}
-@kbd{Q3 = qnmknode( "m/m/m-fcfs", 0.8 );}
-@kbd{lambda = [0.15 0 0];}
-@kbd{[U R Q X] = qnsolve( "open", sum(lambda), @{ Q1, Q2, Q3 @}, V )}
-   @result{} U = 0.75000 0.45000 0.30000 
-   @result{} R = 4.0000  3.6364  1.1429
-   @result{} Q = 3.00000 0.81818 0.42857
-   @result{} X = 0.75000 0.22500 0.37500 
-@end group
-@end example
-
-@c @node Markov Chains Analysis
-@c @section Markov Chains Analysis
-
-@c @subsection Discrete-Time Markov Chains
-
-@c (TODO)
-
-@c @subsection Continuous-Time Markov Chains
-
-@c (TODO)
-
--- a/main/queueing/doc/markovchains.txi	Sun Apr 08 20:54:02 2012 +0000
+++ b/main/queueing/doc/markovchains.txi	Mon Apr 09 12:50:58 2012 +0000
@@ -139,8 +139,8 @@
 
 @noindent @strong{EXAMPLE}
 
-This example is from [GrSn97]. Let us consider a maze with nine rooms,
-as shown in the following figure
+This example is from @ref{GrSn97}. Let us consider a maze with nine
+rooms, as shown in the following figure
 
 @example
 @group
--- a/main/queueing/doc/munge-texi.m	Sun Apr 08 20:54:02 2012 +0000
+++ b/main/queueing/doc/munge-texi.m	Mon Apr 09 12:50:58 2012 +0000
@@ -40,7 +40,7 @@
   ## Texinfo crashes if @end tex does not appear first on the line.
   text = regexprep (text, '^ +@end tex', '@end tex', 'lineanchors');
   
-  printf("%s\n", text);
+  printf("@anchor{doc-%s}\n%s\n", func, text);
 endfunction
 
 ##############################################################################
--- a/main/queueing/doc/queueing.html	Sun Apr 08 20:54:02 2012 +0000
+++ b/main/queueing/doc/queueing.html	Mon Apr 09 12:50:58 2012 +0000
@@ -52,69 +52,66 @@
 <li><a href="#Development-sources">2.3 Development sources</a>
 <li><a href="#Using-the-queueing-toolbox">2.4 Using the queueing toolbox</a>
 </li></ul>
-<li><a name="toc_Getting-Started" href="#Getting-Started">3 Introduction and Getting Started</a>
+<li><a name="toc_Markov-Chains" href="#Markov-Chains">3 Markov Chains</a>
 <ul>
-<li><a href="#Analysis-of-Closed-Networks">3.1 Analysis of Closed Networks</a>
-<li><a href="#Analysis-of-Open-Networks">3.2 Analysis of Open Networks</a>
-</li></ul>
-<li><a name="toc_Markov-Chains" href="#Markov-Chains">4 Markov Chains</a>
-<ul>
-<li><a href="#Discrete_002dTime-Markov-Chains">4.1 Discrete-Time Markov Chains</a>
+<li><a href="#Discrete_002dTime-Markov-Chains">3.1 Discrete-Time Markov Chains</a>
 <ul>
-<li><a href="#State-occupancy-probabilities-_0028DTMC_0029">4.1.1 State occupancy probabilities</a>
-<li><a href="#Birth_002ddeath-process-_0028DTMC_0029">4.1.2 Birth-death process</a>
-<li><a href="#Expected-number-of-visits-_0028DTMC_0029">4.1.3 Expected Number of Visits</a>
-<li><a href="#Time_002daveraged-expected-sojourn-times-_0028DTMC_0029">4.1.4 Time-averaged expected sojourn times</a>
-<li><a href="#Mean-time-to-absorption-_0028DTMC_0029">4.1.5 Mean Time to Absorption</a>
-<li><a href="#First-passage-times-_0028DTMC_0029">4.1.6 First Passage Times</a>
+<li><a href="#State-occupancy-probabilities-_0028DTMC_0029">3.1.1 State occupancy probabilities</a>
+<li><a href="#Birth_002ddeath-process-_0028DTMC_0029">3.1.2 Birth-death process</a>
+<li><a href="#Expected-number-of-visits-_0028DTMC_0029">3.1.3 Expected Number of Visits</a>
+<li><a href="#Time_002daveraged-expected-sojourn-times-_0028DTMC_0029">3.1.4 Time-averaged expected sojourn times</a>
+<li><a href="#Mean-time-to-absorption-_0028DTMC_0029">3.1.5 Mean Time to Absorption</a>
+<li><a href="#First-passage-times-_0028DTMC_0029">3.1.6 First Passage Times</a>
 </li></ul>
-<li><a href="#Continuous_002dTime-Markov-Chains">4.2 Continuous-Time Markov Chains</a>
+<li><a href="#Continuous_002dTime-Markov-Chains">3.2 Continuous-Time Markov Chains</a>
 <ul>
-<li><a href="#State-occupancy-probabilities-_0028CTMC_0029">4.2.1 State occupancy probabilities</a>
-<li><a href="#Birth_002ddeath-process-_0028CTMC_0029">4.2.2 Birth-Death Process</a>
-<li><a href="#Expected-sojourn-times-_0028CTMC_0029">4.2.3 Expected Sojourn Times</a>
-<li><a href="#Time_002daveraged-expected-sojourn-times-_0028CTMC_0029">4.2.4 Time-Averaged Expected Sojourn Times</a>
-<li><a href="#Mean-time-to-absorption-_0028CTMC_0029">4.2.5 Mean Time to Absorption</a>
-<li><a href="#First-passage-times-_0028CTMC_0029">4.2.6 First Passage Times</a>
+<li><a href="#State-occupancy-probabilities-_0028CTMC_0029">3.2.1 State occupancy probabilities</a>
+<li><a href="#Birth_002ddeath-process-_0028CTMC_0029">3.2.2 Birth-Death Process</a>
+<li><a href="#Expected-sojourn-times-_0028CTMC_0029">3.2.3 Expected Sojourn Times</a>
+<li><a href="#Time_002daveraged-expected-sojourn-times-_0028CTMC_0029">3.2.4 Time-Averaged Expected Sojourn Times</a>
+<li><a href="#Mean-time-to-absorption-_0028CTMC_0029">3.2.5 Mean Time to Absorption</a>
+<li><a href="#First-passage-times-_0028CTMC_0029">3.2.6 First Passage Times</a>
 </li></ul>
 </li></ul>
-<li><a name="toc_Single-Station-Queueing-Systems" href="#Single-Station-Queueing-Systems">5 Single Station Queueing Systems</a>
+<li><a name="toc_Single-Station-Queueing-Systems" href="#Single-Station-Queueing-Systems">4 Single Station Queueing Systems</a>
 <ul>
-<li><a href="#The-M_002fM_002f1-System">5.1 The M/M/1 System</a>
-<li><a href="#The-M_002fM_002fm-System">5.2 The M/M/m System</a>
-<li><a href="#The-M_002fM_002finf-System">5.3 The M/M/inf System</a>
-<li><a href="#The-M_002fM_002f1_002fK-System">5.4 The M/M/1/K System</a>
-<li><a href="#The-M_002fM_002fm_002fK-System">5.5 The M/M/m/K System</a>
-<li><a href="#The-Asymmetric-M_002fM_002fm-System">5.6 The Asymmetric M/M/m System</a>
-<li><a href="#The-M_002fG_002f1-System">5.7 The M/G/1 System</a>
-<li><a href="#The-M_002fHm_002f1-System">5.8 The M/H_m/1 System</a>
+<li><a href="#The-M_002fM_002f1-System">4.1 The M/M/1 System</a>
+<li><a href="#The-M_002fM_002fm-System">4.2 The M/M/m System</a>
+<li><a href="#The-M_002fM_002finf-System">4.3 The M/M/inf System</a>
+<li><a href="#The-M_002fM_002f1_002fK-System">4.4 The M/M/1/K System</a>
+<li><a href="#The-M_002fM_002fm_002fK-System">4.5 The M/M/m/K System</a>
+<li><a href="#The-Asymmetric-M_002fM_002fm-System">4.6 The Asymmetric M/M/m System</a>
+<li><a href="#The-M_002fG_002f1-System">4.7 The M/G/1 System</a>
+<li><a href="#The-M_002fHm_002f1-System">4.8 The M/H_m/1 System</a>
 </li></ul>
-<li><a name="toc_Queueing-Networks" href="#Queueing-Networks">6 Queueing Networks</a>
+<li><a name="toc_Queueing-Networks" href="#Queueing-Networks">5 Queueing Networks</a>
 <ul>
-<li><a href="#Introduction-to-QNs">6.1 Introduction to QNs</a>
+<li><a href="#Introduction-to-QNs">5.1 Introduction to QNs</a>
 <ul>
-<li><a href="#Introduction-to-QNs">6.1.1 Single class models</a>
-<li><a href="#Introduction-to-QNs">6.1.2 Multiple class models</a>
+<li><a href="#Introduction-to-QNs">5.1.1 Single class models</a>
+<li><a href="#Introduction-to-QNs">5.1.2 Multiple class models</a>
+<li><a href="#Introduction-to-QNs">5.1.3 Closed Network Example</a>
+<li><a href="#Introduction-to-QNs">5.1.4 Open Network Example</a>
 </li></ul>
-<li><a href="#Generic-Algorithms">6.2 Generic Algorithms</a>
-<li><a href="#Algorithms-for-Product_002dForm-QNs">6.3 Algorithms for Product-Form QNs</a>
+<li><a href="#Algorithms-for-Product_002dForm-QNs">5.2 Algorithms for Product-Form QNs</a>
 <ul>
-<li><a href="#Algorithms-for-Product_002dForm-QNs">6.3.1 Jackson Networks</a>
-<li><a href="#Algorithms-for-Product_002dForm-QNs">6.3.2 The Convolution Algorithm</a>
-<li><a href="#Algorithms-for-Product_002dForm-QNs">6.3.3 Open networks</a>
-<li><a href="#Algorithms-for-Product_002dForm-QNs">6.3.4 Closed Networks</a>
-<li><a href="#Algorithms-for-Product_002dForm-QNs">6.3.5 Mixed Networks</a>
+<li><a href="#Algorithms-for-Product_002dForm-QNs">5.2.1 Jackson Networks</a>
+<li><a href="#Algorithms-for-Product_002dForm-QNs">5.2.2 The Convolution Algorithm</a>
+<li><a href="#Algorithms-for-Product_002dForm-QNs">5.2.3 Open networks</a>
+<li><a href="#Algorithms-for-Product_002dForm-QNs">5.2.4 Closed Networks</a>
+<li><a href="#Algorithms-for-Product_002dForm-QNs">5.2.5 Mixed Networks</a>
 </li></ul>
-<li><a href="#Algorithms-for-non-Product_002dform-QNs">6.4 Algorithms for non Product-Form QNs</a>
-<li><a href="#Bounds-on-performance">6.5 Bounds on performance</a>
-<li><a href="#Utility-functions">6.6 Utility functions</a>
+<li><a href="#Algorithms-for-non-Product_002dForm-QNs">5.3 Algorithms for non Product-Form QNs</a>
+<li><a href="#Generic-Algorithms">5.4 Generic Algorithms</a>
+<li><a href="#Bounds-on-performance">5.5 Bounds on performance</a>
+<li><a href="#Utility-functions">5.6 Utility functions</a>
 <ul>
-<li><a href="#Utility-functions">6.6.1 Open or closed networks</a>
-<li><a href="#Utility-functions">6.6.2 Computation of the visit counts</a>
-<li><a href="#Utility-functions">6.6.3 Other utility functions</a>
+<li><a href="#Utility-functions">5.6.1 Open or closed networks</a>
+<li><a href="#Utility-functions">5.6.2 Computation of the visit counts</a>
+<li><a href="#Utility-functions">5.6.3 Other utility functions</a>
 </li></ul>
 </li></ul>
-<li><a name="toc_References" href="#References">7 References</a>
+<li><a name="toc_References" href="#References">6 References</a>
 <li><a name="toc_Copying" href="#Copying">Appendix A GNU GENERAL PUBLIC LICENSE</a>
 <li><a name="toc_Concept-Index" href="#Concept-Index">Concept Index</a>
 <li><a name="toc_Function-Index" href="#Function-Index">Function Index</a>
@@ -139,14 +136,13 @@
 <ul class="menu">
 <li><a accesskey="1" href="#Summary">Summary</a>
 <li><a accesskey="2" href="#Installation">Installation</a>:                 Installation of the queueing toolbox. 
-<li><a accesskey="3" href="#Getting-Started">Getting Started</a>:              Getting started with the queueing toolbox. 
-<li><a accesskey="4" href="#Markov-Chains">Markov Chains</a>:                Functions for Markov Chains. 
-<li><a accesskey="5" href="#Single-Station-Queueing-Systems">Single Station Queueing Systems</a>:  Functions for single-station queueing systems. 
-<li><a accesskey="6" href="#Queueing-Networks">Queueing Networks</a>:            Functions for queueing networks. 
-<li><a accesskey="7" href="#References">References</a>:                   References
-<li><a accesskey="8" href="#Copying">Copying</a>:                      The GNU General Public License. 
-<li><a accesskey="9" href="#Concept-Index">Concept Index</a>:                An item for each concept. 
-<li><a href="#Function-Index">Function Index</a>:               An item for each function. 
+<li><a accesskey="3" href="#Markov-Chains">Markov Chains</a>:                Functions for Markov Chains. 
+<li><a accesskey="4" href="#Single-Station-Queueing-Systems">Single Station Queueing Systems</a>:  Functions for single-station queueing systems. 
+<li><a accesskey="5" href="#Queueing-Networks">Queueing Networks</a>:            Functions for queueing networks. 
+<li><a accesskey="6" href="#References">References</a>:                   References
+<li><a accesskey="7" href="#Copying">Copying</a>:                      The GNU General Public License. 
+<li><a accesskey="8" href="#Concept-Index">Concept Index</a>:                An item for each concept. 
+<li><a accesskey="9" href="#Function-Index">Function Index</a>:               An item for each function. 
 <li><a href="#Author-Index">Author Index</a>:                 An item for each author. 
 </ul>
 
@@ -369,7 +365,7 @@
 <div class="node">
 <a name="Installation"></a>
 <p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Getting-Started">Getting Started</a>,
+Next:&nbsp;<a rel="next" accesskey="n" href="#Markov-Chains">Markov Chains</a>,
 Previous:&nbsp;<a rel="previous" accesskey="p" href="#Summary">Summary</a>,
 Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
 
@@ -597,246 +593,7 @@
 
 <pre class="example">     octave:4&gt; <kbd>demo qnclosed</kbd>
 </pre>
-   <!-- This file has been automatically generated from gettingstarted.txi -->
-<!-- by proc.m. Do not edit this file, all changes will be lost -->
-<!-- *- texinfo -*- -->
-<!-- Copyright (C) 2008, 2009, 2010, 2011, 2012 Moreno Marzolla -->
-<!-- This file is part of the queueing toolbox, a Queueing Networks -->
-<!-- analysis package for GNU Octave. -->
-<!-- The queueing toolbox is free software; you can redistribute it -->
-<!-- and/or modify it under the terms of the GNU General Public License -->
-<!-- as published by the Free Software Foundation; either version 3 of -->
-<!-- the License, or (at your option) any later version. -->
-<!-- The queueing toolbox is distributed in the hope that it will be -->
-<!-- useful, but WITHOUT ANY WARRANTY; without even the implied warranty -->
-<!-- of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -->
-<!-- GNU General Public License for more details. -->
-<!-- You should have received a copy of the GNU General Public License -->
-<!-- along with the queueing toolbox; see the file COPYING.  If not, see -->
-<!-- <http://www.gnu.org/licenses/>. -->
-<div class="node">
-<a name="Getting-Started"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Markov-Chains">Markov Chains</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Installation">Installation</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="chapter">3 Introduction and Getting Started</h2>
-
-<ul class="menu">
-<li><a accesskey="1" href="#Analysis-of-Closed-Networks">Analysis of Closed Networks</a>
-<li><a accesskey="2" href="#Analysis-of-Open-Networks">Analysis of Open Networks</a>
-</ul>
-
-<p>In this chapter we give some usage examples of the <code>queueing</code>
-package. The reader is assumed to be familiar with Queueing Networks
-(although some basic terminology and notation will be given
-here). Additional usage examples are embedded in most of the function
-files; to display and execute the demos associated with function
-<em>fname</em> you can type <samp><span class="command">demo </span><em>fname</em></samp> at the Octave
-prompt. For example
-
-<pre class="example">     <kbd>demo qnclosed</kbd>
-</pre>
-   <p class="noindent">executes all demos (if any) for the <samp><span class="command">qnclosed</span></samp> function.
-
-<div class="node">
-<a name="Analysis-of-Closed-Networks"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Analysis-of-Open-Networks">Analysis of Open Networks</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Getting-Started">Getting Started</a>
-
-</div>
-
-<h3 class="section">3.1 Analysis of Closed Networks</h3>
-
-<p>Let us consider a simple closed network with K=3 service
-centers. Each center is of type M/M/1&ndash;FCFS. We denote with
-S_i the average service time at center i, i=1, 2,
-3. Let S_1 = 1.0, S_2 = 2.0 and S_3 = 0.8. The
-routing of jobs within the network is described with a <em>routing
-probability matrix</em> P. Specifically, a request completing
-service at center i is enqueued at center j with
-probability P_i, j.  Let us assume the following routing
-probability matrix:
-
-<pre class="example">         [ 0  0.3  0.7 ]
-     P = [ 1  0    0   ]
-         [ 1  0    0   ]
-</pre>
-   <p>For example, according to matric P a job completing service at
-center 1 is routed to center 2 with probability 0.3, and is routed to
-center 3 with probability 0.7.
-
-   <p>The network above can be analyzed with the <samp><span class="command">qnclosed</span></samp>
-function; if there is just a single class of requests, as in the
-example above, <samp><span class="command">qnclosed</span></samp> calls <samp><span class="command">qnclosedsinglemva</span></samp>
-which implements the Mean Value Analysys (MVA) algorithm for
-single-class, product-form network.
-
-   <p><samp><span class="command">qnclosed</span></samp> requires the following parameters:
-
-     <dl>
-<dt><var>N</var><dd>Number of requests in the network (since we are considering a closed
-network, the number of requests is fixed)
-
-     <br><dt><var>S</var><dd>Array of average service times at the centers: <var>S</var><code>(k)</code> is
-the average service time at center k.
-
-     <br><dt><var>V</var><dd>Array of visit ratios: <var>V</var><code>(k)</code> is the average number of
-visits to center k.
-
-   </dl>
-
-   <p>As can be seen, we must compute the <em>visit ratios</em> (or visit
-counts) V_k for each center k. The visit counts satisfy
-the following equations:
-
-<pre class="example">     V_j = sum_i V_i P_ij
-</pre>
-   <p>We can compute V_k from the routing probability matrix
-P_i, j using the <samp><span class="command">qnvisits</span></samp> function:
-
-<pre class="example">     <kbd>P = [0 0.3 0.7; 1 0 0; 1 0 0];</kbd>
-     <kbd>V = qnvisits(P)</kbd>
-        &rArr; V = 1.00000 0.30000 0.70000
-</pre>
-   <p>We can check that the computed values satisfy the above equation by
-evaluating the following expression:
-
-<pre class="example">     <kbd>V*P</kbd>
-          &rArr; ans = 1.00000 0.30000 0.70000
-</pre>
-   <p class="noindent">which is equal to V. 
-Hence, we can analyze the network for a given population size N
-(for example, N=10) as follows:
-
-<pre class="example">     <kbd>N = 10;</kbd>
-     <kbd>S = [1 2 0.8];</kbd>
-     <kbd>P = [0 0.3 0.7; 1 0 0; 1 0 0];</kbd>
-     <kbd>V = qnvisits(P);</kbd>
-     <kbd>[U R Q X] = qnclosed( N, S, V )</kbd>
-        &rArr; U = 0.99139 0.59483 0.55518
-        &rArr; R = 7.4360  4.7531  1.7500
-        &rArr; Q = 7.3719  1.4136  1.2144
-        &rArr; X = 0.99139 0.29742 0.69397
-</pre>
-   <p>The output of <samp><span class="command">qnclosed</span></samp> includes the vector of utilizations
-U_k at center k, response time R_k, average
-number of customers Q_k and throughput X_k. In our
-example, the throughput of center 1 is X_1 = 0.99139, and the
-average number of requests in center 3 is Q_3 = 1.2144. The
-utilization of center 1 is U_1 = 0.99139, which is the higher
-value among the service centers. Tus, center 1 is the <em>bottleneck
-device</em>.
-
-   <p>This network can also be analyzed with the <samp><span class="command">qnsolve</span></samp>
-function. <samp><span class="command">qnsolve</span></samp> can handle open, closed or mixed networks,
-and allows the network to be described in a very flexible way.  First,
-let <var>Q1</var>, <var>Q2</var> and <var>Q3</var> be the variables describing the
-service centers. Each variable is instantiated with the
-<samp><span class="command">qnmknode</span></samp> function.
-
-<pre class="example">     <kbd>Q1 = qnmknode( "m/m/m-fcfs", 1 );</kbd>
-     <kbd>Q2 = qnmknode( "m/m/m-fcfs", 2 );</kbd>
-     <kbd>Q3 = qnmknode( "m/m/m-fcfs", 0.8 );</kbd>
-</pre>
-   <p>The first parameter of <samp><span class="command">qnmknode</span></samp> is a string describing the
-type of the node. Here we use <code>"m/m/m-fcfs"</code> to denote a
-M/M/m&ndash;FCFS center. The second parameter gives the average
-service time. An optional third parameter can be used to specify the
-number m of service centers. If omitted, it is assumed
-m=1 (single-server node).
-
-   <p>Now, the network can be analyzed as follows:
-
-<pre class="example">     <kbd>N = 10;</kbd>
-     <kbd>V = [1 0.3 0.7];</kbd>
-     <kbd>[U R Q X] = qnsolve( "closed", N, { Q1, Q2, Q3 }, V )</kbd>
-        &rArr; U = 0.99139 0.59483 0.55518
-        &rArr; R = 7.4360  4.7531  1.7500
-        &rArr; Q = 7.3719  1.4136  1.2144
-        &rArr; X = 0.99139 0.29742 0.69397
-</pre>
-   <p>Of course, we get exactly the same results. Other functions can be used
-for closed networks, see <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a>.
-
-<div class="node">
-<a name="Analysis-of-Open-Networks"></a>
-<p><hr>
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Analysis-of-Closed-Networks">Analysis of Closed Networks</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Getting-Started">Getting Started</a>
-
-</div>
-
-<h3 class="section">3.2 Analysis of Open Networks</h3>
-
-<p>Open networks can be analyzed in a similar way. Let us consider
-an open network with K=3 service centers, and routing
-probability matrix as follows:
-
-<pre class="example">         [ 0  0.3  0.5 ]
-     P = [ 1  0    0   ]
-         [ 1  0    0   ]
-</pre>
-   <p>In this network, requests can leave the system from center 1 with
-probability (1-(0.3+0.5) = 0.2. We suppose that external jobs
-arrive at center 1 with rate \lambda_1 = 0.15; there are no
-arrivals at centers 2 and 3.
-
-   <p>Similarly to closed networks, we first need to compute the visit
-counts V_k to center k. Again, we use the
-<samp><span class="command">qnvisits</span></samp> function as follows:
-
-<pre class="example">     <kbd>P = [0 0.3 0.5; 1 0 0; 1 0 0];</kbd>
-     <kbd>lambda = [0.15 0 0];</kbd>
-     <kbd>V = qnvisits(P, lambda)</kbd>
-        &rArr; V = 5.00000 1.50000 2.50000
-</pre>
-   <p class="noindent">where <var>lambda</var><code>(k)</code> is the arrival rate at center k,
-and <var>P</var> is the routing matrix. The visit counts V_k for
-open networks satisfy the following equation:
-
-<pre class="example">     V_j = sum_i V_i P_ij
-</pre>
-   <p>where P_0, j is the probability of an external arrival to
-center j. This can be computed as:
-
-   <p>Assuming the same service times as in the previous example, the
-network can be analyzed with the <samp><span class="command">qnopen</span></samp> function, as
-follows:
-
-<pre class="example">     <kbd>S = [1 2 0.8];</kbd>
-     <kbd>[U R Q X] = qnopen( sum(lambda), S, V )</kbd>
-        &rArr; U = 0.75000 0.45000 0.30000
-        &rArr; R = 4.0000  3.6364  1.1429
-        &rArr; Q = 3.00000 0.81818 0.42857
-        &rArr; X = 0.75000 0.22500 0.37500
-</pre>
-   <p>The first parameter of the <samp><span class="command">qnopen</span></samp> function is the (scalar)
-aggregate arrival rate.
-
-   <p>Again, it is possible to use the <samp><span class="command">qnsolve</span></samp> high-level function:
-
-<pre class="example">     <kbd>Q1 = qnmknode( "m/m/m-fcfs", 1 );</kbd>
-     <kbd>Q2 = qnmknode( "m/m/m-fcfs", 2 );</kbd>
-     <kbd>Q3 = qnmknode( "m/m/m-fcfs", 0.8 );</kbd>
-     <kbd>lambda = [0.15 0 0];</kbd>
-     <kbd>[U R Q X] = qnsolve( "open", sum(lambda), { Q1, Q2, Q3 }, V )</kbd>
-        &rArr; U = 0.75000 0.45000 0.30000
-        &rArr; R = 4.0000  3.6364  1.1429
-        &rArr; Q = 3.00000 0.81818 0.42857
-        &rArr; X = 0.75000 0.22500 0.37500
-</pre>
-   <!-- @node Markov Chains Analysis -->
-<!-- @section Markov Chains Analysis -->
-<!-- @subsection Discrete-Time Markov Chains -->
-<!-- (TODO) -->
-<!-- @subsection Continuous-Time Markov Chains -->
-<!-- (TODO) -->
-<!-- This file has been automatically generated from markovchains.txi -->
+   <!-- This file has been automatically generated from markovchains.txi -->
 <!-- by proc.m. Do not edit this file, all changes will be lost -->
 <!-- *- texinfo -*- -->
 <!-- Copyright (C) 2008, 2009, 2010, 2011, 2012 Moreno Marzolla -->
@@ -857,12 +614,12 @@
 <a name="Markov-Chains"></a>
 <p><hr>
 Next:&nbsp;<a rel="next" accesskey="n" href="#Single-Station-Queueing-Systems">Single Station Queueing Systems</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Getting-Started">Getting Started</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="#Installation">Installation</a>,
 Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
 
 </div>
 
-<h2 class="chapter">4 Markov Chains</h2>
+<h2 class="chapter">3 Markov Chains</h2>
 
 <ul class="menu">
 <li><a accesskey="1" href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a>
@@ -878,7 +635,7 @@
 
 </div>
 
-<h3 class="section">4.1 Discrete-Time Markov Chains</h3>
+<h3 class="section">3.1 Discrete-Time Markov Chains</h3>
 
 <p>Let X_0, X_1, <small class="dots">...</small>, X_n, <small class="dots">...</small>  be a sequence of random
 variables defined over a discete state space 0, 1, 2,
@@ -905,6 +662,8 @@
 following two properties: (1) P_i, j &ge; 0 for all
 i, j, and (2) \sum_j=1^N P_i,j = 1 for all i
 
+   <p><a name="doc_002ddtmc_005fcheck_005fP"></a>
+
 <div class="defun">
 &mdash; Function File: [<var>r</var> <var>err</var>] = <b>dtmc_check_P</b> (<var>P</var>)<var><a name="index-dtmc_005fcheck_005fP-1"></a></var><br>
 <blockquote>
@@ -934,7 +693,7 @@
 
 </div>
 
-<h4 class="subsection">4.1.1 State occupancy probabilities</h4>
+<h4 class="subsection">3.1.1 State occupancy probabilities</h4>
 
 <p>We denote with \bf \pi(n) = \left(\pi_1(n), \pi_2(n), <small class="dots">...</small>,
 \pi_N(n) \right) the <em>state occupancy probability vector</em> at
@@ -962,6 +721,8 @@
    <p class="noindent">where \bf 1 is the row vector of ones, and ( \cdot )^T
 the transpose operator.
 
+   <p><a name="doc_002ddtmc"></a>
+
 <div class="defun">
 &mdash; Function File: <var>p</var> = <b>dtmc</b> (<var>P</var>)<var><a name="index-dtmc-3"></a></var><br>
 &mdash; Function File: <var>p</var> = <b>dtmc</b> (<var>P, n, p0</var>)<var><a name="index-dtmc-4"></a></var><br>
@@ -1008,8 +769,8 @@
 
 <p class="noindent"><strong>EXAMPLE</strong>
 
-   <p>This example is from [GrSn97]. Let us consider a maze with nine rooms,
-as shown in the following figure
+   <p>This example is from <a href="#GrSn97">GrSn97</a>. Let us consider a maze with nine
+rooms, as shown in the following figure
 
 <pre class="example">     +-----+-----+-----+
      |     |     |     |
@@ -1074,7 +835,9 @@
 
 </div>
 
-<h4 class="subsection">4.1.2 Birth-death process</h4>
+<h4 class="subsection">3.1.2 Birth-death process</h4>
+
+<p><a name="doc_002ddtmc_005fbd"></a>
 
 <div class="defun">
 &mdash; Function File: <var>P</var> = <b>dtmc_bd</b> (<var>b, d</var>)<var><a name="index-dtmc_005fbd-11"></a></var><br>
@@ -1112,7 +875,7 @@
 
 </div>
 
-<h4 class="subsection">4.1.3 Expected Number of Visits</h4>
+<h4 class="subsection">3.1.3 Expected Number of Visits</h4>
 
 <p>Given a N state discrete-time Markov chain with transition
 matrix \bf P and an integer n &ge; 0, we let
@@ -1149,6 +912,8 @@
 to the size of \bf P (filling missing entries with zeros), we
 have that, for absorbing chains \bf L = \bf \pi(0)\bf N.
 
+   <p><a name="doc_002ddtmc_005fexps"></a>
+
 <div class="defun">
 &mdash; Function File: <var>L</var> = <b>dtmc_exps</b> (<var>P, n, p0</var>)<var><a name="index-dtmc_005fexps-14"></a></var><br>
 &mdash; Function File: <var>L</var> = <b>dtmc_exps</b> (<var>P, p0</var>)<var><a name="index-dtmc_005fexps-15"></a></var><br>
@@ -1199,7 +964,9 @@
 
 </div>
 
-<h4 class="subsection">4.1.4 Time-averaged expected sojourn times</h4>
+<h4 class="subsection">3.1.4 Time-averaged expected sojourn times</h4>
+
+<p><a name="doc_002ddtmc_005ftaexps"></a>
 
 <div class="defun">
 &mdash; Function File: <var>L</var> = <b>dtmc_exps</b> (<var>P, n, p0</var>)<var><a name="index-dtmc_005fexps-17"></a></var><br>
@@ -1238,7 +1005,7 @@
 
         </dl>
 
-     </blockquote></div>
+        </blockquote></div>
 
 <div class="node">
 <a name="Mean-time-to-absorption-(DTMC)"></a>
@@ -1250,7 +1017,7 @@
 
 </div>
 
-<h4 class="subsection">4.1.5 Mean Time to Absorption</h4>
+<h4 class="subsection">3.1.5 Mean Time to Absorption</h4>
 
 <p>The <em>mean time to absorption</em> is defined as the average number of
 transitions which are required to reach an absorbing state, starting
@@ -1271,7 +1038,9 @@
 
 <pre class="example">     B = N R
 </pre>
-   <div class="defun">
+   <p><a name="doc_002ddtmc_005fmtta"></a>
+
+<div class="defun">
 &mdash; Function File: [<var>t</var> <var>N</var> <var>B</var>] = <b>dtmc_mtta</b> (<var>P</var>)<var><a name="index-dtmc_005fmtta-20"></a></var><br>
 &mdash; Function File: [<var>t</var> <var>N</var> <var>B</var>] = <b>dtmc_mtta</b> (<var>P, p0</var>)<var><a name="index-dtmc_005fmtta-21"></a></var><br>
 <blockquote>
@@ -1335,7 +1104,7 @@
 
 </div>
 
-<h4 class="subsection">4.1.6 First Passage Times</h4>
+<h4 class="subsection">3.1.6 First Passage Times</h4>
 
 <p>The First Passage Time M_i, j is the average number of
 transitions needed to visit state j for the first time,
@@ -1372,7 +1141,9 @@
      r_i = -----
            \pi_i
 </pre>
-   <div class="defun">
+   <p><a name="doc_002ddtmc_005ffpt"></a>
+
+<div class="defun">
 &mdash; Function File: <var>M</var> = <b>dtmc_fpt</b> (<var>P</var>)<var><a name="index-dtmc_005ffpt-25"></a></var><br>
 <blockquote>
         <p><a name="index-First-passage-times-26"></a><a name="index-Mean-recurrence-times-27"></a>
@@ -1417,7 +1188,7 @@
 
 </div>
 
-<h3 class="section">4.2 Continuous-Time Markov Chains</h3>
+<h3 class="section">3.2 Continuous-Time Markov Chains</h3>
 
 <p>A stochastic process {X(t), t &ge; 0} is a continuous-time
 Markov chain if, for all integers n, and for any sequence
@@ -1433,6 +1204,8 @@
 satisfy the property that, for all i, \sum_j=1^N Q_i,
 j = 0.
 
+   <p><a name="doc_002dctmc_005fcheck_005fQ"></a>
+
 <div class="defun">
 &mdash; Function File: [<var>result</var> <var>err</var>] = <b>ctmc_check_Q</b> (<var>Q</var>)<var><a name="index-ctmc_005fcheck_005fQ-28"></a></var><br>
 <blockquote>
@@ -1462,7 +1235,7 @@
 
 </div>
 
-<h4 class="subsection">4.2.1 State occupancy probabilities</h4>
+<h4 class="subsection">3.2.1 State occupancy probabilities</h4>
 
 <p>Similarly to the discrete case, we denote with \bf \pi(t) =
 (\pi_1(t), \pi_2(t), <small class="dots">...</small>, \pi_N(t) ) the <em>state occupancy
@@ -1489,7 +1262,9 @@
      | \pi 1^T = 1
      \
 </pre>
-   <div class="defun">
+   <p><a name="doc_002dctmc"></a>
+
+<div class="defun">
 &mdash; Function File: <var>p</var> = <b>ctmc</b> (<var>Q</var>)<var><a name="index-ctmc-30"></a></var><br>
 &mdash; Function File: <var>p</var> = <b>ctmc</b> (<var>Q, t. p0</var>)<var><a name="index-ctmc-31"></a></var><br>
 <blockquote>
@@ -1556,7 +1331,9 @@
 
 </div>
 
-<h4 class="subsection">4.2.2 Birth-Death Process</h4>
+<h4 class="subsection">3.2.2 Birth-Death Process</h4>
+
+<p><a name="doc_002dctmc_005fbd"></a>
 
 <div class="defun">
 &mdash; Function File: <var>Q</var> = <b>ctmc_bd</b> (<var>b, d</var>)<var><a name="index-ctmc_005fbd-36"></a></var><br>
@@ -1593,7 +1370,7 @@
 
 </div>
 
-<h4 class="subsection">4.2.3 Expected Sojourn Times</h4>
+<h4 class="subsection">3.2.3 Expected Sojourn Times</h4>
 
 <p>Given a N state continuous-time Markov Chain with infinitesimal
 generator matrix \bf Q, we define the vector \bf L(t) =
@@ -1618,6 +1395,8 @@
 the state occupancy probability at time t; \exp(\bf Qt)
 is the matrix exponential of \bf Qt.
 
+   <p><a name="doc_002dctmc_005fexps"></a>
+
 <div class="defun">
 &mdash; Function File: <var>L</var> = <b>ctmc_exps</b> (<var>Q, t, p </var>)<var><a name="index-ctmc_005fexps-39"></a></var><br>
 &mdash; Function File: <var>L</var> = <b>ctmc_exps</b> (<var>Q, p</var>)<var><a name="index-ctmc_005fexps-40"></a></var><br>
@@ -1697,7 +1476,9 @@
 
 </div>
 
-<h4 class="subsection">4.2.4 Time-Averaged Expected Sojourn Times</h4>
+<h4 class="subsection">3.2.4 Time-Averaged Expected Sojourn Times</h4>
+
+<p><a name="doc_002dctmc_005ftaexps"></a>
 
 <div class="defun">
 &mdash; Function File: <var>M</var> = <b>ctmc_taexps</b> (<var>Q, t, p</var>)<var><a name="index-ctmc_005ftaexps-43"></a></var><br>
@@ -1736,7 +1517,7 @@
 
         </dl>
 
-     </blockquote></div>
+        </blockquote></div>
 
 <p class="noindent"><strong>EXAMPLE</strong>
 
@@ -1772,7 +1553,7 @@
 
 </div>
 
-<h4 class="subsection">4.2.5 Mean Time to Absorption</h4>
+<h4 class="subsection">3.2.5 Mean Time to Absorption</h4>
 
 <p>If we consider a Markov Chain with absorbing states, it is possible to
 define the <em>expected time to absorption</em> as the expected time
@@ -1789,6 +1570,8 @@
 state occupancy probability at time 0, restricted to states in
 A.
 
+   <p><a name="doc_002dctmc_005fmtta"></a>
+
 <div class="defun">
 &mdash; Function File: <var>t</var> = <b>ctmc_mtta</b> (<var>Q, p</var>)<var><a name="index-ctmc_005fmtta-47"></a></var><br>
 <blockquote>
@@ -1870,7 +1653,9 @@
 
 </div>
 
-<h4 class="subsection">4.2.6 First Passage Times</h4>
+<h4 class="subsection">3.2.6 First Passage Times</h4>
+
+<p><a name="doc_002dctmc_005ffpt"></a>
 
 <div class="defun">
 &mdash; Function File: <var>M</var> = <b>ctmc_fpt</b> (<var>Q</var>)<var><a name="index-ctmc_005ffpt-54"></a></var><br>
@@ -1911,7 +1696,7 @@
      </pre>
      <strong>See also:</strong> dtmc_fpt.
 
-     </blockquote></div>
+        </blockquote></div>
 
 <!-- This file has been automatically generated from singlestation.txi -->
 <!-- by proc.m. Do not edit this file, all changes will be lost -->
@@ -1939,7 +1724,7 @@
 
 </div>
 
-<h2 class="chapter">5 Single Station Queueing Systems</h2>
+<h2 class="chapter">4 Single Station Queueing Systems</h2>
 
 <p>Single Station Queueing Systems contain a single station, and are thus
 quite easy to analyze. The <code>queueing</code> package contains functions
@@ -1972,7 +1757,7 @@
 
 </div>
 
-<h3 class="section">5.1 The M/M/1 System</h3>
+<h3 class="section">4.1 The M/M/1 System</h3>
 
 <p>The M/M/1 system is made of a single server connected to an
 unlimited FCFS queue. The mean arrival rate is Poisson with arrival
@@ -2040,7 +1825,7 @@
 
 </div>
 
-<h3 class="section">5.2 The M/M/m System</h3>
+<h3 class="section">4.2 The M/M/m System</h3>
 
 <p>The M/M/m system is similar to the M/M/1 system, except
 that there are m \geq 1 identical servers connected to a single
@@ -2119,7 +1904,7 @@
 
 </div>
 
-<h3 class="section">5.3 The M/M/inf System</h3>
+<h3 class="section">4.3 The M/M/inf System</h3>
 
 <p>The M/M/\infty system is similar to the M/M/m system,
 except that there are infinitely many identical servers (that is,
@@ -2194,7 +1979,7 @@
 
 </div>
 
-<h3 class="section">5.4 The M/M/1/K System</h3>
+<h3 class="section">4.4 The M/M/1/K System</h3>
 
 <p>In a M/M/1/K finite capacity system there can be at most
 k jobs at any time. If a new request tries to join the system
@@ -2263,7 +2048,7 @@
 
 </div>
 
-<h3 class="section">5.5 The M/M/m/K System</h3>
+<h3 class="section">4.5 The M/M/m/K System</h3>
 
 <p>The M/M/m/K finite capacity system is similar to the
 M/M/1/k system except that the number of servers is m,
@@ -2343,7 +2128,7 @@
 
 </div>
 
-<h3 class="section">5.6 The Asymmetric M/M/m System</h3>
+<h3 class="section">4.6 The Asymmetric M/M/m System</h3>
 
 <p>The Asymmetric M/M/m system contains m servers connected
 to a single queue. Differently from the M/M/m system, in the
@@ -2410,7 +2195,7 @@
 
 </div>
 
-<h3 class="section">5.7 The M/G/1 System</h3>
+<h3 class="section">4.7 The M/G/1 System</h3>
 
 <div class="defun">
 &mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>p0</var>] = <b>qnmg1</b> (<var>lambda, xavg, x2nd</var>)<var><a name="index-qnmg1-91"></a></var><br>
@@ -2467,7 +2252,7 @@
 
 </div>
 
-<h3 class="section">5.8 The M/H_m/1 System</h3>
+<h3 class="section">4.8 The M/H_m/1 System</h3>
 
 <div class="defun">
 &mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>p0</var>] = <b>qnmh1</b> (<var>lambda, mu, alpha</var>)<var><a name="index-qnmh1-93"></a></var><br>
@@ -2544,13 +2329,13 @@
 
 </div>
 
-<h2 class="chapter">6 Queueing Networks</h2>
+<h2 class="chapter">5 Queueing Networks</h2>
 
 <ul class="menu">
 <li><a accesskey="1" href="#Introduction-to-QNs">Introduction to QNs</a>:                  A brief introduction to Queueing Networks. 
-<li><a accesskey="2" href="#Generic-Algorithms">Generic Algorithms</a>:                   High-level functions for QN analysis
-<li><a accesskey="3" href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a>:      Functions to analyze product-form QNs
-<li><a accesskey="4" href="#Algorithms-for-non-Product_002dform-QNs">Algorithms for non Product-form QNs</a>:  Functions to analyze non product-form QNs
+<li><a accesskey="2" href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a>:      Functions to analyze product-form QNs
+<li><a accesskey="3" href="#Algorithms-for-non-Product_002dForm-QNs">Algorithms for non Product-Form QNs</a>:  Functions to analyze non product-form QNs
+<li><a accesskey="4" href="#Generic-Algorithms">Generic Algorithms</a>:                   High-level functions for QN analysis
 <li><a accesskey="5" href="#Bounds-on-performance">Bounds on performance</a>:                Functions to compute performance bounds
 <li><a accesskey="6" href="#Utility-functions">Utility functions</a>:                    Utility functions to compute miscellaneous quantities
 </ul>
@@ -2560,26 +2345,25 @@
 <div class="node">
 <a name="Introduction-to-QNs"></a>
 <p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Generic-Algorithms">Generic Algorithms</a>,
+Next:&nbsp;<a rel="next" accesskey="n" href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a>,
 Up:&nbsp;<a rel="up" accesskey="u" href="#Queueing-Networks">Queueing Networks</a>
 
 </div>
 
-<h3 class="section">6.1 Introduction to QNs</h3>
+<h3 class="section">5.1 Introduction to QNs</h3>
 
 <p>Queueing Networks (QN) are a very simple yet powerful modeling tool
-which is used to analyze many kind of systems. In its simplest form, a
-QN is made of K service centers. Each service center i
-has a queue, which is connected to m_i (generally identical)
-<em>servers</em>. Customers (or requests) arrive at the service center,
-and join the queue if there is a slot available. Then, requests are
-served according to a (de)queueing policy. After service completes,
-the requests leave the service center.
-
-   <p>The service centers for which m_i = \infty are called
-<em>delay centers</em> or <em>infinite servers</em>. If a service center
-has infinite servers, of course each new request will find one server
-available, so there will never be queueing.
+which can be used to analyze many kind of systems. In its simplest
+form, a QN is made of K service centers. Each center k
+has a queue, which is connected to m_k (generally identical)
+<em>servers</em>. Arriving customers (requests) join the queue if there
+is a slot available. Then, requests are served according to a
+(de)queueing policy (e.g., FIFO). After service completes, requests
+leave the server and can join another queue or exit from the system.
+
+   <p>Service centers for which m_k = \infty are called <em>delay
+centers</em> or <em>infinite servers</em>. In this kind of centers, every
+request always finds one available server, so queueing never occurs.
 
    <p>Requests join the queue according to a <em>queueing policy</em>, such as:
 
@@ -2590,74 +2374,72 @@
 
      <br><dt><strong>PS</strong><dd>Processor Sharing
 
-     <br><dt><strong>IS</strong><dd>Infinite Server, there is an infinite number of identical servers so
-that each request always finds a server available, and there is no
-queueing
+     <br><dt><strong>IS</strong><dd>Infinite Server (for which m_k = \infty).
 
    </dl>
 
-   <p>A population of <em>requests</em> or <em>customers</em> arrives to the
-system system, requesting service to the service centers.  The request
-population may be <em>open</em> or <em>closed</em>. In open systems there
-is an infinite population of requests. New customers arrive from
-outside the system, and eventually leave the system. In closed systems
-there is a fixed population of request which continuously interacts
-with the system.
-
-   <p>There might be a single class of requests, meaning that all requests
-behave in the same way (e.g., they spend the same average time on each
-particular server), or there might be multiple classes of requests.
-
-<h4 class="subsection">6.1.1 Single class models</h4>
-
-<p>In single class models, all requests are indistinguishable and belong to
-the same class. This means that every request has the same average
+   <p>Queueing models can be <em>open</em> or <em>closed</em>. In open models
+there is an infinite population of requests; new customers are
+generated outside the system, and eventually leave the system. In
+closed systems there is a fixed population of request.
+
+   <p>Queueing models can have a single request class, meaning that all
+requests behave in the same way (e.g., they spend the same average
+time on each particular server). In multiclass models there are
+multiple request classes, each one with its own
+parameters. Furthermore, in multiclass models there can be open and
+closed classes of requests within the same system.
+
+<h4 class="subsection">5.1.1 Single class models</h4>
+
+<p>In single class models, all requests are indistinguishable and belong
+to the same class. This means that every request has the same average
 service time, and all requests move through the system with the same
 routing probabilities.
 
 <p class="noindent"><strong>Model Inputs</strong>
 
      <dl>
-<dt>\lambda_i<dd>External arrival rate to service center i.
+<dt>\lambda_k<dd>External arrival rate to service center k.
 
      <br><dt>\lambda<dd>Overall external arrival rate to the whole system: \lambda =
-\sum_i \lambda_i.
-
-     <br><dt>S_i<dd>Average service time. S_i is the average service time on service
-center i. In other words, S_i is the average time from the
+\sum_k \lambda_k.
+
+     <br><dt>S_k<dd>Average service time. S_k is the average service time on service
+center k. In other words, S_k is the average time from the
 instant in which a request is extracted from the queue and starts being
 service, and the instant at which service finishes and the request moves
 to another queue (or exits the system).
 
-     <br><dt>P_i, j<dd>Routing probability matrix. \bf P = P_i, j is a K
+     <br><dt>P_i, j<dd>Routing probability matrix. \bf P = [P_i, j] is a K
 \times K matrix such that P_i, j is the probability that a
 request completing service at server i will move directly to
 server j, The probability that a request leaves the system
 after service at service center i is 1-\sum_j=1^K P_i,
 j.
 
-     <br><dt>V_i<dd>Average number of visits. V_i is the average number of visits to
-the service center i. This quantity will be described shortly.
+     <br><dt>V_k<dd>Average number of visits. V_k is the average number of visits to
+the service center k. This quantity will be described shortly.
 
    </dl>
 
 <p class="noindent"><strong>Model Outputs</strong>
 
      <dl>
-<dt>U_i<dd>Service center utilization. U_i is the utilization of service
-center i. The utilization is defined as the fraction of time in
+<dt>U_k<dd>Service center utilization. U_k is the utilization of service
+center k. The utilization is defined as the fraction of time in
 which the resource is busy (i.e., the server is processing requests).
 
-     <br><dt>R_i<dd>Average response time. R_i is the average response time of
-service center i. The average response time is defined as the
+     <br><dt>R_k<dd>Average response time. R_k is the average response time of
+service center k. The average response time is defined as the
 average time between the arrival of a customer in the queue, and the
 completion of service.
 
-     <br><dt>Q_i<dd>Average number of customers. Q_i is the average number of
-requests in service center i. This includes both the requests in
+     <br><dt>Q_k<dd>Average number of customers. Q_k is the average number of
+requests in service center k. This includes both the requests in
 the queue, and the request being served.
 
-     <br><dt>X_i<dd>Throughput. X_i is the throughput of service center i. 
+     <br><dt>X_k<dd>Throughput. X_k is the throughput of service center k. 
 The throughput is defined as the ratio of job completions (i.e., average
 number of jobs completed over a fixed interval of time).
 
@@ -2705,7 +2487,7 @@
             i=1
      
 </pre>
-   <h4 class="subsection">6.1.2 Multiple class models</h4>
+   <h4 class="subsection">5.1.2 Multiple class models</h4>
 
 <p>In multiple class QN models, we assume that there exist C
 different classes of requests. Each request from class c spends
@@ -2718,7 +2500,7 @@
 class c requests in the system.
 
    <p>The transition probability matrix for these kind of networks will be a
-C \times K \times C \times K matrix \bf P = P_r, i, s, j
+C \times K \times C \times K matrix \bf P = [P_r, i, s, j]
 such that P_r, i, s, j is the probability that a class
 r request which completes service at center i will join
 server j as a class s request.
@@ -2729,41 +2511,41 @@
 <p class="noindent"><strong>Model Inputs</strong>
 
      <dl>
-<dt>\lambda_c, i<dd>External arrival rate of class-c requests to service center i
-
-     <br><dt>\lambda<dd>Overall external arrival rate to the whole system: \lambda = \sum_c \sum_i \lambda_c, i
-
-     <br><dt>S_c, i<dd>Average service time. S_c, i is the average service time on
-service center i for class c requests.
-
-     <br><dt>P_r, i, s, j<dd>Routing probability matrix. \bf P = P_r, i, s, j is a C
+<dt>\lambda_c, k<dd>External arrival rate of class-c requests to service center k
+
+     <br><dt>\lambda<dd>Overall external arrival rate to the whole system: \lambda = \sum_c \sum_k \lambda_c, k
+
+     <br><dt>S_c, k<dd>Average service time. S_c, k is the average service time on
+service center k for class c requests.
+
+     <br><dt>P_r, i, s, j<dd>Routing probability matrix. \bf P = [P_r, i, s, j] is a C
 \times K \times C \times K matrix such that P_r, i, s, j is
 the probability that a class r request which completes service
 at server i will move to server j as a class s
 request.
 
-     <br><dt>V_c, i<dd>Average number of visits. V_c, i is the average number of visits
-of class c requests to the service center i.
+     <br><dt>V_c, k<dd>Average number of visits. V_c, k is the average number of visits
+of class c requests to center k.
 
    </dl>
 
 <p class="noindent"><strong>Model Outputs</strong>
 
      <dl>
-<dt>U_c, i<dd>Utilization of service center i by class c requests. The
+<dt>U_c, k<dd>Utilization of service center k by class c requests. The
 utilization is defined as the fraction of time in which the resource is
 busy (i.e., the server is processing requests).
 
-     <br><dt>R_c, i<dd>Average response time experienced by class c requests on service
-center i. The average response time is defined as the average
+     <br><dt>R_c, k<dd>Average response time experienced by class c requests on service
+center k. The average response time is defined as the average
 time between the arrival of a customer in the queue, and the completion
 of service.
 
-     <br><dt>Q_c, i<dd>Average number of class c requests on service center
-i. This includes both the requests in the queue, and the request
+     <br><dt>Q_c, k<dd>Average number of class c requests on service center
+k. This includes both the requests in the queue, and the request
 being served.
 
-     <br><dt>X_c, i<dd>Throughput of service center i for class c requests.  The
+     <br><dt>X_c, k<dd>Throughput of service center k for class c requests.  The
 throughput is defined as the rate of completion of class c
 requests.
 
@@ -2772,8 +2554,8 @@
 <p class="noindent">It is possible to define aggregate performance measures as follows:
 
      <dl>
-<dt>U_i<dd>Utilization of service center i:
-<code>Ui = sum(U,1);</code>
+<dt>U_k<dd>Utilization of service center k:
+<code>Uk = sum(U,k);</code>
 
      <br><dt>R_c<dd>System response time for class c requests:
 <code>Rc = sum( V.*R, 1 );</code>
@@ -2802,224 +2584,155 @@
 \sum_s \sum_j \lambda_s, j is the overall external arrival rate to
 the whole system, then P_0, s, j = \lambda_s, j / \lambda.
 
-<div class="node">
-<a name="Generic-Algorithms"></a>
-<p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Introduction-to-QNs">Introduction to QNs</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Queueing-Networks">Queueing Networks</a>
-
-</div>
-
-<h3 class="section">6.2 Generic Algorithms</h3>
-
-<p>The <code>queueing</code> package provides a couple of high-level functions
-for defining and solving QN models. These functions can be used to
-define a open or closed QN model (with single or multiple job
-classes), with arbitrary configuration and queueing disciplines. At
-the moment only product-form networks can be solved, See <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a>.
-
-   <p>The network is defined by two parameters. The first one is the list of
-nodes, encoded as an Octave <em>cell array</em>. The second parameter is
-the visit ration <var>V</var>, which can be either a vector (for
-single-class models) or a two-dimensional matrix (for multiple-class
-models).
-
-   <p>Individual nodes in the network are structures build using the
-<code>qnmknode</code> function.
-
-<div class="defun">
-&mdash; Function File: <var>Q</var> = <b>qnmknode</b> (<var>"m/m/m-fcfs", S</var>)<var><a name="index-qnmknode-96"></a></var><br>
-&mdash; Function File: <var>Q</var> = <b>qnmknode</b> (<var>"m/m/m-fcfs", S, m</var>)<var><a name="index-qnmknode-97"></a></var><br>
-&mdash; Function File: <var>Q</var> = <b>qnmknode</b> (<var>"m/m/1-lcfs-pr", S</var>)<var><a name="index-qnmknode-98"></a></var><br>
-&mdash; Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/1-ps", S</var>)<var><a name="index-qnmknode-99"></a></var><br>
-&mdash; Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/1-ps", S, s2</var>)<var><a name="index-qnmknode-100"></a></var><br>
-&mdash; Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/inf", S</var>)<var><a name="index-qnmknode-101"></a></var><br>
-&mdash; Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/inf", S, s2</var>)<var><a name="index-qnmknode-102"></a></var><br>
-<blockquote>
-        <p>Creates a node; this function can be used together with
-<code>qnsolve</code>. It is possible to create either single-class nodes
-(where there is only one customer class), or multiple-class nodes
-(where the service time is given per-class). Furthermore, it is
-possible to specify load-dependent service times.
-
-        <p><strong>INPUTS</strong>
-
-          <dl>
-<dt><var>S</var><dd>Average service time. S can be either a scalar, a row vector,
-a column vector or a two-dimensional matrix.
-
-               <ul>
-<li>If S is a scalar,
-it is assumed to be a load-independent, class-independent service time.
-
-               <li>If S is a column vector, then <var>S</var><code>(c)</code> is assumed to
-the the load-independent service time for class c customers.
-
-               <li>If S is a row vector, then <var>S</var><code>(n)</code> is assumed to be
-the class-independent service time at the node, when there are n
-requests.
-
-               <li>Finally, if <var>S</var> is a two-dimensional matrix, then
-<var>S</var><code>(c,n)</code> is assumed to be the class c service time
-when there are n requests at the node.
-
-          </ul>
-
-          <br><dt><var>m</var><dd>Number of identical servers at the node. Default is <var>m</var><code>=1</code>.
-
-          <br><dt><var>s2</var><dd>Squared coefficient of variation for the service time. Default is 1.0.
-
-        </dl>
-
-        <p>The returned struct <var>Q</var> should be considered opaque to the client.
-
-     <!-- The returned struct @var{Q} has the following fields: -->
-     <!-- @table @var -->
-     <!-- @item Q.node -->
-     <!-- (String) type of the node; valid values are @code{"m/m/m-fcfs"}, -->
-     <!-- @code{"-/g/1-lcfs-pr"}, @code{"-/g/1-ps"} (Processor-Sharing) -->
-     <!-- and @code{"-/g/inf"} (Infinite Server, or delay center). -->
-     <!-- @item Q.S -->
-     <!-- Average service time. If @code{@var{Q}.S} is a vector, then -->
-     <!-- @code{@var{Q}.S(i)} is the average service time at that node -->
-     <!-- if there are @math{i} requests. -->
-     <!-- @item Q.m -->
-     <!-- Number of identical servers at a @code{"m/m/m-fcfs"}. Default is 1. -->
-     <!-- @item Q.c -->
-     <!-- Number of customer classes. Default is 1. -->
-     <!-- @end table -->
-        <pre class="sp">
-     
-     </pre>
-     <strong>See also:</strong> qnsolve.
-
-        </blockquote></div>
-
-   <p>After the network has been defined, it is possible to solve it using
-the <code>qnsolve</code> function. Note that this function is somewhat less
-efficient than those described in later sections, but
-generally easier to use.
-
-<div class="defun">
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnsolve</b> (<var>"closed", N, QQ, V</var>)<var><a name="index-qnsolve-103"></a></var><br>
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnsolve</b> (<var>"closed", N, QQ, V, Z</var>)<var><a name="index-qnsolve-104"></a></var><br>
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnsolve</b> (<var>"open", lambda, QQ, V</var>)<var><a name="index-qnsolve-105"></a></var><br>
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnsolve</b> (<var>"mixed", lambda, N, QQ, V</var>)<var><a name="index-qnsolve-106"></a></var><br>
-<blockquote>
-        <p>General evaluator of QN models. Networks can be open,
-closed or mixed; single as well as multiclass networks are supported.
-
-          <ul>
-<li>For <strong>closed</strong> networks, the following server types are
-supported: M/M/m&ndash;FCFS, -/G/\infty, -/G/1&ndash;LCFS-PR,
--/G/1&ndash;PS and load-dependent variants.
-
-          <li>For <strong>open</strong> networks, the following server types are supported:
-M/M/m&ndash;FCFS, -/G/\infty and -/G/1&ndash;PS. General
-load-dependent nodes are <em>not</em> supported. Multiclass open networks
-do not support multiple server M/M/m nodes, but only
-single server M/M/1&ndash;FCFS.
-
-          <li>For <strong>mixed</strong> networks, the following server types are supported:
-M/M/1&ndash;FCFS, -/G/\infty and -/G/1&ndash;PS. General
-load-dependent nodes are <em>not</em> supported.
-
-        </ul>
-
-        <p><strong>INPUTS</strong>
-
-          <dl>
-<dt><var>N</var><dd>Number of requests in the system for closed networks. For
-single-class networks, <var>N</var> must be a scalar. For multiclass
-networks, <var>N</var><code>(c)</code> is the population size of closed class
-c.
-
-          <br><dt><var>lambda</var><dd>External arrival rate (scalar) for open networks. For single-class
-networks, <var>lambda</var> must be a scalar. For multiclass networks,
-<var>lambda</var><code>(c)</code> is the class c overall arrival rate.
-
-          <br><dt><var>QQ</var><dd>List of queues in the network. This must be a cell array
-with N elements, such that <var>QQ</var><code>{i}</code> is
-a struct produced by the <code>qnmknode</code> function.
-
-          <br><dt><var>Z</var><dd>External delay ("think time") for closed networks. Default 0.
-
-        </dl>
-
-        <p><strong>OUTPUTS</strong>
-
-          <dl>
-<dt><var>U</var><dd>If i is a FCFS node, then <var>U</var><code>(i)</code> is the utilization
-of service center i. If i is an IS node, then
-<var>U</var><code>(i)</code> is the <em>traffic intensity</em> defined as
-<var>X</var><code>(i)*</code><var>S</var><code>(i)</code>.
-
-          <br><dt><var>R</var><dd><var>R</var><code>(i)</code> is the average response time of service center i.
-
-          <br><dt><var>Q</var><dd><var>Q</var><code>(i)</code> is the average number of customers in service center
-i.
-
-          <br><dt><var>X</var><dd><var>X</var><code>(i)</code> is the throughput of service center i.
-
-        </dl>
-
-        <p>Note that for multiclass networks, the computed results are per-class
-utilization, response time, number of customers and throughput:
-<var>U</var><code>(c,k)</code>, <var>R</var><code>(c,k)</code>, <var>Q</var><code>(c,k)</code>,
-<var>X</var><code>(c,k)</code>,
-
-        </blockquote></div>
-
-<p class="noindent"><strong>EXAMPLE</strong>
-
-   <p>Let us consider a closed, multiclass network with C=2 classes
-and K=3 service center. Let the population be M=(2, 1)
-(class 1 has 2 requests, and class 2 has 1 request). The nodes are as
-follows:
-
-     <ul>
-<li>Node 1 is a M/M/1&ndash;FCFS node, with load-dependent service
-times. Service times are class-independent, and are defined by the
-matrix <code>[0.2 0.1 0.1; 0.2 0.1 0.1]</code>. Thus, <var>S</var><code>(1,2) =
-0.2</code> means that service time for class 1 customers where there are 2
-requests in 0.2. Note that service times are class-independent;
-
-     <li>Node 2 is a -/G/1&ndash;PS node, with service times
-S_1, 2 = 0.4 for class 1, and S_2, 2 = 0.6 for class 2
-requests;
-
-     <li>Node 3 is a -/G/\infty node (delay center), with service
-times S_1, 3=1 and S_2, 3=2 for class 1 and 2
-respectively.
-
-   </ul>
-
-   <p>After defining the per-class visit count <var>V</var> such that
-<var>V</var><code>(c,k)</code> is the visit count of class c requests to
-service center k.  We can define and solve the model as
-follows:
-
-<pre class="example"><pre class="verbatim">      QQ = { qnmknode( "m/m/m-fcfs", [0.2 0.1 0.1; 0.2 0.1 0.1] ), \
-             qnmknode( "-/g/1-ps", [0.4; 0.6] ), \
-             qnmknode( "-/g/inf", [1; 2] ) };
-      V = [ 1 0.6 0.4; \
-            1 0.3 0.7 ];
-      N = [ 2 1 ];
-      [U R Q X] = qnsolve( "closed", N, QQ, V );
+<h4 class="subsection">5.1.3 Closed Network Example</h4>
+
+<p>We now give a simple example on how the queueing toolbox can be used
+to analyze a closed network. Let us consider a simple closed network
+with K=3 M/M/1&ndash;FCFS centers. We denote with S_k
+the average service time at center k, k=1, 2, 3. We use
+S_1 = 1.0, S_2 = 2.0 and S_3 = 0.8. The routing
+of jobs within the network is described with a <em>routing
+probability matrix</em> \bf P. Specifically, a request completing
+service at center i is enqueued at center j with
+probability P_i, j.  We use the following routing matrix:
+
+<pre class="example">         / 0  0.3  0.7 \
+     P = | 1  0    0   |
+         \ 1  0    0   /
+</pre>
+   <p>The network above can be analyzed with the <samp><span class="command">qnclosed</span></samp> function
+see <a href="#doc_002dqnclosed">doc-qnclosed</a>. <samp><span class="command">qnclosed</span></samp> requires the following
+parameters:
+
+     <dl>
+<dt><var>N</var><dd>Number of requests in the network (since we are considering a closed
+network, the number of requests is fixed)
+
+     <br><dt><var>S</var><dd>Array of average service times at the centers: <var>S</var><code>(k)</code> is
+the average service time at center k.
+
+     <br><dt><var>V</var><dd>Array of visit ratios: <var>V</var><code>(k)</code> is the average number of
+visits to center k.
+
+   </dl>
+
+   <p>We can compute V_k from the routing probability matrix
+P_i, j using the <samp><span class="command">qnvisits</span></samp> function
+see <a href="#doc_002dqnvisits">doc-qnvisits</a>.  We can analyze the network for a given
+population size N (for example, N=10) as follows:
+
+<pre class="example">     <kbd>N = 10;</kbd>
+     <kbd>S = [1 2 0.8];</kbd>
+     <kbd>P = [0 0.3 0.7; 1 0 0; 1 0 0];</kbd>
+     <kbd>V = qnvisits(P);</kbd>
+     <kbd>[U R Q X] = qnclosed( N, S, V )</kbd>
+        &rArr; U = 0.99139 0.59483 0.55518
+        &rArr; R = 7.4360  4.7531  1.7500
+        &rArr; Q = 7.3719  1.4136  1.2144
+        &rArr; X = 0.99139 0.29742 0.69397
+</pre>
+   <p>The output of <samp><span class="command">qnclosed</span></samp> includes the vector of utilizations
+U_k at center k, response time R_k, average
+number of customers Q_k and throughput X_k. In our
+example, the throughput of center 1 is X_1 = 0.99139, and the
+average number of requests in center 3 is Q_3 = 1.2144. The
+utilization of center 1 is U_1 = 0.99139, which is the higher
+value among the service centers. Tus, center 1 is the <em>bottleneck
+device</em>.
+
+   <p>This network can also be analyzed with the <samp><span class="command">qnsolve</span></samp> function
+see <a href="#doc_002dqnsolve">doc-qnsolve</a>. <samp><span class="command">qnsolve</span></samp> can handle open, closed or
+mixed networks, and allows the network to be described in a very
+flexible way.  First, let <var>Q1</var>, <var>Q2</var> and <var>Q3</var> be the
+variables describing the service centers. Each variable is
+instantiated with the <samp><span class="command">qnmknode</span></samp> function.
+
+<pre class="example">     <kbd>Q1 = qnmknode( "m/m/m-fcfs", 1 );</kbd>
+     <kbd>Q2 = qnmknode( "m/m/m-fcfs", 2 );</kbd>
+     <kbd>Q3 = qnmknode( "m/m/m-fcfs", 0.8 );</kbd>
 </pre>
+   <p>The first parameter of <samp><span class="command">qnmknode</span></samp> is a string describing the
+type of the node. Here we use <code>"m/m/m-fcfs"</code> to denote a
+M/M/m&ndash;FCFS center. The second parameter gives the average
+service time. An optional third parameter can be used to specify the
+number m of service centers. If omitted, it is assumed
+m=1 (single-server node).
+
+   <p>Now, the network can be analyzed as follows:
+
+<pre class="example">     <kbd>N = 10;</kbd>
+     <kbd>V = [1 0.3 0.7];</kbd>
+     <kbd>[U R Q X] = qnsolve( "closed", N, { Q1, Q2, Q3 }, V )</kbd>
+        &rArr; U = 0.99139 0.59483 0.55518
+        &rArr; R = 7.4360  4.7531  1.7500
+        &rArr; Q = 7.3719  1.4136  1.2144
+        &rArr; X = 0.99139 0.29742 0.69397
+</pre>
+   <p>Of course, we get exactly the same results. Other functions can be used
+for closed networks, see <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a>.
+
+<h4 class="subsection">5.1.4 Open Network Example</h4>
+
+<p>Open networks can be analyzed in a similar way. Let us consider
+an open network with K=3 service centers, and routing
+probability matrix as follows:
+
+<pre class="example">         / 0  0.3  0.5 \
+     P = ! 1  0    0   |
+         \ 1  0    0   /
+</pre>
+   <p>In this network, requests can leave the system from center 1 with
+probability 1-(0.3+0.5) = 0.2. We suppose that external jobs
+arrive at center 1 with rate \lambda_1 = 0.15; there are no
+arrivals at centers 2 and 3.
+
+   <p>Similarly to closed networks, we first need to compute the visit
+counts V_k to center k. Again, we use the
+<samp><span class="command">qnvisits</span></samp> function as follows:
+
+<pre class="example">     <kbd>P = [0 0.3 0.5; 1 0 0; 1 0 0];</kbd>
+     <kbd>lambda = [0.15 0 0];</kbd>
+     <kbd>V = qnvisits(P, lambda)</kbd>
+        &rArr; V = 5.00000 1.50000 2.50000
+</pre>
+   <p class="noindent">where <var>lambda</var><code>(k)</code> is the arrival rate at center k,
+and <var>P</var> is the routing matrix. Assuming the same service times as
+in the previous example, the network can be analyzed with the
+<samp><span class="command">qnopen</span></samp> function see <a href="#doc_002dqnopen">doc-qnopen</a>, as follows:
+
+<pre class="example">     <kbd>S = [1 2 0.8];</kbd>
+     <kbd>[U R Q X] = qnopen( sum(lambda), S, V )</kbd>
+        &rArr; U = 0.75000 0.45000 0.30000
+        &rArr; R = 4.0000  3.6364  1.1429
+        &rArr; Q = 3.00000 0.81818 0.42857
+        &rArr; X = 0.75000 0.22500 0.37500
+</pre>
+   <p>The first parameter of the <samp><span class="command">qnopen</span></samp> function is the (scalar)
+aggregate arrival rate.
+
+   <p>Again, it is possible to use the <samp><span class="command">qnsolve</span></samp> high-level function:
+
+<pre class="example">     <kbd>Q1 = qnmknode( "m/m/m-fcfs", 1 );</kbd>
+     <kbd>Q2 = qnmknode( "m/m/m-fcfs", 2 );</kbd>
+     <kbd>Q3 = qnmknode( "m/m/m-fcfs", 0.8 );</kbd>
+     <kbd>lambda = [0.15 0 0];</kbd>
+     <kbd>[U R Q X] = qnsolve( "open", sum(lambda), { Q1, Q2, Q3 }, V )</kbd>
+        &rArr; U = 0.75000 0.45000 0.30000
+        &rArr; R = 4.0000  3.6364  1.1429
+        &rArr; Q = 3.00000 0.81818 0.42857
+        &rArr; X = 0.75000 0.22500 0.37500
 </pre>
    <div class="node">
 <a name="Algorithms-for-Product-Form-QNs"></a>
 <a name="Algorithms-for-Product_002dForm-QNs"></a>
 <p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Algorithms-for-non-Product_002dform-QNs">Algorithms for non Product-form QNs</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Generic-Algorithms">Generic Algorithms</a>,
+Next:&nbsp;<a rel="next" accesskey="n" href="#Algorithms-for-non-Product_002dForm-QNs">Algorithms for non Product-Form QNs</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="#Introduction-to-QNs">Introduction to QNs</a>,
 Up:&nbsp;<a rel="up" accesskey="u" href="#Queueing-Networks">Queueing Networks</a>
 
 </div>
 
-<h3 class="section">6.3 Algorithms for Product-Form QNs</h3>
+<h3 class="section">5.2 Algorithms for Product-Form QNs</h3>
 
 <p>Product-form queueing networks fulfill the following assumptions:
 
@@ -3049,7 +2762,7 @@
    </ul>
 
 <!-- Jackson Networks -->
-<h4 class="subsection">6.3.1 Jackson Networks</h4>
+<h4 class="subsection">5.2.1 Jackson Networks</h4>
 
 <p>Jackson networks satisfy the following conditions:
 
@@ -3082,12 +2795,14 @@
    <p class="noindent">where \pi_i(k_i) is the steady-state probability
 that there are k_i requests at service center i.
 
+   <p><a name="doc_002dqnjackson"></a>
+
 <div class="defun">
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnjackson</b> (<var>lambda, S, P </var>)<var><a name="index-qnjackson-107"></a></var><br>
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnjackson</b> (<var>lambda, S, P, m </var>)<var><a name="index-qnjackson-108"></a></var><br>
-&mdash; Function File: <var>pr</var> = <b>qnjackson</b> (<var>lambda, S, P, m, k</var>)<var><a name="index-qnjackson-109"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnjackson</b> (<var>lambda, S, P </var>)<var><a name="index-qnjackson-96"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnjackson</b> (<var>lambda, S, P, m </var>)<var><a name="index-qnjackson-97"></a></var><br>
+&mdash; Function File: <var>pr</var> = <b>qnjackson</b> (<var>lambda, S, P, m, k</var>)<var><a name="index-qnjackson-98"></a></var><br>
 <blockquote>
-        <p><a name="index-open-network_002c-single-class-110"></a><a name="index-Jackson-network-111"></a>
+        <p><a name="index-open-network_002c-single-class-99"></a><a name="index-Jackson-network-100"></a>
 With three or four input parameters, this function computes the
 steady-state occupancy probabilities for a Jackson network. With five
 input parameters, this function computes the steady-state probability
@@ -3169,9 +2884,9 @@
 Performance Evaluation with Computer Science Applications</cite>, Wiley,
 1998, pp. 284&ndash;287.
 
-   <p><a name="index-Bolch_002c-G_002e-112"></a><a name="index-Greiner_002c-S_002e-113"></a><a name="index-de-Meer_002c-H_002e-114"></a><a name="index-Trivedi_002c-K_002e-115"></a>
-
-<h4 class="subsection">6.3.2 The Convolution Algorithm</h4>
+   <p><a name="index-Bolch_002c-G_002e-101"></a><a name="index-Greiner_002c-S_002e-102"></a><a name="index-de-Meer_002c-H_002e-103"></a><a name="index-Trivedi_002c-K_002e-104"></a>
+
+<h4 class="subsection">5.2.2 The Convolution Algorithm</h4>
 
 <p>According to the BCMP theorem, the state probability of a closed
 single class queueing network with K nodes and N requests
@@ -3200,11 +2915,13 @@
 centers.
 
 <!-- The Convolution Algorithm -->
+   <p><a name="doc_002dqnconvolution"></a>
+
 <div class="defun">
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>G</var>] = <b>qnconvolution</b> (<var>N, S, V</var>)<var><a name="index-qnconvolution-116"></a></var><br>
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>G</var>] = <b>qnconvolution</b> (<var>N, S, V, m</var>)<var><a name="index-qnconvolution-117"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>G</var>] = <b>qnconvolution</b> (<var>N, S, V</var>)<var><a name="index-qnconvolution-105"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>G</var>] = <b>qnconvolution</b> (<var>N, S, V, m</var>)<var><a name="index-qnconvolution-106"></a></var><br>
 <blockquote>
-        <p><a name="index-closed-network-118"></a><a name="index-normalization-constant-119"></a><a name="index-convolution-algorithm-120"></a>
+        <p><a name="index-closed-network-107"></a><a name="index-normalization-constant-108"></a><a name="index-convolution-algorithm-109"></a>
 This function implements the <em>convolution algorithm</em> for
 computing steady-state performance measures of product-form,
 single-class closed queueing networks. Load-independent service
@@ -3297,19 +3014,20 @@
 16, number 9, september 1973,
 pp. 527&ndash;531. <a href="http://doi.acm.org/10.1145/362342.362345">http://doi.acm.org/10.1145/362342.362345</a>
 
-   <p><a name="index-Buzen_002c-J_002e-P_002e-121"></a>
+   <p><a name="index-Buzen_002c-J_002e-P_002e-110"></a>
 This implementation is based on G. Bolch, S. Greiner, H. de Meer and
 K. Trivedi, <cite>Queueing Networks and Markov Chains: Modeling and
 Performance Evaluation with Computer Science Applications</cite>, Wiley,
 1998, pp. 313&ndash;317.
 
-   <p><a name="index-Bolch_002c-G_002e-122"></a><a name="index-Greiner_002c-S_002e-123"></a><a name="index-de-Meer_002c-H_002e-124"></a><a name="index-Trivedi_002c-K_002e-125"></a>
+   <p><a name="index-Bolch_002c-G_002e-111"></a><a name="index-Greiner_002c-S_002e-112"></a><a name="index-de-Meer_002c-H_002e-113"></a><a name="index-Trivedi_002c-K_002e-114"></a>
 <!-- Convolution for load-dependent service centers -->
+<a name="doc_002dqnconvolutionld"></a>
 
 <div class="defun">
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>G</var>] = <b>qnconvolutionld</b> (<var>N, S, V</var>)<var><a name="index-qnconvolutionld-126"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>G</var>] = <b>qnconvolutionld</b> (<var>N, S, V</var>)<var><a name="index-qnconvolutionld-115"></a></var><br>
 <blockquote>
-        <p><a name="index-closed-network-127"></a><a name="index-normalization-constant-128"></a><a name="index-convolution-algorithm-129"></a><a name="index-load_002ddependent-service-center-130"></a>
+        <p><a name="index-closed-network-116"></a><a name="index-normalization-constant-117"></a><a name="index-convolution-algorithm-118"></a><a name="index-load_002ddependent-service-center-119"></a>
 This function implements the <em>convolution algorithm</em> for
 product-form, single-class closed queueing networks with general
 load-dependent service centers.
@@ -3369,7 +3087,7 @@
 Purdue University, feb, 1981 (revised). 
 <a href="http://www.cs.purdue.edu/research/technical_reports/1980/TR%2080-354.pdf">http://www.cs.purdue.edu/research/technical_reports/1980/TR%2080-354.pdf</a>
 
-   <p><a name="index-Schwetman_002c-H_002e-131"></a>
+   <p><a name="index-Schwetman_002c-H_002e-120"></a>
 M. Reiser, H. Kobayashi, <cite>On The Convolution Algorithm for
 Separable Queueing Networks</cite>, In Proceedings of the 1976 ACM
 SIGMETRICS Conference on Computer Performance Modeling Measurement and
@@ -3377,7 +3095,7 @@
 1976). SIGMETRICS '76. ACM, New York, NY,
 pp. 109&ndash;117. <a href="http://doi.acm.org/10.1145/800200.806187">http://doi.acm.org/10.1145/800200.806187</a>
 
-   <p><a name="index-Reiser_002c-M_002e-132"></a><a name="index-Kobayashi_002c-H_002e-133"></a>
+   <p><a name="index-Reiser_002c-M_002e-121"></a><a name="index-Kobayashi_002c-H_002e-122"></a>
 This implementation is based on G. Bolch, S. Greiner, H. de Meer and
 K. Trivedi, <cite>Queueing Networks and Markov Chains: Modeling and
 Performance Evaluation with Computer Science Applications</cite>, Wiley,
@@ -3389,16 +3107,18 @@
 function f_i defined in Schwetman, <code>Some Computational
 Aspects of Queueing Network Models</code>.
 
-   <p><a name="index-Bolch_002c-G_002e-134"></a><a name="index-Greiner_002c-S_002e-135"></a><a name="index-de-Meer_002c-H_002e-136"></a><a name="index-Trivedi_002c-K_002e-137"></a>
-
-<h4 class="subsection">6.3.3 Open networks</h4>
+   <p><a name="index-Bolch_002c-G_002e-123"></a><a name="index-Greiner_002c-S_002e-124"></a><a name="index-de-Meer_002c-H_002e-125"></a><a name="index-Trivedi_002c-K_002e-126"></a>
+
+<h4 class="subsection">5.2.3 Open networks</h4>
 
 <!-- Open networks with single class -->
+<p><a name="doc_002dqnopensingle"></a>
+
 <div class="defun">
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnopensingle</b> (<var>lambda, S, V</var>)<var><a name="index-qnopensingle-138"></a></var><br>
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnopensingle</b> (<var>lambda, S, V, m</var>)<var><a name="index-qnopensingle-139"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnopensingle</b> (<var>lambda, S, V</var>)<var><a name="index-qnopensingle-127"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnopensingle</b> (<var>lambda, S, V, m</var>)<var><a name="index-qnopensingle-128"></a></var><br>
 <blockquote>
-        <p><a name="index-open-network_002c-single-class-140"></a><a name="index-BCMP-network-141"></a>
+        <p><a name="index-open-network_002c-single-class-129"></a><a name="index-BCMP-network-130"></a>
 Analyze open, single class BCMP queueing networks.
 
         <p>This function works for a subset of BCMP single-class open networks
@@ -3459,7 +3179,7 @@
      </pre>
      <strong>See also:</strong> qnopen,qnclosed,qnvisits.
 
-     </blockquote></div>
+        </blockquote></div>
 
    <p>From the results computed by this function, it is possible to derive
 other quantities of interest as follows:
@@ -3493,14 +3213,16 @@
 Networks and Markov Chains: Modeling and Performance Evaluation with
 Computer Science Applications</cite>, Wiley, 1998.
 
-   <p><a name="index-Bolch_002c-G_002e-142"></a><a name="index-Greiner_002c-S_002e-143"></a><a name="index-de-Meer_002c-H_002e-144"></a><a name="index-Trivedi_002c-K_002e-145"></a>
+   <p><a name="index-Bolch_002c-G_002e-131"></a><a name="index-Greiner_002c-S_002e-132"></a><a name="index-de-Meer_002c-H_002e-133"></a><a name="index-Trivedi_002c-K_002e-134"></a>
 
 <!-- Open network with multiple classes -->
+   <p><a name="doc_002dqnopenmulti"></a>
+
 <div class="defun">
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnopenmulti</b> (<var>lambda, S, V</var>)<var><a name="index-qnopenmulti-146"></a></var><br>
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnopenmulti</b> (<var>lambda, S, V, m</var>)<var><a name="index-qnopenmulti-147"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnopenmulti</b> (<var>lambda, S, V</var>)<var><a name="index-qnopenmulti-135"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnopenmulti</b> (<var>lambda, S, V, m</var>)<var><a name="index-qnopenmulti-136"></a></var><br>
 <blockquote>
-        <p><a name="index-open-network_002c-multiple-classes-148"></a>
+        <p><a name="index-open-network_002c-multiple-classes-137"></a>
 Exact analysis of open, multiple-class BCMP networks. The network can
 be made of <em>single-server</em> queueing centers (FCFS, LCFS-PR or
 PS) or delay centers (IS). This function assumes a network with
@@ -3565,17 +3287,19 @@
 1984. <a href="http://www.cs.washington.edu/homes/lazowska/qsp/">http://www.cs.washington.edu/homes/lazowska/qsp/</a>. In
 particular, see section 7.4.1 ("Open Model Solution Techniques").
 
-   <p><a name="index-Lazowska_002c-E_002e-D_002e-149"></a><a name="index-Zahorjan_002c-J_002e-150"></a><a name="index-Graham_002c-G_002e-S_002e-151"></a><a name="index-Sevcik_002c-K_002e-C_002e-152"></a>
-
-<h4 class="subsection">6.3.4 Closed Networks</h4>
+   <p><a name="index-Lazowska_002c-E_002e-D_002e-138"></a><a name="index-Zahorjan_002c-J_002e-139"></a><a name="index-Graham_002c-G_002e-S_002e-140"></a><a name="index-Sevcik_002c-K_002e-C_002e-141"></a>
+
+<h4 class="subsection">5.2.4 Closed Networks</h4>
 
 <!-- MVA for single class, closed networks -->
+<p><a name="doc_002dqnclosedsinglemva"></a>
+
 <div class="defun">
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>G</var>] = <b>qnclosedsinglemva</b> (<var>N, S, V</var>)<var><a name="index-qnclosedsinglemva-153"></a></var><br>
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>G</var>] = <b>qnclosedsinglemva</b> (<var>N, S, V, m</var>)<var><a name="index-qnclosedsinglemva-154"></a></var><br>
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>G</var>] = <b>qnclosedsinglemva</b> (<var>N, S, V, m, Z</var>)<var><a name="index-qnclosedsinglemva-155"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>G</var>] = <b>qnclosedsinglemva</b> (<var>N, S, V</var>)<var><a name="index-qnclosedsinglemva-142"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>G</var>] = <b>qnclosedsinglemva</b> (<var>N, S, V, m</var>)<var><a name="index-qnclosedsinglemva-143"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>G</var>] = <b>qnclosedsinglemva</b> (<var>N, S, V, m, Z</var>)<var><a name="index-qnclosedsinglemva-144"></a></var><br>
 <blockquote>
-        <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-156"></a><a name="index-closed-network_002c-single-class-157"></a><a name="index-normalization-constant-158"></a>
+        <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-145"></a><a name="index-closed-network_002c-single-class-146"></a><a name="index-normalization-constant-147"></a>
 Analyze closed, single class queueing networks using the exact Mean
 Value Analysis (MVA) algorithm. The following queueing disciplines
 are supported: FCFS, LCFS-PR, PS and IS (Infinite Server). This
@@ -3649,7 +3373,7 @@
      </pre>
      <strong>See also:</strong> qnclosedsinglemvald.
 
-     </blockquote></div>
+        </blockquote></div>
 
    <p>From the results provided by this function, it is possible to derive
 other quantities of interest as follows:
@@ -3678,7 +3402,7 @@
 Multichain Queuing Networks</cite>, Journal of the ACM, vol. 27, n. 2, April
 1980, pp. 313&ndash;322. <a href="http://doi.acm.org/10.1145/322186.322195">http://doi.acm.org/10.1145/322186.322195</a>
 
-   <p><a name="index-Reiser_002c-M_002e-159"></a><a name="index-Lavenberg_002c-S_002e-S_002e-160"></a>
+   <p><a name="index-Reiser_002c-M_002e-148"></a><a name="index-Lavenberg_002c-S_002e-S_002e-149"></a>
 This implementation is described in R. Jain , <cite>The Art of Computer
 Systems Performance Analysis</cite>, Wiley, 1991, p. 577.  Multi-server nodes
 <!-- and the computation of @math{G(N)}, -->
@@ -3687,14 +3411,15 @@
 Performance Evaluation with Computer Science Applications</cite>, Wiley,
 1998, Section 8.2.1, "Single Class Queueing Networks".
 
-   <p><a name="index-Jain_002c-R_002e-161"></a><a name="index-Bolch_002c-G_002e-162"></a><a name="index-Greiner_002c-S_002e-163"></a><a name="index-de-Meer_002c-H_002e-164"></a><a name="index-Trivedi_002c-K_002e-165"></a>
+   <p><a name="index-Jain_002c-R_002e-150"></a><a name="index-Bolch_002c-G_002e-151"></a><a name="index-Greiner_002c-S_002e-152"></a><a name="index-de-Meer_002c-H_002e-153"></a><a name="index-Trivedi_002c-K_002e-154"></a>
 <!-- MVA for single class, closed networks with load dependent servers -->
+<a name="doc_002dqnclosedsinglemvald"></a>
 
 <div class="defun">
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedsinglemvald</b> (<var>N, S, V</var>)<var><a name="index-qnclosedsinglemvald-166"></a></var><br>
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedsinglemvald</b> (<var>N, S, V, Z</var>)<var><a name="index-qnclosedsinglemvald-167"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedsinglemvald</b> (<var>N, S, V</var>)<var><a name="index-qnclosedsinglemvald-155"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedsinglemvald</b> (<var>N, S, V, Z</var>)<var><a name="index-qnclosedsinglemvald-156"></a></var><br>
 <blockquote>
-        <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-168"></a><a name="index-closed-network_002c-single-class-169"></a><a name="index-load_002ddependent-service-center-170"></a>
+        <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-157"></a><a name="index-closed-network_002c-single-class-158"></a><a name="index-load_002ddependent-service-center-159"></a>
 Exact MVA algorithm for closed, single class queueing networks
 with load-dependent service centers. This function supports
 FCFS, LCFS-PR, PS and IS nodes. For networks with only fixed-rate
@@ -3752,14 +3477,15 @@
 1998, Section 8.2.4.1, &ldquo;Networks with Load-Deèpendent Service: Closed
 Networks&rdquo;.
 
-   <p><a name="index-Bolch_002c-G_002e-171"></a><a name="index-Greiner_002c-S_002e-172"></a><a name="index-de-Meer_002c-H_002e-173"></a><a name="index-Trivedi_002c-K_002e-174"></a>
+   <p><a name="index-Bolch_002c-G_002e-160"></a><a name="index-Greiner_002c-S_002e-161"></a><a name="index-de-Meer_002c-H_002e-162"></a><a name="index-Trivedi_002c-K_002e-163"></a>
 <!-- CMVA for single class, closed networks with a single load dependent servers -->
+<a name="doc_002dqncmva"></a>
 
 <div class="defun">
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qncmva</b> (<var>N, S, Sld, V</var>)<var><a name="index-qncmva-175"></a></var><br>
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qncmva</b> (<var>N, S, Sld, V, Z</var>)<var><a name="index-qncmva-176"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qncmva</b> (<var>N, S, Sld, V</var>)<var><a name="index-qncmva-164"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qncmva</b> (<var>N, S, Sld, V, Z</var>)<var><a name="index-qncmva-165"></a></var><br>
 <blockquote>
-        <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-177"></a><a name="index-CMVA-178"></a>
+        <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-166"></a><a name="index-CMVA-167"></a>
 Implementation of the Conditional MVA (CMVA) algorithm, a numerically
 stable variant of MVA for load-dependent servers. CMVA is described
 in G. Casale, <cite>A Note on Stable Flow-Equivalent Aggregation in
@@ -3813,17 +3539,19 @@
 closed networks</cite>. Queueing Syst. Theory Appl., 60:193–202, December
 2008.
 
-   <p><a name="index-Casale_002c-G_002e-179"></a>
+   <p><a name="index-Casale_002c-G_002e-168"></a>
 <!-- Approximate MVA for single class, closed networks -->
 
+   <p><a name="doc_002dqnclosedsinglemvaapprox"></a>
+
 <div class="defun">
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedsinglemvaapprox</b> (<var>N, S, V</var>)<var><a name="index-qnclosedsinglemvaapprox-180"></a></var><br>
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedsinglemvaapprox</b> (<var>N, S, V, m</var>)<var><a name="index-qnclosedsinglemvaapprox-181"></a></var><br>
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedsinglemvaapprox</b> (<var>N, S, V, m, Z</var>)<var><a name="index-qnclosedsinglemvaapprox-182"></a></var><br>
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedsinglemvaapprox</b> (<var>N, S, V, m, Z, tol</var>)<var><a name="index-qnclosedsinglemvaapprox-183"></a></var><br>
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedsinglemvaapprox</b> (<var>N, S, V, m, Z, tol, iter_max</var>)<var><a name="index-qnclosedsinglemvaapprox-184"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedsinglemvaapprox</b> (<var>N, S, V</var>)<var><a name="index-qnclosedsinglemvaapprox-169"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedsinglemvaapprox</b> (<var>N, S, V, m</var>)<var><a name="index-qnclosedsinglemvaapprox-170"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedsinglemvaapprox</b> (<var>N, S, V, m, Z</var>)<var><a name="index-qnclosedsinglemvaapprox-171"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedsinglemvaapprox</b> (<var>N, S, V, m, Z, tol</var>)<var><a name="index-qnclosedsinglemvaapprox-172"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedsinglemvaapprox</b> (<var>N, S, V, m, Z, tol, iter_max</var>)<var><a name="index-qnclosedsinglemvaapprox-173"></a></var><br>
 <blockquote>
-        <p><a name="index-Mean-Value-Analysys-_0028MVA_0029_002c-approximate-185"></a><a name="index-Approximate-MVA-186"></a><a name="index-Closed-network_002c-single-class-187"></a><a name="index-Closed-network_002c-approximate-analysis-188"></a>
+        <p><a name="index-Mean-Value-Analysys-_0028MVA_0029_002c-approximate-174"></a><a name="index-Approximate-MVA-175"></a><a name="index-Closed-network_002c-single-class-176"></a><a name="index-Closed-network_002c-approximate-analysis-177"></a>
 Analyze closed, single class queueing networks using the Approximate
 Mean Value Analysis (MVA) algorithm. This function is based on
 approximating the number of customers seen at center k when a
@@ -3902,18 +3630,20 @@
 1984. <a href="http://www.cs.washington.edu/homes/lazowska/qsp/">http://www.cs.washington.edu/homes/lazowska/qsp/</a>. In
 particular, see section 6.4.2.2 ("Approximate Solution Techniques").
 
-   <p><a name="index-Lazowska_002c-E_002e-D_002e-189"></a><a name="index-Zahorjan_002c-J_002e-190"></a><a name="index-Graham_002c-G_002e-S_002e-191"></a><a name="index-Sevcik_002c-K_002e-C_002e-192"></a>
+   <p><a name="index-Lazowska_002c-E_002e-D_002e-178"></a><a name="index-Zahorjan_002c-J_002e-179"></a><a name="index-Graham_002c-G_002e-S_002e-180"></a><a name="index-Sevcik_002c-K_002e-C_002e-181"></a>
 
 <!-- MVA for multiple class, closed networks -->
+   <p><a name="doc_002dqnclosedmultimva"></a>
+
 <div class="defun">
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimva</b> (<var>N, S </var>)<var><a name="index-qnclosedmultimva-193"></a></var><br>
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimva</b> (<var>N, S, V</var>)<var><a name="index-qnclosedmultimva-194"></a></var><br>
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimva</b> (<var>N, S, V, m</var>)<var><a name="index-qnclosedmultimva-195"></a></var><br>
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimva</b> (<var>N, S, V, m, Z</var>)<var><a name="index-qnclosedmultimva-196"></a></var><br>
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimva</b> (<var>N, S, P</var>)<var><a name="index-qnclosedmultimva-197"></a></var><br>
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimva</b> (<var>N, S, P, m</var>)<var><a name="index-qnclosedmultimva-198"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimva</b> (<var>N, S </var>)<var><a name="index-qnclosedmultimva-182"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimva</b> (<var>N, S, V</var>)<var><a name="index-qnclosedmultimva-183"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimva</b> (<var>N, S, V, m</var>)<var><a name="index-qnclosedmultimva-184"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimva</b> (<var>N, S, V, m, Z</var>)<var><a name="index-qnclosedmultimva-185"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimva</b> (<var>N, S, P</var>)<var><a name="index-qnclosedmultimva-186"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimva</b> (<var>N, S, P, m</var>)<var><a name="index-qnclosedmultimva-187"></a></var><br>
 <blockquote>
-        <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-199"></a><a name="index-closed-network_002c-multiple-classes-200"></a>
+        <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-188"></a><a name="index-closed-network_002c-multiple-classes-189"></a>
 Analyze closed, multiclass queueing networks with K service
 centers and C independent customer classes (chains) using the
 Mean Value Analysys (MVA) algorithm.
@@ -4043,7 +3773,7 @@
 Multichain Queuing Networks</cite>, Journal of the ACM, vol. 27, n. 2, April
 1980, pp. 313&ndash;322. <a href="http://doi.acm.org/10.1145/322186.322195">http://doi.acm.org/10.1145/322186.322195</a>
 
-   <p><a name="index-Reiser_002c-M_002e-201"></a><a name="index-Lavenberg_002c-S_002e-S_002e-202"></a>
+   <p><a name="index-Reiser_002c-M_002e-190"></a><a name="index-Lavenberg_002c-S_002e-S_002e-191"></a>
 This implementation is based on G. Bolch, S. Greiner, H. de Meer and
 K. Trivedi, <cite>Queueing Networks and Markov Chains: Modeling and
 Performance Evaluation with Computer Science Applications</cite>, Wiley,
@@ -4053,17 +3783,18 @@
 1984. <a href="http://www.cs.washington.edu/homes/lazowska/qsp/">http://www.cs.washington.edu/homes/lazowska/qsp/</a>. In
 particular, see section 7.4.2.1 ("Exact Solution Techniques").
 
-   <p><a name="index-Bolch_002c-G_002e-203"></a><a name="index-Greiner_002c-S_002e-204"></a><a name="index-de-Meer_002c-H_002e-205"></a><a name="index-Trivedi_002c-K_002e-206"></a><a name="index-Lazowska_002c-E_002e-D_002e-207"></a><a name="index-Zahorjan_002c-J_002e-208"></a><a name="index-Graham_002c-G_002e-S_002e-209"></a><a name="index-Sevcik_002c-K_002e-C_002e-210"></a>
+   <p><a name="index-Bolch_002c-G_002e-192"></a><a name="index-Greiner_002c-S_002e-193"></a><a name="index-de-Meer_002c-H_002e-194"></a><a name="index-Trivedi_002c-K_002e-195"></a><a name="index-Lazowska_002c-E_002e-D_002e-196"></a><a name="index-Zahorjan_002c-J_002e-197"></a><a name="index-Graham_002c-G_002e-S_002e-198"></a><a name="index-Sevcik_002c-K_002e-C_002e-199"></a>
 <!-- Approximate MVA, with Bard-Schweitzer approximation -->
+<a name="doc_002dqnclosedmultimvaapprox"></a>
 
 <div class="defun">
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimvaapprox</b> (<var>N, S, V</var>)<var><a name="index-qnclosedmultimvaapprox-211"></a></var><br>
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimvaapprox</b> (<var>N, S, V, m</var>)<var><a name="index-qnclosedmultimvaapprox-212"></a></var><br>
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimvaapprox</b> (<var>N, S, V, m, Z</var>)<var><a name="index-qnclosedmultimvaapprox-213"></a></var><br>
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimvaapprox</b> (<var>N, S, V, m, Z, tol</var>)<var><a name="index-qnclosedmultimvaapprox-214"></a></var><br>
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimvaapprox</b> (<var>N, S, V, m, Z, tol, iter_max</var>)<var><a name="index-qnclosedmultimvaapprox-215"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimvaapprox</b> (<var>N, S, V</var>)<var><a name="index-qnclosedmultimvaapprox-200"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimvaapprox</b> (<var>N, S, V, m</var>)<var><a name="index-qnclosedmultimvaapprox-201"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimvaapprox</b> (<var>N, S, V, m, Z</var>)<var><a name="index-qnclosedmultimvaapprox-202"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimvaapprox</b> (<var>N, S, V, m, Z, tol</var>)<var><a name="index-qnclosedmultimvaapprox-203"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosedmultimvaapprox</b> (<var>N, S, V, m, Z, tol, iter_max</var>)<var><a name="index-qnclosedmultimvaapprox-204"></a></var><br>
 <blockquote>
-        <p><a name="index-Mean-Value-Analysys-_0028MVA_0029_002c-approximate-216"></a><a name="index-Approximate-MVA-217"></a><a name="index-Closed-network_002c-multiple-classes-218"></a><a name="index-Closed-network_002c-approximate-analysis-219"></a>
+        <p><a name="index-Mean-Value-Analysys-_0028MVA_0029_002c-approximate-205"></a><a name="index-Approximate-MVA-206"></a><a name="index-Closed-network_002c-multiple-classes-207"></a><a name="index-Closed-network_002c-approximate-analysis-208"></a>
 Analyze closed, multiclass queueing networks with K service
 centers and C customer classes using the approximate Mean
 Value Analysys (MVA) algorithm.
@@ -4148,12 +3879,12 @@
 proc. 4th Int. Symp. on Modelling and Performance Evaluation of
 Computer Systems, feb. 1979, pp. 51&ndash;62.
 
-   <p><a name="index-Bard_002c-Y_002e-220"></a>
+   <p><a name="index-Bard_002c-Y_002e-209"></a>
 P. Schweitzer, <cite>Approximate Analysis of Multiclass Closed
 Networks of Queues</cite>, Proc. Int. Conf. on Stochastic Control and
 Optimization, jun 1979, pp. 25&ndash;29.
 
-   <p><a name="index-Schweitzer_002c-P_002e-221"></a>
+   <p><a name="index-Schweitzer_002c-P_002e-210"></a>
 This implementation is based on Edward D. Lazowska, John Zahorjan, G. 
 Scott Graham, and Kenneth C. Sevcik, <cite>Quantitative System
 Performance: Computer System Analysis Using Queueing Network Models</cite>,
@@ -4164,15 +3895,17 @@
 described above, as it computes the average response times R
 instead of the residence times.
 
-   <p><a name="index-Lazowska_002c-E_002e-D_002e-222"></a><a name="index-Zahorjan_002c-J_002e-223"></a><a name="index-Graham_002c-G_002e-S_002e-224"></a><a name="index-Sevcik_002c-K_002e-C_002e-225"></a>
-
-<h4 class="subsection">6.3.5 Mixed Networks</h4>
+   <p><a name="index-Lazowska_002c-E_002e-D_002e-211"></a><a name="index-Zahorjan_002c-J_002e-212"></a><a name="index-Graham_002c-G_002e-S_002e-213"></a><a name="index-Sevcik_002c-K_002e-C_002e-214"></a>
+
+<h4 class="subsection">5.2.5 Mixed Networks</h4>
 
 <!-- MVA for mixed networks -->
+<p><a name="doc_002dqnmix"></a>
+
 <div class="defun">
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnmix</b> (<var>lambda, N, S, V, m</var>)<var><a name="index-qnmix-226"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnmix</b> (<var>lambda, N, S, V, m</var>)<var><a name="index-qnmix-215"></a></var><br>
 <blockquote>
-        <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-227"></a><a name="index-mixed-network-228"></a>
+        <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-216"></a><a name="index-mixed-network-217"></a>
 Solution of mixed queueing networks through MVA. The network consists
 of K service centers (single-server or delay centers) and
 C independent customer chains. Both open and closed chains
@@ -4251,7 +3984,7 @@
      </pre>
      <strong>See also:</strong> qnclosedmultimva, qnopenmulti.
 
-     </blockquote></div>
+        </blockquote></div>
 
 <p class="noindent"><strong>REFERENCES</strong>
 
@@ -4263,33 +3996,35 @@
 Note that in this function we compute the mean response time R
 instead of the mean residence time as in the reference.
 
-   <p><a name="index-Lazowska_002c-E_002e-D_002e-229"></a><a name="index-Zahorjan_002c-J_002e-230"></a><a name="index-Graham_002c-G_002e-S_002e-231"></a><a name="index-Sevcik_002c-K_002e-C_002e-232"></a>
+   <p><a name="index-Lazowska_002c-E_002e-D_002e-218"></a><a name="index-Zahorjan_002c-J_002e-219"></a><a name="index-Graham_002c-G_002e-S_002e-220"></a><a name="index-Sevcik_002c-K_002e-C_002e-221"></a>
 Herb Schwetman, <cite>Implementing the Mean Value Algorithm for the
 Solution of Queueing Network Models</cite>, Technical Report CSD-TR-355,
 Department of Computer Sciences, Purdue University, feb 15, 1982,
 available at
 <a href="http://www.cs.purdue.edu/research/technical_reports/1980/TR%2080-355.pdf">http://www.cs.purdue.edu/research/technical_reports/1980/TR%2080-355.pdf</a>
 
-   <p><a name="index-Schwetman_002c-H_002e-233"></a>
+   <p><a name="index-Schwetman_002c-H_002e-222"></a>
 
 <div class="node">
-<a name="Algorithms-for-non-Product-form-QNs"></a>
-<a name="Algorithms-for-non-Product_002dform-QNs"></a>
+<a name="Algorithms-for-non-Product-Form-QNs"></a>
+<a name="Algorithms-for-non-Product_002dForm-QNs"></a>
 <p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#Bounds-on-performance">Bounds on performance</a>,
+Next:&nbsp;<a rel="next" accesskey="n" href="#Generic-Algorithms">Generic Algorithms</a>,
 Previous:&nbsp;<a rel="previous" accesskey="p" href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a>,
 Up:&nbsp;<a rel="up" accesskey="u" href="#Queueing-Networks">Queueing Networks</a>
 
 </div>
 
-<h3 class="section">6.4 Algorithms for non Product-Form QNs</h3>
+<h3 class="section">5.3 Algorithms for non Product-Form QNs</h3>
 
 <!-- MVABLO algorithm for approximate analysis of closed, single class -->
 <!-- QN with blocking -->
+<p><a name="doc_002dqnmvablo"></a>
+
 <div class="defun">
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnmvablo</b> (<var>N, S, M, P</var>)<var><a name="index-qnmvablo-234"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnmvablo</b> (<var>N, S, M, P</var>)<var><a name="index-qnmvablo-223"></a></var><br>
 <blockquote>
-        <p><a name="index-queueing-network-with-blocking-235"></a><a name="index-blocking-queueing-network-236"></a><a name="index-closed-network_002c-finite-capacity-237"></a>
+        <p><a name="index-queueing-network-with-blocking-224"></a><a name="index-blocking-queueing-network-225"></a><a name="index-closed-network_002c-finite-capacity-226"></a>
 MVA algorithm for closed queueing networks with blocking. <samp><span class="command">qnmvablo</span></samp>
 computes approximate utilization, response time and mean queue length
 for closed, single class queueing networks with blocking.
@@ -4336,7 +4071,7 @@
      </pre>
      <strong>See also:</strong> qnopen, qnclosed.
 
-     </blockquote></div>
+        </blockquote></div>
 
 <p class="noindent"><strong>REFERENCES</strong>
 
@@ -4344,15 +4079,16 @@
 Networks</cite>, IEEE Transactions on Software Engineering, vol. 14, n. 2,
 april 1988, pp. 418&ndash;428.  <a href="http://dx.doi.org/10.1109/32.4663">http://dx.doi.org/10.1109/32.4663</a>
 
-   <p><a name="index-Akyildiz_002c-I_002e-F_002e-238"></a>
+   <p><a name="index-Akyildiz_002c-I_002e-F_002e-227"></a>
+<a name="doc_002dqnmarkov"></a>
 
 <div class="defun">
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnmarkov</b> (<var>lambda, S, C, P</var>)<var><a name="index-qnmarkov-239"></a></var><br>
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnmarkov</b> (<var>lambda, S, C, P, m</var>)<var><a name="index-qnmarkov-240"></a></var><br>
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnmarkov</b> (<var>N, S, C, P</var>)<var><a name="index-qnmarkov-241"></a></var><br>
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnmarkov</b> (<var>N, S, C, P, m</var>)<var><a name="index-qnmarkov-242"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnmarkov</b> (<var>lambda, S, C, P</var>)<var><a name="index-qnmarkov-228"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnmarkov</b> (<var>lambda, S, C, P, m</var>)<var><a name="index-qnmarkov-229"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnmarkov</b> (<var>N, S, C, P</var>)<var><a name="index-qnmarkov-230"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnmarkov</b> (<var>N, S, C, P, m</var>)<var><a name="index-qnmarkov-231"></a></var><br>
 <blockquote>
-        <p><a name="index-closed-network_002c-multiple-classes-243"></a><a name="index-closed-network_002c-finite-capacity-244"></a><a name="index-blocking-queueing-network-245"></a><a name="index-RS-blocking-246"></a>
+        <p><a name="index-closed-network_002c-multiple-classes-232"></a><a name="index-closed-network_002c-finite-capacity-233"></a><a name="index-blocking-queueing-network-234"></a><a name="index-RS-blocking-235"></a>
 Compute utilization, response time, average queue length and
 throughput for open or closed queueing networks with finite capacity. 
 Blocking type is Repetitive-Service (RS). This function explicitly
@@ -4449,15 +4185,228 @@
         </blockquote></div>
 
 <div class="node">
+<a name="Generic-Algorithms"></a>
+<p><hr>
+Next:&nbsp;<a rel="next" accesskey="n" href="#Bounds-on-performance">Bounds on performance</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="#Algorithms-for-non-Product_002dForm-QNs">Algorithms for non Product-Form QNs</a>,
+Up:&nbsp;<a rel="up" accesskey="u" href="#Queueing-Networks">Queueing Networks</a>
+
+</div>
+
+<h3 class="section">5.4 Generic Algorithms</h3>
+
+<p>The <code>queueing</code> package provides a high-level function
+<code>qnsolve</code> for analyzing QN models. <code>qnsolve</code> takes as input
+a high-level description of the queueing model, and delegates the
+actual solution of the model to one of the lower-level function
+described in the previous section. <code>qnsolve</code> supports single or
+multiclass models, but at the moment only product-form networks can be
+analyzed. For non product-form networks See <a href="#Algorithms-for-non-Product_002dForm-QNs">Algorithms for non Product-Form QNs</a>.
+
+   <p><code>qnsolve</code> accepts two input parameters. The first one is the list
+of nodes, encoded as an Octave <em>cell array</em>. The second parameter
+is the vector of visit ratios <var>V</var>, which can be either a vector
+(for single-class models) or a two-dimensional matrix (for
+multiple-class models).
+
+   <p>Individual nodes in the network are structures build using the
+<code>qnmknode</code> function.
+
+   <p><a name="doc_002dqnmknode"></a>
+
+<div class="defun">
+&mdash; Function File: <var>Q</var> = <b>qnmknode</b> (<var>"m/m/m-fcfs", S</var>)<var><a name="index-qnmknode-236"></a></var><br>
+&mdash; Function File: <var>Q</var> = <b>qnmknode</b> (<var>"m/m/m-fcfs", S, m</var>)<var><a name="index-qnmknode-237"></a></var><br>
+&mdash; Function File: <var>Q</var> = <b>qnmknode</b> (<var>"m/m/1-lcfs-pr", S</var>)<var><a name="index-qnmknode-238"></a></var><br>
+&mdash; Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/1-ps", S</var>)<var><a name="index-qnmknode-239"></a></var><br>
+&mdash; Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/1-ps", S, s2</var>)<var><a name="index-qnmknode-240"></a></var><br>
+&mdash; Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/inf", S</var>)<var><a name="index-qnmknode-241"></a></var><br>
+&mdash; Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/inf", S, s2</var>)<var><a name="index-qnmknode-242"></a></var><br>
+<blockquote>
+        <p>Creates a node; this function can be used together with
+<code>qnsolve</code>. It is possible to create either single-class nodes
+(where there is only one customer class), or multiple-class nodes
+(where the service time is given per-class). Furthermore, it is
+possible to specify load-dependent service times.
+
+        <p><strong>INPUTS</strong>
+
+          <dl>
+<dt><var>S</var><dd>Average service time. S can be either a scalar, a row vector,
+a column vector or a two-dimensional matrix.
+
+               <ul>
+<li>If S is a scalar,
+it is assumed to be a load-independent, class-independent service time.
+
+               <li>If S is a column vector, then <var>S</var><code>(c)</code> is assumed to
+the the load-independent service time for class c customers.
+
+               <li>If S is a row vector, then <var>S</var><code>(n)</code> is assumed to be
+the class-independent service time at the node, when there are n
+requests.
+
+               <li>Finally, if <var>S</var> is a two-dimensional matrix, then
+<var>S</var><code>(c,n)</code> is assumed to be the class c service time
+when there are n requests at the node.
+
+          </ul>
+
+          <br><dt><var>m</var><dd>Number of identical servers at the node. Default is <var>m</var><code>=1</code>.
+
+          <br><dt><var>s2</var><dd>Squared coefficient of variation for the service time. Default is 1.0.
+
+        </dl>
+
+        <p>The returned struct <var>Q</var> should be considered opaque to the client.
+
+     <!-- The returned struct @var{Q} has the following fields: -->
+     <!-- @table @var -->
+     <!-- @item Q.node -->
+     <!-- (String) type of the node; valid values are @code{"m/m/m-fcfs"}, -->
+     <!-- @code{"-/g/1-lcfs-pr"}, @code{"-/g/1-ps"} (Processor-Sharing) -->
+     <!-- and @code{"-/g/inf"} (Infinite Server, or delay center). -->
+     <!-- @item Q.S -->
+     <!-- Average service time. If @code{@var{Q}.S} is a vector, then -->
+     <!-- @code{@var{Q}.S(i)} is the average service time at that node -->
+     <!-- if there are @math{i} requests. -->
+     <!-- @item Q.m -->
+     <!-- Number of identical servers at a @code{"m/m/m-fcfs"}. Default is 1. -->
+     <!-- @item Q.c -->
+     <!-- Number of customer classes. Default is 1. -->
+     <!-- @end table -->
+        <pre class="sp">
+     
+     </pre>
+     <strong>See also:</strong> qnsolve.
+
+        </blockquote></div>
+
+   <p>After the network has been defined, it is possible to solve it using
+<code>qnsolve</code>.
+
+   <p><a name="doc_002dqnsolve"></a>
+
+<div class="defun">
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnsolve</b> (<var>"closed", N, QQ, V</var>)<var><a name="index-qnsolve-243"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnsolve</b> (<var>"closed", N, QQ, V, Z</var>)<var><a name="index-qnsolve-244"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnsolve</b> (<var>"open", lambda, QQ, V</var>)<var><a name="index-qnsolve-245"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnsolve</b> (<var>"mixed", lambda, N, QQ, V</var>)<var><a name="index-qnsolve-246"></a></var><br>
+<blockquote>
+        <p>General evaluator of QN models. Networks can be open,
+closed or mixed; single as well as multiclass networks are supported.
+
+          <ul>
+<li>For <strong>closed</strong> networks, the following server types are
+supported: M/M/m&ndash;FCFS, -/G/\infty, -/G/1&ndash;LCFS-PR,
+-/G/1&ndash;PS and load-dependent variants.
+
+          <li>For <strong>open</strong> networks, the following server types are supported:
+M/M/m&ndash;FCFS, -/G/\infty and -/G/1&ndash;PS. General
+load-dependent nodes are <em>not</em> supported. Multiclass open networks
+do not support multiple server M/M/m nodes, but only
+single server M/M/1&ndash;FCFS.
+
+          <li>For <strong>mixed</strong> networks, the following server types are supported:
+M/M/1&ndash;FCFS, -/G/\infty and -/G/1&ndash;PS. General
+load-dependent nodes are <em>not</em> supported.
+
+        </ul>
+
+        <p><strong>INPUTS</strong>
+
+          <dl>
+<dt><var>N</var><dd>Number of requests in the system for closed networks. For
+single-class networks, <var>N</var> must be a scalar. For multiclass
+networks, <var>N</var><code>(c)</code> is the population size of closed class
+c.
+
+          <br><dt><var>lambda</var><dd>External arrival rate (scalar) for open networks. For single-class
+networks, <var>lambda</var> must be a scalar. For multiclass networks,
+<var>lambda</var><code>(c)</code> is the class c overall arrival rate.
+
+          <br><dt><var>QQ</var><dd>List of queues in the network. This must be a cell array
+with N elements, such that <var>QQ</var><code>{i}</code> is
+a struct produced by the <code>qnmknode</code> function.
+
+          <br><dt><var>Z</var><dd>External delay ("think time") for closed networks. Default 0.
+
+        </dl>
+
+        <p><strong>OUTPUTS</strong>
+
+          <dl>
+<dt><var>U</var><dd>If i is a FCFS node, then <var>U</var><code>(i)</code> is the utilization
+of service center i. If i is an IS node, then
+<var>U</var><code>(i)</code> is the <em>traffic intensity</em> defined as
+<var>X</var><code>(i)*</code><var>S</var><code>(i)</code>.
+
+          <br><dt><var>R</var><dd><var>R</var><code>(i)</code> is the average response time of service center i.
+
+          <br><dt><var>Q</var><dd><var>Q</var><code>(i)</code> is the average number of customers in service center
+i.
+
+          <br><dt><var>X</var><dd><var>X</var><code>(i)</code> is the throughput of service center i.
+
+        </dl>
+
+        <p>Note that for multiclass networks, the computed results are per-class
+utilization, response time, number of customers and throughput:
+<var>U</var><code>(c,k)</code>, <var>R</var><code>(c,k)</code>, <var>Q</var><code>(c,k)</code>,
+<var>X</var><code>(c,k)</code>,
+
+        </blockquote></div>
+
+<p class="noindent"><strong>EXAMPLE</strong>
+
+   <p>Let us consider a closed, multiclass network with C=2 classes
+and K=3 service center. Let the population be M=(2, 1)
+(class 1 has 2 requests, and class 2 has 1 request). The nodes are as
+follows:
+
+     <ul>
+<li>Node 1 is a M/M/1&ndash;FCFS node, with load-dependent service
+times. Service times are class-independent, and are defined by the
+matrix <code>[0.2 0.1 0.1; 0.2 0.1 0.1]</code>. Thus, <var>S</var><code>(1,2) =
+0.2</code> means that service time for class 1 customers where there are 2
+requests in 0.2. Note that service times are class-independent;
+
+     <li>Node 2 is a -/G/1&ndash;PS node, with service times
+S_1, 2 = 0.4 for class 1, and S_2, 2 = 0.6 for class 2
+requests;
+
+     <li>Node 3 is a -/G/\infty node (delay center), with service
+times S_1, 3=1 and S_2, 3=2 for class 1 and 2
+respectively.
+
+   </ul>
+
+   <p>After defining the per-class visit count <var>V</var> such that
+<var>V</var><code>(c,k)</code> is the visit count of class c requests to
+service center k.  We can define and solve the model as
+follows:
+
+<pre class="example"><pre class="verbatim">      QQ = { qnmknode( "m/m/m-fcfs", [0.2 0.1 0.1; 0.2 0.1 0.1] ), \
+             qnmknode( "-/g/1-ps", [0.4; 0.6] ), \
+             qnmknode( "-/g/inf", [1; 2] ) };
+      V = [ 1 0.6 0.4; \
+            1 0.3 0.7 ];
+      N = [ 2 1 ];
+      [U R Q X] = qnsolve( "closed", N, QQ, V );
+</pre>
+</pre>
+   <div class="node">
 <a name="Bounds-on-performance"></a>
 <p><hr>
 Next:&nbsp;<a rel="next" accesskey="n" href="#Utility-functions">Utility functions</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Algorithms-for-non-Product_002dform-QNs">Algorithms for non Product-form QNs</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="#Generic-Algorithms">Generic Algorithms</a>,
 Up:&nbsp;<a rel="up" accesskey="u" href="#Queueing-Networks">Queueing Networks</a>
 
 </div>
 
-<h3 class="section">6.5 Bounds on performance</h3>
+<h3 class="section">5.5 Bounds on performance</h3>
+
+<p><a name="doc_002dqnopenab"></a>
 
 <div class="defun">
 &mdash; Function File: [<var>Xu</var>, <var>Rl</var>] = <b>qnopenab</b> (<var>lambda, D</var>)<var><a name="index-qnopenab-247"></a></var><br>
@@ -4492,7 +4441,7 @@
      </pre>
      <strong>See also:</strong> qnopenbsb.
 
-     </blockquote></div>
+        </blockquote></div>
 
 <p class="noindent"><strong>REFERENCES</strong>
 
@@ -4503,6 +4452,7 @@
 particular, see section 5.2 ("Asymptotic Bounds").
 
    <p><a name="index-Lazowska_002c-E_002e-D_002e-250"></a><a name="index-Zahorjan_002c-J_002e-251"></a><a name="index-Graham_002c-G_002e-S_002e-252"></a><a name="index-Sevcik_002c-K_002e-C_002e-253"></a>
+<a name="doc_002dqnclosedab"></a>
 
 <div class="defun">
 &mdash; Function File: [<var>Xl</var>, <var>Xu</var>, <var>Rl</var>, <var>Ru</var>] = <b>qnclosedab</b> (<var>N, D</var>)<var><a name="index-qnclosedab-254"></a></var><br>
@@ -4551,6 +4501,8 @@
 
    <p><a name="index-Lazowska_002c-E_002e-D_002e-258"></a><a name="index-Zahorjan_002c-J_002e-259"></a><a name="index-Graham_002c-G_002e-S_002e-260"></a><a name="index-Sevcik_002c-K_002e-C_002e-261"></a>
 
+   <p><a name="doc_002dqnopenbsb"></a>
+
 <div class="defun">
 &mdash; Function File: [<var>Xu</var>, <var>Rl</var>, <var>Ru</var>] = <b>qnopenbsb</b> (<var>lambda, D</var>)<var><a name="index-qnopenbsb-262"></a></var><br>
 <blockquote>
@@ -4595,6 +4547,7 @@
 particular, see section 5.4 ("Balanced Systems Bounds").
 
    <p><a name="index-Lazowska_002c-E_002e-D_002e-265"></a><a name="index-Zahorjan_002c-J_002e-266"></a><a name="index-Graham_002c-G_002e-S_002e-267"></a><a name="index-Sevcik_002c-K_002e-C_002e-268"></a>
+<a name="doc_002dqnclosedbsb"></a>
 
 <div class="defun">
 &mdash; Function File: [<var>Xl</var>, <var>Xu</var>, <var>Rl</var>, <var>Ru</var>] = <b>qnclosedbsb</b> (<var>N, D</var>)<var><a name="index-qnclosedbsb-269"></a></var><br>
@@ -4633,6 +4586,8 @@
 
         </blockquote></div>
 
+   <p><a name="doc_002dqnclosedpb"></a>
+
 <div class="defun">
 &mdash; Function File: [<var>Xl</var>, <var>Xu</var>] = <b>qnclosedpb</b> (<var>N, D </var>)<var><a name="index-qnclosedpb-273"></a></var><br>
 <blockquote>
@@ -4679,6 +4634,7 @@
 Transactions on Computers, 57(6):780-794, June 2008.
 
    <p><a name="index-Hsieh_002c-C_002e-H-274"></a><a name="index-Lam_002c-S_002e-275"></a><a name="index-Casale_002c-G_002e-276"></a><a name="index-Muntz_002c-R_002e-R_002e-277"></a><a name="index-Serazzi_002c-G_002e-278"></a>
+<a name="doc_002dqnclosedgb"></a>
 
 <div class="defun">
 &mdash; Function File: [<var>Xl</var>, <var>Xu</var>, <var>Ql</var>, <var>Qu</var>] = <b>qnclosedgb</b> (<var>N, D, Z</var>)<var><a name="index-qnclosedgb-279"></a></var><br>
@@ -4737,9 +4693,11 @@
 
 </div>
 
-<h3 class="section">6.6 Utility functions</h3>
-
-<h4 class="subsection">6.6.1 Open or closed networks</h4>
+<h3 class="section">5.6 Utility functions</h3>
+
+<h4 class="subsection">5.6.1 Open or closed networks</h4>
+
+<p><a name="doc_002dqnclosed"></a>
 
 <div class="defun">
 &mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnclosed</b> (<var>N, S, V, <small class="dots">...</small></var>)<var><a name="index-qnclosed-285"></a></var><br>
@@ -4777,7 +4735,7 @@
      </pre>
      <strong>See also:</strong> qnclosedsinglemva, qnclosedsinglemvald, qnclosedmultimva.
 
-     </blockquote></div>
+        </blockquote></div>
 
 <p class="noindent"><strong>EXAMPLE</strong>
 
@@ -4810,7 +4768,9 @@
       legend("location","southeast");
 </pre>
 </pre>
-   <div class="defun">
+   <p><a name="doc_002dqnopen"></a>
+
+<div class="defun">
 &mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnopen</b> (<var>lambda, S, V, <small class="dots">...</small></var>)<var><a name="index-qnopen-287"></a></var><br>
 <blockquote>
         <p><a name="index-open-network-288"></a>
@@ -4828,7 +4788,7 @@
         </blockquote></div>
 
 <!-- Compute the visit counts -->
-<h4 class="subsection">6.6.2 Computation of the visit counts</h4>
+<h4 class="subsection">5.6.2 Computation of the visit counts</h4>
 
 <p>For single-class networks the average number of visits satisfy the
 following equation:
@@ -4863,6 +4823,8 @@
 \lambda_s, j is the overall external arrival rate to the whole system,
 then P_0, s, j = \lambda_s, j / \lambda.
 
+   <p><a name="doc_002dqnvisits"></a>
+
 <div class="defun">
 &mdash; Function File: [<var>V</var> <var>ch</var>] = <b>qnvisits</b> (<var>P</var>)<var><a name="index-qnvisits-289"></a></var><br>
 &mdash; Function File: <var>V</var> = <b>qnvisits</b> (<var>P, lambda</var>)<var><a name="index-qnvisits-290"></a></var><br>
@@ -4924,7 +4886,9 @@
       [U R Q X] = qnopensingle( sum(lambda), S, V, m );
 </pre>
 </pre>
-   <h4 class="subsection">6.6.3 Other utility functions</h4>
+   <h4 class="subsection">5.6.3 Other utility functions</h4>
+
+<p><a name="doc_002dpopulation_005fmix"></a>
 
 <div class="defun">
 &mdash; Function File: pop_mix = <b>population_mix</b> (<var>k, N</var>)<var><a name="index-population_005fmix-291"></a></var><br>
@@ -4974,7 +4938,7 @@
      </pre>
      <strong>See also:</strong> qnmvapop.
 
-     </blockquote></div>
+        </blockquote></div>
 
 <p class="noindent"><strong>REFERENCES</strong>
 
@@ -4992,6 +4956,7 @@
 <a href="http://arantxa.ii.uam.es/~ssantini/writing/notes/s668_summation.pdf">http://arantxa.ii.uam.es/~ssantini/writing/notes/s668_summation.pdf</a>
 
    <p><a name="index-Schwetman_002c-H_002e-294"></a><a name="index-Santini_002c-S_002e-295"></a>
+<a name="doc_002dqnmvapop"></a>
 
 <div class="defun">
 &mdash; Function File: <var>H</var> = <b>qnmvapop</b> (<var>N</var>)<var><a name="index-qnmvapop-296"></a></var><br>
@@ -5061,7 +5026,7 @@
 
 </div>
 
-<h2 class="chapter">7 References</h2>
+<h2 class="chapter">6 References</h2>
 
      <dl>
 <dt>[Aky88]<dd>Ian F. Akyildiz, <cite>Mean Value Analysis for Blocking Queueing
@@ -5089,7 +5054,7 @@
 Queueing Networks</cite>, IEEE Transactions on Computers, 57(6):780-794,
 June 2008. DOI <a href="http://doi.ieeecomputersociety.org/10.1109/TC.2008.37">10.1109/TC.2008.37</a>
 
-     <br><dt>[GrSn97]<dd>Charles M. Grinstead, J. Laurie Snell, (July 1997). <cite>Introduction
+     <br><dt><a name="GrSn97"></a>[GrSn97]<dd>Charles M. Grinstead, J. Laurie Snell, (July 1997). <cite>Introduction
 to Probability</cite>. American Mathematical Society. ISBN 978-0821807491;
 this excellent textbook is <a href="http://www.dartmouth.edu/~chance/teaching_aids/books_articles/probability_book/amsbook.mac.pdf">available in PDF format</a>
 and can be used under the terms of the <a href="http://www.gnu.org/copyleft/fdl.html">GNU Free Documentation License (FDL)</a>
@@ -5865,29 +5830,29 @@
 
 <ul class="index-cp" compact>
 <li><a href="#index-Absorption-probabilities-23">Absorption probabilities</a>: <a href="#Mean-time-to-absorption-_0028DTMC_0029">Mean time to absorption (DTMC)</a></li>
-<li><a href="#index-Approximate-MVA-186">Approximate MVA</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-Approximate-MVA-175">Approximate MVA</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
 <li><a href="#index-Asymmetric-_0040math_007bM_002fM_002fm_007d-system-86">Asymmetric M/M/m system</a>: <a href="#The-Asymmetric-M_002fM_002fm-System">The Asymmetric M/M/m System</a></li>
-<li><a href="#index-BCMP-network-141">BCMP network</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-BCMP-network-130">BCMP network</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
 <li><a href="#index-Birth_002ddeath-process-38">Birth-death process</a>: <a href="#Birth_002ddeath-process-_0028CTMC_0029">Birth-death process (CTMC)</a></li>
 <li><a href="#index-Birth_002ddeath-process-13">Birth-death process</a>: <a href="#Birth_002ddeath-process-_0028DTMC_0029">Birth-death process (DTMC)</a></li>
-<li><a href="#index-blocking-queueing-network-236">blocking queueing network</a>: <a href="#Algorithms-for-non-Product_002dform-QNs">Algorithms for non Product-form QNs</a></li>
+<li><a href="#index-blocking-queueing-network-225">blocking queueing network</a>: <a href="#Algorithms-for-non-Product_002dForm-QNs">Algorithms for non Product-Form QNs</a></li>
 <li><a href="#index-bounds_002c-asymptotic-248">bounds, asymptotic</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
 <li><a href="#index-bounds_002c-balanced-system-263">bounds, balanced system</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
 <li><a href="#index-bounds_002c-geometric-280">bounds, geometric</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
 <li><a href="#index-closed-network-286">closed network</a>: <a href="#Utility-functions">Utility functions</a></li>
 <li><a href="#index-closed-network-257">closed network</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-closed-network-118">closed network</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-Closed-network_002c-approximate-analysis-188">Closed network, approximate analysis</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-closed-network_002c-finite-capacity-237">closed network, finite capacity</a>: <a href="#Algorithms-for-non-Product_002dform-QNs">Algorithms for non Product-form QNs</a></li>
+<li><a href="#index-closed-network-107">closed network</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-Closed-network_002c-approximate-analysis-177">Closed network, approximate analysis</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-closed-network_002c-finite-capacity-226">closed network, finite capacity</a>: <a href="#Algorithms-for-non-Product_002dForm-QNs">Algorithms for non Product-Form QNs</a></li>
 <li><a href="#index-closed-network_002c-multiple-classes-293">closed network, multiple classes</a>: <a href="#Utility-functions">Utility functions</a></li>
-<li><a href="#index-closed-network_002c-multiple-classes-243">closed network, multiple classes</a>: <a href="#Algorithms-for-non-Product_002dform-QNs">Algorithms for non Product-form QNs</a></li>
-<li><a href="#index-Closed-network_002c-multiple-classes-218">Closed network, multiple classes</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-closed-network_002c-multiple-classes-200">closed network, multiple classes</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-Closed-network_002c-single-class-187">Closed network, single class</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-closed-network_002c-single-class-157">closed network, single class</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-CMVA-178">CMVA</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-closed-network_002c-multiple-classes-232">closed network, multiple classes</a>: <a href="#Algorithms-for-non-Product_002dForm-QNs">Algorithms for non Product-Form QNs</a></li>
+<li><a href="#index-Closed-network_002c-multiple-classes-207">Closed network, multiple classes</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-closed-network_002c-multiple-classes-189">closed network, multiple classes</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-Closed-network_002c-single-class-176">Closed network, single class</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-closed-network_002c-single-class-146">closed network, single class</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-CMVA-167">CMVA</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
 <li><a href="#index-Continuous-time-Markov-chain-33">Continuous time Markov chain</a>: <a href="#State-occupancy-probabilities-_0028CTMC_0029">State occupancy probabilities (CTMC)</a></li>
-<li><a href="#index-convolution-algorithm-120">convolution algorithm</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-convolution-algorithm-109">convolution algorithm</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
 <li><a href="#index-copyright-302">copyright</a>: <a href="#Copying">Copying</a></li>
 <li><a href="#index-Discrete-time-Markov-chain-6">Discrete time Markov chain</a>: <a href="#State-occupancy-probabilities-_0028DTMC_0029">State occupancy probabilities (DTMC)</a></li>
 <li><a href="#index-Expected-sojourn-time-42">Expected sojourn time</a>: <a href="#Expected-sojourn-times-_0028CTMC_0029">Expected sojourn times (CTMC)</a></li>
@@ -5895,8 +5860,8 @@
 <li><a href="#index-First-passage-times-56">First passage times</a>: <a href="#First-passage-times-_0028CTMC_0029">First passage times (CTMC)</a></li>
 <li><a href="#index-First-passage-times-26">First passage times</a>: <a href="#First-passage-times-_0028DTMC_0029">First passage times (DTMC)</a></li>
 <li><a href="#index-Fundamental-matrix-24">Fundamental matrix</a>: <a href="#Mean-time-to-absorption-_0028DTMC_0029">Mean time to absorption (DTMC)</a></li>
-<li><a href="#index-Jackson-network-111">Jackson network</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-load_002ddependent-service-center-130">load-dependent service center</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-Jackson-network-100">Jackson network</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-load_002ddependent-service-center-119">load-dependent service center</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
 <li><a href="#index-g_t_0040math_007bM_002fG_002f1_007d-system-92">M/G/1 system</a>: <a href="#The-M_002fG_002f1-System">The M/G/1 System</a></li>
 <li><a href="#index-g_t_0040math_007bM_002fH_005fm_002f1_007d-system-94">M/H_m/1 system</a>: <a href="#The-M_002fHm_002f1-System">The M/Hm/1 System</a></li>
 <li><a href="#index-g_t_0040math_007bM_002fM_002f1_007d-system-58">M/M/1 system</a>: <a href="#The-M_002fM_002f1-System">The M/M/1 System</a></li>
@@ -5919,18 +5884,18 @@
 <li><a href="#index-Mean-recurrence-times-27">Mean recurrence times</a>: <a href="#First-passage-times-_0028DTMC_0029">First passage times (DTMC)</a></li>
 <li><a href="#index-Mean-time-to-absorption-49">Mean time to absorption</a>: <a href="#Mean-time-to-absorption-_0028CTMC_0029">Mean time to absorption (CTMC)</a></li>
 <li><a href="#index-Mean-time-to-absorption-22">Mean time to absorption</a>: <a href="#Mean-time-to-absorption-_0028DTMC_0029">Mean time to absorption (DTMC)</a></li>
-<li><a href="#index-Mean-Value-Analysys-_0028MVA_0029-156">Mean Value Analysys (MVA)</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-Mean-Value-Analysys-_0028MVA_0029_002c-approximate-185">Mean Value Analysys (MVA), approximate</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-mixed-network-228">mixed network</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-normalization-constant-119">normalization constant</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-Mean-Value-Analysys-_0028MVA_0029-145">Mean Value Analysys (MVA)</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-Mean-Value-Analysys-_0028MVA_0029_002c-approximate-174">Mean Value Analysys (MVA), approximate</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-mixed-network-217">mixed network</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-normalization-constant-108">normalization constant</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
 <li><a href="#index-open-network-288">open network</a>: <a href="#Utility-functions">Utility functions</a></li>
 <li><a href="#index-open-network-249">open network</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-open-network_002c-multiple-classes-148">open network, multiple classes</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-open-network_002c-single-class-110">open network, single class</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-open-network_002c-multiple-classes-137">open network, multiple classes</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-open-network_002c-single-class-99">open network, single class</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
 <li><a href="#index-population-mix-292">population mix</a>: <a href="#Utility-functions">Utility functions</a></li>
-<li><a href="#index-queueing-network-with-blocking-235">queueing network with blocking</a>: <a href="#Algorithms-for-non-Product_002dform-QNs">Algorithms for non Product-form QNs</a></li>
+<li><a href="#index-queueing-network-with-blocking-224">queueing network with blocking</a>: <a href="#Algorithms-for-non-Product_002dForm-QNs">Algorithms for non Product-Form QNs</a></li>
 <li><a href="#index-queueing-networks-95">queueing networks</a>: <a href="#Queueing-Networks">Queueing Networks</a></li>
-<li><a href="#index-RS-blocking-246">RS blocking</a>: <a href="#Algorithms-for-non-Product_002dform-QNs">Algorithms for non Product-form QNs</a></li>
+<li><a href="#index-RS-blocking-235">RS blocking</a>: <a href="#Algorithms-for-non-Product_002dForm-QNs">Algorithms for non Product-Form QNs</a></li>
 <li><a href="#index-Stationary-probabilities-35">Stationary probabilities</a>: <a href="#State-occupancy-probabilities-_0028CTMC_0029">State occupancy probabilities (CTMC)</a></li>
 <li><a href="#index-Stationary-probabilities-8">Stationary probabilities</a>: <a href="#State-occupancy-probabilities-_0028DTMC_0029">State occupancy probabilities (DTMC)</a></li>
 <li><a href="#index-Time_002dalveraged-sojourn-time-46">Time-alveraged sojourn time</a>: <a href="#Time_002daveraged-expected-sojourn-times-_0028CTMC_0029">Time-averaged expected sojourn times (CTMC)</a></li>
@@ -5972,34 +5937,34 @@
 <li><a href="#index-qnclosedab-254"><code>qnclosedab</code></a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
 <li><a href="#index-qnclosedbsb-269"><code>qnclosedbsb</code></a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
 <li><a href="#index-qnclosedgb-279"><code>qnclosedgb</code></a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-qnclosedmultimva-193"><code>qnclosedmultimva</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-qnclosedmultimvaapprox-211"><code>qnclosedmultimvaapprox</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-qnclosedmultimva-182"><code>qnclosedmultimva</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-qnclosedmultimvaapprox-200"><code>qnclosedmultimvaapprox</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
 <li><a href="#index-qnclosedpb-273"><code>qnclosedpb</code></a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-qnclosedsinglemva-153"><code>qnclosedsinglemva</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-qnclosedsinglemvaapprox-180"><code>qnclosedsinglemvaapprox</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-qnclosedsinglemvald-166"><code>qnclosedsinglemvald</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-qncmva-175"><code>qncmva</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-qnconvolution-116"><code>qnconvolution</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-qnconvolutionld-126"><code>qnconvolutionld</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-qnjackson-107"><code>qnjackson</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-qnmarkov-239"><code>qnmarkov</code></a>: <a href="#Algorithms-for-non-Product_002dform-QNs">Algorithms for non Product-form QNs</a></li>
+<li><a href="#index-qnclosedsinglemva-142"><code>qnclosedsinglemva</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-qnclosedsinglemvaapprox-169"><code>qnclosedsinglemvaapprox</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-qnclosedsinglemvald-155"><code>qnclosedsinglemvald</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-qncmva-164"><code>qncmva</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-qnconvolution-105"><code>qnconvolution</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-qnconvolutionld-115"><code>qnconvolutionld</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-qnjackson-96"><code>qnjackson</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-qnmarkov-228"><code>qnmarkov</code></a>: <a href="#Algorithms-for-non-Product_002dForm-QNs">Algorithms for non Product-Form QNs</a></li>
 <li><a href="#index-qnmg1-91"><code>qnmg1</code></a>: <a href="#The-M_002fG_002f1-System">The M/G/1 System</a></li>
 <li><a href="#index-qnmh1-93"><code>qnmh1</code></a>: <a href="#The-M_002fHm_002f1-System">The M/Hm/1 System</a></li>
-<li><a href="#index-qnmix-226"><code>qnmix</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-qnmknode-96"><code>qnmknode</code></a>: <a href="#Generic-Algorithms">Generic Algorithms</a></li>
+<li><a href="#index-qnmix-215"><code>qnmix</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-qnmknode-236"><code>qnmknode</code></a>: <a href="#Generic-Algorithms">Generic Algorithms</a></li>
 <li><a href="#index-qnmm1-57"><code>qnmm1</code></a>: <a href="#The-M_002fM_002f1-System">The M/M/1 System</a></li>
 <li><a href="#index-qnmm1k-77"><code>qnmm1k</code></a>: <a href="#The-M_002fM_002f1_002fK-System">The M/M/1/K System</a></li>
 <li><a href="#index-qnmminf-70"><code>qnmminf</code></a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li>
 <li><a href="#index-qnmmm-63"><code>qnmmm</code></a>: <a href="#The-M_002fM_002fm-System">The M/M/m System</a></li>
 <li><a href="#index-qnmmmk-79"><code>qnmmmk</code></a>: <a href="#The-M_002fM_002fm_002fK-System">The M/M/m/K System</a></li>
-<li><a href="#index-qnmvablo-234"><code>qnmvablo</code></a>: <a href="#Algorithms-for-non-Product_002dform-QNs">Algorithms for non Product-form QNs</a></li>
+<li><a href="#index-qnmvablo-223"><code>qnmvablo</code></a>: <a href="#Algorithms-for-non-Product_002dForm-QNs">Algorithms for non Product-Form QNs</a></li>
 <li><a href="#index-qnmvapop-296"><code>qnmvapop</code></a>: <a href="#Utility-functions">Utility functions</a></li>
 <li><a href="#index-qnopen-287"><code>qnopen</code></a>: <a href="#Utility-functions">Utility functions</a></li>
 <li><a href="#index-qnopenab-247"><code>qnopenab</code></a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
 <li><a href="#index-qnopenbsb-262"><code>qnopenbsb</code></a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-qnopenmulti-146"><code>qnopenmulti</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-qnopensingle-138"><code>qnopensingle</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-qnsolve-103"><code>qnsolve</code></a>: <a href="#Generic-Algorithms">Generic Algorithms</a></li>
+<li><a href="#index-qnopenmulti-135"><code>qnopenmulti</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-qnopensingle-127"><code>qnopensingle</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-qnsolve-243"><code>qnsolve</code></a>: <a href="#Generic-Algorithms">Generic Algorithms</a></li>
 <li><a href="#index-qnvisits-289"><code>qnvisits</code></a>: <a href="#Utility-functions">Utility functions</a></li>
    </ul><div class="node">
 <a name="Author-Index"></a>
@@ -6014,19 +5979,19 @@
 
 
 <ul class="index-au" compact>
-<li><a href="#index-Akyildiz_002c-I_002e-F_002e-238">Akyildiz, I. F.</a>: <a href="#Algorithms-for-non-Product_002dform-QNs">Algorithms for non Product-form QNs</a></li>
-<li><a href="#index-Bard_002c-Y_002e-220">Bard, Y.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-Bolch_002c-G_002e-112">Bolch, G.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-Akyildiz_002c-I_002e-F_002e-227">Akyildiz, I. F.</a>: <a href="#Algorithms-for-non-Product_002dForm-QNs">Algorithms for non Product-Form QNs</a></li>
+<li><a href="#index-Bard_002c-Y_002e-209">Bard, Y.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-Bolch_002c-G_002e-101">Bolch, G.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
 <li><a href="#index-Bolch_002c-G_002e-87">Bolch, G.</a>: <a href="#The-Asymmetric-M_002fM_002fm-System">The Asymmetric M/M/m System</a></li>
 <li><a href="#index-Bolch_002c-G_002e-81">Bolch, G.</a>: <a href="#The-M_002fM_002fm_002fK-System">The M/M/m/K System</a></li>
 <li><a href="#index-Bolch_002c-G_002e-73">Bolch, G.</a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li>
 <li><a href="#index-Bolch_002c-G_002e-66">Bolch, G.</a>: <a href="#The-M_002fM_002fm-System">The M/M/m System</a></li>
 <li><a href="#index-Bolch_002c-G_002e-59">Bolch, G.</a>: <a href="#The-M_002fM_002f1-System">The M/M/1 System</a></li>
 <li><a href="#index-Bolch_002c-G_002e-50">Bolch, G.</a>: <a href="#Mean-time-to-absorption-_0028CTMC_0029">Mean time to absorption (CTMC)</a></li>
-<li><a href="#index-Buzen_002c-J_002e-P_002e-121">Buzen, J. P.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-Buzen_002c-J_002e-P_002e-110">Buzen, J. P.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
 <li><a href="#index-Casale_002c-G_002e-276">Casale, G.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-Casale_002c-G_002e-179">Casale, G.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-de-Meer_002c-H_002e-114">de Meer, H.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-Casale_002c-G_002e-168">Casale, G.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-de-Meer_002c-H_002e-103">de Meer, H.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
 <li><a href="#index-de-Meer_002c-H_002e-89">de Meer, H.</a>: <a href="#The-Asymmetric-M_002fM_002fm-System">The Asymmetric M/M/m System</a></li>
 <li><a href="#index-de-Meer_002c-H_002e-83">de Meer, H.</a>: <a href="#The-M_002fM_002fm_002fK-System">The M/M/m/K System</a></li>
 <li><a href="#index-de-Meer_002c-H_002e-75">de Meer, H.</a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li>
@@ -6034,8 +5999,8 @@
 <li><a href="#index-de-Meer_002c-H_002e-61">de Meer, H.</a>: <a href="#The-M_002fM_002f1-System">The M/M/1 System</a></li>
 <li><a href="#index-de-Meer_002c-H_002e-52">de Meer, H.</a>: <a href="#Mean-time-to-absorption-_0028CTMC_0029">Mean time to absorption (CTMC)</a></li>
 <li><a href="#index-Graham_002c-G_002e-S_002e-252">Graham, G. S.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-Graham_002c-G_002e-S_002e-151">Graham, G. S.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-Greiner_002c-S_002e-113">Greiner, S.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-Graham_002c-G_002e-S_002e-140">Graham, G. S.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-Greiner_002c-S_002e-102">Greiner, S.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
 <li><a href="#index-Greiner_002c-S_002e-88">Greiner, S.</a>: <a href="#The-Asymmetric-M_002fM_002fm-System">The Asymmetric M/M/m System</a></li>
 <li><a href="#index-Greiner_002c-S_002e-82">Greiner, S.</a>: <a href="#The-M_002fM_002fm_002fK-System">The M/M/m/K System</a></li>
 <li><a href="#index-Greiner_002c-S_002e-74">Greiner, S.</a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li>
@@ -6043,22 +6008,22 @@
 <li><a href="#index-Greiner_002c-S_002e-60">Greiner, S.</a>: <a href="#The-M_002fM_002f1-System">The M/M/1 System</a></li>
 <li><a href="#index-Greiner_002c-S_002e-51">Greiner, S.</a>: <a href="#Mean-time-to-absorption-_0028CTMC_0029">Mean time to absorption (CTMC)</a></li>
 <li><a href="#index-Hsieh_002c-C_002e-H-274">Hsieh, C. H</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-Jain_002c-R_002e-161">Jain, R.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-Kobayashi_002c-H_002e-133">Kobayashi, H.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-Jain_002c-R_002e-150">Jain, R.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-Kobayashi_002c-H_002e-122">Kobayashi, H.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
 <li><a href="#index-Lam_002c-S_002e-275">Lam, S.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-Lavenberg_002c-S_002e-S_002e-160">Lavenberg, S. S.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-Lavenberg_002c-S_002e-S_002e-149">Lavenberg, S. S.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
 <li><a href="#index-Lazowska_002c-E_002e-D_002e-250">Lazowska, E. D.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-Lazowska_002c-E_002e-D_002e-149">Lazowska, E. D.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-Lazowska_002c-E_002e-D_002e-138">Lazowska, E. D.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
 <li><a href="#index-Muntz_002c-R_002e-R_002e-277">Muntz, R. R.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-Reiser_002c-M_002e-132">Reiser, M.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-Reiser_002c-M_002e-121">Reiser, M.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
 <li><a href="#index-Santini_002c-S_002e-295">Santini, S.</a>: <a href="#Utility-functions">Utility functions</a></li>
-<li><a href="#index-Schweitzer_002c-P_002e-221">Schweitzer, P.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-Schweitzer_002c-P_002e-210">Schweitzer, P.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
 <li><a href="#index-Schwetman_002c-H_002e-294">Schwetman, H.</a>: <a href="#Utility-functions">Utility functions</a></li>
-<li><a href="#index-Schwetman_002c-H_002e-131">Schwetman, H.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-Schwetman_002c-H_002e-120">Schwetman, H.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
 <li><a href="#index-Serazzi_002c-G_002e-278">Serazzi, G.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
 <li><a href="#index-Sevcik_002c-K_002e-C_002e-253">Sevcik, K. C.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-Sevcik_002c-K_002e-C_002e-152">Sevcik, K. C.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-Trivedi_002c-K_002e-115">Trivedi, K.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-Sevcik_002c-K_002e-C_002e-141">Sevcik, K. C.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-Trivedi_002c-K_002e-104">Trivedi, K.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
 <li><a href="#index-Trivedi_002c-K_002e-90">Trivedi, K.</a>: <a href="#The-Asymmetric-M_002fM_002fm-System">The Asymmetric M/M/m System</a></li>
 <li><a href="#index-Trivedi_002c-K_002e-84">Trivedi, K.</a>: <a href="#The-M_002fM_002fm_002fK-System">The M/M/m/K System</a></li>
 <li><a href="#index-Trivedi_002c-K_002e-76">Trivedi, K.</a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li>
@@ -6068,6 +6033,6 @@
 <li><a href="#index-Wong_002c-E_002e-300">Wong, E.</a>: <a href="#Utility-functions">Utility functions</a></li>
 <li><a href="#index-Zahorjan_002c-J_002e-299">Zahorjan, J.</a>: <a href="#Utility-functions">Utility functions</a></li>
 <li><a href="#index-Zahorjan_002c-J_002e-251">Zahorjan, J.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-Zahorjan_002c-J_002e-150">Zahorjan, J.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-Zahorjan_002c-J_002e-139">Zahorjan, J.</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
    </ul></body></html>
 
Binary file main/queueing/doc/queueing.pdf has changed
--- a/main/queueing/doc/queueing.texi	Sun Apr 08 20:54:02 2012 +0000
+++ b/main/queueing/doc/queueing.texi	Mon Apr 09 12:50:58 2012 +0000
@@ -161,7 +161,6 @@
 @menu
 * Summary::
 * Installation::                Installation of the queueing toolbox.
-* Getting Started::             Getting started with the queueing toolbox.
 * Markov Chains::               Functions for Markov Chains.
 * Single Station Queueing Systems:: Functions for single-station queueing systems.
 * Queueing Networks::           Functions for queueing networks.
@@ -176,7 +175,6 @@
 
 @include summary.texi
 @include installation.texi
-@include gettingstarted.texi
 @include markovchains.texi
 @include singlestation.texi
 @include queueingnetworks.texi
--- a/main/queueing/doc/queueingnetworks.txi	Sun Apr 08 20:54:02 2012 +0000
+++ b/main/queueing/doc/queueingnetworks.txi	Mon Apr 09 12:50:58 2012 +0000
@@ -24,9 +24,9 @@
 
 @menu
 * Introduction to QNs::                 A brief introduction to Queueing Networks.
+* Algorithms for Product-Form QNs::     Functions to analyze product-form QNs
+* Algorithms for non Product-Form QNs:: Functions to analyze non product-form QNs
 * Generic Algorithms::                  High-level functions for QN analysis
-* Algorithms for Product-Form QNs::     Functions to analyze product-form QNs
-* Algorithms for non Product-form QNs:: Functions to analyze non product-form QNs
 * Bounds on performance::               Functions to compute performance bounds
 * Utility functions::                   Utility functions to compute miscellaneous quantities
 @end menu
@@ -40,18 +40,17 @@
 @section Introduction to QNs
 
 Queueing Networks (QN) are a very simple yet powerful modeling tool
-which is used to analyze many kind of systems. In its simplest form, a
-QN is made of @math{K} service centers. Each service center @math{i}
-has a queue, which is connected to @math{m_i} (generally identical)
-@emph{servers}. Customers (or requests) arrive at the service center,
-and join the queue if there is a slot available. Then, requests are
-served according to a (de)queueing policy. After service completes,
-the requests leave the service center.
+which can be used to analyze many kind of systems. In its simplest
+form, a QN is made of @math{K} service centers. Each center @math{k}
+has a queue, which is connected to @math{m_k} (generally identical)
+@emph{servers}. Arriving customers (requests) join the queue if there
+is a slot available. Then, requests are served according to a
+(de)queueing policy (e.g., FIFO). After service completes, requests
+leave the server and can join another queue or exit from the system.
 
-The service centers for which @math{m_i = \infty} are called
-@emph{delay centers} or @emph{infinite servers}. If a service center
-has infinite servers, of course each new request will find one server
-available, so there will never be queueing.
+Service centers for which @math{m_k = \infty} are called @emph{delay
+centers} or @emph{infinite servers}. In this kind of centers, every
+request always finds one available server, so queueing never occurs.
 
 Requests join the queue according to a @emph{queueing policy}, such as:
 
@@ -67,28 +66,26 @@
 Processor Sharing
 
 @item IS
-Infinite Server, there is an infinite number of identical servers so
-that each request always finds a server available, and there is no
-queueing
+Infinite Server (for which @math{m_k = \infty}).
 
 @end table
 
-A population of @emph{requests} or @emph{customers} arrives to the
-system system, requesting service to the service centers.  The request
-population may be @emph{open} or @emph{closed}. In open systems there
-is an infinite population of requests. New customers arrive from
-outside the system, and eventually leave the system. In closed systems
-there is a fixed population of request which continuously interacts
-with the system.
+Queueing models can be @emph{open} or @emph{closed}. In open models
+there is an infinite population of requests; new customers are
+generated outside the system, and eventually leave the system. In
+closed systems there is a fixed population of request.
 
-There might be a single class of requests, meaning that all requests
-behave in the same way (e.g., they spend the same average time on each
-particular server), or there might be multiple classes of requests.
+Queueing models can have a single request class, meaning that all
+requests behave in the same way (e.g., they spend the same average
+time on each particular server). In multiclass models there are
+multiple request classes, each one with its own
+parameters. Furthermore, in multiclass models there can be open and
+closed classes of requests within the same system.
 
 @subsection Single class models
 
-In single class models, all requests are indistinguishable and belong to
-the same class. This means that every request has the same average
+In single class models, all requests are indistinguishable and belong
+to the same class. This means that every request has the same average
 service time, and all requests move through the system with the same
 routing probabilities.
 
@@ -96,31 +93,31 @@
 
 @table @math
 
-@item \lambda_i
-External arrival rate to service center @math{i}.
+@item \lambda_k
+External arrival rate to service center @math{k}.
 
 @item \lambda
 Overall external arrival rate to the whole system: @math{\lambda =
-\sum_i \lambda_i}.
+\sum_k \lambda_k}.
 
-@item S_i
-Average service time. @math{S_i} is the average service time on service
-center @math{i}. In other words, @math{S_i} is the average time from the
+@item S_k
+Average service time. @math{S_k} is the average service time on service
+center @math{k}. In other words, @math{S_k} is the average time from the
 instant in which a request is extracted from the queue and starts being
 service, and the instant at which service finishes and the request moves
 to another queue (or exits the system).
 
 @item P_{i, j}
-Routing probability matrix. @math{{\bf P} = P_{i, j}} is a @math{K
+Routing probability matrix. @math{{\bf P} = [P_{i, j}]} is a @math{K
 \times K} matrix such that @math{P_{i, j}} is the probability that a
 request completing service at server @math{i} will move directly to
 server @math{j}, The probability that a request leaves the system
 after service at service center @math{i} is @math{1-\sum_{j=1}^K P_{i,
 j}}.
 
-@item V_i
-Average number of visits. @math{V_i} is the average number of visits to
-the service center @math{i}. This quantity will be described shortly.
+@item V_k
+Average number of visits. @math{V_k} is the average number of visits to
+the service center @math{k}. This quantity will be described shortly.
 
 @end table
 
@@ -128,24 +125,24 @@
 
 @table @math
 
-@item U_i
-Service center utilization. @math{U_i} is the utilization of service
-center @math{i}. The utilization is defined as the fraction of time in
+@item U_k
+Service center utilization. @math{U_k} is the utilization of service
+center @math{k}. The utilization is defined as the fraction of time in
 which the resource is busy (i.e., the server is processing requests).
 
-@item R_i
-Average response time. @math{R_i} is the average response time of
-service center @math{i}. The average response time is defined as the
+@item R_k
+Average response time. @math{R_k} is the average response time of
+service center @math{k}. The average response time is defined as the
 average time between the arrival of a customer in the queue, and the
 completion of service.
 
-@item Q_i
-Average number of customers. @math{Q_i} is the average number of
-requests in service center @math{i}. This includes both the requests in
+@item Q_k
+Average number of customers. @math{Q_k} is the average number of
+requests in service center @math{k}. This includes both the requests in
 the queue, and the request being served.
 
-@item X_i
-Throughput. @math{X_i} is the throughput of service center @math{i}.
+@item X_k
+Throughput. @math{X_k} is the throughput of service center @math{k}.
 The throughput is defined as the ratio of job completions (i.e., average
 number of jobs completed over a fixed interval of time).
 
@@ -231,7 +228,7 @@
 class @math{c} requests in the system.
 
 The transition probability matrix for these kind of networks will be a
-@math{C \times K \times C \times K} matrix @math{{\bf P} = P_{r, i, s, j}}
+@math{C \times K \times C \times K} matrix @math{{\bf P} = [P_{r, i, s, j}]}
 such that @math{P_{r, i, s, j}} is the probability that a class
 @math{r} request which completes service at center @math{i} will join
 server @math{j} as a class @math{s} request.
@@ -243,26 +240,26 @@
 
 @table @math
 
-@item \lambda_{c, i}
-External arrival rate of class-@math{c} requests to service center @math{i}
+@item \lambda_{c, k}
+External arrival rate of class-@math{c} requests to service center @math{k}
 
 @item \lambda
-Overall external arrival rate to the whole system: @math{\lambda = \sum_c \sum_i \lambda_{c, i}}
+Overall external arrival rate to the whole system: @math{\lambda = \sum_c \sum_k \lambda_{c, k}}
 
-@item S_{c, i}
-Average service time. @math{S_{c, i}} is the average service time on
-service center @math{i} for class @math{c} requests.
+@item S_{c, k}
+Average service time. @math{S_{c, k}} is the average service time on
+service center @math{k} for class @math{c} requests.
 
 @item P_{r, i, s, j}
-Routing probability matrix. @math{{\bf P} = P_{r, i, s, j}} is a @math{C
+Routing probability matrix. @math{{\bf P} = [P_{r, i, s, j}]} is a @math{C
 \times K \times C \times K} matrix such that @math{P_{r, i, s, j}} is
 the probability that a class @math{r} request which completes service
 at server @math{i} will move to server @math{j} as a class @math{s}
 request.
 
-@item V_{c, i}
-Average number of visits. @math{V_{c, i}} is the average number of visits
-of class @math{c} requests to the service center @math{i}.
+@item V_{c, k}
+Average number of visits. @math{V_{c, k}} is the average number of visits
+of class @math{c} requests to center @math{k}.
 
 @end table
 
@@ -270,24 +267,24 @@
 
 @table @math
 
-@item U_{c, i}
-Utilization of service center @math{i} by class @math{c} requests. The
+@item U_{c, k}
+Utilization of service center @math{k} by class @math{c} requests. The
 utilization is defined as the fraction of time in which the resource is
 busy (i.e., the server is processing requests).
 
-@item R_{c, i}
+@item R_{c, k}
 Average response time experienced by class @math{c} requests on service
-center @math{i}. The average response time is defined as the average
+center @math{k}. The average response time is defined as the average
 time between the arrival of a customer in the queue, and the completion
 of service.
 
-@item Q_{c, i}
+@item Q_{c, k}
 Average number of class @math{c} requests on service center
-@math{i}. This includes both the requests in the queue, and the request
+@math{k}. This includes both the requests in the queue, and the request
 being served.
 
-@item X_{c, i}
-Throughput of service center @math{i} for class @math{c} requests.  The
+@item X_{c, k}
+Throughput of service center @math{k} for class @math{c} requests.  The
 throughput is defined as the rate of completion of class @math{c}
 requests.
 
@@ -297,22 +294,22 @@
 
 @table @math
 
-@item U_i
-Utilization of service center @math{i}:
+@item U_k
+Utilization of service center @math{k}:
 @iftex
 @tex
-$U_i = \sum_{c=1}^C U_{c, i}$
+$U_k = \sum_{c=1}^C U_{c, k}$
 @end tex
 @end iftex
 @ifnottex
-@code{Ui = sum(U,1);}
+@code{Uk = sum(U,k);}
 @end ifnottex
 
 @item R_c
 System response time for class @math{c} requests:
 @iftex
 @tex
-$R_c = \sum_{i=1}^K R_{c, i} V_{c, i}$
+$R_c = \sum_{k=1}^K R_{c, k} V_{c, k}$
 @end tex
 @end iftex
 @ifnottex
@@ -323,7 +320,7 @@
 Average number of class @math{c} requests in the system:
 @iftex
 @tex
-$Q_c = \sum_{i=1}^K Q_{c, i}$
+$Q_c = \sum_{k=1}^K Q_{c, k}$
 @end tex
 @end iftex
 @ifnottex
@@ -378,70 +375,197 @@
 \sum_s \sum_j \lambda_{s, j}} is the overall external arrival rate to
 the whole system, then @math{P_{0, s, j} = \lambda_{s, j} / \lambda}.
 
-@c
-@c
-@c
-@node Generic Algorithms
-@section Generic Algorithms
+@subsection Closed Network Example
 
-The @code{queueing} package provides a couple of high-level functions
-for defining and solving QN models. These functions can be used to
-define a open or closed QN model (with single or multiple job
-classes), with arbitrary configuration and queueing disciplines. At
-the moment only product-form networks can be solved, @xref{Algorithms for Product-Form QNs}.
+We now give a simple example on how the queueing toolbox can be used
+to analyze a closed network. Let us consider a simple closed network
+with @math{K=3} @math{M/M/1}--FCFS centers. We denote with @math{S_k}
+the average service time at center @math{k}, @math{k=1, 2, 3}. We use
+@math{S_1 = 1.0}, @math{S_2 = 2.0} and @math{S_3 = 0.8}. The routing
+of jobs within the network is described with a @emph{routing
+probability matrix} @math{\bf P}. Specifically, a request completing
+service at center @math{i} is enqueued at center @math{j} with
+probability @math{P_{i, j}}.  We use the following routing matrix:
 
-The network is defined by two parameters. The first one is the list of
-nodes, encoded as an Octave @emph{cell array}. The second parameter is
-the visit ration @var{V}, which can be either a vector (for
-single-class models) or a two-dimensional matrix (for multiple-class
-models).
-
-Individual nodes in the network are structures build using the
-@code{qnmknode} function.
+@iftex
+@tex
+$$
+P = \pmatrix{ 0 & 0.3 & 0.7 \cr
+              1 & 0 & 0 \cr
+              1 & 0 & 0 }
+$$
+@end tex
+@end iftex
+@ifnottex
+@example
+    / 0  0.3  0.7 \
+P = | 1  0    0   |
+    \ 1  0    0   /
+@end example
+@end ifnottex
 
-@GETHELP{qnmknode}
+The network above can be analyzed with the @command{qnclosed} function
+@pxref{doc-qnclosed}. @command{qnclosed} requires the following
+parameters:
 
-After the network has been defined, it is possible to solve it using
-the @code{qnsolve} function. Note that this function is somewhat less
-efficient than those described in later sections, but
-generally easier to use.
+@table @var
 
-@GETHELP{qnsolve}
+@item N
+Number of requests in the network (since we are considering a closed
+network, the number of requests is fixed)
 
-@noindent @strong{EXAMPLE}
-
-Let us consider a closed, multiclass network with @math{C=2} classes
-and @math{K=3} service center. Let the population be @math{M=(2, 1)}
-(class 1 has 2 requests, and class 2 has 1 request). The nodes are as
-follows:
+@item S
+Array of average service times at the centers: @code{@var{S}(k)} is
+the average service time at center @math{k}.
 
-@itemize
+@item V
+Array of visit ratios: @code{@var{V}(k)} is the average number of
+visits to center @math{k}.
 
-@item Node 1 is a @math{M/M/1}--FCFS node, with load-dependent service
-times. Service times are class-independent, and are defined by the
-matrix @code{[0.2 0.1 0.1; 0.2 0.1 0.1]}. Thus, @code{@var{S}(1,2) =
-0.2} means that service time for class 1 customers where there are 2
-requests in 0.2. Note that service times are class-independent;
+@end table
+
+We can compute @math{V_k} from the routing probability matrix
+@math{P_{i, j}} using the @command{qnvisits} function
+@pxref{doc-qnvisits}.  We can analyze the network for a given
+population size @math{N} (for example, @math{N=10}) as follows:
 
-@item Node 2 is a @math{-/G/1}--PS node, with service times 
-@math{S_{1, 2} = 0.4} for class 1, and @math{S_{2, 2} = 0.6} for class 2
-requests;
+@example
+@group
+@kbd{N = 10;}
+@kbd{S = [1 2 0.8];}
+@kbd{P = [0 0.3 0.7; 1 0 0; 1 0 0];}
+@kbd{V = qnvisits(P);}
+@kbd{[U R Q X] = qnclosed( N, S, V )}
+   @result{} U = 0.99139 0.59483 0.55518 
+   @result{} R = 7.4360  4.7531  1.7500 
+   @result{} Q = 7.3719  1.4136  1.2144 
+   @result{} X = 0.99139 0.29742 0.69397 
+@end group
+@end example
 
-@item Node 3 is a @math{-/G/\infty} node (delay center), with service
-times @math{S_{1, 3}=1} and @math{S_{2, 3}=2} for class 1 and 2
-respectively.
+The output of @command{qnclosed} includes the vector of utilizations
+@math{U_k} at center @math{k}, response time @math{R_k}, average
+number of customers @math{Q_k} and throughput @math{X_k}. In our
+example, the throughput of center 1 is @math{X_1 = 0.99139}, and the
+average number of requests in center 3 is @math{Q_3 = 1.2144}. The
+utilization of center 1 is @math{U_1 = 0.99139}, which is the higher
+value among the service centers. Tus, center 1 is the @emph{bottleneck
+device}.
 
-@end itemize
-
-After defining the per-class visit count @var{V} such that
-@code{@var{V}(c,k)} is the visit count of class @math{c} requests to
-service center @math{k}.  We can define and solve the model as
-follows:
+This network can also be analyzed with the @command{qnsolve} function
+@pxref{doc-qnsolve}. @command{qnsolve} can handle open, closed or
+mixed networks, and allows the network to be described in a very
+flexible way.  First, let @var{Q1}, @var{Q2} and @var{Q3} be the
+variables describing the service centers. Each variable is
+instantiated with the @command{qnmknode} function.
 
 @example
-@GETDEMO{qnsolve,1}
+@group
+@kbd{Q1 = qnmknode( "m/m/m-fcfs", 1 );}
+@kbd{Q2 = qnmknode( "m/m/m-fcfs", 2 );}
+@kbd{Q3 = qnmknode( "m/m/m-fcfs", 0.8 );}
+@end group
+@end example
+
+The first parameter of @command{qnmknode} is a string describing the
+type of the node. Here we use @code{"m/m/m-fcfs"} to denote a
+@math{M/M/m}--FCFS center. The second parameter gives the average
+service time. An optional third parameter can be used to specify the
+number @math{m} of service centers. If omitted, it is assumed
+@math{m=1} (single-server node).
+
+Now, the network can be analyzed as follows:
+
+@example
+@group
+@kbd{N = 10;}
+@kbd{V = [1 0.3 0.7];}
+@kbd{[U R Q X] = qnsolve( "closed", N, @{ Q1, Q2, Q3 @}, V )}
+   @result{} U = 0.99139 0.59483 0.55518 
+   @result{} R = 7.4360  4.7531  1.7500 
+   @result{} Q = 7.3719  1.4136  1.2144 
+   @result{} X = 0.99139 0.29742 0.69397 
+@end group
 @end example
 
+Of course, we get exactly the same results. Other functions can be used
+for closed networks, @pxref{Algorithms for Product-Form QNs}.
+
+@subsection Open Network Example
+
+Open networks can be analyzed in a similar way. Let us consider
+an open network with @math{K=3} service centers, and routing
+probability matrix as follows:
+
+@iftex
+@tex
+$$
+P = \pmatrix{ 0 & 0.3 & 0.5 \cr
+              1 & 0 & 0 \cr
+              1 & 0 & 0 }
+$$
+@end tex
+@end iftex
+@ifnottex
+@example
+    / 0  0.3  0.5 \
+P = ! 1  0    0   |
+    \ 1  0    0   /
+@end example
+@end ifnottex
+
+In this network, requests can leave the system from center 1 with
+probability @math{1-(0.3+0.5) = 0.2}. We suppose that external jobs
+arrive at center 1 with rate @math{\lambda_1 = 0.15}; there are no
+arrivals at centers 2 and 3.
+
+Similarly to closed networks, we first need to compute the visit
+counts @math{V_k} to center @math{k}. Again, we use the
+@command{qnvisits} function as follows:
+
+@example
+@group
+@kbd{P = [0 0.3 0.5; 1 0 0; 1 0 0];}
+@kbd{lambda = [0.15 0 0];}
+@kbd{V = qnvisits(P, lambda)}
+   @result{} V = 5.00000 1.50000 2.50000
+@end group
+@end example
+
+@noindent where @code{@var{lambda}(k)} is the arrival rate at center @math{k},
+and @var{P} is the routing matrix. Assuming the same service times as
+in the previous example, the network can be analyzed with the
+@command{qnopen} function @pxref{doc-qnopen}, as follows:
+
+@example
+@group
+@kbd{S = [1 2 0.8];}
+@kbd{[U R Q X] = qnopen( sum(lambda), S, V )}
+   @result{} U = 0.75000 0.45000 0.30000 
+   @result{} R = 4.0000  3.6364  1.1429
+   @result{} Q = 3.00000 0.81818 0.42857
+   @result{} X = 0.75000 0.22500 0.37500 
+@end group
+@end example
+
+The first parameter of the @command{qnopen} function is the (scalar)
+aggregate arrival rate.
+
+Again, it is possible to use the @command{qnsolve} high-level function:
+
+@example
+@group
+@kbd{Q1 = qnmknode( "m/m/m-fcfs", 1 );}
+@kbd{Q2 = qnmknode( "m/m/m-fcfs", 2 );}
+@kbd{Q3 = qnmknode( "m/m/m-fcfs", 0.8 );}
+@kbd{lambda = [0.15 0 0];}
+@kbd{[U R Q X] = qnsolve( "open", sum(lambda), @{ Q1, Q2, Q3 @}, V )}
+   @result{} U = 0.75000 0.45000 0.30000 
+   @result{} R = 4.0000  3.6364  1.1429
+   @result{} Q = 3.00000 0.81818 0.42857
+   @result{} X = 0.75000 0.22500 0.37500 
+@end group
+@end example
 
 @c
 @c
@@ -962,8 +1086,11 @@
 
 @auindex Schwetman, H.
 
+@c
+@c
+@c
 
-@node Algorithms for non Product-form QNs
+@node Algorithms for non Product-Form QNs
 @section Algorithms for non Product-Form QNs
 
 @c
@@ -985,6 +1112,72 @@
 @c
 @c
 @c
+@node Generic Algorithms
+@section Generic Algorithms
+
+The @code{queueing} package provides a high-level function
+@code{qnsolve} for analyzing QN models. @code{qnsolve} takes as input
+a high-level description of the queueing model, and delegates the
+actual solution of the model to one of the lower-level function
+described in the previous section. @code{qnsolve} supports single or
+multiclass models, but at the moment only product-form networks can be
+analyzed. For non product-form networks @xref{Algorithms for non
+Product-Form QNs}.
+
+@code{qnsolve} accepts two input parameters. The first one is the list
+of nodes, encoded as an Octave @emph{cell array}. The second parameter
+is the vector of visit ratios @var{V}, which can be either a vector
+(for single-class models) or a two-dimensional matrix (for
+multiple-class models).
+
+Individual nodes in the network are structures build using the
+@code{qnmknode} function.
+
+@GETHELP{qnmknode}
+
+After the network has been defined, it is possible to solve it using
+@code{qnsolve}.
+
+@GETHELP{qnsolve}
+
+@noindent @strong{EXAMPLE}
+
+Let us consider a closed, multiclass network with @math{C=2} classes
+and @math{K=3} service center. Let the population be @math{M=(2, 1)}
+(class 1 has 2 requests, and class 2 has 1 request). The nodes are as
+follows:
+
+@itemize
+
+@item Node 1 is a @math{M/M/1}--FCFS node, with load-dependent service
+times. Service times are class-independent, and are defined by the
+matrix @code{[0.2 0.1 0.1; 0.2 0.1 0.1]}. Thus, @code{@var{S}(1,2) =
+0.2} means that service time for class 1 customers where there are 2
+requests in 0.2. Note that service times are class-independent;
+
+@item Node 2 is a @math{-/G/1}--PS node, with service times 
+@math{S_{1, 2} = 0.4} for class 1, and @math{S_{2, 2} = 0.6} for class 2
+requests;
+
+@item Node 3 is a @math{-/G/\infty} node (delay center), with service
+times @math{S_{1, 3}=1} and @math{S_{2, 3}=2} for class 1 and 2
+respectively.
+
+@end itemize
+
+After defining the per-class visit count @var{V} such that
+@code{@var{V}(c,k)} is the visit count of class @math{c} requests to
+service center @math{k}.  We can define and solve the model as
+follows:
+
+@example
+@GETDEMO{qnsolve,1}
+@end example
+
+
+@c
+@c
+@c
 @node Bounds on performance
 @section Bounds on performance
 
--- a/main/queueing/doc/references.txi	Sun Apr 08 20:54:02 2012 +0000
+++ b/main/queueing/doc/references.txi	Mon Apr 09 12:50:58 2012 +0000
@@ -55,7 +55,7 @@
 Queueing Networks}, IEEE Transactions on Computers, 57(6):780-794,
 June 2008. DOI @uref{http://doi.ieeecomputersociety.org/10.1109/TC.2008.37, 10.1109/TC.2008.37}
 
-@item [GrSn97]
+@item @anchor{GrSn97}[GrSn97]
 Charles M. Grinstead, J. Laurie Snell, (July 1997). @cite{Introduction
 to Probability}. American Mathematical Society. ISBN 978-0821807491;
 this excellent textbook is @uref{http://www.dartmouth.edu/~chance/teaching_aids/books_articles/probability_book/amsbook.mac.pdf, available in PDF format}