如何在输出上绘制带有条件的函数?

问题描述 投票:0回答:1

我想弄清楚如何绘制一个带有输出条件的函数。 我在这里查看了各种网站和问题,但我没有找到解决我的问题的方法(或者至少是我设法理解的解决方案)。

(注意:我使用的是jupyter)

我成功绘制了发动机扭矩与转速的曲线。 我想将扭矩的输出值限制为500。 torque vs rpms, torque rpms with limiter

我定义了一个带有“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))
python if-statement plot conditional-statements sympy
1个回答
0
投票

您可以使用

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")

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.