Main Content


Multivariate normal random numbers



R = mvnrnd(mu,Sigma,n) returns a matrix R of n random vectors chosen from the same multivariate normal distribution, with mean vector mu and covariance matrix Sigma. For more information, see Multivariate Normal Distribution.


R = mvnrnd(mu,Sigma) returns an m-by-d matrix R of random vectors sampled from m separate d-dimensional multivariate normal distributions, with means and covariances specified by mu and Sigma, respectively. Each row of R is a single multivariate normal random vector.


collapse all

Generate random numbers from the same multivariate normal distribution.

Define mu and Sigma, and generate 100 random numbers.

mu = [2 3];
Sigma = [1 1.5; 1.5 3];
rng('default')  % For reproducibility
R = mvnrnd(mu,Sigma,100);

Plot the random numbers.


Figure contains an axes object. The axes contains a line object which displays its values using only markers.

Randomly sample from five different three-dimensional normal distributions.

Specify the means mu and the covariances Sigma of the distributions. Let all the distributions share the same covariance matrix, but vary the mean vectors.

firstDim = (1:5)';
mu = repmat(firstDim,1,3)
mu = 5×3

     1     1     1
     2     2     2
     3     3     3
     4     4     4
     5     5     5

Sigma = eye(3)
Sigma = 3×3

     1     0     0
     0     1     0
     0     0     1

Randomly sample once from each of the five distributions.

rng('default')  % For reproducibility
R = mvnrnd(mu,Sigma)
R = 5×3

    1.5377   -0.3077   -0.3499
    3.8339    1.5664    5.0349
    0.7412    3.3426    3.7254
    4.8622    7.5784    3.9369
    5.3188    7.7694    5.7147

Plot the results.


Figure contains an axes object. The axes object contains an object of type scatter.

Input Arguments

collapse all

Means of multivariate normal distributions, specified as a 1-by-d numeric vector or an m-by-d numeric matrix.

  • If mu is a vector, then mvnrnd replicates the vector to match the trailing dimension of Sigma.

  • If mu is a matrix, then each row of mu is the mean vector of a single multivariate normal distribution.

Data Types: single | double

Covariances of multivariate normal distributions, specified as a d-by-d symmetric, positive semi-definite matrix or a d-by-d-by-m numeric array.

  • If Sigma is a matrix, then mvnrnd replicates the matrix to match the number of rows in mu.

  • If Sigma is an array, then each page of Sigma, Sigma(:,:,i), is the covariance matrix of a single multivariate normal distribution and, therefore, is a symmetric, positive semi-definite matrix.

If the covariance matrices are diagonal, containing variances along the diagonal and zero covariances off it, then you can also specify Sigma as a 1-by-d vector or a 1-by-d-by-m array containing just the diagonal entries.

Data Types: single | double

Number of multivariate random numbers, specified as a positive scalar integer. n specifies the number of rows in R.

Data Types: single | double

Output Arguments

collapse all

Multivariate normal random numbers, returned as one of the following:

  • m-by-d numeric matrix, where m and d are the dimensions specified by mu and Sigma

  • n-by-d numeric matrix, where n is the specified input argument and d is the dimension specified by mu and Sigma

If mu is a matrix and Sigma is an array, then mvnrnd computes R(i,:) using mu(i,:) and Sigma(:,:,i).

More About

collapse all

Multivariate Normal Distribution

The multivariate normal distribution is a generalization of the univariate normal distribution to two or more variables. It has two parameters, a mean vector μ and a covariance matrix Σ, that are analogous to the mean and variance parameters of a univariate normal distribution. The diagonal elements of Σ contain the variances for each variable, and the off-diagonal elements of Σ contain the covariances between variables.

The probability density function (pdf) of the d-dimensional multivariate normal distribution is

y = f(x,μ,Σ) = 1|Σ|(2π)dexp(12(x-μΣ-1(x-μ)')

where x and μ are 1-by-d vectors and Σ is a d-by-d symmetric, positive definite matrix. Only mvnrnd allows positive semi-definite Σ matrices, which can be singular. The pdf cannot have the same form when Σ is singular.

The multivariate normal cumulative distribution function (cdf) evaluated at x is the probability that a random vector v, distributed as multivariate normal, lies within the semi-infinite rectangle with upper limits defined by x:


Although the multivariate normal cdf does not have a closed form, mvncdf can compute cdf values numerically.


  • mvnrnd requires the matrix Sigma to be symmetric. If Sigma has only minor asymmetry, you can use (Sigma + Sigma')/2 instead to resolve the asymmetry.

  • In the one-dimensional case, Sigma is the variance, not the standard deviation. For example, mvnrnd(0,4) is the same as normrnd(0,2), where 4 is the variance and 2 is the standard deviation.


[1] Kotz, S., N. Balakrishnan, and N. L. Johnson. Continuous Multivariate Distributions: Volume 1: Models and Applications. 2nd ed. New York: John Wiley & Sons, Inc., 2000.

Extended Capabilities

C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.

Version History

Introduced before R2006a