在MATLAB中绘制给定多元正态分布的概率密度函数轮廓?

10

我有一个双变量高斯分布,定义如下:

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.

现在我想绘制上述矩阵的概率密度函数轮廓。我所做的:

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

现在我想绘制一个二元高斯贝塔函数的等高线图。我知道我应该使用命令contour,但它要求Z是一个方阵。我该如何解决这个问题?我非常困惑,不确定如何绘制二元高斯函数的等高线图!任何帮助都将不胜感激。

谢谢。

1个回答

20
你需要定义你的xy轴,并使用meshgrid(或ndgrid)生成x、y值的所有组合,以两个矩阵XY的形式呈现。然后计算那些XYZ值(你的高斯概率密度函数),并使用contour(等高线图)或者surf(三维图)将Z作为XY的函数绘制出来。
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

使用 <code>contour(X,Y,Z), axis equal</code> 得到的图形 使用 <code>surf(X,Y,Z)</code> 得到的图形


1
这段代码在Octave中也可以完美运行,只要加载了统计包 pkg load statistics :) - loved.by.Jesus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接