我正在尝试使用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的答案绘制这个时,我得到的东西看起来根本不像高斯。
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);
答案 0 :(得分:2)
您已使用X
和Y
来定义您想要计算高斯的2D域。如果您希望Z
成为X
和Y
的函数,则需要为 Z
的所有排列定义X
和Y
。如果您未提供Z
值的矩阵,则MATLAB不知道如何在您提供的X
Y
范围内创建曲面。
您可以使用X
创建Y
和meshgrid
的所有排列,然后在整个域中计算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)));