绘制2个变量函数时出错

时间:2012-10-19 15:41:36

标签: function matlab

我正在尝试绘制函数

f(x, y) = (x – 3).^2 – (y – 2).^2.

x是2到4的向量,y是1到3的向量,两者的增量都是0.2。但是,我收到了错误:

  

“下标索引必须是实数正整数或逻辑”。

如何解决此错误?

3 个答案:

答案 0 :(得分:4)

我(想)我看到你想要实现的目标。您正在编写类似数学函数定义的语法。 Matlab将f解释为二维数据类型,并尝试将表达式的值分配给在x,y索引的数据。 xy的值不是整数,因此Matlab抱怨。

如果要将函数的输出(我们将其称为z)绘制为xy的函数,则需要以完全不同的方式定义函数。 。 。

f = @(x,y)(x-3).^2 - (y-2).^2;
x=2:.2:4;
y=1:.2:3; 
z = f(  repmat(x(:)',numel(y),1)  , repmat(y(:),1,numel(x) ) );

surf(x,y,z); 
xlabel('X'); ylabel('Y'); zlabel('Z');

这会给你这样的输出。 。 。 enter image description here

第一行的f = @(x,y)部分声明您要定义一个名为f的函数,它使用变量xy。该行的其余部分是该函数的定义。

如果您想将z绘制为xy的函数,则需要提供范围内的所有可能组合。这是包含repmat命令的行所用的内容。

修改

有一个简洁的Matlab函数meshgrid可以替换@bas建议的脚本的repmat版本(欢迎bas,请滚动到bas'回答并+1它!)...

f = @(x,y)(x-3).^2 - (y-2).^2;
x=2:.2:4;
y=1:.2:3;
[X,Y] = meshgrid(x,y);
surf(x,y,f(X,Y)); 
xlabel('x'); ylabel('y'); zlabel('z');

答案 1 :(得分:2)

我通常使用MESHGRID函数。像这样:

x = 2:0.2:4;
y = 1:0.2:3;
[X,Y] = meshgrid(x,y);
F = (X-3).^2-(Y-2).^2;
surf(x,y,F);
xlabel('x');ylabel('y');zlabel('f')

这与@learnvst的答案相同。它只是为你做的重组。

答案 2 :(得分:1)

您的问题是您正在使用的函数使用整数,并且您正在尝试为其分配双精度。整数不能有小数位。要解决此问题,您可以将其增加到以1为增量而不是0.2

的增量