冲浪功能不会绘制2D高斯图

时间:2016-06-07 18:06:51

标签: matlab matlab-figure

我正在尝试使用surf函数在MATLAB中绘制一个简单的2D高斯图,但是我得到一个错误,说冲浪中的最后一个值必须是矩阵而不是矢量。我不明白如何绘制函数图形,因为我在搜索时发现的其他每个例子都将第三个值作为向量。我觉得好像我完全没有冲浪功能了。有什么想法吗?

amp = 10;
x0 = 0;
y0 = 0;
sigmaX = 10
sigmaY = 10
X = 1:1:100;
Y = 1:1:100;
Z = amp*exp(-(X-x0).^2/(2*sigmaX^2)+(Y-y0).^2/(2*sigmaY^2));
disp(size(Z))
surf(X, Y, Z);

修改

当我使用@Suever的答案绘制这个时,我得到的东西看起来根本不像高斯。

Here's the plot

amp = 1;
x0 = 0;
y0 = 0;
sigmaX = 1;
sigmaY = 1;
%X = 1:1:100;
%Y = 1:1:100;
[X,Y] = meshgrid(-3:.1:3);
%Z = X .* exp(-X.^2 - Y.^2);
Z = amp*exp(-(X-x0).^2/(2*sigmaX^2)+(Y-y0).^2/(2*sigmaY^2));
surf(X, Y, Z);

1 个答案:

答案 0 :(得分:2)

您已使用XY来定义您想要计算高斯的2D域。如果您希望Z成为XY的函数,则需要为 Z的所有排列定义XY。如果您未提供Z值的矩阵,则MATLAB不知道如何在您提供的X Y范围内创建曲面。

您可以使用X创建Ymeshgrid的所有排列,然后在整个域中计算Z。然后,您将能够使用surf显示结果。

amp = 10; x0 = 50; y0 = 50; sigmaX = 10; sigmaY = 10;

[X, Y] = meshgrid(1:100, 1:100);

% Z as you had it written (see correct version below)
Z = amp*exp(-(X-x0).^2./(2*sigmaX^2)+(Y-y0).^2./(2*sigmaY^2));

surf(X, Y, Z);

<强>更新

你的2D高斯方程是错误的。添加两个组件时,-符号应在。你编写它的方式,你否定了X组件,然后添加到Y组件。

Z = amp*exp(-((X-x0).^2./(2*sigmaX^2)+(Y-y0).^2./(2*sigmaY^2)));

enter image description here