Function 绘制包含2个变量的函数时出错

Function 绘制包含2个变量的函数时出错,function,matlab,Function,Matlab,我正在尝试绘制函数 f(x, y) = (x – 3).^2 – (y – 2).^2. x是从2到4的向量,y是从1到3的向量,两者的增量均为0.2。但是,我得到了一个错误: 下标索引必须是实正整数或逻辑数 如何修复此错误?您的问题是,您正在使用的函数使用整数,并且您正在尝试为其分配双精度。整数不能有小数位数。要解决这个问题,您可以使它以1的增量增加,而不是以0.2的增量增加。您的问题是,您正在使用的函数使用整数,并且您正在尝试为它分配一个双精度。整数不能有小数位数。要解决这个问题,您可以使

我正在尝试绘制函数

f(x, y) = (x – 3).^2 – (y – 2).^2.
x是从2到4的向量,y是从1到3的向量,两者的增量均为0.2。但是,我得到了一个错误:

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


如何修复此错误?

您的问题是,您正在使用的函数使用整数,并且您正在尝试为其分配双精度。整数不能有小数位数。要解决这个问题,您可以使它以1的增量增加,而不是以0.2的增量增加。您的问题是,您正在使用的函数使用整数,并且您正在尝试为它分配一个双精度。整数不能有小数位数。要解决这个问题,您可以使它以1的增量增加,而不是以0.2的增量增加。我想我看到了您试图实现的目标。您编写语法就像编写数学函数定义一样。Matlab将f解释为二维数据类型,并试图将表达式的值分配给在x,y处索引的数据。x和y的值不是整数,所以Matlab抱怨

如果你想画出函数的输出,我们将其称为z,作为x和y的函数,你需要以完全不同的方式定义函数

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');
这将为您提供如下输出。

第一行的f=@x,y部分表示要定义一个名为f的函数,该函数使用变量x和y。该行的其余部分是该函数的定义

如果要将z绘制为x和y的函数,则需要提供范围内所有可能的组合。这就是包含repmat命令的行的用途

编辑

有一个简洁的Matlab函数meshgrid可以代替@bas welcome bas建议的repmat版本的脚本,请滚动到bas的答案和+1 it

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');

我想我看到了你想要实现的目标。您编写语法就像编写数学函数定义一样。Matlab将f解释为二维数据类型,并试图将表达式的值分配给在x,y处索引的数据。x和y的值不是整数,所以Matlab抱怨

如果你想画出函数的输出,我们将其称为z,作为x和y的函数,你需要以完全不同的方式定义函数

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');
这将为您提供如下输出。

第一行的f=@x,y部分表示要定义一个名为f的函数,该函数使用变量x和y。该行的其余部分是该函数的定义

如果要将z绘制为x和y的函数,则需要提供范围内所有可能的组合。这就是包含repmat命令的行的用途

编辑

有一个简洁的Matlab函数meshgrid可以代替@bas welcome bas建议的repmat版本的脚本,请滚动到bas的答案和+1 it

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');
我通常使用这个函数。像这样:

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的答案相同。它只是为你做了一件事

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

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的答案相同。它只是为你做了一件事

如果您需要有关Matlab代码的帮助,请发布Matlab代码,而不是其近似值。另请参阅。如果您需要有关Matlab代码的帮助,请发布Matlab代码,而不是其近似值。另请参阅。