【问题标题】:Error plotting a function of 2 variables绘制 2 个变量的函数时出错
【发布时间】:2012-10-23 01:26:21
【问题描述】:

我正在尝试绘制函数

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

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

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

我该如何解决这个错误?

【问题讨论】:

标签: function matlab


【解决方案1】:

我(想)我明白你想要达到的目标。您正在编写语法,就像数学函数定义一样。 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');

这会给你这样的输出。 . .

第一行的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');

【讨论】:

    【解决方案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 的答案相同。它只是为你做repmat-ing。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2019-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多