SSJ
V. 1.2.5.

## umontreal.iro.lecuyer.randvarmulti Class MultiNormalGen

java.lang.Object
umontreal.iro.lecuyer.randvarmulti.RandomMultiVariateGen
umontreal.iro.lecuyer.randvarmulti.MultiNormalGen


public class MultiNormalGenextends RandomMultiVariateGen

Extends RandomMultiVariateGen for a multivariate normal distribution. For a mean vector μRd and a symmetric positive-definite covariance matrix Σ, XRd has the d-dimensional multivariate normal distribution N(μ, Σ) with density

f (x) = exp(- (x - μ)TΣ-1(x - μ)/2),

where xRd.

In the two-dimensionnal case, assuming mean μ = [μ1, μ2], variances var [X] = σ12, var [Y] = σ22 such that σ1 > 0, σ2 > 0 and correlation ρ, we have

Σ = [].

Constructor Summary
MultiNormalGen(NormalGen gen1, double[] mu, double[][] sigma)
Equivalent to MultiNormalGen (gen1, mu, new DenseDoubleMatrix2D (sigma)).
MultiNormalGen(NormalGen gen1, double[] mu, DoubleMatrix2D sigma)
Constructs a multinormal generator with mean vector mu and covariance matrix sigma, using the one-dimensional normal generator gen1.
MultiNormalGen(NormalGen gen1, int d)
Constructs a standard d-dimensional multinormal generator, using the one-dimensional generator gen1.

Method Summary
 DoubleMatrix2D getCholeskyDecompSigma()
Returns the Cholesky decomposition of the covariance matrix used for generating the vectors.
 double[] getMu()
Returns the mean vector used by this generator.
 double getMu(int i)
Returns the i-th component of the mean vector for this generator.
 DoubleMatrix2D getSigma()
Returns the covariance matrix Σ used by this generator.
 void nextPoint(double[] p)
Generates a point from the multinormal distribution.
static void nextPoint(NormalGen gen1, double[] mu, double[][] sigma, double[] p)
Equivalent to nextPoint (gen1, mu, new DenseDoubleMatrix2D (sigma), p).
static void nextPoint(NormalGen gen1, double[] mu, DoubleMatrix2D sigma, double[] p)
Generates a point from the multinormal distribution with mean vector mu, and covariance matrix sigma, using the one-dimensional normal generator gen1.
 void setMu(double[] mu)
Sets the mean vector to mu.
 void setMu(int i, double mui)
Sets the i-th component of the mean vector to mui.
 void setSigma(DoubleMatrix2D sigma)
Sets the covariance matrix of this multinormal generator to sigma.

Methods inherited from class umontreal.iro.lecuyer.randvarmulti.RandomMultiVariateGen
getDimension, getGen1, getStream, nextArrayOfPoints, setGen1, setStream

Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Constructor Detail

### MultiNormalGen

public MultiNormalGen(NormalGen gen1,
int d)
Constructs a standard d-dimensional multinormal generator, using the one-dimensional generator gen1.

Parameters:
gen1 - the one-dimensional generator
d - the dimension of the generated vectors
Throws:
IllegalArgumentException - if the one-dimensional normal generator uses a normal distribution with μ not equal to 0, or σ not equal to 1.
IllegalArgumentException - if d is negative.
NullPointerException - if gen1 is null.

### MultiNormalGen

public MultiNormalGen(NormalGen gen1,
double[] mu,
DoubleMatrix2D sigma)
Constructs a multinormal generator with mean vector mu and covariance matrix sigma, using the one-dimensional normal generator gen1. The mean vector must have the same length as the dimensions of the covariance matrix, which must be symmetric and positive-definite. If any of the above conditions is violated, an exception is thrown.

Parameters:
gen1 - the one-dimensional generator
mu - the mean vector.
sigma - the covariance matrix.
Throws:
NullPointerException - if any argument is null.
IllegalArgumentException - if the length of the mean vector is incompatible with the dimensions of the covariance matrix.

### MultiNormalGen

public MultiNormalGen(NormalGen gen1,
double[] mu,
double[][] sigma)
Equivalent to MultiNormalGen (gen1, mu, new DenseDoubleMatrix2D (sigma)).

Method Detail

### getMu

public double[] getMu()
Returns the mean vector used by this generator.

Returns:
the current mean vector.

### getMu

public double getMu(int i)
Returns the i-th component of the mean vector for this generator.

Parameters:
i - the index of the required component.
Returns:
the value of μi.
Throws:
ArrayIndexOutOfBoundsException - if i is negative or greater than or equal to getDimension.

### setMu

public void setMu(double[] mu)
Sets the mean vector to mu.

Parameters:
mu - the new mean vector.
Throws:
NullPointerException - if mu is null.
IllegalArgumentException - if the length of mu does not correspond to getDimension.

### setMu

public void setMu(int i,
double mui)
Sets the i-th component of the mean vector to mui.

Parameters:
i - the index of the modified component.
mui - the new value of μi.
Throws:
ArrayIndexOutOfBoundsException - if i is negative or greater than or equal to getDimension.

### getSigma

public DoubleMatrix2D getSigma()
Returns the covariance matrix Σ used by this generator.

Returns:
the used covariance matrix.

### getCholeskyDecompSigma

public DoubleMatrix2D getCholeskyDecompSigma()
Returns the Cholesky decomposition of the covariance matrix used for generating the vectors. The returned matrix A is defined such that Σ = ATA.

Returns:
the Cholesky decomposition of the covariance matrix.

### setSigma

public void setSigma(DoubleMatrix2D sigma)
Sets the covariance matrix of this multinormal generator to sigma.

Parameters:
sigma - the new covariance matrix.
Throws:
IllegalArgumentException - if sigma has incorrect dimensions.

### nextPoint

public static void nextPoint(NormalGen gen1,
double[] mu,
DoubleMatrix2D sigma,
double[] p)
Generates a point from the multinormal distribution with mean vector mu, and covariance matrix sigma, using the one-dimensional normal generator gen1. The resulting vector is put into p. Note that this static method may be slow for large dimension, because it needs to compute the Cholesky decomposition at every call. It is therefore recommended to use a MultiNormalGen object instead.

Parameters:
p - the array to be filled with the generated point.
Throws:
IllegalArgumentException - if the one-dimensional normal generator uses a normal distribution with μ not equal to 0, or σ not equal to 1.
IllegalArgumentException - if the length of the mean vector is different from the dimensions of the covariance matrix, or if the covariance matrix is not symmetric and positive-definite.
NullPointerException - if any argument is null.

### nextPoint

public static void nextPoint(NormalGen gen1,
double[] mu,
double[][] sigma,
double[] p)
Equivalent to nextPoint (gen1, mu, new DenseDoubleMatrix2D (sigma), p).

### nextPoint

public void nextPoint(double[] p)
Generates a point from the multinormal distribution.

Specified by:
nextPoint in class RandomMultiVariateGen
Parameters:
p - the array to be filled with the generated point

SSJ
V. 1.2.5.

To submit a bug or ask questions, send an e-mail to Pierre L'Ecuyer.