我试图在MATLAB中绘制以下高斯函数(应该在3维中绘图),但我在某处犯了一些错误。有什么问题?
sigma = 1
for i = 1:20
for j = 1:20
z(i,j) = (1/(2*pi*sigma^2))*exp(-(i^2+j^2)/(2*sigma^2));
end
end
surf(z)
答案 0 :(得分:1)
您可能遇到的问题是,您正在评估i
和j
的1到20范围内的高斯分布。由于sigma
为1,您只会看到高斯一侧的一段(不包括[i,j] = [0,0]
处的中心),以及z
的值在3到20之间每个方向都非常接近0。
您可以使用函数MESHGRID创建x
和y
值的矩阵并执行element-wise operations,而不是使用for循环,而是通过“MATLAB方式”执行操作他们计算和绘制z
:
[x,y] = meshgrid(-4:0.1:4); %# Use values from -4 to 4 in x and y directions
z = (1/(2*pi*sigma^2)).*exp(-(x.^2+y.^2)./(2*sigma^2)); %# Compute z
surf(x,y,z); %# Plot z