我正试图在MATLAB中绘制一个简单的方程。公式为
z = x^2 - y^2, for -3 <= x <= 3, -3 <= y <= 3.
我目前拥有的代码是
x = -3:3; y = -3:3; z = (x.^2) - (y.^2); plot(z)
结果是
请帮助我在这种情况下,因为我不确定是否代码和图形是正确的。非常感谢。
3qpi33ja1#
这不是分段函数。Piecewise Function是由多个子函数定义的函数,其中每个子函数应用于定义域中的不同区间。这里只有一个函数采用两个相同长度的数组。由于输入数组的原因,计算得到一个零向量。如果更改其中一个向量,即“x”或“y”,您将看到一个非零图。您的代码按预期工作。
vuktfyat2#
这里有很多地方出了问题:让我们从头说起:
x = -3:3; y = -3:3;
如果我们计算它们,它们都将返回一个整数向量:
x = -3 -2 -1 0 1 2 3
这意味着函数计算的网格将非常粗糙。为了减轻这种情况,您可以定义步长,例如x = 3:0.1:3或使用linspace,在这种情况下,您可以设置样本数,例如x = linspace(-3, 3, 500)。现在考虑下一行:
x = 3:0.1:3
linspace
x = linspace(-3, 3, 500)
z = (x.^2) - (y.^2);
如果我们评估这个,我们得到
z = 0 0 0 0 0 0 0
然后你用二维绘图功能来绘制这个矢量
plot(z)
这完美地解释了为什么你会得到一条直线。这是因为像减号这样的算术运算符的自动广播(-)只对输入值进行减法运算。但是,您需要对每一对x和y的值计算z。要完成此操作并在稍后得到一个漂亮的绘图,您应该使用meshgrid,并使用mesh之类的绘图函数来绘制它。
-
x
y
z
meshgrid
mesh
[X,Y] = meshgrid(x,y);
创建网格,然后按如下方式在网格上计算函数
Z = X.^2 - Y.^2;
最后绘制函数
mesh(X,Y,Z);
2条答案
按热度按时间3qpi33ja1#
这不是分段函数。Piecewise Function是由多个子函数定义的函数,其中每个子函数应用于定义域中的不同区间。这里只有一个函数采用两个相同长度的数组。由于输入数组的原因,计算得到一个零向量。如果更改其中一个向量,即“x”或“y”,您将看到一个非零图。您的代码按预期工作。
vuktfyat2#
这里有很多地方出了问题:让我们从头说起:
如果我们计算它们,它们都将返回一个整数向量:
这意味着函数计算的网格将非常粗糙。为了减轻这种情况,您可以定义步长,例如
x = 3:0.1:3
或使用linspace
,在这种情况下,您可以设置样本数,例如x = linspace(-3, 3, 500)
。现在考虑下一行:如果我们评估这个,我们得到
然后你用二维绘图功能来绘制这个矢量
这完美地解释了为什么你会得到一条直线。这是因为像减号这样的算术运算符的自动广播(
-
)只对输入值进行减法运算。但是,您需要对每一对x
和y
的值计算z
。要完成此操作并在稍后得到一个漂亮的绘图,您应该使用meshgrid
,并使用mesh
之类的绘图函数来绘制它。创建网格,然后按如下方式在网格上计算函数
最后绘制函数