[英]Simplifying nested Piecewise equations in sympy
假设我有两个分段方程(A(T) 和 B(T)),其中第二个引用第一个:
from sympy import *
T = symbols("T")
A = Piecewise((T + 1/T, (T >= 300) & (T < 700)), (log(T), (T >= 700) & (T < 900)), (T**9.0, (T >= 900) & (T < 6000)), (0, True))
B = Piecewise((A + 2*T, (T >= 300) & (T < 900)), (A + 3, (T >= 900) & (T < 6000)), (0, True))
如果我只使用简化,我会将 A 嵌套到 B 中:
print(simplify(B))
Piecewise((Piecewise((3*T + 1/T, (T >= 300) & (T < 700)), (2*T + log(T), (T >= 700) & (T < 900)), (2*T + T**9.0, (T >= 900) & (T < 6000)), (2*T, True)), (T >= 300) & (T < 900)), (Piecewise((T + 3 + 1/T, (T >= 300) & (T < 700)), (log(T) + 3, (T >= 700) & (T < 900)), (T**9.0 + 3, (T >= 900) & (T < 6000))), (T >= 900) & (T < 6000)), (0, True))
有没有办法让 sympy 评估范围的表达式并将它们组合起来? 理想情况下,我会得到类似的东西:
Piecewise((3*T + 1/T, (T >= 300) & (T < 700)), (log(T) + 2*T, (T >= 700) & (T < 900)), (T**9.0 + 3, (T >= 900) & (T < 6000)), (0, True))
piecewise_fold
将为您返回一个Piecewise
:
>>> simplify(piecewise_fold(B))
Piecewise(
(3*T + 1/T, (T >= 300) & (T < 700)),
(2*T + log(T), (T >= 700) & (T < 900)),
(2*T, (T >= 300) & (T < 900)),
(T**9.0 + 3, (T >= 900) & (T < 6000)),
(0, True))
小心你的指数——你可能想使用9
而不是9.0
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.