使用以下代码,我可以绘制单个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
Run Code Online (Sandbox Code Playgroud)
这是制作的情节:

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

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

其中每个高斯都有自己的均值和偏差.
注意,混合物的每个高斯分布应该被放置在确定的(X,Y)坐标中,使得它们彼此相等.例如,考虑(0,0)中的中心高斯,然后其他的应该在(-1,1)(0,1)(1,1)( - 1,0)(1,0)(-1, -1)(0,-1)(1,-1)在网格尺寸为3x3的情况下.
你能告诉我(并向我解释)我怎么能做这样的情节?在此先感谢您的帮助.
事实上,你说自己,把(作为一个例子只是为了手段)
[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
Run Code Online (Sandbox Code Playgroud)
