繁体   English   中英

在 sympy 中简化嵌套的分段方程

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM