Построение сетки Гауссов с помощью Matlab

со следующим кодом я могу нарисовать график одной 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-Gaussians). Каждый Гаусс должен быть взвешен таким коэффициентом, что если он отрицательный, то Гауссов указывает на отрицательные значения оси z (черные точки в сетке ниже), и если он положительный, как на изображении выше (белые точки в сетке ниже).

enter image description here

позвольте мне предоставить некоторые математические детали. Сетка соответствует смеси 2D-Гауссов, суммированных следующим уравнением:

enter image description here

в котором каждый Гаусс имеет свое среднее и отклонение.

обратите внимание, что каждый гауссовский смесь следует поместить в определенную (X,Y) координату таким образом, чтобы они были одинаково удалены друг от друга. e.g подумайте о центральном Гауссе в (0,0), тогда другие должны быть в (-1,1) (0,1) (1,1) (-1,0) (1,0) (-1,-1) (0,-1) (1,-1) в случае сетки с размером 3x3.

можете ли вы предоставить мне (и объяснить мне), как я могу сделать такой сюжет? Заранее спасибо за помощь.

1 ответов


ведь вы сами сказали, поставьте (в качестве примера только для средства)

[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