changeset 9627:8e744625e429 octave-forge

New function dtmc_bd() added; misc fixes and improvements
author mmarzolla
date Sun, 11 Mar 2012 11:20:31 +0000
parents c4728d463424
children d91fd1efc9bf
files main/queueing/ChangeLog main/queueing/DESCRIPTION main/queueing/Makefile main/queueing/NEWS main/queueing/doc/INSTALL main/queueing/doc/markovchains.txi main/queueing/doc/queueing.html main/queueing/doc/queueing.pdf main/queueing/doc/summary.txi main/queueing/inst/ctmc_bd.m main/queueing/inst/ctmc_bd_solve.m main/queueing/inst/ctmc_exps.m main/queueing/inst/dtmc_bd.m main/queueing/inst/qnmm1k.m main/queueing/inst/qnmmmk.m main/queueing/inst/qnvisits.m
diffstat 16 files changed, 575 insertions(+), 442 deletions(-) [+]
line wrap: on
line diff
--- a/main/queueing/ChangeLog	Sat Mar 10 20:51:31 2012 +0000
+++ b/main/queueing/ChangeLog	Sun Mar 11 11:20:31 2012 +0000
@@ -1,6 +1,6 @@
 2012-02-XX Moreno Marzolla <marzolla@cs.unibo.it>
 
-	* Version 1.0.X released
+	* Version 1.X.0 released
 	* Fixed bug in qnvisits() which made the function behave incorrectly
 	  under particular degenerate cases.
 	* Fixed bug in ctmc_exps() (wrong initial value in call to lsode)
@@ -9,6 +9,10 @@
 	* Function ctmc_exps() and ctmc_taexps() accept a scalar as second
 	  argument; the old syntax is still supported, but may be deprecated
 	  in future releases.
+	* Function ctmc_bd() now returns the infinitesimal generator matrix
+	  of the birth-death process, not the steady-state solution.
+	* Function ctmc_bd_solve() has been removed
+	* New function dtmc_bd()
 	* Miscellaneous fixes/improvements to the documentation
 
 2012-02-04 Moreno Marzolla <marzolla@cs.unibo.it>
--- a/main/queueing/DESCRIPTION	Sat Mar 10 20:51:31 2012 +0000
+++ b/main/queueing/DESCRIPTION	Sun Mar 11 11:20:31 2012 +0000
@@ -1,6 +1,6 @@
 Name: queueing
-Version: 1.0.0
-Date: 2012-02-04
+Version: 1.X.0
+Date: 2012-02-XX
 Author: Moreno Marzolla <marzolla@cs.unibo.it>
 Maintainer: Moreno Marzolla <marzolla@cs.unibo.it>
 Title: Queueing networks and Markov chains analysis package for GNU Octave
--- a/main/queueing/Makefile	Sat Mar 10 20:51:31 2012 +0000
+++ b/main/queueing/Makefile	Sun Mar 11 11:20:31 2012 +0000
@@ -1,5 +1,5 @@
-VERSIONNUM=1.0.0
-VERSIONDATE="2012-02-04"
+VERSIONNUM=1.X.0
+VERSIONDATE="2012-02-XX"
 PROGNAME=queueing
 
 DISTNAME=$(PROGNAME)-$(VERSIONNUM)
--- a/main/queueing/NEWS	Sat Mar 10 20:51:31 2012 +0000
+++ b/main/queueing/NEWS	Sun Mar 11 11:20:31 2012 +0000
@@ -1,4 +1,4 @@
-Summary of important user-visible changes for queueing-1.0.X
+Summary of important user-visible changes for queueing-1.X.0
 
 ** Function ctmc_exps() can now compute the expected sojourn time
    until absorption for absorming CTMC
@@ -7,6 +7,14 @@
    the second argument (time). The old syntax is still supported,
    but may be deprecated in the future.
 
+** Function ctmc_bd() now returns the infinitesimal generator matrix Q
+   of the birth-death process with given rates, not the steady-state
+   solution.
+
+** New function dtmc_bd() added
+
+** Function ctmc_bd_solve() has been removed
+
 Summary of important user-visible changes for queueing-1.0.0
 ------------------------------------------------------------------------------
 
--- a/main/queueing/doc/INSTALL	Sat Mar 10 20:51:31 2012 +0000
+++ b/main/queueing/doc/INSTALL	Sun Mar 11 11:20:31 2012 +0000
@@ -16,7 +16,7 @@
 1.1 Installation through Octave package management system
 =========================================================
 
-The most recent version of `queueing' is 1.0.0 and can be downloaded
+The most recent version of `queueing' is 1.X.0 and can be downloaded
 from Octave-Forge
 
    `http://octave.sourceforge.net/queueing/'
@@ -37,13 +37,13 @@
      octave:1>pkg list queueing
      Package Name  | Version | Installation directory
      --------------+---------+-----------------------
-         queueing *|   1.0.0 | /home/moreno/octave/queueing-1.0.0
+         queueing *|   1.X.0 | /home/moreno/octave/queueing-1.X.0
 
    Alternatively, you can first download `queueing' from Octave-Forge;
 then, to install the package in the system-wide location issue this
 command at the Octave prompt:
 
-     octave:1> pkg install _queueing-1.0.0.tar.gz_
+     octave:1> pkg install _queueing-1.X.0.tar.gz_
 
 (you may need to start Octave as root in order to allow the
 installation to copy the files to the target locations). After this,
@@ -52,7 +52,7 @@
 
    If you do not have root access, you can do a local install using:
 
-     octave:1> pkg install -local queueing-1.0.0.tar.gz
+     octave:1> pkg install -local queueing-1.X.0.tar.gz
 
    This will install `queueing' within your home directory, and the
 package will be available to your user only. *Note:* Octave version
@@ -69,8 +69,8 @@
 If you want to manually install `queueing' in a custom location, you
 can download the tarball and unpack it somewhere:
 
