我想弄清楚如何绘制一个带有输出条件的函数。 我在这里查看了各种网站和问题,但我没有找到解决我的问题的方法(或者至少是我设法理解的解决方案)。
(注意:我使用的是jupyter)
我成功绘制了发动机扭矩与转速的曲线。 我想将扭矩的输出值限制为500。
我定义了一个带有“if”条件的函数(在下面的单元格 2 上),它可以计算值。
该函数计算正确(在下面的单元格 3 上进行验证),但我无法绘制它。
我收到错误“TypeError:无法确定关系的真值”,我无法理解为什么,因为独立值似乎计算正确)
您有解决方案吗?还是问题可能来自于“拐点”?
感谢您的帮助。
我的代码如下:
第一个单元(定义扭矩与转速的方程+绘制它,工作正常)
#ENGINE
rpm_eng, torq_eng = symbols('rpm_eng, torq_eng')
def eq_torq_eng(rpm_eng):
return -8.6916*10**-14*rpm_eng**4 + 2.3789*10**-9*rpm_eng**3 - 2.8710*10**-5*rpm_eng**2 + 1.9178*10**-1*rpm_eng + 1.5105
plot(eq_torq_eng(rpm_eng), (rpm_eng, 0, 13000), \
title="engine output : torque vs rpm", xlabel="rpm", ylabel="torque in N.m")
第二个单元格(定义有限扭矩与转速的方程+绘图。绘图不起作用)
def eq_torq_limiter(rpm_eng):
if -8.6916*10**-14*rpm_eng**4 + 2.3789*10**-9*rpm_eng**3 - 2.8710*10**-5*rpm_eng**2 + 1.9178*10**-1*rpm_eng + 1.5105>500:
return 500
else:
return -8.6916*10**-14*rpm_eng**4 + 2.3789*10**-9*rpm_eng**3 - 2.8710*10**-5*rpm_eng**2 + 1.9178*10**-1*rpm_eng + 1.5105
plot(eq_torq_limiter(rpm_eng), (rpm_eng, 0, 13000), \
title="engine output : torque vs rpm", xlabel="rpm", ylabel="torque in N.m")
第三个单元格(验证该函数正确计算限制扭矩)
for rpm_eng in range(1000, 14000, 1000):
print(eq_torq_limiter(rpm_eng))
您可以使用
Piecewise
构造一个新函数,如下所示:
rpm_eng, torq_eng = symbols('rpm_eng, torq_eng')
def eq_torq_eng(rpm_eng):
return -8.6916*10**-14*rpm_eng**4 + 2.3789*10**-9*rpm_eng**3 - 2.8710*10**-5*rpm_eng**2 + 1.9178*10**-1*rpm_eng + 1.5105
torque = eq_torq_eng(rpm_eng)
torque_limited = Piecewise(
(500, torque > 500),
(torque, True)
)
plot(torque_limited, (rpm_eng, 0, 13000), \
title="engine output : torque vs rpm", xlabel="rpm", ylabel="torque in N.m")