The mvnpdf() Function in MATLAB

Ammar Ali Jun 07, 2022
The mvnpdf() Function in MATLAB

This tutorial will discuss evaluating the probability density function of a multivariate normal distribution using the mvnpdf() function in MATLAB.

Use the mvnpdf() Function in MATLAB

The multivariate normal distribution of the generalized version of the univariate normal distribution to two or more variables. The multivariate normal distribution has two parameters similar to the univariate normal distribution, including the covariance matrix and the mean vector.

The off-diagonal elements of the covariance matrix contain the covariances between variables, and the diagonal elements of the covariance matrix contain the variances for each variable. In MATLAB, we use the mvnpdf() function to find the probability density function of the multivariate normal distribution.

The mvnpdf() function has three syntaxes given below.

Syntax:

output = mvnpdf(input)
output = mvnpdf(input, mu)
output = mvnpdf(input, mu, sigma)

The output = mvnpdf(input) will return the probability density function as an n-by-1 vector of the input matrix, containing the multivariate normal distribution of dimension m. The function will evaluate the output at each input matrix row along the dimension n-by-m.

The output = mvnpdf(input, mu) will return the probability density function according to the mu variable, which defines the mean value of the multivariate normal distribution. The third syntax will also include the variable sigma, which defines the covariance of the multivariate normal distribution.

In the output = mvnpdf(input, mu, sigma), if we only want to specify the value for sigma and we want to use the default value of mu, we can pass an empty vector as the value for mu variable as the second argument and set the value of sigma as the third argument. We can use the mvnrnd() function to create a multivariate normal distribution matrix containing random numbers.

To create the random multivariate normal distribution, we have to pass the value of mu and sigma variables inside the mvnrnd() function. We can also set the number of rows of the output matrix by defining the number as the third argument inside the mvnrnd() function.

For example, let’s create a random matrix of multivariate normal distribution using the mrnrnd() function and then find its probability density function using the mvnpdf() function.

Example Code:

mu_v = zeros(1,4);
Sigma_m = eye(4);
rng('default')
random_mvn = mvnrnd(mu_v,Sigma_m,6)
out_pdf = mvnpdf(random_mvn)

Output:

random_mvn =

    0.5377   -0.4336    0.7254    1.4090
    1.8339    0.3426   -0.0631    1.4172
   -2.2588    3.5784    0.7147    0.6715
    0.8622    2.7694   -0.2050   -1.2075
    0.3188   -1.3499   -0.1241    0.7172
   -1.3077    3.0349    1.4897    1.6302

out_pdf =

    0.0057
    0.0016
    0.0000
    0.0002
    0.0074
    0.0000

We used the zeros() function to create the vector for the mu variable and the eye() function to create the matrix for the sigma variable, and the rng() function to control the random number generator, and we have set it to default for reproducibility. The above output shows the random matrix of multivariate normal distribution and the vector containing the probability density function values.

Suppose we want to find the probability density function at certain points according to a different mean value. We can define the mean values in the mu variable as the second argument inside the mvnpdf() function.

The mu matrix size should be the same as the input matrix size of multivariate normal distribution.

Suppose we want to find the probability density function according to a different covariance value at certain points. We can define the covariance values in the sigma variable as the third argument inside the mvnpdf() function.

The number of columns of the sigma matrix should be the same as the number of columns of the multivariate normal distribution input matrix. If we want to find the probability density function at the same points, we can repeat the same point inside the mu variable, and by default, the mu variable is a vector of zeros, and the sigma variable is a matrix of ones.

Check this link for more details about the mvnpdf() function, or this link for the mvnrnd() function.

Author: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

Related Article - MATLAB Function