3

我正在尝试使用等高线图绘制球体函数,但我不断收到以下错误。

??? Error using ==> Z must be size 2x2 or greater.

错误在这行代码:

contour(X1, X2, Z);

这是球体函数:

function ph = sphere(x)
         ph = sum(x.*x, 2);
end

这是使用等高线图绘制球体的代码:

min = -25;
max = 25;
h = 25;
c= linspace(min, max, h); % Create the mesh
[X1, X2] = meshgrid(c, c); % Create the grid

Z = sphere(X1,X2);

figure;
icontour(X1, X2, Z);

我希望 Z 至少返回一个 2x2 矩阵。Z 应该是球体的高度,X1 是 x 轴,X2 是 y 轴。

我怎样才能消除错误?

4

1 回答 1

1

问题sum出在你的sphere功能上。WhileX1X225x25矩阵,ph25x1向量。尝试这个:

function ph = sphere(x)

ph = x.*x;  

在这种情况下,您的值ph将与您的网格变量具有相同的维度。

编辑

如果您使用更新的方法:

Z = arrayfun(@sphere, X1);

您将得到恒定的行,因为您只需将 X1 传递给您的spheres函数。在这种情况下,它与以下内容相同:

ph = sum(x.^2,2);  

要获得一个球体,您需要传递两个参数,X1并且X2

function ph = sphere(x1,x2)
     ph = sum(x1.*x2, 2);
end  

并调用:

Z = arrayfun(@sphere, X1, X2);

如果你这样调用你修改过的函数,你会得到这个结果:

在此处输入图像描述

编辑 2

注意:如果您sphere在脚本中的其他地方使用,则必须更新对它的每个调用以包含两个输入参数。

编辑 3

根据您实现此代码的仔细程度,我建议您不要将sphere其用作函数的名称,因为Matlab 自己的函数具有该名称

于 2013-05-26T17:10:01.377 回答