blob: a35b2a8ce8b2789859a7a62f8d514c77dbeddf6a [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_121) on Fri Apr 14 22:10:59 PDT 2017 -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>ConjugateGradientSolver (Mahout Math 0.13.0 API)</title>
<meta name="date" content="2017-04-14">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="ConjugateGradientSolver (Mahout Math 0.13.0 API)";
}
}
catch(err) {
}
//-->
var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/ConjugateGradientSolver.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev&nbsp;Class</li>
<li><a href="../../../../../org/apache/mahout/math/solver/EigenDecomposition.html" title="class in org.apache.mahout.math.solver"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/mahout/math/solver/ConjugateGradientSolver.html" target="_top">Frames</a></li>
<li><a href="ConjugateGradientSolver.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.mahout.math.solver</div>
<h2 title="Class ConjugateGradientSolver" class="title">Class ConjugateGradientSolver</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
<li>
<ul class="inheritance">
<li>org.apache.mahout.math.solver.ConjugateGradientSolver</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public class <span class="typeNameLabel">ConjugateGradientSolver</span>
extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
<div class="block"><p>Implementation of a conjugate gradient iterative solver for linear systems. Implements both
standard conjugate gradient and pre-conditioned conjugate gradient.
<p>Conjugate gradient requires the matrix A in the linear system Ax = b to be symmetric and positive
definite. For convenience, this implementation could be extended relatively easily to handle the
case where the input matrix to be be non-symmetric, in which case the system A'Ax = b would be solved.
Because this requires only one pass through the matrix A, it is faster than explicitly computing A'A,
then passing the results to the solver.
<p>For inputs that may be ill conditioned (often the case for highly sparse input), this solver
also accepts a parameter, lambda, which adds a scaled identity to the matrix A, solving the system
(A + lambda*I)x = b. This obviously changes the solution, but it will guarantee solvability. The
ridge regression approach to linear regression is a common use of this feature.
<p>If only an approximate solution is required, the maximum number of iterations or the error threshold
may be specified to end the algorithm early at the expense of accuracy. When the matrix A is ill conditioned,
it may sometimes be necessary to increase the maximum number of iterations above the default of A.numCols()
due to numerical issues.
<p>By default the solver will run a.numCols() iterations or until the residual falls below 1E-9.
<p>For more information on the conjugate gradient algorithm, see Golub & van Loan, "Matrix Computations",
sections 10.2 and 10.3 or the <a href="http://en.wikipedia.org/wiki/Conjugate_gradient">conjugate gradient
wikipedia article</a>.</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- =========== FIELD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static double</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/mahout/math/solver/ConjugateGradientSolver.html#DEFAULT_MAX_ERROR">DEFAULT_MAX_ERROR</a></span></code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/mahout/math/solver/ConjugateGradientSolver.html#ConjugateGradientSolver--">ConjugateGradientSolver</a></span>()</code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/mahout/math/solver/ConjugateGradientSolver.html#getIterations--">getIterations</a></span>()</code>
<div class="block">Returns the number of iterations run once the solver is complete.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>double</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/mahout/math/solver/ConjugateGradientSolver.html#getResidualNorm--">getResidualNorm</a></span>()</code>
<div class="block">Returns the norm of the residual at the completion of the solver.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code><a href="../../../../../org/apache/mahout/math/Vector.html" title="interface in org.apache.mahout.math">Vector</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/mahout/math/solver/ConjugateGradientSolver.html#solve-org.apache.mahout.math.VectorIterable-org.apache.mahout.math.Vector-">solve</a></span>(<a href="../../../../../org/apache/mahout/math/VectorIterable.html" title="interface in org.apache.mahout.math">VectorIterable</a>&nbsp;a,
<a href="../../../../../org/apache/mahout/math/Vector.html" title="interface in org.apache.mahout.math">Vector</a>&nbsp;b)</code>
<div class="block">Solves the system Ax = b with default termination criteria.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code><a href="../../../../../org/apache/mahout/math/Vector.html" title="interface in org.apache.mahout.math">Vector</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/mahout/math/solver/ConjugateGradientSolver.html#solve-org.apache.mahout.math.VectorIterable-org.apache.mahout.math.Vector-org.apache.mahout.math.solver.Preconditioner-">solve</a></span>(<a href="../../../../../org/apache/mahout/math/VectorIterable.html" title="interface in org.apache.mahout.math">VectorIterable</a>&nbsp;a,
<a href="../../../../../org/apache/mahout/math/Vector.html" title="interface in org.apache.mahout.math">Vector</a>&nbsp;b,
<a href="../../../../../org/apache/mahout/math/solver/Preconditioner.html" title="interface in org.apache.mahout.math.solver">Preconditioner</a>&nbsp;precond)</code>
<div class="block">Solves the system Ax = b with default termination criteria using the specified preconditioner.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code><a href="../../../../../org/apache/mahout/math/Vector.html" title="interface in org.apache.mahout.math">Vector</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/mahout/math/solver/ConjugateGradientSolver.html#solve-org.apache.mahout.math.VectorIterable-org.apache.mahout.math.Vector-org.apache.mahout.math.solver.Preconditioner-int-double-">solve</a></span>(<a href="../../../../../org/apache/mahout/math/VectorIterable.html" title="interface in org.apache.mahout.math">VectorIterable</a>&nbsp;a,
<a href="../../../../../org/apache/mahout/math/Vector.html" title="interface in org.apache.mahout.math">Vector</a>&nbsp;b,
<a href="../../../../../org/apache/mahout/math/solver/Preconditioner.html" title="interface in org.apache.mahout.math.solver">Preconditioner</a>&nbsp;preconditioner,
int&nbsp;maxIterations,
double&nbsp;maxError)</code>
<div class="block">Solves the system Ax = b, where A is a linear operator and b is a vector.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.detail">
<!-- -->
</a>
<h3>Field Detail</h3>
<a name="DEFAULT_MAX_ERROR">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>DEFAULT_MAX_ERROR</h4>
<pre>public static final&nbsp;double DEFAULT_MAX_ERROR</pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.mahout.math.solver.ConjugateGradientSolver.DEFAULT_MAX_ERROR">Constant Field Values</a></dd>
</dl>
</li>
</ul>
</li>
</ul>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="ConjugateGradientSolver--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>ConjugateGradientSolver</h4>
<pre>public&nbsp;ConjugateGradientSolver()</pre>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="solve-org.apache.mahout.math.VectorIterable-org.apache.mahout.math.Vector-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>solve</h4>
<pre>public&nbsp;<a href="../../../../../org/apache/mahout/math/Vector.html" title="interface in org.apache.mahout.math">Vector</a>&nbsp;solve(<a href="../../../../../org/apache/mahout/math/VectorIterable.html" title="interface in org.apache.mahout.math">VectorIterable</a>&nbsp;a,
<a href="../../../../../org/apache/mahout/math/Vector.html" title="interface in org.apache.mahout.math">Vector</a>&nbsp;b)</pre>
<div class="block">Solves the system Ax = b with default termination criteria. A must be symmetric, square, and positive definite.
Only the squareness of a is checked, since testing for symmetry and positive definiteness are too expensive. If
an invalid matrix is specified, then the algorithm may not yield a valid result.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>a</code> - The linear operator A.</dd>
<dd><code>b</code> - The vector b.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The result x of solving the system.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code> - if a is not square or if the size of b is not equal to the number of columns of a.</dd>
</dl>
</li>
</ul>
<a name="solve-org.apache.mahout.math.VectorIterable-org.apache.mahout.math.Vector-org.apache.mahout.math.solver.Preconditioner-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>solve</h4>
<pre>public&nbsp;<a href="../../../../../org/apache/mahout/math/Vector.html" title="interface in org.apache.mahout.math">Vector</a>&nbsp;solve(<a href="../../../../../org/apache/mahout/math/VectorIterable.html" title="interface in org.apache.mahout.math">VectorIterable</a>&nbsp;a,
<a href="../../../../../org/apache/mahout/math/Vector.html" title="interface in org.apache.mahout.math">Vector</a>&nbsp;b,
<a href="../../../../../org/apache/mahout/math/solver/Preconditioner.html" title="interface in org.apache.mahout.math.solver">Preconditioner</a>&nbsp;precond)</pre>
<div class="block">Solves the system Ax = b with default termination criteria using the specified preconditioner. A must be
symmetric, square, and positive definite. Only the squareness of a is checked, since testing for symmetry
and positive definiteness are too expensive. If an invalid matrix is specified, then the algorithm may not
yield a valid result.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>a</code> - The linear operator A.</dd>
<dd><code>b</code> - The vector b.</dd>
<dd><code>precond</code> - A preconditioner to use on A during the solution process.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The result x of solving the system.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code> - if a is not square or if the size of b is not equal to the number of columns of a.</dd>
</dl>
</li>
</ul>
<a name="solve-org.apache.mahout.math.VectorIterable-org.apache.mahout.math.Vector-org.apache.mahout.math.solver.Preconditioner-int-double-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>solve</h4>
<pre>public&nbsp;<a href="../../../../../org/apache/mahout/math/Vector.html" title="interface in org.apache.mahout.math">Vector</a>&nbsp;solve(<a href="../../../../../org/apache/mahout/math/VectorIterable.html" title="interface in org.apache.mahout.math">VectorIterable</a>&nbsp;a,
<a href="../../../../../org/apache/mahout/math/Vector.html" title="interface in org.apache.mahout.math">Vector</a>&nbsp;b,
<a href="../../../../../org/apache/mahout/math/solver/Preconditioner.html" title="interface in org.apache.mahout.math.solver">Preconditioner</a>&nbsp;preconditioner,
int&nbsp;maxIterations,
double&nbsp;maxError)</pre>
<div class="block">Solves the system Ax = b, where A is a linear operator and b is a vector. Uses the specified preconditioner
to improve numeric stability and possibly speed convergence. This version of solve() allows control over the
termination and iteration parameters.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>a</code> - The matrix A.</dd>
<dd><code>b</code> - The vector b.</dd>
<dd><code>preconditioner</code> - The preconditioner to apply.</dd>
<dd><code>maxIterations</code> - The maximum number of iterations to run.</dd>
<dd><code>maxError</code> - The maximum amount of residual error to tolerate. The algorithm will run until the residual falls
below this value or until maxIterations are completed.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The result x of solving the system.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code> - if the matrix is not square, if the size of b is not equal to the number of
columns of A, if maxError is less than zero, or if maxIterations is not positive.</dd>
</dl>
</li>
</ul>
<a name="getIterations--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getIterations</h4>
<pre>public&nbsp;int&nbsp;getIterations()</pre>
<div class="block">Returns the number of iterations run once the solver is complete.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The number of iterations run.</dd>
</dl>
</li>
</ul>
<a name="getResidualNorm--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>getResidualNorm</h4>
<pre>public&nbsp;double&nbsp;getResidualNorm()</pre>
<div class="block">Returns the norm of the residual at the completion of the solver. Usually this should be close to zero except in
the case of a non positive definite matrix A, which results in an unsolvable system, or for ill conditioned A, in
which case more iterations than the default may be needed.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The norm of the residual in the solution.</dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/ConjugateGradientSolver.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li>Prev&nbsp;Class</li>
<li><a href="../../../../../org/apache/mahout/math/solver/EigenDecomposition.html" title="class in org.apache.mahout.math.solver"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/mahout/math/solver/ConjugateGradientSolver.html" target="_top">Frames</a></li>
<li><a href="ConjugateGradientSolver.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>Copyright &#169; 2008&#x2013;2017 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</body>
</html>