使用 ezplot 在 MATLAB 中绘制分段符号表达式
Plotting a piecewise symbolic expression in MATLAB using ezplot
我创建了以下符号积分:
syms x;
syms t;
int(1./((1-t.*x).^3),t,0,1)
ans =
piecewise([x = 1, Inf], [not 1/x in (0, 1) and x 1, -(x/2 - 1)/(x - 1)^2])
这导致分段函数定义。现在我想使用 ezplot
函数绘制这个积分,但这会导致错误:
Error using ezplot (line 162)
piecewise([1/x in Dom::Interval([0], [1]), -int(1/(t*x - 1)^3, t, 0, 1)],
[~1/x in Dom::Interval([0], [1]), -(x - 2)/(2*(x - 1)^2)])
cannot be plotted in the xy-plane.
Error in sym/ezplot (line 61)
h = ezplot(fhandle(f));
如何绘制这个分段符号积分?
虽然我找不到 Mathworks 的任何证据,但 ezplot
似乎 not 与分段符号函数一起工作(来源:有几个未解决的问题在 Matlab 帮助论坛中关于这个主题)。
在这个答案中,我提出了一种变通方法,它适用于显式的可逆函数,即对于 x^2 + y^2 = 1
或 y^2 = y^4
之类的东西以及类似的东西,它会失败。在这种特殊情况下(我假设最常使用),可以手动生成一个 x
-vector 并使用 subs
函数计算相应的 y
-values。
ezplot
的默认范围是 [-2pi, 2pi]
。点的数量在很大程度上取决于函数,但是大约 1000 个点,应该创建一个相当平滑的图。 注意:这应该会产生默认的 ezplot
行为。如果您对该函数有进一步的了解,即值范围等,您绝对应该使用它来创建 x
向量。
xp = -2*pi : 0.01: 2*pi;
yp = subs(f, x, xp);
plot(xp,yp);
我创建了以下符号积分:
syms x;
syms t;
int(1./((1-t.*x).^3),t,0,1)
ans =
piecewise([x = 1, Inf], [not 1/x in (0, 1) and x 1, -(x/2 - 1)/(x - 1)^2])
这导致分段函数定义。现在我想使用 ezplot
函数绘制这个积分,但这会导致错误:
Error using ezplot (line 162)
piecewise([1/x in Dom::Interval([0], [1]), -int(1/(t*x - 1)^3, t, 0, 1)],
[~1/x in Dom::Interval([0], [1]), -(x - 2)/(2*(x - 1)^2)])
cannot be plotted in the xy-plane.
Error in sym/ezplot (line 61)
h = ezplot(fhandle(f));
如何绘制这个分段符号积分?
虽然我找不到 Mathworks 的任何证据,但 ezplot
似乎 not 与分段符号函数一起工作(来源:有几个未解决的问题在 Matlab 帮助论坛中关于这个主题)。
在这个答案中,我提出了一种变通方法,它适用于显式的可逆函数,即对于 x^2 + y^2 = 1
或 y^2 = y^4
之类的东西以及类似的东西,它会失败。在这种特殊情况下(我假设最常使用),可以手动生成一个 x
-vector 并使用 subs
函数计算相应的 y
-values。
ezplot
的默认范围是 [-2pi, 2pi]
。点的数量在很大程度上取决于函数,但是大约 1000 个点,应该创建一个相当平滑的图。 注意:这应该会产生默认的 ezplot
行为。如果您对该函数有进一步的了解,即值范围等,您绝对应该使用它来创建 x
向量。
xp = -2*pi : 0.01: 2*pi;
yp = subs(f, x, xp);
plot(xp,yp);