Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Plot a contour of multivariate normal PDF of a given MVN in MATLAB?

I have a bivariate gaussian I defined as follow:

I=[1 0;0 1];
mu=[0,0];
sigma=0.5*I;
beta = mvnrnd(mu,sigma,100);  %100x2 matrix where each column vector is a variable.

now I want to plot a contour of the pdf of the above matrix. What I did:

Z = mvnpdf(beta,mu,sigma);  %100x1 pdf matrix

Now I want to plot a contour of the bivariate gaussian beta. I know I should use the command contour but this one require Z to be a square matrix. how do I solve this? I am very confused and not sure how to plot the contour of the bivariate gaussian!! ANY HELP IS GREATLY APPRECIATED..

Thank you

like image 663
Evan Avatar asked Nov 24 '13 01:11

Evan


1 Answers

You need to define your x, y axes and use meshgrid (or ndgrid) to generate all combinations of x, y values, in the form of two matrices X and Y. You then compute the Z values (your Gaussian pdf) for those X and Y, and plot Z as a function of X , Y using contour (contour plot), or perhaps surf (3D plot).

mu = [0,0]; %// data
sigma = [.5 0; 0 .5]; %// data
x = -5:.1:5; %// x axis
y = -4:.1:4; %// y axis

[X Y] = meshgrid(x,y); %// all combinations of x, y
Z = mvnpdf([X(:) Y(:)],mu,sigma); %// compute Gaussian pdf
Z = reshape(Z,size(X)); %// put into same size as X, Y
%// contour(X,Y,Z), axis equal  %// contour plot; set same scale for x and y...
surf(X,Y,Z) %// ... or 3D plot

Graph obtained with <code>contour(X,Y,Z), axis equal</code>Graph obtained with <code>surf(X,Y,Z)</code>

like image 186
Luis Mendo Avatar answered Oct 11 '22 14:10

Luis Mendo