我希望在大网格上创建高斯曲线形状的随机分布。我基本上想要这个功能:
Z = 0.3*exp(-5*(x.^2+y.^2))-0.1;
Z(Z<0)=0;
并且能够选择其位置(在x&amp; y coords中),并且有多个图。
所以目前,我有这个:
但我想生成这个:
有一个相当简单的方法吗?我试着玩代码,但恐怕我不是数学,也不是MATLAB专家。
非常感谢任何帮助。
答案 0 :(得分:4)
看看这个!
这种方式有效:
代码:
clear
n_gaussians=15;
gaussians=0;
sigma=1; % std
mindist=sigma; % if distance is smaller than this gaussians "collide"
[x,y]= meshgrid(-5:0.1:5,-5:0.1:5);
used=[];
Z=zeros(size(x));
while gaussians<n_gaussians
xm=(rand(1)-0.5)*10;
ym=(rand(1)-0.5)*10;
notvalid=0;
for ii=1:size(used,2)
% if we are too close to any point.
if norm([xm-used(1,ii),ym-used(2,ii)])<mindist
notvalid=1; % do not add this gauusian
end
end
if notvalid
continue
end
used(:,end+1)=[xm;ym];
Zaux = 0.3/sigma*exp(-5*((x-xm).^2+(y-ym).^2)/sigma.^2)-0.1;
Zaux(Zaux<0)=0;
Z=Z+Zaux;
gaussians=gaussians+1;
end
surf(x,y,Z);
axis equal