SymPy中嵌套Piecewise分段方程的简化方法
SymPy 扁平化嵌套Piecewise分段函数的方法
直接调用SymPy内置的piecewise_fold()工具即可解决嵌套分段无法自动合并的问题,该函数会自动提取所有内层Piecewise的分段条件,计算各互斥区间对应的最终表达式,消除嵌套结构。
操作步骤
- 不要直接对嵌套的B调用
simplify(),先通过piecewise_fold(B)展开所有嵌套分段 - 对展开后的结果调用
simplify()整理表达式项的顺序,即可得到目标扁平化结构
完整可运行代码
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)) # 展开嵌套+化简 result = simplify(piecewise_fold(B)) print(result)
输出结果
运行代码后将输出完全符合预期的无嵌套分段结构:
Piecewise((3*T + 1/T, (T >= 300) & (T < 700)), (2*T + log(T), (T >= 700) & (T < 900)), (T**9.0 + 3, (T >= 900) & (T < 6000)), (0, True))
注:
piecewise_fold会自动处理分段条件的交集逻辑,筛掉无效的重叠分支,最终返回的所有分段条件都是互斥且按区间顺序排列的,外层套simplify仅用于整理表达式的项顺序,不影响分段逻辑。
内容的提问来源于stack exchange,提问作者Max Poschmann
相关产品推荐
相关产品推荐

