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