用Matlab绘制高斯网格

时间:2012-12-01 11:06:03

标签: matlab plot mesh

使用以下代码,我可以绘制单个2D高斯函数的图:

x=linspace(-3,3,1000);
y=x';               
[X,Y]=meshgrid(x,y);
z=exp(-(X.^2+Y.^2)/2);
surf(x,y,z);shading interp

这是制作的情节:

enter image description here

但是,我想绘制一个具有指定数量x的这些2D高斯的网格。 将以下图片视为我想要制作的图的上图(特别是网格由5x5 2D高斯制成)。应该用一个系数对每个高斯进行加权,如果它是负的,则高斯指向z轴的负值(下面网格中的黑点),如果它是正的,则如上图所示(下面网格中的白点)

enter image description here

让我提供一些数学细节。网格对应于2D高斯的混合,如下式所示:

enter image description here

其中每个高斯都有自己的均值和偏差。

请注意,混合物的每个高斯分布应放在确定的(X,Y)坐标中,使它们彼此相等。例如,考虑(0,0)中的中心高斯,然后其他的应该在(-1,1)(0,1)(1,1)( - 1,0)(1,0)(-1, -1)(0,-1)(1,-1)在网格尺寸为3x3的情况下。

你能提供给我(并向我解释)我该怎么做这样的情节? 在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:5)

确实你自己说过,(仅作为手段的例子)

[X,Y]=meshgrid(x,y);  % //mesh

g_centers = -3:3;    
[x_g,y_g] = meshgrid(g_centers,g_centers); % //grid of centers (coarser)
mu = [x_g(:) , y_g(:)];  % // mesh of centers in column


z   = zeros(size(X));
for i = 1:size(mu,1)
     z= z + exp(-((X-mu(i,1)).^2+(Y-mu(i,2)).^2)/( 2* .001) );
end
surf(X,Y,z);shading interp

enter image description here