-     tar xvfz queueing-1.0.0.tar.gz
-     cd queueing-1.0.0/queueing/
+     tar xvfz queueing-1.X.0.tar.gz
+     cd queueing-1.X.0/queueing/
 
    Copy all `.m' files from the `inst/' directory to some target
 location. Then, start Octave with the `-p' option to add the target
--- a/main/queueing/doc/markovchains.txi	Sat Mar 10 20:51:31 2012 +0000
+++ b/main/queueing/doc/markovchains.txi	Sun Mar 11 11:20:31 2012 +0000
@@ -66,6 +66,9 @@
 @math{n}. @math{\pi_i(n)} denotes the probability that the system is
 in state @math{i} at step @math{n}.
 
+@c
+@subsection State occupancy probabilities
+
 Given the transition probability matrix @math{\bf P} and the initial
 state occupancy probability vector @math{{\bf \pi}(0) = (\pi_1(0),
 \pi_2(0), @dots{}, \pi_N(0))} at step 0, the state occupancy
@@ -91,6 +94,7 @@
 @math{{\bf \pi}(0)}. The stationary state occupancy probability vector
 @math{\bf \pi} satisfies @math{{\bf \pi} = {\bf \pi} {\bf P}}.
 
+@c
 @DOCSTRING(dtmc)
 
 @noindent @strong{EXAMPLE}
@@ -101,6 +105,13 @@
 @end group
 @end example
 
+@subsection Birth-Death process
+
+@c
+@DOCSTRING(dtmc_bd)
+
+@subsection First passage times
+
 The First Passage Time @math{M_{i j}} is defined as the average
 number of transitions needed to visit state @math{j} for the first
 time, starting from state @math{i}. Matrix @math{\bf M} satisfies the
@@ -123,6 +134,7 @@
 @end example
 @end ifnottex
 
+@c
 @DOCSTRING(dtmc_fpt)
 
 @c
@@ -132,16 +144,16 @@
 @section Continuous-Time Markov Chains
 
 @menu
-* CTMC Stationary Probability::
+* State occupancy probabilities::
 * Birth-Death process::
 * Expected Sojourn Time::
 * Time-Averaged Expected Sojourn Time::
 * Expected Time to Absorption::
-* CTMC First Passage Times::
+* First Passage Times::
 @end menu
 
-@node CTMC Stationary Probability
-@subsection Stationary Probability
+@node State occupancy probabilities
+@subsection State occupancy probabilities
 
 @DOCSTRING(ctmc)
 
@@ -305,7 +317,7 @@
 @c
 @c
 @c
-@node CTMC First Passage Times
+@node First Passage Times
 @subsection First Passage Times
 @DOCSTRING(ctmc_fpt)
 
--- a/main/queueing/doc/queueing.html	Sat Mar 10 20:51:31 2012 +0000
+++ b/main/queueing/doc/queueing.html	Sun Mar 11 11:20:31 2012 +0000
@@ -55,14 +55,19 @@
 <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>
+<ul>
+<li><a href="#Discrete_002dTime-Markov-Chains">4.1.1 State occupancy probabilities</a>
+<li><a href="#Discrete_002dTime-Markov-Chains">4.1.2 Birth-Death process</a>
+<li><a href="#Discrete_002dTime-Markov-Chains">4.1.3 First passage times</a>
+</li></ul>
 <li><a href="#Continuous_002dTime-Markov-Chains">4.2 Continuous-Time Markov Chains</a>
 <ul>
-<li><a href="#CTMC-Stationary-Probability">4.2.1 Stationary Probability</a>
+<li><a href="#State-occupancy-probabilities">4.2.1 State occupancy probabilities</a>
 <li><a href="#Birth_002dDeath-process">4.2.2 Birth-Death process</a>
 <li><a href="#Expected-Sojourn-Time">4.2.3 Expected Sojourn Time</a>
 <li><a href="#Time_002dAveraged-Expected-Sojourn-Time">4.2.4 Time-Averaged Expected Sojourn Time</a>
 <li><a href="#Expected-Time-to-Absorption">4.2.5 Expected Time to Absorption</a>
-<li><a href="#CTMC-First-Passage-Times">4.2.6 First Passage Times</a>
+<li><a href="#First-Passage-Times">4.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>
@@ -121,7 +126,7 @@
 <h2 class="unnumbered">queueing</h2>
 
 <p>This manual documents how to install and run the Queueing Toolbox. 
-It corresponds to version 1.0.0 of the package.
+It corresponds to version 1.X.0 of the package.
 
 <!--  -->
 <ul class="menu">
@@ -189,8 +194,7 @@
      <li>Approximate MVA for closed, single-class networks with blocking
 (MVABLO algorithm by F. Akyildiz);
 
-     <li>Computation of Asymptotic Bounds, Balanced System Bounds
-and Geometric Bounds;
+     <li>Asymptotic Bounds, Balanced System Bounds and Geometric Bounds;
 
    </ul>
 
@@ -209,15 +213,15 @@
 <li>M/H_m/1 (Hyperexponential service time distribution)
 </ul>
 
-   <p>Functions for Markov chain analysis are also provided (discrete and
-continuous time Markov chains are supported):
+   <p>Functions for Markov chain analysis are also provided, for discrete-time
+chains (DTMC) or continuous-time chains (CTMC):
 
      <ul>
-<li>Birth-death process;
-<li>Computation of transient and steady-state occupancy probabilities;
-<li>Computation of mean time to absorption;
-<li>Computation of time-averages sojourn time. 
-<li>Computation of mean passage times
+<li>Birth-death process (DTMC and CTMC);
+<li>Transient and steady-state occupancy probabilities (DTMC and CTMC);
+<li>Mean time to absorption (CTMC);
+<li>Time-averaged sojourn times (CTMC);
+<li>First passage times (DTMC and CTMC).
 
    </ul>
 
@@ -308,7 +312,7 @@
 
 <h3 class="section">2.1 Installation through Octave package management system</h3>
 
-<p>The most recent version of <code>queueing</code> is 1.0.0 and can
+<p>The most recent version of <code>queueing</code> is 1.X.0 and can
 be downloaded from Octave-Forge
 
    <p><a href="http://octave.sourceforge.net/queueing/">http://octave.sourceforge.net/queueing/</a>
@@ -330,13 +334,13 @@
 <pre class="example">     octave:1&gt;<kbd>pkg list queueing</kbd>
      Package Name  | Version | Installation directory
      --------------+---------+-----------------------
-         queueing *|   1.0.0 | /home/moreno/octave/queueing-1.0.0
+         queueing *|   1.X.0 | /home/moreno/octave/queueing-1.X.0
 </pre>
    <p>Alternatively, you can first download <code>queueing</code> from
 Octave-Forge; then, to install the package in the system-wide
 location issue this command at the Octave prompt:
 
-<pre class="example">     octave:1&gt; <kbd>pkg install </kbd><em>queueing-1.0.0.tar.gz</em>
+<pre class="example">     octave:1&gt; <kbd>pkg install </kbd><em>queueing-1.X.0.tar.gz</em>
 </pre>
    <p class="noindent">(you may need to start Octave as root in order to allow the
 installation to copy the files to the target locations). After this,
@@ -345,7 +349,7 @@
 
    <p>If you do not have root access, you can do a local install using:
 
-<pre class="example">     octave:1&gt; <kbd>pkg install -local queueing-1.0.0.tar.gz</kbd>
+<pre class="example">     octave:1&gt; <kbd>pkg install -local queueing-1.X.0.tar.gz</kbd>
 </pre>
    <p>This will install <code>queueing</code> within your home directory, and the
 package will be available to your user only. <strong>Note:</strong> Octave
@@ -371,8 +375,8 @@
 <p>If you want to manually install <code>queueing</code> in a custom location,
 you can download the tarball and unpack it somewhere:
 
-<pre class="example">     <kbd>tar xvfz queueing-1.0.0.tar.gz</kbd>
-     <kbd>cd queueing-1.0.0/queueing/</kbd>
+<pre class="example">     <kbd>tar xvfz queueing-1.X.0.tar.gz</kbd>
+     <kbd>cd queueing-1.X.0/queueing/</kbd>
 </pre>
    <p>Copy all <code>.m</code> files from the <samp><span class="file">inst/</span></samp> directory to some
 target location. Then, start Octave with the <samp><span class="option">-p</span></samp> option to add
@@ -813,7 +817,9 @@
 n. \pi_i(n) denotes the probability that the system is
 in state i at step n.
 
-   <p>Given the transition probability matrix \bf P and the initial
+<h4 class="subsection">4.1.1 State occupancy probabilities</h4>
+
+<p>Given the transition probability matrix \bf P and the initial
 state occupancy probability vector \bf \pi(0) = (\pi_1(0),
 \pi_2(0), <small class="dots">...</small>, \pi_N(0)) at step 0, the state occupancy
 probability vector \bf \pi(n) at step n can be
@@ -889,7 +895,40 @@
             T, ss(2)*ones(size(T)), "r;Steady State;" );
       xlabel("Time Step");</pre>
 </pre>
-   <p>The First Passage Time M_i j is defined as the average
+   <h4 class="subsection">4.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>birth, death</var>)<var><a name="index-dtmc_005fbd-7"></a></var><br>
+<blockquote>
+        <p><a name="index-Markov-chain_002c-discrete-time-8"></a><a name="index-Birth_002ddeath-process-9"></a>
+Returns the N \times N transition probability matrix P
+for a birth-death process with given rates.
+
+        <p><strong>INPUTS</strong>
+
+          <dl>
+<dt><var>birth</var><dd>Vector with N-1 elements, where <var>birth</var><code>(i)</code> is the
+transition probability from state i to state i+1.
+
+          <br><dt><var>death</var><dd>Vector with N-1 elements, where <var>death</var><code>(i)</code> is the
+transition probability from state i+1 to state i.
+
+        </dl>
+
+        <p><strong>OUTPUTS</strong>
+
+          <dl>
+<dt><var>P</var><dd>Transition probability matrix for the birth-death process.
+
+        </dl>
+
+        </blockquote></div>
+
+<h4 class="subsection">4.1.3 First passage times</h4>
+
+<p>The First Passage Time M_i j is defined as the average
 number of transitions needed to visit state j for the first
 time, starting from state i. Matrix \bf M satisfies the
 property that
@@ -903,10 +942,10 @@
    <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-7"></a></var><br>
-&mdash; Function File: <var>m</var> = <b>dtmc_fpt</b> (<var>P, i, j</var>)<var><a name="index-dtmc_005ffpt-8"></a></var><br>
+&mdash; Function File: <var>M</var> = <b>dtmc_fpt</b> (<var>P</var>)<var><a name="index-dtmc_005ffpt-10"></a></var><br>
+&mdash; Function File: <var>m</var> = <b>dtmc_fpt</b> (<var>P, i, j</var>)<var><a name="index-dtmc_005ffpt-11"></a></var><br>
 <blockquote>
-        <p><a name="index-Markov-chain_002c-discrete-time-9"></a><a name="index-First-passage-times-10"></a>
+        <p><a name="index-Markov-chain_002c-discrete-time-12"></a><a name="index-First-passage-times-13"></a>
 If called with a single argument, computes the mean first passage
 times <var>M</var><code>(i,j)</code>, that are the average number of transitions before
 state <var>j</var> is reached, starting from state <var>i</var>, for all
@@ -956,31 +995,31 @@
 <h3 class="section">4.2 Continuous-Time Markov Chains</h3>
 
 <ul class="menu">
-<li><a accesskey="1" href="#CTMC-Stationary-Probability">CTMC Stationary Probability</a>
+<li><a accesskey="1" href="#State-occupancy-probabilities">State occupancy probabilities</a>
 <li><a accesskey="2" href="#Birth_002dDeath-process">Birth-Death process</a>
 <li><a accesskey="3" href="#Expected-Sojourn-Time">Expected Sojourn Time</a>
 <li><a accesskey="4" href="#Time_002dAveraged-Expected-Sojourn-Time">Time-Averaged Expected Sojourn Time</a>
 <li><a accesskey="5" href="#Expected-Time-to-Absorption">Expected Time to Absorption</a>
-<li><a accesskey="6" href="#CTMC-First-Passage-Times">CTMC First Passage Times</a>
+<li><a accesskey="6" href="#First-Passage-Times">First Passage Times</a>
 </ul>
 
 <div class="node">
-<a name="CTMC-Stationary-Probability"></a>
+<a name="State-occupancy-probabilities"></a>
 <p><hr>
 Next:&nbsp;<a rel="next" accesskey="n" href="#Birth_002dDeath-process">Birth-Death process</a>,
 Up:&nbsp;<a rel="up" accesskey="u" href="#Continuous_002dTime-Markov-Chains">Continuous-Time Markov Chains</a>
 
 </div>
 
-<h4 class="subsection">4.2.1 Stationary Probability</h4>
+<h4 class="subsection">4.2.1 State occupancy probabilities</h4>
 
 <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-11"></a></var><br>
-&mdash; Function File: <var>p</var> = <b>ctmc</b> (<var>Q, t. q0</var>)<var><a name="index-ctmc-12"></a></var><br>
+&mdash; Function File: <var>p</var> = <b>ctmc</b> (<var>Q</var>)<var><a name="index-ctmc-14"></a></var><br>
+&mdash; Function File: <var>p</var> = <b>ctmc</b> (<var>Q, t. q0</var>)<var><a name="index-ctmc-15"></a></var><br>
 <blockquote>
-        <p><a name="index-Markov-chain_002c-continuous-time-13"></a><a name="index-Continuous-time-Markov-chain-14"></a><a name="index-Markov-chain_002c-state-occupancy-probabilities-15"></a><a name="index-Stationary-probabilities-16"></a>
+        <p><a name="index-Markov-chain_002c-continuous-time-16"></a><a name="index-Continuous-time-Markov-chain-17"></a><a name="index-Markov-chain_002c-state-occupancy-probabilities-18"></a><a name="index-Stationary-probabilities-19"></a>
 With a single argument, compute the stationary state occupancy
 probability vector <var>p</var>(1), <small class="dots">...</small>, <var>p</var>(N) for a
 Continuous-Time Markov Chain with infinitesimal generator matrix
@@ -1033,7 +1072,7 @@
 <a name="Birth_002dDeath-process"></a>
 <p><hr>
 Next:&nbsp;<a rel="next" accesskey="n" href="#Expected-Sojourn-Time">Expected Sojourn Time</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#CTMC-Stationary-Probability">CTMC Stationary Probability</a>,
+Previous:&nbsp;<a rel="previous" accesskey="p" href="#State-occupancy-probabilities">State occupancy probabilities</a>,
 Up:&nbsp;<a rel="up" accesskey="u" href="#Continuous_002dTime-Markov-Chains">Continuous-Time Markov Chains</a>
 
 </div>
@@ -1043,11 +1082,11 @@
 <p><a name="doc_002dctmc_005fbd"></a>
 
 <div class="defun">
-&mdash; Function File: <var>p</var> = <b>ctmc_bd</b> (<var>birth, death</var>)<var><a name="index-ctmc_005fbd-17"></a></var><br>
+&mdash; Function File: <var>Q</var> = <b>ctmc_bd</b> (<var>birth, death</var>)<var><a name="index-ctmc_005fbd-20"></a></var><br>
 <blockquote>
-        <p><a name="index-Markov-chain_002c-continuous-time-18"></a><a name="index-Birth_002ddeath-process-19"></a>
-Compute the steady-state solution of a birth-death process with state
-space (1, <small class="dots">...</small>, N).
+        <p><a name="index-Markov-chain_002c-continuous-time-21"></a><a name="index-Birth_002ddeath-process-22"></a>
+Returns the N \times N infinitesimal generator matrix Q
+for a birth-death process with given rates.
 
         <p><strong>INPUTS</strong>
 
@@ -1063,8 +1102,7 @@
         <p><strong>OUTPUTS</strong>
 
           <dl>
-<dt><var>p</var><dd><var>p</var><code>(i)</code> is the steady-state probability that the system is
-in state i, i=1, <small class="dots">...</small>, N.
+<dt><var>Q</var><dd>Infinitesimal generator matrix for the birth-death process.
 
         </dl>
 
@@ -1100,10 +1138,10 @@
    <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-20"></a></var><br>
-&mdash; Function File: <var>L</var> = <b>ctmc_exps</b> (<var>Q, p</var>)<var><a name="index-ctmc_005fexps-21"></a></var><br>
+&mdash; Function File: <var>L</var> = <b>ctmc_exps</b> (<var>Q, t, p </var>)<var><a name="index-ctmc_005fexps-23"></a></var><br>
+&mdash; Function File: <var>L</var> = <b>ctmc_exps</b> (<var>Q, p</var>)<var><a name="index-ctmc_005fexps-24"></a></var><br>
 <blockquote>
-        <p><a name="index-Markov-chain_002c-continuous-time-22"></a><a name="index-Expected-sojourn-time-23"></a>
+        <p><a name="index-Markov-chain_002c-continuous-time-25"></a><a name="index-Expected-sojourn-time-26"></a>
 With three arguments, compute the expected times <var>L</var><code>(i)</code>
 spent in each state i during the time interval
 [0,t], assuming that the state occupancy probabilities
@@ -1130,9 +1168,9 @@
 
           <dl>
 <dt><var>L</var><dd>If this function is called with three arguments, <var>L</var><code>(i)</code> is
-the expected time spent in state j during the interval
+the expected time spent in state i during the interval
 [0,t]. If this function is called with two arguments
-<var>L</var><code>(i)</code> is the expected time spent in state i until
+<var>L</var><code>(i)</code> is either the expected time spent in state i until
 absorption (if i is a transient state), or zero
 (if <var>i</var> is an absorbing state).
 
@@ -1183,9 +1221,9 @@
 <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-24"></a></var><br>
+&mdash; Function File: <var>M</var> = <b>ctmc_taexps</b> (<var>Q, t, p</var>)<var><a name="index-ctmc_005ftaexps-27"></a></var><br>
 <blockquote>
-        <p><a name="index-Markov-chain_002c-continuous-time-25"></a><a name="index-Time_002dalveraged-sojourn-time-26"></a>
+        <p><a name="index-Markov-chain_002c-continuous-time-28"></a><a name="index-Time_002dalveraged-sojourn-time-29"></a>
 Compute the <em>time-averaged sojourn time</em> <var>M</var><code>(i)</code>,
 defined as the fraction of the time interval [0,t] spent in
 state i, assuming that the state occupancy probabilities at
@@ -1242,7 +1280,7 @@
    <div class="node">
 <a name="Expected-Time-to-Absorption"></a>
 <p><hr>
-Next:&nbsp;<a rel="next" accesskey="n" href="#CTMC-First-Passage-Times">CTMC First Passage Times</a>,
+Next:&nbsp;<a rel="next" accesskey="n" href="#First-Passage-Times">First Passage Times</a>,
 Previous:&nbsp;<a rel="previous" accesskey="p" href="#Time_002dAveraged-Expected-Sojourn-Time">Time-Averaged Expected Sojourn Time</a>,
 Up:&nbsp;<a rel="up" accesskey="u" href="#Continuous_002dTime-Markov-Chains">Continuous-Time Markov Chains</a>
 
@@ -1268,9 +1306,9 @@
    <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-27"></a></var><br>
+&mdash; Function File: <var>t</var> = <b>ctmc_mtta</b> (<var>Q, p</var>)<var><a name="index-ctmc_005fmtta-30"></a></var><br>
 <blockquote>
-        <p><a name="index-Markov-chain_002c-continuous-time-28"></a><a name="index-Mean-time-to-absorption-29"></a>
+        <p><a name="index-Markov-chain_002c-continuous-time-31"></a><a name="index-Mean-time-to-absorption-32"></a>
 Compute the Mean-Time to Absorption (MTTA) of the CTMC described by
 the infinitesimal generator matrix <var>Q</var>, starting from initial
 occupancy probabilities <var>p</var>. If there are no absorbing states, this
@@ -1331,9 +1369,9 @@
 Performance Evaluation with Computer Science Applications</cite>, Wiley,
 1998.
 
-   <p><a name="index-Bolch_002c-G_002e-30"></a><a name="index-Greiner_002c-S_002e-31"></a><a name="index-de-Meer_002c-H_002e-32"></a><a name="index-Trivedi_002c-K_002e-33"></a>
+   <p><a name="index-Bolch_002c-G_002e-33"></a><a name="index-Greiner_002c-S_002e-34"></a><a name="index-de-Meer_002c-H_002e-35"></a><a name="index-Trivedi_002c-K_002e-36"></a>
 <div class="node">
-<a name="CTMC-First-Passage-Times"></a>
+<a name="First-Passage-Times"></a>
 <p><hr>
 Previous:&nbsp;<a rel="previous" accesskey="p" href="#Expected-Time-to-Absorption">Expected Time to Absorption</a>,
 Up:&nbsp;<a rel="up" accesskey="u" href="#Continuous_002dTime-Markov-Chains">Continuous-Time Markov Chains</a>
@@ -1345,10 +1383,10 @@
 <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-34"></a></var><br>
-&mdash; Function File: <var>m</var> = <b>ctmc_fpt</b> (<var>Q, i, j</var>)<var><a name="index-ctmc_005ffpt-35"></a></var><br>
+&mdash; Function File: <var>M</var> = <b>ctmc_fpt</b> (<var>Q</var>)<var><a name="index-ctmc_005ffpt-37"></a></var><br>
+&mdash; Function File: <var>m</var> = <b>ctmc_fpt</b> (<var>Q, i, j</var>)<var><a name="index-ctmc_005ffpt-38"></a></var><br>
 <blockquote>
-        <p><a name="index-Markov-chain_002c-continuous-time-36"></a><a name="index-First-passage-times-37"></a>
+        <p><a name="index-Markov-chain_002c-continuous-time-39"></a><a name="index-First-passage-times-40"></a>
 If called with a single argument, computes the mean first passage
 times <var>M</var><code>(i,j)</code>, the average times before state <var>j</var> is
 reached, starting from state <var>i</var>, for all 1 \leq i, j \leq
@@ -1454,9 +1492,9 @@
    <p><a name="doc_002dqnmm1"></a>
 
 <div class="defun">
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>p0</var>] = <b>qnmm1</b> (<var>lambda, mu</var>)<var><a name="index-qnmm1-38"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>p0</var>] = <b>qnmm1</b> (<var>lambda, mu</var>)<var><a name="index-qnmm1-41"></a></var><br>
 <blockquote>
-        <p><a name="index-g_t_0040math_007bM_002fM_002f1_007d-system-39"></a>
+        <p><a name="index-g_t_0040math_007bM_002fM_002f1_007d-system-42"></a>
 Compute utilization, response time, average number of requests
 and throughput for a M/M/1 queue.
 
@@ -1501,7 +1539,7 @@
 and Markov Chains: Modeling and Performance Evaluation with Computer
 Science Applications</cite>, Wiley, 1998, Section 6.3.
 
-   <p><a name="index-Bolch_002c-G_002e-40"></a><a name="index-Greiner_002c-S_002e-41"></a><a name="index-de-Meer_002c-H_002e-42"></a><a name="index-Trivedi_002c-K_002e-43"></a>
+   <p><a name="index-Bolch_002c-G_002e-43"></a><a name="index-Greiner_002c-S_002e-44"></a><a name="index-de-Meer_002c-H_002e-45"></a><a name="index-Trivedi_002c-K_002e-46"></a>
 <!-- M/M/m -->
 <div class="node">
 <a name="The-M%2fM%2fm-System"></a>
@@ -1527,10 +1565,10 @@
    <p><a name="doc_002dqnmmm"></a>
 
 <div class="defun">
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>p0</var>, <var>pm</var>] = <b>qnmmm</b> (<var>lambda, mu</var>)<var><a name="index-qnmmm-44"></a></var><br>
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>p0</var>, <var>pm</var>] = <b>qnmmm</b> (<var>lambda, mu, m</var>)<var><a name="index-qnmmm-45"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>p0</var>, <var>pm</var>] = <b>qnmmm</b> (<var>lambda, mu</var>)<var><a name="index-qnmmm-47"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>p0</var>, <var>pm</var>] = <b>qnmmm</b> (<var>lambda, mu, m</var>)<var><a name="index-qnmmm-48"></a></var><br>
 <blockquote>
-        <p><a name="index-g_t_0040math_007bM_002fM_002fm_007d-system-46"></a>
+        <p><a name="index-g_t_0040math_007bM_002fM_002fm_007d-system-49"></a>
 Compute utilization, response time, average number of requests in
 service and throughput for a M/M/m queue, a queueing
 system with m identical service centers connected to a single queue.
@@ -1582,7 +1620,7 @@
 and Markov Chains: Modeling and Performance Evaluation with Computer
 Science Applications</cite>, Wiley, 1998, Section 6.5.
 
-   <p><a name="index-Bolch_002c-G_002e-47"></a><a name="index-Greiner_002c-S_002e-48"></a><a name="index-de-Meer_002c-H_002e-49"></a><a name="index-Trivedi_002c-K_002e-50"></a>
+   <p><a name="index-Bolch_002c-G_002e-50"></a><a name="index-Greiner_002c-S_002e-51"></a><a name="index-de-Meer_002c-H_002e-52"></a><a name="index-Trivedi_002c-K_002e-53"></a>
 <!-- M/M/inf -->
 <div class="node">
 <a name="The-M%2fM%2finf-System"></a>
@@ -1605,7 +1643,7 @@
    <p><a name="doc_002dqnmminf"></a>
 
 <div class="defun">
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>p0</var>] = <b>qnmminf</b> (<var>lambda, mu</var>)<var><a name="index-qnmminf-51"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>p0</var>] = <b>qnmminf</b> (<var>lambda, mu</var>)<var><a name="index-qnmminf-54"></a></var><br>
 <blockquote>
         <p>Compute utilization, response time, average number of requests and
 throughput for a M/M/\infty queue. This is a system with an
@@ -1613,7 +1651,7 @@
 system is always stable, regardless the values of the arrival and
 service rates.
 
-        <p><a name="index-g_t_0040math_007bM_002fM_002f_007dinf-system-52"></a>
+        <p><a name="index-g_t_0040math_007bM_002fM_002f_007dinf-system-55"></a>
 
         <p><strong>INPUTS</strong>
 
@@ -1631,7 +1669,7 @@
 different from the utilization, which in the case of M/M/\infty
 centers is always zero.
 
-          <p><a name="index-traffic-intensity-53"></a>
+          <p><a name="index-traffic-intensity-56"></a>
 <br><dt><var>R</var><dd>Service center response time.
 
           <br><dt><var>Q</var><dd>Average number of requests in the system (which is equal to the
@@ -1659,7 +1697,7 @@
 and Markov Chains: Modeling and Performance Evaluation with Computer
 Science Applications</cite>, Wiley, 1998, Section 6.4.
 
-   <p><a name="index-Bolch_002c-G_002e-54"></a><a name="index-Greiner_002c-S_002e-55"></a><a name="index-de-Meer_002c-H_002e-56"></a><a name="index-Trivedi_002c-K_002e-57"></a>
+   <p><a name="index-Bolch_002c-G_002e-57"></a><a name="index-Greiner_002c-S_002e-58"></a><a name="index-de-Meer_002c-H_002e-59"></a><a name="index-Trivedi_002c-K_002e-60"></a>
 <!-- M/M/1/k -->
 <div class="node">
 <a name="The-M%2fM%2f1%2fK-System"></a>
@@ -1683,9 +1721,9 @@
    <p><a name="doc_002dqnmm1k"></a>
 
 <div class="defun">
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>p0</var>, <var>pK</var>] = <b>qnmm1k</b> (<var>lambda, mu, K</var>)<var><a name="index-qnmm1k-58"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>p0</var>, <var>pK</var>] = <b>qnmm1k</b> (<var>lambda, mu, K</var>)<var><a name="index-qnmm1k-61"></a></var><br>
 <blockquote>
-        <p><a name="index-g_t_0040math_007bM_002fM_002f1_002fK_007d-system-59"></a>
+        <p><a name="index-g_t_0040math_007bM_002fM_002f1_002fK_007d-system-62"></a>
 Compute utilization, response time, average number of requests and
 throughput for a M/M/1/K finite capacity system. In a
 M/M/1/K queue there is a single server; the maximum number of
@@ -1752,9 +1790,9 @@
    <p><a name="doc_002dqnmmmk"></a>
 
 <div class="defun">
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>p0</var>, <var>pK</var>] = <b>qnmmmk</b> (<var>lambda, mu, m, K</var>)<var><a name="index-qnmmmk-60"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>, <var>p0</var>, <var>pK</var>] = <b>qnmmmk</b> (<var>lambda, mu, m, K</var>)<var><a name="index-qnmmmk-63"></a></var><br>
 <blockquote>
-        <p><a name="index-g_t_0040math_007bM_002fM_002fm_002fK_007d-system-61"></a>
+        <p><a name="index-g_t_0040math_007bM_002fM_002fm_002fK_007d-system-64"></a>
 Compute utilization, response time, average number of requests and
 throughput for a M/M/m/K finite capacity system. In a
 M/M/m/K system there are m \geq 1 identical service
@@ -1812,7 +1850,7 @@
 and Markov Chains: Modeling and Performance Evaluation with Computer
 Science Applications</cite>, Wiley, 1998, Section 6.6.
 
-   <p><a name="index-Bolch_002c-G_002e-62"></a><a name="index-Greiner_002c-S_002e-63"></a><a name="index-de-Meer_002c-H_002e-64"></a><a name="index-Trivedi_002c-K_002e-65"></a>
+   <p><a name="index-Bolch_002c-G_002e-65"></a><a name="index-Greiner_002c-S_002e-66"></a><a name="index-de-Meer_002c-H_002e-67"></a><a name="index-Trivedi_002c-K_002e-68"></a>
 
 <!-- Approximate M/M/m -->
 <div class="node">
@@ -1834,9 +1872,9 @@
    <p><a name="doc_002dqnammm"></a>
 
 <div class="defun">
-&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnammm</b> (<var>lambda, mu</var>)<var><a name="index-qnammm-66"></a></var><br>
+&mdash; Function File: [<var>U</var>, <var>R</var>, <var>Q</var>, <var>X</var>] = <b>qnammm</b> (<var>lambda, mu</var>)<var><a name="index-qnammm-69"></a></var><br>
 <blockquote>
-        <p><a name="index-Asymmetric-_0040math_007bM_002fM_002fm_007d-system-67"></a>
+        <p><a name="index-Asymmetric-_0040math_007bM_002fM_002fm_007d-system-70"></a>
 Compute <em>approximate</em> utilization, response time, average number
 of requests in service and throughput for an asymmetric  M/M/m
 queue. In this system there are m different service centers
@@ -1883,7 +1921,7 @@
 and Markov Chains: Modeling and Performance Evaluation with Computer
 Science Applications</cite>, Wiley, 1998
 
-   <p><a name="index-Bolch_002c-G_002e-68"></a><a name="index-Greiner_002c-S_002e-69"></a><a name="index-de-Meer_002c-H_002e-70"></a><a name="index-Trivedi_002c-K_002e-71"></a>
+   <p><a name="index-Bolch_002c-G_002e-71"></a><a name="index-Greiner_002c-S_002e-72"></a><a name="index-de-Meer_002c-H_002e-73"></a><a name="index-Trivedi_002c-K_002e-74"></a>
 <div class="node">
 <a name="The-M%2fG%2f1-System"></a>
 <a name="The-M_002fG_002f1-System"></a>
@@ -1899,9 +1937,9 @@
 <p><a name="doc_002dqnmg1"></a>
 
 <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-72"></a></var><br>
+&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-75"></a></var><br>
 <blockquote>
-        <p><a name="index-g_t_0040math_007bM_002fG_002f1_007d-system-73"></a>
+        <p><a name="index-g_t_0040math_007bM_002fG_002f1_007d-system-76"></a>
 Compute utilization, response time, average number of requests and
 throughput for a M/G/1 system. The service time distribution
 is described by its mean <var>xavg</var>, and by its second moment
@@ -1958,9 +1996,9 @@
 <p><a name="doc_002dqnmh1"></a>
 
 <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-74"></a></var><br>
+&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-77"></a></var><br>
 <blockquote>
-        <p><a name="index-g_t_0040math_007bM_002fH_005fm_002f1_007d-system-75"></a>
+        <p><a name="index-g_t_0040math_007bM_002fH_005fm_002f1_007d-system-78"></a>
 Compute utilization, response time, average number of requests and
 throughput for a M/H_m/1 system. In this system, the customer
 service times have hyper-exponential distribution:
@@ -2042,7 +2080,7 @@
 <li><a accesskey="6" href="#Utility-functions">Utility functions</a>:                    Utility functions to compute miscellaneous quantities
 </ul>
 
-<p><a name="index-queueing-networks-76"></a>
+<p><a name="index-queueing-networks-79"></a>
 <!-- INTRODUCTION -->
 <div class="node">
 <a name="Introduction-to-QNs"></a>
@@ -2303,13 +2341,13 @@
    <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-77"></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-78"></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-79"></a></var><br>
-&mdash; Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/1-ps", S</var>)<var><a name="index-qnmknode-80"></a></var><br>
-&mdash; Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/1-ps", S, s2</var>)<var><a name="index-qnmknode-81"></a></var><br>
-&mdash; Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/inf", S</var>)<var><a name="index-qnmknode-82"></a></var><br>
-&mdash; Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/inf", S, s2</var>)<var><a name="index-qnmknode-83"></a></var><br>
+&mdash; Function File: <var>Q</var> = <b>qnmknode</b> (<var>"m/m/m-fcfs", S</var>)<var><a name="index-qnmknode-80"></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-81"></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-82"></a></var><br>
+&mdash; Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/1-ps", S</var>)<var><a name="index-qnmknode-83"></a></var><br>
+&mdash; Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/1-ps", S, s2</var>)<var><a name="index-qnmknode-84"></a></var><br>
+&mdash; Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/inf", S</var>)<var><a name="index-qnmknode-85"></a></var><br>
+&mdash; Function File: <var>Q</var> = <b>qnmknode</b> (<var>"-/g/inf", S, s2</var>)<var><a name="index-qnmknode-86"></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
@@ -2378,10 +2416,10 @@
    <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-84"></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-85"></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-86"></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-87"></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</var>)<var><a name="index-qnsolve-87"></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-88"></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-89"></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-90"></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.
@@ -2559,11 +2597,11 @@
    <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-88"></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-89"></a></var><br>
-&mdash; Function File: <var>pr</var> = <b>qnjackson</b> (<var>lambda, S, P, m, k</var>)<var><a name="index-qnjackson-90"></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-91"></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-92"></a></var><br>
+&mdash; Function File: <var>pr</var> = <b>qnjackson</b> (<var>lambda, S, P, m, k</var>)<var><a name="index-qnjackson-93"></a></var><br>
 <blockquote>
-        <p><a name="index-open-network_002c-single-class-91"></a><a name="index-Jackson-network-92"></a>
+        <p><a name="index-open-network_002c-single-class-94"></a><a name="index-Jackson-network-95"></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
@@ -2645,7 +2683,7 @@
 Performance Evaluation with Computer Science Applications</cite>, Wiley,
 1998, pp. 284&ndash;287.
 
-   <p><a name="index-Bolch_002c-G_002e-93"></a><a name="index-Greiner_002c-S_002e-94"></a><a name="index-de-Meer_002c-H_002e-95"></a><a name="index-Trivedi_002c-K_002e-96"></a>
+   <p><a name="index-Bolch_002c-G_002e-96"></a><a name="index-Greiner_002c-S_002e-97"></a><a name="index-de-Meer_002c-H_002e-98"></a><a name="index-Trivedi_002c-K_002e-99"></a>
 
 <h4 class="subsection">6.3.2 The Convolution Algorithm</h4>
 
@@ -2679,10 +2717,10 @@
    <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-97"></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-98"></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-100"></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-101"></a></var><br>
 <blockquote>
-        <p><a name="index-closed-network-99"></a><a name="index-normalization-constant-100"></a><a name="index-convolution-algorithm-101"></a>
+        <p><a name="index-closed-network-102"></a><a name="index-normalization-constant-103"></a><a name="index-convolution-algorithm-104"></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
@@ -2773,20 +2811,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-102"></a>
+   <p><a name="index-Buzen_002c-J_002e-P_002e-105"></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-103"></a><a name="index-Greiner_002c-S_002e-104"></a><a name="index-de-Meer_002c-H_002e-105"></a><a name="index-Trivedi_002c-K_002e-106"></a>
+   <p><a name="index-Bolch_002c-G_002e-106"></a><a name="index-Greiner_002c-S_002e-107"></a><a name="index-de-Meer_002c-H_002e-108"></a><a name="index-Trivedi_002c-K_002e-109"></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-107"></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-110"></a></var><br>
 <blockquote>
-        <p><a name="index-closed-network-108"></a><a name="index-normalization-constant-109"></a><a name="index-convolution-algorithm-110"></a><a name="index-load_002ddependent-service-center-111"></a>
+        <p><a name="index-closed-network-111"></a><a name="index-normalization-constant-112"></a><a name="index-convolution-algorithm-113"></a><a name="index-load_002ddependent-service-center-114"></a>
 This function implements the <em>convolution algorithm</em> for
 product-form, single-class closed queueing networks with general
 load-dependent service centers.
@@ -2846,7 +2884,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-112"></a>
+   <p><a name="index-Schwetman_002c-H_002e-115"></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
@@ -2854,7 +2892,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-113"></a><a name="index-Kobayashi_002c-H_002e-114"></a>
+   <p><a name="index-Reiser_002c-M_002e-116"></a><a name="index-Kobayashi_002c-H_002e-117"></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,
@@ -2866,7 +2904,7 @@
 function f_i defined in Schwetman, <code>Some Computational
 Aspects of Queueing Network Models</code>.
 
-   <p><a name="index-Bolch_002c-G_002e-115"></a><a name="index-Greiner_002c-S_002e-116"></a><a name="index-de-Meer_002c-H_002e-117"></a><a name="index-Trivedi_002c-K_002e-118"></a>
+   <p><a name="index-Bolch_002c-G_002e-118"></a><a name="index-Greiner_002c-S_002e-119"></a><a name="index-de-Meer_002c-H_002e-120"></a><a name="index-Trivedi_002c-K_002e-121"></a>
 
 <h4 class="subsection">6.3.3 Open networks</h4>
 
@@ -2874,10 +2912,10 @@
 <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-119"></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-120"></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-122"></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-123"></a></var><br>
 <blockquote>
-        <p><a name="index-open-network_002c-single-class-121"></a><a name="index-BCMP-network-122"></a>
+        <p><a name="index-open-network_002c-single-class-124"></a><a name="index-BCMP-network-125"></a>
 Analyze open, single class BCMP queueing networks.
 
         <p>This function works for a subset of BCMP single-class open networks
@@ -2970,16 +3008,16 @@
 Networks and Markov Chains: Modeling and Performance Evaluation with
 Computer Science Applications</cite>, Wiley, 1998.
 
-   <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>
+   <p><a name="index-Bolch_002c-G_002e-126"></a><a name="index-Greiner_002c-S_002e-127"></a><a name="index-de-Meer_002c-H_002e-128"></a><a name="index-Trivedi_002c-K_002e-129"></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-127"></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-128"></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-130"></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-131"></a></var><br>
 <blockquote>
-        <p><a name="index-open-network_002c-multiple-classes-129"></a>
+        <p><a name="index-open-network_002c-multiple-classes-132"></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
@@ -3044,7 +3082,7 @@
 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-130"></a><a name="index-Zahorjan_002c-J_002e-131"></a><a name="index-Graham_002c-G_002e-S_002e-132"></a><a name="index-Sevcik_002c-K_002e-C_002e-133"></a>
+   <p><a name="index-Lazowska_002c-E_002e-D_002e-133"></a><a name="index-Zahorjan_002c-J_002e-134"></a><a name="index-Graham_002c-G_002e-S_002e-135"></a><a name="index-Sevcik_002c-K_002e-C_002e-136"></a>
 
 <h4 class="subsection">6.3.4 Closed Networks</h4>
 
@@ -3052,11 +3090,11 @@
 <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-134"></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-135"></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-136"></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-137"></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-138"></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-139"></a></var><br>
 <blockquote>
-        <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-137"></a><a name="index-closed-network_002c-single-class-138"></a><a name="index-normalization-constant-139"></a>
+        <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-140"></a><a name="index-closed-network_002c-single-class-141"></a><a name="index-normalization-constant-142"></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
@@ -3157,7 +3195,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-140"></a><a name="index-Lavenberg_002c-S_002e-S_002e-141"></a>
+   <p><a name="index-Reiser_002c-M_002e-143"></a><a name="index-Lavenberg_002c-S_002e-S_002e-144"></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)}, -->
@@ -3166,15 +3204,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-142"></a><a name="index-Bolch_002c-G_002e-143"></a><a name="index-Greiner_002c-S_002e-144"></a><a name="index-de-Meer_002c-H_002e-145"></a><a name="index-Trivedi_002c-K_002e-146"></a>
+   <p><a name="index-Jain_002c-R_002e-145"></a><a name="index-Bolch_002c-G_002e-146"></a><a name="index-Greiner_002c-S_002e-147"></a><a name="index-de-Meer_002c-H_002e-148"></a><a name="index-Trivedi_002c-K_002e-149"></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-147"></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-148"></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-150"></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-151"></a></var><br>
 <blockquote>
-        <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-149"></a><a name="index-closed-network_002c-single-class-150"></a><a name="index-load_002ddependent-service-center-151"></a>
+        <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-152"></a><a name="index-closed-network_002c-single-class-153"></a><a name="index-load_002ddependent-service-center-154"></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
@@ -3232,15 +3270,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-152"></a><a name="index-Greiner_002c-S_002e-153"></a><a name="index-de-Meer_002c-H_002e-154"></a><a name="index-Trivedi_002c-K_002e-155"></a>
+   <p><a name="index-Bolch_002c-G_002e-155"></a><a name="index-Greiner_002c-S_002e-156"></a><a name="index-de-Meer_002c-H_002e-157"></a><a name="index-Trivedi_002c-K_002e-158"></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-156"></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-157"></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-159"></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-160"></a></var><br>
 <blockquote>
-        <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-158"></a><a name="index-CMVA-159"></a>
+        <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-161"></a><a name="index-CMVA-162"></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
@@ -3294,19 +3332,19 @@
 closed networks</cite>. Queueing Syst. Theory Appl., 60:193–202, December
 2008.
 
-   <p><a name="index-Casale_002c-G_002e-160"></a>
+   <p><a name="index-Casale_002c-G_002e-163"></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-161"></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-162"></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-163"></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-164"></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-165"></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-164"></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-165"></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-166"></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-167"></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-168"></a></var><br>
 <blockquote>
-        <p><a name="index-Mean-Value-Analysys-_0028MVA_0029_002c-approximate-166"></a><a name="index-Approximate-MVA-167"></a><a name="index-Closed-network_002c-single-class-168"></a><a name="index-Closed-network_002c-approximate-analysis-169"></a>
+        <p><a name="index-Mean-Value-Analysys-_0028MVA_0029_002c-approximate-169"></a><a name="index-Approximate-MVA-170"></a><a name="index-Closed-network_002c-single-class-171"></a><a name="index-Closed-network_002c-approximate-analysis-172"></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
@@ -3385,20 +3423,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-170"></a><a name="index-Zahorjan_002c-J_002e-171"></a><a name="index-Graham_002c-G_002e-S_002e-172"></a><a name="index-Sevcik_002c-K_002e-C_002e-173"></a>
+   <p><a name="index-Lazowska_002c-E_002e-D_002e-173"></a><a name="index-Zahorjan_002c-J_002e-174"></a><a name="index-Graham_002c-G_002e-S_002e-175"></a><a name="index-Sevcik_002c-K_002e-C_002e-176"></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-174"></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-175"></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-176"></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-177"></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-178"></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-179"></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-177"></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-178"></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-179"></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-180"></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-181"></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-182"></a></var><br>
 <blockquote>
-        <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-180"></a><a name="index-closed-network_002c-multiple-classes-181"></a>
+        <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-183"></a><a name="index-closed-network_002c-multiple-classes-184"></a>
 Analyze closed, multiclass queueing networks with K service
 centers and C independent customer classes (chains) using the
 Mean Value Analysys (MVA) algorithm.
@@ -3528,7 +3566,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-182"></a><a name="index-Lavenberg_002c-S_002e-S_002e-183"></a>
+   <p><a name="index-Reiser_002c-M_002e-185"></a><a name="index-Lavenberg_002c-S_002e-S_002e-186"></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,
@@ -3538,18 +3576,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-184"></a><a name="index-Greiner_002c-S_002e-185"></a><a name="index-de-Meer_002c-H_002e-186"></a><a name="index-Trivedi_002c-K_002e-187"></a><a name="index-Lazowska_002c-E_002e-D_002e-188"></a><a name="index-Zahorjan_002c-J_002e-189"></a><a name="index-Graham_002c-G_002e-S_002e-190"></a><a name="index-Sevcik_002c-K_002e-C_002e-191"></a>
+   <p><a name="index-Bolch_002c-G_002e-187"></a><a name="index-Greiner_002c-S_002e-188"></a><a name="index-de-Meer_002c-H_002e-189"></a><a name="index-Trivedi_002c-K_002e-190"></a><a name="index-Lazowska_002c-E_002e-D_002e-191"></a><a name="index-Zahorjan_002c-J_002e-192"></a><a name="index-Graham_002c-G_002e-S_002e-193"></a><a name="index-Sevcik_002c-K_002e-C_002e-194"></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-192"></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-193"></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-194"></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-195"></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-196"></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-195"></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-196"></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-197"></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-198"></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-199"></a></var><br>
 <blockquote>
-        <p><a name="index-Mean-Value-Analysys-_0028MVA_0029_002c-approximate-197"></a><a name="index-Approximate-MVA-198"></a><a name="index-Closed-network_002c-multiple-classes-199"></a><a name="index-Closed-network_002c-approximate-analysis-200"></a>
+        <p><a name="index-Mean-Value-Analysys-_0028MVA_0029_002c-approximate-200"></a><a name="index-Approximate-MVA-201"></a><a name="index-Closed-network_002c-multiple-classes-202"></a><a name="index-Closed-network_002c-approximate-analysis-203"></a>
 Analyze closed, multiclass queueing networks with K service
 centers and C customer classes using the approximate Mean
 Value Analysys (MVA) algorithm.
@@ -3634,12 +3672,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-201"></a>
+   <p><a name="index-Bard_002c-Y_002e-204"></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-202"></a>
+   <p><a name="index-Schweitzer_002c-P_002e-205"></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>,
@@ -3650,7 +3688,7 @@
 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-203"></a><a name="index-Zahorjan_002c-J_002e-204"></a><a name="index-Graham_002c-G_002e-S_002e-205"></a><a name="index-Sevcik_002c-K_002e-C_002e-206"></a>
+   <p><a name="index-Lazowska_002c-E_002e-D_002e-206"></a><a name="index-Zahorjan_002c-J_002e-207"></a><a name="index-Graham_002c-G_002e-S_002e-208"></a><a name="index-Sevcik_002c-K_002e-C_002e-209"></a>
 
 <h4 class="subsection">6.3.5 Mixed Networks</h4>
 
@@ -3658,9 +3696,9 @@
 <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-207"></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-210"></a></var><br>
 <blockquote>
-        <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-208"></a><a name="index-mixed-network-209"></a>
+        <p><a name="index-Mean-Value-Analysys-_0028MVA_0029-211"></a><a name="index-mixed-network-212"></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
@@ -3751,14 +3789,14 @@
 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-210"></a><a name="index-Zahorjan_002c-J_002e-211"></a><a name="index-Graham_002c-G_002e-S_002e-212"></a><a name="index-Sevcik_002c-K_002e-C_002e-213"></a>
+   <p><a name="index-Lazowska_002c-E_002e-D_002e-213"></a><a name="index-Zahorjan_002c-J_002e-214"></a><a name="index-Graham_002c-G_002e-S_002e-215"></a><a name="index-Sevcik_002c-K_002e-C_002e-216"></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-214"></a>
+   <p><a name="index-Schwetman_002c-H_002e-217"></a>
 
 <div class="node">
 <a name="Algorithms-for-non-Product-form-QNs"></a>
@@ -3777,9 +3815,9 @@
 <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-215"></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-218"></a></var><br>
 <blockquote>
-        <p><a name="index-queueing-network-with-blocking-216"></a><a name="index-blocking-queueing-network-217"></a><a name="index-closed-network_002c-finite-capacity-218"></a>
+        <p><a name="index-queueing-network-with-blocking-219"></a><a name="index-blocking-queueing-network-220"></a><a name="index-closed-network_002c-finite-capacity-221"></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.
@@ -3834,16 +3872,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-219"></a>
+   <p><a name="index-Akyildiz_002c-I_002e-F_002e-222"></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-220"></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-221"></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-222"></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-223"></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-223"></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-224"></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-225"></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-226"></a></var><br>
 <blockquote>
-        <p><a name="index-closed-network_002c-multiple-classes-224"></a><a name="index-closed-network_002c-finite-capacity-225"></a><a name="index-blocking-queueing-network-226"></a><a name="index-RS-blocking-227"></a>
+        <p><a name="index-closed-network_002c-multiple-classes-227"></a><a name="index-closed-network_002c-finite-capacity-228"></a><a name="index-blocking-queueing-network-229"></a><a name="index-RS-blocking-230"></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
@@ -3953,9 +3991,9 @@
 <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-228"></a></var><br>
+&mdash; Function File: [<var>Xu</var>, <var>Rl</var>] = <b>qnopenab</b> (<var>lambda, D</var>)<var><a name="index-qnopenab-231"></a></var><br>
 <blockquote>
-        <p><a name="index-bounds_002c-asymptotic-229"></a><a name="index-open-network-230"></a>
+        <p><a name="index-bounds_002c-asymptotic-232"></a><a name="index-open-network-233"></a>
 Compute Asymptotic Bounds for single-class, open Queueing Networks
 with K service centers.
 
@@ -3995,14 +4033,14 @@
 1984. <a href="http://www.cs.washington.edu/homes/lazowska/qsp/">http://www.cs.washington.edu/homes/lazowska/qsp/</a>. In
 particular, see section 5.2 ("Asymptotic Bounds").
 
-   <p><a name="index-Lazowska_002c-E_002e-D_002e-231"></a><a name="index-Zahorjan_002c-J_002e-232"></a><a name="index-Graham_002c-G_002e-S_002e-233"></a><a name="index-Sevcik_002c-K_002e-C_002e-234"></a>
+   <p><a name="index-Lazowska_002c-E_002e-D_002e-234"></a><a name="index-Zahorjan_002c-J_002e-235"></a><a name="index-Graham_002c-G_002e-S_002e-236"></a><a name="index-Sevcik_002c-K_002e-C_002e-237"></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-235"></a></var><br>
-&mdash; Function File: [<var>Xl</var>, <var>Xu</var>, <var>Rl</var>, <var>Ru</var>] = <b>qnclosedab</b> (<var>N, D, Z</var>)<var><a name="index-qnclosedab-236"></a></var><br>
+&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-238"></a></var><br>
+&mdash; Function File: [<var>Xl</var>, <var>Xu</var>, <var>Rl</var>, <var>Ru</var>] = <b>qnclosedab</b> (<var>N, D, Z</var>)<var><a name="index-qnclosedab-239"></a></var><br>
 <blockquote>
-        <p><a name="index-bounds_002c-asymptotic-237"></a><a name="index-closed-network-238"></a>
+        <p><a name="index-bounds_002c-asymptotic-240"></a><a name="index-closed-network-241"></a>
 Compute Asymptotic Bounds for single-class, closed Queueing Networks
 with K service centers.
 
@@ -4043,14 +4081,14 @@
 1984. <a href="http://www.cs.washington.edu/homes/lazowska/qsp/">http://www.cs.washington.edu/homes/lazowska/qsp/</a>. In
 particular, see section 5.2 ("Asymptotic Bounds").
 
-   <p><a name="index-Lazowska_002c-E_002e-D_002e-239"></a><a name="index-Zahorjan_002c-J_002e-240"></a><a name="index-Graham_002c-G_002e-S_002e-241"></a><a name="index-Sevcik_002c-K_002e-C_002e-242"></a>
+   <p><a name="index-Lazowska_002c-E_002e-D_002e-242"></a><a name="index-Zahorjan_002c-J_002e-243"></a><a name="index-Graham_002c-G_002e-S_002e-244"></a><a name="index-Sevcik_002c-K_002e-C_002e-245"></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-243"></a></var><br>
+&mdash; Function File: [<var>Xu</var>, <var>Rl</var>, <var>Ru</var>] = <b>qnopenbsb</b> (<var>lambda, D</var>)<var><a name="index-qnopenbsb-246"></a></var><br>
 <blockquote>
-        <p><a name="index-bounds_002c-balanced-system-244"></a><a name="index-open-network-245"></a>
+        <p><a name="index-bounds_002c-balanced-system-247"></a><a name="index-open-network-248"></a>
 Compute Balanced System Bounds for single-class, open Queueing Networks
 with K service centers.
 
@@ -4090,14 +4128,14 @@
 1984. <a href="http://www.cs.washington.edu/homes/lazowska/qsp/">http://www.cs.washington.edu/homes/lazowska/qsp/</a>. In
 particular, see section 5.4 ("Balanced Systems Bounds").
 
-   <p><a name="index-Lazowska_002c-E_002e-D_002e-246"></a><a name="index-Zahorjan_002c-J_002e-247"></a><a name="index-Graham_002c-G_002e-S_002e-248"></a><a name="index-Sevcik_002c-K_002e-C_002e-249"></a>
+   <p><a name="index-Lazowska_002c-E_002e-D_002e-249"></a><a name="index-Zahorjan_002c-J_002e-250"></a><a name="index-Graham_002c-G_002e-S_002e-251"></a><a name="index-Sevcik_002c-K_002e-C_002e-252"></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-250"></a></var><br>
-&mdash; Function File: [<var>Xl</var>, <var>Xu</var>, <var>Rl</var>, <var>Ru</var>] = <b>qnclosedbsb</b> (<var>N, D, Z</var>)<var><a name="index-qnclosedbsb-251"></a></var><br>
+&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-253"></a></var><br>
+&mdash; Function File: [<var>Xl</var>, <var>Xu</var>, <var>Rl</var>, <var>Ru</var>] = <b>qnclosedbsb</b> (<var>N, D, Z</var>)<var><a name="index-qnclosedbsb-254"></a></var><br>
 <blockquote>
-        <p><a name="index-bounds_002c-balanced-system-252"></a><a name="index-closed-network-253"></a>
+        <p><a name="index-bounds_002c-balanced-system-255"></a><a name="index-closed-network-256"></a>
 Compute Balanced System Bounds for single-class, closed Queueing Networks
 with K service centers.
 
@@ -4133,7 +4171,7 @@
    <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-254"></a></var><br>
+&mdash; Function File: [<var>Xl</var>, <var>Xu</var>] = <b>qnclosedpb</b> (<var>N, D </var>)<var><a name="index-qnclosedpb-257"></a></var><br>
 <blockquote>
         <p>Compute PB Bounds (C. H. Hsieh and S. Lam, 1987)
 for single-class, closed Queueing Networks
@@ -4177,13 +4215,13 @@
 Non-Iterative Analysis Technique for Closed Queueing Networks</cite>, IEEE
 Transactions on Computers, 57(6):780-794, June 2008.
 
-   <p><a name="index-Hsieh_002c-C_002e-H-255"></a><a name="index-Lam_002c-S_002e-256"></a><a name="index-Casale_002c-G_002e-257"></a><a name="index-Muntz_002c-R_002e-R_002e-258"></a><a name="index-Serazzi_002c-G_002e-259"></a>
+   <p><a name="index-Hsieh_002c-C_002e-H-258"></a><a name="index-Lam_002c-S_002e-259"></a><a name="index-Casale_002c-G_002e-260"></a><a name="index-Muntz_002c-R_002e-R_002e-261"></a><a name="index-Serazzi_002c-G_002e-262"></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-260"></a></var><br>
+&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-263"></a></var><br>
 <blockquote>
-        <p><a name="index-bounds_002c-geometric-261"></a><a name="index-closed-network-262"></a>
+        <p><a name="index-bounds_002c-geometric-264"></a><a name="index-closed-network-265"></a>
 Compute Geometric Bounds (GB) for single-class, closed Queueing Networks.
 
         <p><strong>INPUTS</strong>
@@ -4224,7 +4262,7 @@
 Queueing Networks</cite>, IEEE Transactions on Computers, 57(6):780-794,
 June 2008. <a href="http://doi.ieeecomputersociety.org/10.1109/TC.2008.37">http://doi.ieeecomputersociety.org/10.1109/TC.2008.37</a>
 
-   <p><a name="index-Casale_002c-G_002e-263"></a><a name="index-Muntz_002c-R_002e-R_002e-264"></a><a name="index-Serazzi_002c-G_002e-265"></a>
+   <p><a name="index-Casale_002c-G_002e-266"></a><a name="index-Muntz_002c-R_002e-R_002e-267"></a><a name="index-Serazzi_002c-G_002e-268"></a>
 In this implementation we set X^+ and X^- as the upper
 and lower Asymptotic Bounds as computed by the <code>qnclosedab</code>
 function, respectively.
@@ -4244,9 +4282,9 @@
 <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-266"></a></var><br>
+&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-269"></a></var><br>
 <blockquote>
-        <p><a name="index-closed-network-267"></a>
+        <p><a name="index-closed-network-270"></a>
 This function computes steady-state performance measures of closed
 queueing networks using the Mean Value Analysis (MVA) algorithm. The
 qneneing network is allowed to contain fixed-capacity centers, delay
@@ -4313,9 +4351,9 @@
    <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-268"></a></var><br>
+&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-271"></a></var><br>
 <blockquote>
-        <p><a name="index-open-network-269"></a>
+        <p><a name="index-open-network-272"></a>
 Compute utilization, response time, average number of requests in the
 system, and throughput for open queueing networks. If <var>lambda</var> is
 a scalar, the network is considered a single-class QN and is solved
@@ -4368,8 +4406,8 @@
    <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-270"></a></var><br>
-&mdash; Function File: <var>V</var> = <b>qnvisits</b> (<var>P, lambda</var>)<var><a name="index-qnvisits-271"></a></var><br>
+&mdash; Function File: [<var>V</var> <var>ch</var>] = <b>qnvisits</b> (<var>P</var>)<var><a name="index-qnvisits-273"></a></var><br>
+&mdash; Function File: <var>V</var> = <b>qnvisits</b> (<var>P, lambda</var>)<var><a name="index-qnvisits-274"></a></var><br>
 <blockquote>
         <p>Compute the average number of visits to the service centers of a
 single class, open or closed Queueing Network with N service
@@ -4431,9 +4469,9 @@
 <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-272"></a></var><br>
+&mdash; Function File: pop_mix = <b>population_mix</b> (<var>k, N</var>)<var><a name="index-population_005fmix-275"></a></var><br>
 <blockquote>
-        <p><a name="index-population-mix-273"></a><a name="index-closed-network_002c-multiple-classes-274"></a>
+        <p><a name="index-population-mix-276"></a><a name="index-closed-network_002c-multiple-classes-277"></a>
 Return the set of valid population mixes with exactly <var>k</var>
 customers, for a closed multiclass Queueing Network with population
 vector <var>N</var>. More specifically, given a multiclass Queueing
@@ -4495,13 +4533,13 @@
 Indices for a Complex Summation</cite>, unpublished report, available at
 <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-275"></a><a name="index-Santini_002c-S_002e-276"></a>
+   <p><a name="index-Schwetman_002c-H_002e-278"></a><a name="index-Santini_002c-S_002e-279"></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-277"></a></var><br>
+&mdash; Function File: <var>H</var> = <b>qnmvapop</b> (<var>N</var>)<var><a name="index-qnmvapop-280"></a></var><br>
 <blockquote>
-        <p><a name="index-population-mix-278"></a><a name="index-closed-network_002c-multiple-classes-279"></a>
+        <p><a name="index-population-mix-281"></a><a name="index-closed-network_002c-multiple-classes-282"></a>
 Given a network with C customer classes, this function
 computes the number of valid population mixes <var>H</var><code>(r,n)</code> that can
 be constructed by the multiclass MVA algorithm by allocating n
@@ -4538,7 +4576,7 @@
 Perform. Eval. Rev. 10, 3 (Sep. 1981), 80-85. DOI
 <a href="http://doi.acm.org/10.1145/1010629.805477">http://doi.acm.org/10.1145/1010629.805477</a>
 
-   <p><a name="index-Zahorjan_002c-J_002e-280"></a><a name="index-Wong_002c-E_002e-281"></a>
+   <p><a name="index-Zahorjan_002c-J_002e-283"></a><a name="index-Wong_002c-E_002e-284"></a>
 
 <!-- Appendix starts here -->
 <!-- DO NOT EDIT!  Generated automatically by munge-texi. -->
@@ -4649,7 +4687,7 @@
 
 <h2 class="appendix">Appendix C GNU GENERAL PUBLIC LICENSE</h2>
 
-<p><a name="index-warranty-282"></a><a name="index-copyright-283"></a>
+<p><a name="index-warranty-285"></a><a name="index-copyright-286"></a>
 <div align="center">Version 3, 29 June 2007</div>
 
 <pre class="display">     Copyright &copy; 2007 Free Software Foundation, Inc. <a href="http://fsf.org/">http://fsf.org/</a>
@@ -5356,69 +5394,70 @@
 <h2 class="unnumbered">Concept Index</h2>
 
 <ul class="index-cp" compact>
-<li><a href="#index-Approximate-MVA-167">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-67">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-122">BCMP network</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-Birth_002ddeath-process-19">Birth-death process</a>: <a href="#Birth_002dDeath-process">Birth-Death process</a></li>
-<li><a href="#index-blocking-queueing-network-217">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-229">bounds, asymptotic</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-bounds_002c-balanced-system-244">bounds, balanced system</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-bounds_002c-geometric-261">bounds, geometric</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-closed-network-267">closed network</a>: <a href="#Utility-functions">Utility functions</a></li>
-<li><a href="#index-closed-network-238">closed network</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-closed-network-99">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-169">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-218">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-274">closed network, multiple classes</a>: <a href="#Utility-functions">Utility functions</a></li>
-<li><a href="#index-closed-network_002c-multiple-classes-224">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-199">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-181">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-168">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-138">closed network, single class</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-CMVA-159">CMVA</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-Continuous-time-Markov-chain-14">Continuous time Markov chain</a>: <a href="#CTMC-Stationary-Probability">CTMC Stationary Probability</a></li>
-<li><a href="#index-convolution-algorithm-101">convolution algorithm</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-copyright-283">copyright</a>: <a href="#Copying">Copying</a></li>
+<li><a href="#index-Approximate-MVA-170">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-70">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-125">BCMP network</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-Birth_002ddeath-process-22">Birth-death process</a>: <a href="#Birth_002dDeath-process">Birth-Death process</a></li>
+<li><a href="#index-Birth_002ddeath-process-9">Birth-death process</a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li>
+<li><a href="#index-blocking-queueing-network-220">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-232">bounds, asymptotic</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
+<li><a href="#index-bounds_002c-balanced-system-247">bounds, balanced system</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
+<li><a href="#index-bounds_002c-geometric-264">bounds, geometric</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
+<li><a href="#index-closed-network-270">closed network</a>: <a href="#Utility-functions">Utility functions</a></li>
+<li><a href="#index-closed-network-241">closed network</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
+<li><a href="#index-closed-network-102">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-172">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-221">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-277">closed network, multiple classes</a>: <a href="#Utility-functions">Utility functions</a></li>
+<li><a href="#index-closed-network_002c-multiple-classes-227">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-202">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-184">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-171">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-141">closed network, single class</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-CMVA-162">CMVA</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-Continuous-time-Markov-chain-17">Continuous time Markov chain</a>: <a href="#State-occupancy-probabilities">State occupancy probabilities</a></li>
+<li><a href="#index-convolution-algorithm-104">convolution algorithm</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-copyright-286">copyright</a>: <a href="#Copying">Copying</a></li>
 <li><a href="#index-Discrete-time-Markov-chain-4">Discrete time Markov chain</a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li>
-<li><a href="#index-Expected-sojourn-time-23">Expected sojourn time</a>: <a href="#Expected-Sojourn-Time">Expected Sojourn Time</a></li>
-<li><a href="#index-First-passage-times-37">First passage times</a>: <a href="#CTMC-First-Passage-Times">CTMC First Passage Times</a></li>
-<li><a href="#index-First-passage-times-10">First passage times</a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li>
-<li><a href="#index-Jackson-network-92">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-111">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-73">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-75">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-39">M/M/1 system</a>: <a href="#The-M_002fM_002f1-System">The M/M/1 System</a></li>
-<li><a href="#index-g_t_0040math_007bM_002fM_002f1_002fK_007d-system-59">M/M/1/K system</a>: <a href="#The-M_002fM_002f1_002fK-System">The M/M/1/K System</a></li>
-<li><a href="#index-g_t_0040math_007bM_002fM_002f_007dinf-system-52">M/M/inf system</a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li>
-<li><a href="#index-g_t_0040math_007bM_002fM_002fm_007d-system-46">M/M/m system</a>: <a href="#The-M_002fM_002fm-System">The M/M/m System</a></li>
-<li><a href="#index-g_t_0040math_007bM_002fM_002fm_002fK_007d-system-61">M/M/m/K system</a>: <a href="#The-M_002fM_002fm_002fK-System">The M/M/m/K System</a></li>
-<li><a href="#index-Markov-chain_002c-continuous-time-36">Markov chain, continuous time</a>: <a href="#CTMC-First-Passage-Times">CTMC First Passage Times</a></li>
-<li><a href="#index-Markov-chain_002c-continuous-time-28">Markov chain, continuous time</a>: <a href="#Expected-Time-to-Absorption">Expected Time to Absorption</a></li>
-<li><a href="#index-Markov-chain_002c-continuous-time-25">Markov chain, continuous time</a>: <a href="#Time_002dAveraged-Expected-Sojourn-Time">Time-Averaged Expected Sojourn Time</a></li>
-<li><a href="#index-Markov-chain_002c-continuous-time-22">Markov chain, continuous time</a>: <a href="#Expected-Sojourn-Time">Expected Sojourn Time</a></li>
-<li><a href="#index-Markov-chain_002c-continuous-time-18">Markov chain, continuous time</a>: <a href="#Birth_002dDeath-process">Birth-Death process</a></li>
-<li><a href="#index-Markov-chain_002c-continuous-time-13">Markov chain, continuous time</a>: <a href="#CTMC-Stationary-Probability">CTMC Stationary Probability</a></li>
+<li><a href="#index-Expected-sojourn-time-26">Expected sojourn time</a>: <a href="#Expected-Sojourn-Time">Expected Sojourn Time</a></li>
+<li><a href="#index-First-passage-times-40">First passage times</a>: <a href="#First-Passage-Times">First Passage Times</a></li>
+<li><a href="#index-First-passage-times-13">First passage times</a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li>
+<li><a href="#index-Jackson-network-95">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-114">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-76">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-78">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-42">M/M/1 system</a>: <a href="#The-M_002fM_002f1-System">The M/M/1 System</a></li>
+<li><a href="#index-g_t_0040math_007bM_002fM_002f1_002fK_007d-system-62">M/M/1/K system</a>: <a href="#The-M_002fM_002f1_002fK-System">The M/M/1/K System</a></li>
+<li><a href="#index-g_t_0040math_007bM_002fM_002f_007dinf-system-55">M/M/inf system</a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li>
+<li><a href="#index-g_t_0040math_007bM_002fM_002fm_007d-system-49">M/M/m system</a>: <a href="#The-M_002fM_002fm-System">The M/M/m System</a></li>
+<li><a href="#index-g_t_0040math_007bM_002fM_002fm_002fK_007d-system-64">M/M/m/K system</a>: <a href="#The-M_002fM_002fm_002fK-System">The M/M/m/K System</a></li>
+<li><a href="#index-Markov-chain_002c-continuous-time-39">Markov chain, continuous time</a>: <a href="#First-Passage-Times">First Passage Times</a></li>
+<li><a href="#index-Markov-chain_002c-continuous-time-31">Markov chain, continuous time</a>: <a href="#Expected-Time-to-Absorption">Expected Time to Absorption</a></li>
+<li><a href="#index-Markov-chain_002c-continuous-time-28">Markov chain, continuous time</a>: <a href="#Time_002dAveraged-Expected-Sojourn-Time">Time-Averaged Expected Sojourn Time</a></li>
+<li><a href="#index-Markov-chain_002c-continuous-time-25">Markov chain, continuous time</a>: <a href="#Expected-Sojourn-Time">Expected Sojourn Time</a></li>
+<li><a href="#index-Markov-chain_002c-continuous-time-21">Markov chain, continuous time</a>: <a href="#Birth_002dDeath-process">Birth-Death process</a></li>
+<li><a href="#index-Markov-chain_002c-continuous-time-16">Markov chain, continuous time</a>: <a href="#State-occupancy-probabilities">State occupancy probabilities</a></li>
 <li><a href="#index-Markov-chain_002c-discrete-time-3">Markov chain, discrete time</a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li>
-<li><a href="#index-Markov-chain_002c-state-occupancy-probabilities-15">Markov chain, state occupancy probabilities</a>: <a href="#CTMC-Stationary-Probability">CTMC Stationary Probability</a></li>
+<li><a href="#index-Markov-chain_002c-state-occupancy-probabilities-18">Markov chain, state occupancy probabilities</a>: <a href="#State-occupancy-probabilities">State occupancy probabilities</a></li>
 <li><a href="#index-Markov-chain_002c-stationary-probabilities-5">Markov chain, stationary probabilities</a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li>
-<li><a href="#index-Mean-time-to-absorption-29">Mean time to absorption</a>: <a href="#Expected-Time-to-Absorption">Expected Time to Absorption</a></li>
-<li><a href="#index-Mean-Value-Analysys-_0028MVA_0029-137">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-166">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-209">mixed network</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-normalization-constant-100">normalization constant</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-open-network-269">open network</a>: <a href="#Utility-functions">Utility functions</a></li>
-<li><a href="#index-open-network-230">open network</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-open-network_002c-multiple-classes-129">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-91">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-273">population mix</a>: <a href="#Utility-functions">Utility functions</a></li>
-<li><a href="#index-queueing-network-with-blocking-216">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-76">queueing networks</a>: <a href="#Queueing-Networks">Queueing Networks</a></li>
-<li><a href="#index-RS-blocking-227">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-16">Stationary probabilities</a>: <a href="#CTMC-Stationary-Probability">CTMC Stationary Probability</a></li>
+<li><a href="#index-Mean-time-to-absorption-32">Mean time to absorption</a>: <a href="#Expected-Time-to-Absorption">Expected Time to Absorption</a></li>
+<li><a href="#index-Mean-Value-Analysys-_0028MVA_0029-140">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-169">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-212">mixed network</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-normalization-constant-103">normalization constant</a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-open-network-272">open network</a>: <a href="#Utility-functions">Utility functions</a></li>
+<li><a href="#index-open-network-233">open network</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
+<li><a href="#index-open-network_002c-multiple-classes-132">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-94">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-276">population mix</a>: <a href="#Utility-functions">Utility functions</a></li>
+<li><a href="#index-queueing-network-with-blocking-219">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-79">queueing networks</a>: <a href="#Queueing-Networks">Queueing Networks</a></li>
+<li><a href="#index-RS-blocking-230">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-19">Stationary probabilities</a>: <a href="#State-occupancy-probabilities">State occupancy probabilities</a></li>
 <li><a href="#index-Stationary-probabilities-6">Stationary probabilities</a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li>
-<li><a href="#index-Time_002dalveraged-sojourn-time-26">Time-alveraged sojourn time</a>: <a href="#Time_002dAveraged-Expected-Sojourn-Time">Time-Averaged Expected Sojourn Time</a></li>
-<li><a href="#index-traffic-intensity-53">traffic intensity</a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li>
-<li><a href="#index-warranty-282">warranty</a>: <a href="#Copying">Copying</a></li>
+<li><a href="#index-Time_002dalveraged-sojourn-time-29">Time-alveraged sojourn time</a>: <a href="#Time_002dAveraged-Expected-Sojourn-Time">Time-Averaged Expected Sojourn Time</a></li>
+<li><a href="#index-traffic-intensity-56">traffic intensity</a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li>
+<li><a href="#index-warranty-285">warranty</a>: <a href="#Copying">Copying</a></li>
    </ul><div class="node">
 <a name="Function-Index"></a>
 <p><hr>
@@ -5433,49 +5472,50 @@
 
 
 <ul class="index-fn" compact>
-<li><a href="#index-ctmc-11"><code>ctmc</code></a>: <a href="#CTMC-Stationary-Probability">CTMC Stationary Probability</a></li>
-<li><a href="#index-ctmc_005fbd-17"><code>ctmc_bd</code></a>: <a href="#Birth_002dDeath-process">Birth-Death process</a></li>
-<li><a href="#index-ctmc_005fexps-20"><code>ctmc_exps</code></a>: <a href="#Expected-Sojourn-Time">Expected Sojourn Time</a></li>
-<li><a href="#index-ctmc_005ffpt-34"><code>ctmc_fpt</code></a>: <a href="#CTMC-First-Passage-Times">CTMC First Passage Times</a></li>
-<li><a href="#index-ctmc_005fmtta-27"><code>ctmc_mtta</code></a>: <a href="#Expected-Time-to-Absorption">Expected Time to Absorption</a></li>
-<li><a href="#index-ctmc_005ftaexps-24"><code>ctmc_taexps</code></a>: <a href="#Time_002dAveraged-Expected-Sojourn-Time">Time-Averaged Expected Sojourn Time</a></li>
+<li><a href="#index-ctmc-14"><code>ctmc</code></a>: <a href="#State-occupancy-probabilities">State occupancy probabilities</a></li>
+<li><a href="#index-ctmc_005fbd-20"><code>ctmc_bd</code></a>: <a href="#Birth_002dDeath-process">Birth-Death process</a></li>
+<li><a href="#index-ctmc_005fexps-23"><code>ctmc_exps</code></a>: <a href="#Expected-Sojourn-Time">Expected Sojourn Time</a></li>
+<li><a href="#index-ctmc_005ffpt-37"><code>ctmc_fpt</code></a>: <a href="#First-Passage-Times">First Passage Times</a></li>
+<li><a href="#index-ctmc_005fmtta-30"><code>ctmc_mtta</code></a>: <a href="#Expected-Time-to-Absorption">Expected Time to Absorption</a></li>
+<li><a href="#index-ctmc_005ftaexps-27"><code>ctmc_taexps</code></a>: <a href="#Time_002dAveraged-Expected-Sojourn-Time">Time-Averaged Expected Sojourn Time</a></li>
 <li><a href="#index-dtmc-1"><code>dtmc</code></a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li>
-<li><a href="#index-dtmc_005ffpt-7"><code>dtmc_fpt</code></a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li>
-<li><a href="#index-population_005fmix-272"><code>population_mix</code></a>: <a href="#Utility-functions">Utility functions</a></li>
-<li><a href="#index-qnammm-66"><code>qnammm</code></a>: <a href="#The-Asymmetric-M_002fM_002fm-System">The Asymmetric M/M/m System</a></li>
-<li><a href="#index-qnclosed-266"><code>qnclosed</code></a>: <a href="#Utility-functions">Utility functions</a></li>
-<li><a href="#index-qnclosedab-235"><code>qnclosedab</code></a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-qnclosedbsb-250"><code>qnclosedbsb</code></a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-qnclosedgb-260"><code>qnclosedgb</code></a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-qnclosedmultimva-174"><code>qnclosedmultimva</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-qnclosedmultimvaapprox-192"><code>qnclosedmultimvaapprox</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-qnclosedpb-254"><code>qnclosedpb</code></a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-qnclosedsinglemva-134"><code>qnclosedsinglemva</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-qnclosedsinglemvaapprox-161"><code>qnclosedsinglemvaapprox</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-qnclosedsinglemvald-147"><code>qnclosedsinglemvald</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-qncmva-156"><code>qncmva</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-qnconvolution-97"><code>qnconvolution</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-qnconvolutionld-107"><code>qnconvolutionld</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-qnjackson-88"><code>qnjackson</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-qnmarkov-220"><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-72"><code>qnmg1</code></a>: <a href="#The-M_002fG_002f1-System">The M/G/1 System</a></li>
-<li><a href="#index-qnmh1-74"><code>qnmh1</code></a>: <a href="#The-M_002fHm_002f1-System">The M/Hm/1 System</a></li>
-<li><a href="#index-qnmix-207"><code>qnmix</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-qnmknode-77"><code>qnmknode</code></a>: <a href="#Generic-Algorithms">Generic Algorithms</a></li>
-<li><a href="#index-qnmm1-38"><code>qnmm1</code></a>: <a href="#The-M_002fM_002f1-System">The M/M/1 System</a></li>
-<li><a href="#index-qnmm1k-58"><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-51"><code>qnmminf</code></a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li>
-<li><a href="#index-qnmmm-44"><code>qnmmm</code></a>: <a href="#The-M_002fM_002fm-System">The M/M/m System</a></li>
-<li><a href="#index-qnmmmk-60"><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-215"><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-277"><code>qnmvapop</code></a>: <a href="#Utility-functions">Utility functions</a></li>
-<li><a href="#index-qnopen-268"><code>qnopen</code></a>: <a href="#Utility-functions">Utility functions</a></li>
-<li><a href="#index-qnopenab-228"><code>qnopenab</code></a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-qnopenbsb-243"><code>qnopenbsb</code></a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-qnopenmulti-127"><code>qnopenmulti</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-qnopensingle-119"><code>qnopensingle</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
-<li><a href="#index-qnsolve-84"><code>qnsolve</code></a>: <a href="#Generic-Algorithms">Generic Algorithms</a></li>
-<li><a href="#index-qnvisits-270"><code>qnvisits</code></a>: <a href="#Utility-functions">Utility functions</a></li>
+<li><a href="#index-dtmc_005fbd-7"><code>dtmc_bd</code></a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li>
+<li><a href="#index-dtmc_005ffpt-10"><code>dtmc_fpt</code></a>: <a href="#Discrete_002dTime-Markov-Chains">Discrete-Time Markov Chains</a></li>
+<li><a href="#index-population_005fmix-275"><code>population_mix</code></a>: <a href="#Utility-functions">Utility functions</a></li>
+<li><a href="#index-qnammm-69"><code>qnammm</code></a>: <a href="#The-Asymmetric-M_002fM_002fm-System">The Asymmetric M/M/m System</a></li>
+<li><a href="#index-qnclosed-269"><code>qnclosed</code></a>: <a href="#Utility-functions">Utility functions</a></li>
+<li><a href="#index-qnclosedab-238"><code>qnclosedab</code></a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
+<li><a href="#index-qnclosedbsb-253"><code>qnclosedbsb</code></a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
+<li><a href="#index-qnclosedgb-263"><code>qnclosedgb</code></a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
+<li><a href="#index-qnclosedmultimva-177"><code>qnclosedmultimva</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-qnclosedmultimvaapprox-195"><code>qnclosedmultimvaapprox</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-qnclosedpb-257"><code>qnclosedpb</code></a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
+<li><a href="#index-qnclosedsinglemva-137"><code>qnclosedsinglemva</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-qnclosedsinglemvaapprox-164"><code>qnclosedsinglemvaapprox</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-qnclosedsinglemvald-150"><code>qnclosedsinglemvald</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-qncmva-159"><code>qncmva</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-qnconvolution-100"><code>qnconvolution</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-qnconvolutionld-110"><code>qnconvolutionld</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-qnjackson-91"><code>qnjackson</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-qnmarkov-223"><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-75"><code>qnmg1</code></a>: <a href="#The-M_002fG_002f1-System">The M/G/1 System</a></li>
+<li><a href="#index-qnmh1-77"><code>qnmh1</code></a>: <a href="#The-M_002fHm_002f1-System">The M/Hm/1 System</a></li>
+<li><a href="#index-qnmix-210"><code>qnmix</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-qnmknode-80"><code>qnmknode</code></a>: <a href="#Generic-Algorithms">Generic Algorithms</a></li>
+<li><a href="#index-qnmm1-41"><code>qnmm1</code></a>: <a href="#The-M_002fM_002f1-System">The M/M/1 System</a></li>
+<li><a href="#index-qnmm1k-61"><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-54"><code>qnmminf</code></a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li>
+<li><a href="#index-qnmmm-47"><code>qnmmm</code></a>: <a href="#The-M_002fM_002fm-System">The M/M/m System</a></li>
+<li><a href="#index-qnmmmk-63"><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-218"><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-280"><code>qnmvapop</code></a>: <a href="#Utility-functions">Utility functions</a></li>
+<li><a href="#index-qnopen-271"><code>qnopen</code></a>: <a href="#Utility-functions">Utility functions</a></li>
+<li><a href="#index-qnopenab-231"><code>qnopenab</code></a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
+<li><a href="#index-qnopenbsb-246"><code>qnopenbsb</code></a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
+<li><a href="#index-qnopenmulti-130"><code>qnopenmulti</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-qnopensingle-122"><code>qnopensingle</code></a>: <a href="#Algorithms-for-Product_002dForm-QNs">Algorithms for Product-Form QNs</a></li>
+<li><a href="#index-qnsolve-87"><code>qnsolve</code></a>: <a href="#Generic-Algorithms">Generic Algorithms</a></li>
+<li><a href="#index-qnvisits-273"><code>qnvisits</code></a>: <a href="#Utility-functions">Utility functions</a></li>
    </ul><div class="node">
 <a name="Author-Index"></a>
 <p><hr>
@@ -5489,60 +5529,60 @@
 
 
 <ul class="index-au" compact>
-<li><a href="#index-Akyildiz_002c-I_002e-F_002e-219">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-201">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-93">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-68">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-62">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-54">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-47">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-40">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-30">Bolch, G.</a>: <a href="#Expected-Time-to-Absorption">Expected Time to Absorption</a></li>
-<li><a href="#index-Buzen_002c-J_002e-P_002e-102">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-257">Casale, G.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-Casale_002c-G_002e-160">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-95">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-70">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-64">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-56">de Meer, H.</a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li>
-<li><a href="#index-de-Meer_002c-H_002e-49">de Meer, H.</a>: <a href="#The-M_002fM_002fm-System">The M/M/m System</a></li>
-<li><a href="#index-de-Meer_002c-H_002e-42">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-32">de Meer, H.</a>: <a href="#Expected-Time-to-Absorption">Expected Time to Absorption</a></li>
-<li><a href="#index-Graham_002c-G_002e-S_002e-233">Graham, G. S.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-Graham_002c-G_002e-S_002e-132">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-94">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-69">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-63">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-55">Greiner, S.</a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li>
-<li><a href="#index-Greiner_002c-S_002e-48">Greiner, S.</a>: <a href="#The-M_002fM_002fm-System">The M/M/m System</a></li>
-<li><a href="#index-Greiner_002c-S_002e-41">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-31">Greiner, S.</a>: <a href="#Expected-Time-to-Absorption">Expected Time to Absorption</a></li>
-<li><a href="#index-Hsieh_002c-C_002e-H-255">Hsieh, C. H</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-Jain_002c-R_002e-142">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-114">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-256">Lam, S.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-Lavenberg_002c-S_002e-S_002e-141">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-231">Lazowska, E. D.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-Lazowska_002c-E_002e-D_002e-130">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-258">Muntz, R. R.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-Reiser_002c-M_002e-113">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-276">Santini, S.</a>: <a href="#Utility-functions">Utility functions</a></li>
-<li><a href="#index-Schweitzer_002c-P_002e-202">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-275">Schwetman, H.</a>: <a href="#Utility-functions">Utility functions</a></li>
-<li><a href="#index-Schwetman_002c-H_002e-112">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-259">Serazzi, G.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-Sevcik_002c-K_002e-C_002e-234">Sevcik, K. C.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-Sevcik_002c-K_002e-C_002e-133">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-96">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-71">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-65">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-57">Trivedi, K.</a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li>
-<li><a href="#index-Trivedi_002c-K_002e-50">Trivedi, K.</a>: <a href="#The-M_002fM_002fm-System">The M/M/m System</a></li>
-<li><a href="#index-Trivedi_002c-K_002e-43">Trivedi, K.</a>: <a href="#The-M_002fM_002f1-System">The M/M/1 System</a></li>
-<li><a href="#index-Trivedi_002c-K_002e-33">Trivedi, K.</a>: <a href="#Expected-Time-to-Absorption">Expected Time to Absorption</a></li>
-<li><a href="#index-Wong_002c-E_002e-281">Wong, E.</a>: <a href="#Utility-functions">Utility functions</a></li>
-<li><a href="#index-Zahorjan_002c-J_002e-280">Zahorjan, J.</a>: <a href="#Utility-functions">Utility functions</a></li>
-<li><a href="#index-Zahorjan_002c-J_002e-232">Zahorjan, J.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
-<li><a href="#index-Zahorjan_002c-J_002e-131">Zahorjan, J.</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-222">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-204">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-96">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-71">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-65">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-57">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-50">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-43">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-33">Bolch, G.</a>: <a href="#Expected-Time-to-Absorption">Expected Time to Absorption</a></li>
+<li><a href="#index-Buzen_002c-J_002e-P_002e-105">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-260">Casale, G.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
+<li><a href="#index-Casale_002c-G_002e-163">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-98">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-73">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-67">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-59">de Meer, H.</a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li>
+<li><a href="#index-de-Meer_002c-H_002e-52">de Meer, H.</a>: <a href="#The-M_002fM_002fm-System">The M/M/m System</a></li>
+<li><a href="#index-de-Meer_002c-H_002e-45">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-35">de Meer, H.</a>: <a href="#Expected-Time-to-Absorption">Expected Time to Absorption</a></li>
+<li><a href="#index-Graham_002c-G_002e-S_002e-236">Graham, G. S.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
+<li><a href="#index-Graham_002c-G_002e-S_002e-135">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-97">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-72">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-66">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-58">Greiner, S.</a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li>
+<li><a href="#index-Greiner_002c-S_002e-51">Greiner, S.</a>: <a href="#The-M_002fM_002fm-System">The M/M/m System</a></li>
+<li><a href="#index-Greiner_002c-S_002e-44">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-34">Greiner, S.</a>: <a href="#Expected-Time-to-Absorption">Expected Time to Absorption</a></li>
+<li><a href="#index-Hsieh_002c-C_002e-H-258">Hsieh, C. H</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
+<li><a href="#index-Jain_002c-R_002e-145">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-117">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-259">Lam, S.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
+<li><a href="#index-Lavenberg_002c-S_002e-S_002e-144">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-234">Lazowska, E. D.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
+<li><a href="#index-Lazowska_002c-E_002e-D_002e-133">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-261">Muntz, R. R.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
+<li><a href="#index-Reiser_002c-M_002e-116">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-279">Santini, S.</a>: <a href="#Utility-functions">Utility functions</a></li>
+<li><a href="#index-Schweitzer_002c-P_002e-205">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-278">Schwetman, H.</a>: <a href="#Utility-functions">Utility functions</a></li>
+<li><a href="#index-Schwetman_002c-H_002e-115">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-262">Serazzi, G.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
+<li><a href="#index-Sevcik_002c-K_002e-C_002e-237">Sevcik, K. C.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
+<li><a href="#index-Sevcik_002c-K_002e-C_002e-136">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-99">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-74">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-68">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-60">Trivedi, K.</a>: <a href="#The-M_002fM_002finf-System">The M/M/inf System</a></li>
+<li><a href="#index-Trivedi_002c-K_002e-53">Trivedi, K.</a>: <a href="#The-M_002fM_002fm-System">The M/M/m System</a></li>
+<li><a href="#index-Trivedi_002c-K_002e-46">Trivedi, K.</a>: <a href="#The-M_002fM_002f1-System">The M/M/1 System</a></li>
+<li><a href="#index-Trivedi_002c-K_002e-36">Trivedi, K.</a>: <a href="#Expected-Time-to-Absorption">Expected Time to Absorption</a></li>
+<li><a href="#index-Wong_002c-E_002e-284">Wong, E.</a>: <a href="#Utility-functions">Utility functions</a></li>
+<li><a href="#index-Zahorjan_002c-J_002e-283">Zahorjan, J.</a>: <a href="#Utility-functions">Utility functions</a></li>
+<li><a href="#index-Zahorjan_002c-J_002e-235">Zahorjan, J.</a>: <a href="#Bounds-on-performance">Bounds on performance</a></li>
+<li><a href="#index-Zahorjan_002c-J_002e-134">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/summary.txi	Sat Mar 10 20:51:31 2012 +0000
+++ b/main/queueing/doc/summary.txi	Sun Mar 11 11:20:31 2012 +0000
@@ -45,8 +45,7 @@
 @item Approximate MVA for closed, single-class networks with blocking
 (MVABLO algorithm by F. Akyildiz);
 
-@item Computation of Asymptotic Bounds, Balanced System Bounds
-and Geometric Bounds;
+@item Asymptotic Bounds, Balanced System Bounds and Geometric Bounds;
 
 @end itemize
 
@@ -66,16 +65,16 @@
 @item @math{M/H_m/1} (Hyperexponential service time distribution)
 @end itemize
 
-Functions for Markov chain analysis are also provided (discrete and
-continuous time Markov chains are supported):
+Functions for Markov chain analysis are also provided, for discrete-time
+chains (DTMC) or continuous-time chains (CTMC):
 
 @itemize
 
-@item Birth-death process;
-@item Computation of transient and steady-state occupancy probabilities;
-@item Computation of mean time to absorption;
-@item Computation of time-averages sojourn time.
-@item Computation of mean passage times
+@item Birth-death process (DTMC and CTMC);
+@item Transient and steady-state occupancy probabilities (DTMC and CTMC);
+@item Mean time to absorption (CTMC);
+@item Time-averaged sojourn times (CTMC);
+@item First passage times (DTMC and CTMC).
 
 @end itemize
 
--- a/main/queueing/inst/ctmc_bd.m	Sat Mar 10 20:51:31 2012 +0000
+++ b/main/queueing/inst/ctmc_bd.m	Sun Mar 11 11:20:31 2012 +0000
@@ -17,13 +17,13 @@
 
 ## -*- texinfo -*-
 ##
-## @deftypefn {Function File} {@var{p} =} ctmc_bd (@var{birth}, @var{death})
+## @deftypefn {Function File} {@var{Q} =} ctmc_bd (@var{birth}, @var{death})
 ##
 ## @cindex Markov chain, continuous time
 ## @cindex Birth-death process
 ##
-## Compute the steady-state solution of a birth-death process with state
-## space @math{(1, @dots{}, N)}.
+## Returns the @math{N \times N} infinitesimal generator matrix @math{Q}
+## for a birth-death process with given rates.
 ##
 ## @strong{INPUTS}
 ##
@@ -43,9 +43,8 @@
 ##
 ## @table @var
 ##
-## @item p
-## @code{@var{p}(i)} is the steady-state probability that the system is
-## in state @math{i}, @math{i=1, @dots{}, N}.
+## @item Q
+## Infinitesimal generator matrix for the birth-death process.
 ##
 ## @end table
 ##
@@ -54,7 +53,7 @@
 ## Author: Moreno Marzolla <marzolla(at)cs.unibo.it>
 ## Web: http://www.moreno.marzolla.name/
 
-function p = ctmc_bd( birth, death )
+function Q = ctmc_bd( birth, death )
 
   if ( nargin != 2 ) 
     print_usage();
@@ -65,21 +64,18 @@
   birth = birth(:); # make birth a column vector
   death = death(:); # make death a column vector
   size_equal( birth, death ) || \
-      usage( "birth and death must have the same length" );
+      usage( "birth and death rates must have the same length" );
   all( birth >= 0 ) || \
-      usage( "birth must be >= 0" );
+      usage( "birth rates must be >= 0" );
   all( death >= 0 ) || \
-      usage( "death must be >= 0" );
+      usage( "death rates must be >= 0" );
 
-  n = length(birth) + 1; # number of states 
-
-  ## builds the transition probability matrix
+  ## builds the infinitesimal generator matrix
   Q = diag( birth, 1 ) + diag( death, -1 );
   Q -= diag( sum(Q,2) );
-  p = ctmc( Q );
 endfunction
 %!test
 %! birth = [ 1 1 1 ];
 %! death = [ 2 2 2 ];
-%! result = ctmc_bd( birth, death );
-%! assert( result, [ 8/15 4/15 2/15 1/15 ], 1e-5 );
+%! Q = ctmc_bd( birth, death );
+%! assert( ctmc(Q), [ 8/15 4/15 2/15 1/15 ], 1e-5 );
--- a/main/queueing/inst/ctmc_bd_solve.m	Sat Mar 10 20:51:31 2012 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-## Copyright (C) 2008, 2009, 2010, 2011, 2012 Moreno Marzolla
-##
-## This file is part of the queueing toolbox.
-##
-## 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. If not, see <http://www.gnu.org/licenses/>.
-
-## -*- texinfo -*-
-##
-## @deftypefn {Function File} {@var{p} =} ctmc_bd_solve (@var{birth}, @var{death})
-##
-## This function is deprecated and will be removed from future versions
-## of the @code{queueing} toolbox. Please use @code{ctmc_bd()} instead.
-##
-## @seealso{ctmc_bd}
-##
-## @end deftypefn
-
-## Author: Moreno Marzolla <marzolla(at)cs.unibo.it>
-## Web: http://www.moreno.marzolla.name/
-
-function p = ctmc_bd_solve( birth, death )
-  warning("Function ctmc_db_solve() is deprecated and will be removed in the future. Please use ctmc_bd() instead.");
-  p = ctmc_bd(birth, death);
-endfunction
--- a/main/queueing/inst/ctmc_exps.m	Sat Mar 10 20:51:31 2012 +0000
+++ b/main/queueing/inst/ctmc_exps.m	Sun Mar 11 11:20:31 2012 +0000
@@ -55,9 +55,9 @@
 ##
 ## @item L
 ## If this function is called with three arguments, @code{@var{L}(i)} is
-## the expected time spent in state @math{j} during the interval
+## the expected time spent in state @math{i} during the interval
 ## @math{[0,t]}. If this function is called with two arguments
-## @code{@var{L}(i)} is the expected time spent in state @math{i} until
+## @code{@var{L}(i)} is either the expected time spent in state @math{i} until
 ## absorption (if @math{i} is a transient state), or zero
 ## (if @var{i} is an absorbing state).
 ##
@@ -92,12 +92,14 @@
   ( isvector(p) && length(p) == size(Q,1) && all(p>=0) && abs(sum(p)-1.0)<epsilon ) || \
       usage( "p must be a probability vector" );
 
-  if ( nargin == 3 ) 
+  p = p(:)'; # make p a row vector
+
+  if ( nargin == 3 ) # non-absorbing case
     if ( isscalar(t) )
       (t >= 0 ) || \
 	  usage( "t must be >= 0" );
-      ## F(x) are the transient state occupancy probabilities at time x.
-      ## It is known that F(x) = p*expm(Q*x) (see function ctmc()).
+      ## F(x) are the transient state occupancy probabilities at time x
+      ## F(x) = p*expm(Q*x) (see function ctmc()).
       F = @(x) (p*expm(Q*x));
       L = quadv(F,0,t);
     else
@@ -105,12 +107,11 @@
       ( isvector(t) && abs(t(1)) < epsilon ) || \
 	  usage( "t must be a vector, and t(1) must be 0.0" );
       t = t(:)'; # make tt a row vector
-      p = p(:)'; # make p a row vector
       ff = @(x,t) (x(:)'*Q+p);
       fj = @(x,t) (Q);
       L = lsode( {ff, fj}, zeros(size(p)), t );
     endif
-  else
+  else # absorbing case
 #{
     ## This code is left for information only
 
@@ -150,6 +151,21 @@
 %! L = ctmc_exps(Q,10,[1 0]);
 %! L = ctmc_exps(Q,linspace(0,10,100),[1 0]);
 
+%!test
+%! Q = ctmc_bd( [1 2 3], [3 2 1] );
+%! p0 = [1 0 0 0];
+%! t = linspace(0,10,10);
+%! L1 = L2 = zeros(length(t),4);
+%! # compute L using the differential equation formulation
+%! ff = @(x,t) (x(:)'*Q+p0);
+%! fj = @(x,t) (Q);
+%! L1 = lsode( {ff, fj}, zeros(size(p0)), t );
+%! # compute L using ctmc_exps (integral formulation)
+%! for i=1:length(t)
+%!   L2(i,:) = ctmc_exps(Q,t(i),p0);
+%! endfor
+%! assert( L1, L2, 1e-5);
+
 %!demo
 %! lambda = 0.5;
 %! N = 4;
@@ -179,4 +195,5 @@
 %! Q = diag(birth,1)+diag(death,-1);
 %! Q -= diag(sum(Q,2));
 %! p0 = zeros(1,N); p0(1)=1;
-%! L = ctmc_exps(Q,p0)
+%! L = ctmc_exps(Q,p0);
+%! disp(L);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main/queueing/inst/dtmc_bd.m	Sun Mar 11 11:20:31 2012 +0000
@@ -0,0 +1,88 @@
+## Copyright (C) 2012 Moreno Marzolla
+##
+## This file is part of the queueing toolbox.
+##
+## 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. If not, see <http://www.gnu.org/licenses/>.
+
+## -*- texinfo -*-
+##
+## @deftypefn {Function File} {@var{P} =} dtmc_bd (@var{birth}, @var{death})
+##
+## @cindex Markov chain, discrete time
+## @cindex Birth-death process
+##
+## Returns the @math{N \times N} transition probability matrix @math{P}
+## for a birth-death process with given rates.
+##
+## @strong{INPUTS}
+##
+## @table @var
+##
+## @item birth
+## Vector with @math{N-1} elements, where @code{@var{birth}(i)} is the
+## transition probability from state @math{i} to state @math{i+1}.
+##
+## @item death
+## Vector with @math{N-1} elements, where @code{@var{death}(i)} is the
+## transition probability from state @math{i+1} to state @math{i}.
+##
+## @end table
+##
+## @strong{OUTPUTS}
+##
+## @table @var
+##
+## @item P
+## Transition probability matrix for the birth-death process.
+##
+## @end table
+##
+## @end deftypefn
+
+## Author: Moreno Marzolla <marzolla(at)cs.unibo.it>
+## Web: http://www.moreno.marzolla.name/
+
+function P = dtmc_bd( birth, death )
+
+  if ( nargin != 2 ) 
+    print_usage();
+  endif
+
+  ( isvector( birth ) && isvector( death ) ) || \
+      usage( "birth and death must be vectors" );
+  birth = birth(:); # make birth a column vector
+  death = death(:); # make death a column vector
+  size_equal( birth, death ) || \
+      usage( "birth and death vectors must have the same length" );
+  all( birth >= 0 ) || \
+      usage( "birth probabilities must be >= 0" );
+  all( death >= 0 ) || \
+      usage( "death probabilities must be >= 0" );
+  all( ([birth; 0] + [0; death]) <= 1 ) || \
+      usage( "Inconsistent birth/death probabilities");
+  ## builds the infinitesimal generator matrix
+  P = diag( birth, 1 ) + diag( death, -1 );
+  P += diag( 1-sum(P,2) );
+endfunction
+%!test
+%! birth = [.5 .5 .3];
+%! death = [.6 .2 .3];
+%! fail("dtmc_bd(birth,death)","Inconsistent");
+
+%!demo
+%! birth = [ .2 .3 .4 ];
+%! death = [ .1 .2 .3 ];
+%! P = dtmc_bd( birth, death );
+%! disp(P)
+
--- a/main/queueing/inst/qnmm1k.m	Sat Mar 10 20:51:31 2012 +0000
+++ b/main/queueing/inst/qnmm1k.m	Sun Mar 11 11:20:31 2012 +0000
@@ -141,7 +141,7 @@
 %! [U1 R1 Q1 X1] = qnmm1k( lambda, mu, K );
 %! birth = lambda*ones(1,K);
 %! death = mu*ones(1,K);
-%! q = ctmc_bd( birth, death );
+%! q = ctmc(ctmc_bd( birth, death ));
 %! U2 = 1-q(1);
 %! Q2 = dot( [0:K], q );
 %! assert( U1, U2, 1e-4 );
--- a/main/queueing/inst/qnmmmk.m	Sat Mar 10 20:51:31 2012 +0000
+++ b/main/queueing/inst/qnmmmk.m	Sun Mar 11 11:20:31 2012 +0000
@@ -137,7 +137,7 @@
     ## Build and solve the birth-death process describing the M/M/m/k system
     birth_rate = lambda(i)*ones(1,K(i));
     death_rate = [ linspace(1,m(i),m(i))*mu(i) ones(1,K(i)-m(i))*m(i)*mu(i) ];
-    p = ctmc_bd(birth_rate, death_rate);
+    p = ctmc(ctmc_bd(birth_rate, death_rate));
     p0(i) = p(1);
     pK(i) = p(1+K(i));
     j = [1:K(i)];
@@ -183,7 +183,7 @@
 %! [U1 R1 Q1 X1 p0] = qnmmmk( lambda, mu, m, k );
 %! birth = lambda*ones(1,k);
 %! death = [ mu*linspace(1,m,m) mu*m*ones(1,k-m) ];
-%! q = ctmc_bd( birth, death );
+%! q = ctmc(ctmc_bd( birth, death ));
 %! U2 = dot( q, min( 0:k, m )/m );
 %! assert( U1, U2, 1e-4 );
 %! Q2 = dot( [0:k], q );
--- a/main/queueing/inst/qnvisits.m	Sat Mar 10 20:51:31 2012 +0000
+++ b/main/queueing/inst/qnvisits.m	Sun Mar 11 11:20:31 2012 +0000
@@ -93,7 +93,7 @@
 %! P = [-1 0; 0 0];
 %! fail( "qnvisits(P)", "not a transition probability" );
 %! P = [1 0; 0.5 0];
-%! fail( "qnvisits(P)", "not a stochastic" );
+%! fail( "qnvisits(P)", "not a transition probability" );
 %! P = [1 0; 0 1]; lambda=[0 -1];
 %! fail( "qnvisits(P,lambda)", "contains negative" );
 
@@ -477,21 +477,20 @@
 ## Solve the visit equation for single class networks.
 function V = __qnvisitssingle( P, lambda )
 
+  persistent epsilon = 10*eps;
+
   issquare(P)  || \
       usage( "P must be a square matrix" );
 
   N = size(P,1);
   V = zeros(N,N);
 
-  all( all(P>=0) ) && all( sum(P,2)<=1+1e-5 ) || \
-      usage( "P is not a transition probability matrix" );
-
   if ( nargin < 2 )
     ##
     ## Closed network
     ##
-    all( abs( sum(P,2)-1 ) < 1e-5 ) || \
-        error( "P is not a stochastic matrix for closed networks" );
+    ( all( all(P>=0) ) && norm( sum(P,2) - 1, "inf" ) < epsilon ) || \
+        usage( "P is not a transition probability matrix for closed networks" );
 
     A = P-eye(N);
     b = zeros(1,N);
@@ -500,7 +499,12 @@
     b(i) = 1;
     V = b/A;
   else
+    ##
     ## Open network
+    ##
+    all( all(P>=0) ) && all( sum(P,2)<=1+1e-5 ) || \
+	usage( "P is not a transition probability matrix for open networks" );
+
     ( isvector(lambda) && length(lambda) == N ) || \
         usage( "lambda size mismatch" );
     all( lambda>= 0 ) || \