blob: 583df56ed9cfed67e46e0a1830d388947d617797 [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>
<meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
<title>CorrelatedRandomVectorGenerator (Apache Commons Math 3.3 API)</title>
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
</head>
<body>
<script type="text/javascript"><!--
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="CorrelatedRandomVectorGenerator (Apache Commons Math 3.3 API)";
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar_top">
<!-- -->
</a><a href="#skip-navbar_top" title="Skip navigation links"></a><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/CorrelatedRandomVectorGenerator.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 class="aboutLanguage"><em><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script></em></div>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/commons/math3/random/BitsStreamGenerator.html" title="class in org.apache.commons.math3.random"><span class="strong">Prev Class</span></a></li>
<li><a href="../../../../../org/apache/commons/math3/random/EmpiricalDistribution.html" title="class in org.apache.commons.math3.random"><span class="strong">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/commons/math3/random/CorrelatedRandomVectorGenerator.html" target="_top">Frames</a></li>
<li><a href="CorrelatedRandomVectorGenerator.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses-noframe.html">All 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>Field&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>Field&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.commons.math3.random</div>
<h2 title="Class CorrelatedRandomVectorGenerator" class="title">Class CorrelatedRandomVectorGenerator</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li><a href="http://docs.oracle.com/javase/6/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.commons.math3.random.CorrelatedRandomVectorGenerator</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<dl>
<dt>All Implemented Interfaces:</dt>
<dd><a href="../../../../../org/apache/commons/math3/random/RandomVectorGenerator.html" title="interface in org.apache.commons.math3.random">RandomVectorGenerator</a></dd>
</dl>
<hr>
<br>
<pre>public class <span class="strong">CorrelatedRandomVectorGenerator</span>
extends <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
implements <a href="../../../../../org/apache/commons/math3/random/RandomVectorGenerator.html" title="interface in org.apache.commons.math3.random">RandomVectorGenerator</a></pre>
<div class="block">A <a href="../../../../../org/apache/commons/math3/random/RandomVectorGenerator.html" title="interface in org.apache.commons.math3.random"><code>RandomVectorGenerator</code></a> that generates vectors with with
correlated components.
<p>Random vectors with correlated components are built by combining
the uncorrelated components of another random vector in such a way that
the resulting correlations are the ones specified by a positive
definite covariance matrix.</p>
<p>The main use for correlated random vector generation is for Monte-Carlo
simulation of physical problems with several variables, for example to
generate error vectors to be added to a nominal vector. A particularly
interesting case is when the generated vector should be drawn from a <a
href="http://en.wikipedia.org/wiki/Multivariate_normal_distribution">
Multivariate Normal Distribution</a>. The approach using a Cholesky
decomposition is quite usual in this case. However, it can be extended
to other cases as long as the underlying random generator provides
<a href="../../../../../org/apache/commons/math3/random/NormalizedRandomGenerator.html" title="interface in org.apache.commons.math3.random"><code>normalized values</code></a> like <a href="../../../../../org/apache/commons/math3/random/GaussianRandomGenerator.html" title="class in org.apache.commons.math3.random"><code>GaussianRandomGenerator</code></a> or <a href="../../../../../org/apache/commons/math3/random/UniformRandomGenerator.html" title="class in org.apache.commons.math3.random"><code>UniformRandomGenerator</code></a>.</p>
<p>Sometimes, the covariance matrix for a given simulation is not
strictly positive definite. This means that the correlations are
not all independent from each other. In this case, however, the non
strictly positive elements found during the Cholesky decomposition
of the covariance matrix should not be negative either, they
should be null. Another non-conventional extension handling this case
is used here. Rather than computing <code>C = U<sup>T</sup>.U</code>
where <code>C</code> is the covariance matrix and <code>U</code>
is an upper-triangular matrix, we compute <code>C = B.B<sup>T</sup></code>
where <code>B</code> is a rectangular matrix having
more rows than columns. The number of columns of <code>B</code> is
the rank of the covariance matrix, and it is the dimension of the
uncorrelated random vector that is needed to compute the component
of the correlated vector. This class handles this situation
automatically.</p></div>
<dl><dt><span class="strong">Since:</span></dt>
<dd>1.2</dd>
<dt><span class="strong">Version:</span></dt>
<dd>$Id: CorrelatedRandomVectorGenerator.java 1416643 2012-12-03 19:37:14Z tn $</dd></dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor_summary">
<!-- -->
</a>
<h3>Constructor Summary</h3>
<table class="overviewSummary" 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><strong><a href="../../../../../org/apache/commons/math3/random/CorrelatedRandomVectorGenerator.html#CorrelatedRandomVectorGenerator(double[], org.apache.commons.math3.linear.RealMatrix, double, org.apache.commons.math3.random.NormalizedRandomGenerator)">CorrelatedRandomVectorGenerator</a></strong>(double[]&nbsp;mean,
<a href="../../../../../org/apache/commons/math3/linear/RealMatrix.html" title="interface in org.apache.commons.math3.linear">RealMatrix</a>&nbsp;covariance,
double&nbsp;small,
<a href="../../../../../org/apache/commons/math3/random/NormalizedRandomGenerator.html" title="interface in org.apache.commons.math3.random">NormalizedRandomGenerator</a>&nbsp;generator)</code>
<div class="block">Builds a correlated random vector generator from its mean
vector and covariance matrix.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colOne"><code><strong><a href="../../../../../org/apache/commons/math3/random/CorrelatedRandomVectorGenerator.html#CorrelatedRandomVectorGenerator(org.apache.commons.math3.linear.RealMatrix, double, org.apache.commons.math3.random.NormalizedRandomGenerator)">CorrelatedRandomVectorGenerator</a></strong>(<a href="../../../../../org/apache/commons/math3/linear/RealMatrix.html" title="interface in org.apache.commons.math3.linear">RealMatrix</a>&nbsp;covariance,
double&nbsp;small,
<a href="../../../../../org/apache/commons/math3/random/NormalizedRandomGenerator.html" title="interface in org.apache.commons.math3.random">NormalizedRandomGenerator</a>&nbsp;generator)</code>
<div class="block">Builds a null mean random correlated vector generator from its
covariance matrix.</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method_summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code><a href="../../../../../org/apache/commons/math3/random/NormalizedRandomGenerator.html" title="interface in org.apache.commons.math3.random">NormalizedRandomGenerator</a></code></td>
<td class="colLast"><code><strong><a href="../../../../../org/apache/commons/math3/random/CorrelatedRandomVectorGenerator.html#getGenerator()">getGenerator</a></strong>()</code>
<div class="block">Get the underlying normalized components generator.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><strong><a href="../../../../../org/apache/commons/math3/random/CorrelatedRandomVectorGenerator.html#getRank()">getRank</a></strong>()</code>
<div class="block">Get the rank of the covariance matrix.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code><a href="../../../../../org/apache/commons/math3/linear/RealMatrix.html" title="interface in org.apache.commons.math3.linear">RealMatrix</a></code></td>
<td class="colLast"><code><strong><a href="../../../../../org/apache/commons/math3/random/CorrelatedRandomVectorGenerator.html#getRootMatrix()">getRootMatrix</a></strong>()</code>
<div class="block">Get the root of the covariance matrix.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>double[]</code></td>
<td class="colLast"><code><strong><a href="../../../../../org/apache/commons/math3/random/CorrelatedRandomVectorGenerator.html#nextVector()">nextVector</a></strong>()</code>
<div class="block">Generate a correlated random 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/6/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/6/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/6/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/6/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/6/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/6/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/6/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/6/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/6/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/6/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/6/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/6/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">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor_detail">
<!-- -->
</a>
<h3>Constructor Detail</h3>
<a name="CorrelatedRandomVectorGenerator(double[], org.apache.commons.math3.linear.RealMatrix, double, org.apache.commons.math3.random.NormalizedRandomGenerator)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>CorrelatedRandomVectorGenerator</h4>
<pre>public&nbsp;CorrelatedRandomVectorGenerator(double[]&nbsp;mean,
<a href="../../../../../org/apache/commons/math3/linear/RealMatrix.html" title="interface in org.apache.commons.math3.linear">RealMatrix</a>&nbsp;covariance,
double&nbsp;small,
<a href="../../../../../org/apache/commons/math3/random/NormalizedRandomGenerator.html" title="interface in org.apache.commons.math3.random">NormalizedRandomGenerator</a>&nbsp;generator)</pre>
<div class="block">Builds a correlated random vector generator from its mean
vector and covariance matrix.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>mean</code> - Expected mean values for all components.</dd><dd><code>covariance</code> - Covariance matrix.</dd><dd><code>small</code> - Diagonal elements threshold under which column are
considered to be dependent on previous ones and are discarded</dd><dd><code>generator</code> - underlying generator for uncorrelated normalized
components.</dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code><a href="../../../../../org/apache/commons/math3/linear/NonPositiveDefiniteMatrixException.html" title="class in org.apache.commons.math3.linear">NonPositiveDefiniteMatrixException</a></code> - if the covariance matrix is not strictly positive definite.</dd>
<dd><code><a href="../../../../../org/apache/commons/math3/exception/DimensionMismatchException.html" title="class in org.apache.commons.math3.exception">DimensionMismatchException</a></code> - if the mean and covariance
arrays dimensions do not match.</dd></dl>
</li>
</ul>
<a name="CorrelatedRandomVectorGenerator(org.apache.commons.math3.linear.RealMatrix, double, org.apache.commons.math3.random.NormalizedRandomGenerator)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>CorrelatedRandomVectorGenerator</h4>
<pre>public&nbsp;CorrelatedRandomVectorGenerator(<a href="../../../../../org/apache/commons/math3/linear/RealMatrix.html" title="interface in org.apache.commons.math3.linear">RealMatrix</a>&nbsp;covariance,
double&nbsp;small,
<a href="../../../../../org/apache/commons/math3/random/NormalizedRandomGenerator.html" title="interface in org.apache.commons.math3.random">NormalizedRandomGenerator</a>&nbsp;generator)</pre>
<div class="block">Builds a null mean random correlated vector generator from its
covariance matrix.</div>
<dl><dt><span class="strong">Parameters:</span></dt><dd><code>covariance</code> - Covariance matrix.</dd><dd><code>small</code> - Diagonal elements threshold under which column are
considered to be dependent on previous ones and are discarded.</dd><dd><code>generator</code> - Underlying generator for uncorrelated normalized
components.</dd>
<dt><span class="strong">Throws:</span></dt>
<dd><code><a href="../../../../../org/apache/commons/math3/linear/NonPositiveDefiniteMatrixException.html" title="class in org.apache.commons.math3.linear">NonPositiveDefiniteMatrixException</a></code> - if the covariance matrix is not strictly positive definite.</dd></dl>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method_detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a name="getGenerator()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getGenerator</h4>
<pre>public&nbsp;<a href="../../../../../org/apache/commons/math3/random/NormalizedRandomGenerator.html" title="interface in org.apache.commons.math3.random">NormalizedRandomGenerator</a>&nbsp;getGenerator()</pre>
<div class="block">Get the underlying normalized components generator.</div>
<dl><dt><span class="strong">Returns:</span></dt><dd>underlying uncorrelated components generator</dd></dl>
</li>
</ul>
<a name="getRank()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getRank</h4>
<pre>public&nbsp;int&nbsp;getRank()</pre>
<div class="block">Get the rank of the covariance matrix.
The rank is the number of independent rows in the covariance
matrix, it is also the number of columns of the root matrix.</div>
<dl><dt><span class="strong">Returns:</span></dt><dd>rank of the square matrix.</dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../org/apache/commons/math3/random/CorrelatedRandomVectorGenerator.html#getRootMatrix()"><code>getRootMatrix()</code></a></dd></dl>
</li>
</ul>
<a name="getRootMatrix()">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getRootMatrix</h4>
<pre>public&nbsp;<a href="../../../../../org/apache/commons/math3/linear/RealMatrix.html" title="interface in org.apache.commons.math3.linear">RealMatrix</a>&nbsp;getRootMatrix()</pre>
<div class="block">Get the root of the covariance matrix.
The root is the rectangular matrix <code>B</code> such that
the covariance matrix is equal to <code>B.B<sup>T</sup></code></div>
<dl><dt><span class="strong">Returns:</span></dt><dd>root of the square matrix</dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../org/apache/commons/math3/random/CorrelatedRandomVectorGenerator.html#getRank()"><code>getRank()</code></a></dd></dl>
</li>
</ul>
<a name="nextVector()">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>nextVector</h4>
<pre>public&nbsp;double[]&nbsp;nextVector()</pre>
<div class="block">Generate a correlated random vector.</div>
<dl>
<dt><strong>Specified by:</strong></dt>
<dd><code><a href="../../../../../org/apache/commons/math3/random/RandomVectorGenerator.html#nextVector()">nextVector</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/commons/math3/random/RandomVectorGenerator.html" title="interface in org.apache.commons.math3.random">RandomVectorGenerator</a></code></dd>
<dt><span class="strong">Returns:</span></dt><dd>a random vector as an array of double. The returned array
is created at each call, the caller can do what it wants with it.</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><a href="#skip-navbar_bottom" title="Skip navigation links"></a><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/CorrelatedRandomVectorGenerator.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 class="aboutLanguage"><em><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script></em></div>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/commons/math3/random/BitsStreamGenerator.html" title="class in org.apache.commons.math3.random"><span class="strong">Prev Class</span></a></li>
<li><a href="../../../../../org/apache/commons/math3/random/EmpiricalDistribution.html" title="class in org.apache.commons.math3.random"><span class="strong">Next Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/commons/math3/random/CorrelatedRandomVectorGenerator.html" target="_top">Frames</a></li>
<li><a href="CorrelatedRandomVectorGenerator.html" target="_top">No Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses-noframe.html">All 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>Field&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>Field&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; 2003&#x2013;2014 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</body>
</html>