<?xml version="1.0"?>

<!--
   Copyright 2003-2004 The Apache Software Foundation

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
  -->
  
<?xml-stylesheet type="text/xsl" href="./xdoc.xsl"?>
<!-- $Revision$ $Date$ -->
<document url="index.html">
  <properties>
    <title>The Commons Math User Guide - Table of Contents</title>
  </properties>

  <body>
      <section name="Table of Contents" href="toc">

        <ul>
            <li><a href="overview.html">0. Overview</a>
            <ul>
              <li><a href="overview.html#0.1 About the User Guide">0.1 About the User Guide</a></li>
              <li><a href="overview.html#0.2 What&amp;apos;s in commons-math">0.2 What's in commons-math</a></li>
              <li><a href="overview.html#0.3 How commons-math is organized">0.3 How commons-math is organized</a></li>
              <li><a href="overview.html#0.4 How interface contracts are specified in commons-math javadoc">0.4 How interface contracts are specified in commons-math javadoc</a></li>
              <li><a href="overview.html#0.5 Dependencies">0.5 Dependencies</a></li>
            </ul></li>

           <li><a href="stat.html">1. Statistics</a>
                <ul>
                <li><a href="stat.html#1.1 Overview">1.1 Overview</a></li>
                <li><a href="stat.html#1.2 Descriptive statistics">1.2 Descriptive statistics</a></li>
                <li><a href="stat.html#1.3 Frequency distributions">1.3 Frequency distributions</a></li>
                <li><a href="stat.html#1.4 Simple regression">1.4 Simple regression</a></li>
                <li><a href="stat.html#1.5 Statistical tests">1.5 Statistical tests</a></li>
                </ul></li>
            <li><a href="random.html">2. Data Generation</a>
                <ul>
                <li><a href="random.html#2.1 Overview">2.1 Overview</a></li>
                <li><a href="random.html#2.2 Random numbers">2.2 Random numbers</a></li>
                <li><a href="random.html#2.3 Random Strings">2.3 Random Strings</a></li>
                <li><a href="random.html#2.4 Random permutations, combinations, sampling">2.4 Random permutations, combinations, sampling</a></li>
                <li><a href="random.html#2.5 Generating data 'like' an input file">2.5 Generating data 'like' an input file</a></li>
                <li><a href="random.html#2.6 PRNG Pluggability">2.6 PRNG Pluggability</a></li>
                </ul></li>
            <li><a href="linear.html">3. Linear Algebra</a>
                <ul>
                <li><a href="linear.html#3.1 Overview">3.1 Overview</a></li>
                <li><a href="linear.html#3.2 Real matrices">3.2 Real matrices</a></li>
                <li><a href="linear.html#3.3 Solving linear systems">3.3 Solving linear systems</a></li> 
                </ul></li>             
            <li><a href="analysis.html">4. Numerical Analysis</a>
                <ul>
                <li><a href="analysis.html#4.1 Overview">4.1 Overview</a></li>
                <li><a href="analysis.html#4.2 Root-finding">4.2 Root-finding</a></li>                
                <li><a href="analysis.html#4.3 Interpolation">4.3 Interpolation</a></li>
                </ul></li>     
            <li><a href="special.html">5. Special Functions</a>
                <ul>
                <li><a href="special.html#5.1 Overview">5.1 Overview</a></li>
                <li><a href="special.html#5.2 Erf functions">5.2 Erf functions</a></li>
                <li><a href="special.html#5.3 Gamma functions">5.3 Gamma functions</a></li>
                <li><a href="special.html#5.4 Beta funtions">5.4 Beta funtions</a></li>
                </ul></li>   
        <li><a href="utilities.html">6. Utilities</a>
                <ul>
                <li><a href="utilities.html#6.1 Overview">6.1 Overview</a></li>
                <li><a href="utilities.html#6.2 Double array utilities">6.2 Double array utilities</a></li>
                <li><a href="utilities.html#6.3 Continued Fractions">6.3 Continued Fractions</a></li>
                <li><a href="utilities.html#6.4 binomial coefficients, factorials and other common math functions">6.4 binomial coefficients, factorials and other common math functions</a></li>
                </ul></li>                                 
        <li><a href="complex.html">7. Complex Numbers</a>
                <ul>
                <li><a href="complex.html#7.1 Overview">7.1 Overview</a></li>
                <li><a href="complex.html#7.2 Complex Numbers">7.2 Complex Numbers</a></li>
                <li><a href="complex.html#7.3 Complex Transcendental Functions">7.3 Complex Transcendental Functions</a></li>
                <li><a href="complex.html#7.4 Complex Formatting and Parsing">7.4 Complex Formatting and Parsing</a></li>
                </ul></li>                                 
        <li><a href="distribution.html">8. Probability Distributions</a>
                <ul>
                <li><a href="distribution.html#8.1 Overview">8.1 Overview</a></li>
                <li><a href="distribution.html#8.2 Distribution Framework">8.2 Distribution Framework</a></li>
                <li><a href="distribution.html#8.3 User Defined Distributions">8.3 User Defined Distributions</a></li>
                </ul></li>                                 
        <li><a href="fraction.html">9. Fractions</a>
                <ul>
                <li><a href="fraction.html#9.1 Overview">9.1 Overview</a></li>
                <li><a href="fraction.html#9.2 Fraction Numbers">9.2 Fraction Numbers</a></li>
                <li><a href="fraction.html#9.3 Fraction Formatting and Parsing">9.3 Fraction Formatting and Parsing</a></li>
                </ul></li>                                 
        </ul>
      </section>
    
  </body>
  
</document>
