使用 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 = 1y^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);