在符号表达式上使用 fplot 的问题

Issue with using fplot on a symbolic expression

这是一个 fplot 不绘制任何内容的示例:

a=0.336;
Ta=9.476;
Te=1.208;
Tw=1.498;
eqh=[0.661;0.619;0.568];
ex=[-1.24;-1.346;-1.441];
en=-ex;
ey=[0.376;0.705;0.968];
eqx=[-0.309;-0.357;-0.392];
eh=[1.594;1.583;1.545];
eyqh=[0.642;0.78;0.897];
a0=a*Ta*Te^2;
syms bt Td Ki Kp;
a1=sym([]);a2=sym([]);a3=sym([]);a4=sym([]);exqh=sym([]);

for i=1:3
        Kp=1/bt;
        exqh(i)=en(i)*eqh(i)+eqx(i)*eh(i);
        Ki=1/(bt*Td);
        a1(i)=Ta*Tw*eqh(i)+a*Te^2*en(i)+a*Te^2*ey(i)*Kp;
        a2(i)=a*Te^2*ey(i)*Ki+Ta+Tw*exqh(i)-eyqh(i)*Kp*Tw;
        a3(i)=en(i)+ey(i)*Kp-eyqh(i)*Ki*Tw;
        a4(i)=ey(i)*Ki;
        assume(bt~=0)
        f=@(bt) a1(i)
        fplot(f,[0.01 1],'b')
        hold on
end

这是另一个示例,其中 fplot 有效:

syms y x;
y=@(x) 2/x+6;
z=y;
assume(x~=0)
fplot(z,[-1 1],'b')

我无法理解这两种情况之间的区别。在我看来,它们是一样的。

谁能解释一下为什么上面的例子不起作用,而下面的例子呢?

fplot 需要一个 returns 数值的表达式。 f returns 一个 sym (符号表达式),所以它不起作用,而 z returns 一个数字 - 所以 确实。就是这样。

请注意,在工作示例中,您覆盖了第 2 行的 y sym,这意味着您提供了 "proper" function handlefplot、"by mistake"。事实上,您需要更少的代码来运行该示例:

fplot( @(x)2./x+6, [-1 1], 'b');

使顶级代码正常工作的最简单方法是使用 matlabFunction。换句话说,您可以通过更改此行来修复您的代码:

f=@(bt) a1(i)

对此:

f = matlabFunction(a1(i));