You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SymPy:如何不化简地对多个分段函数之和进行积分?

保留分段函数分组形式的积分解决方案

问题背景

用SymPy定义了三个分段函数相加得到的函数M:

from sympy import *
init_printing()
x = symbols('x')
M = Piecewise((13*x,x>=0),(0,True)) + Piecewise((-15*(x-2),x>=2),(0,True)) + Piecewise((-9*(x-4)**2/2,x>=4),(0,True))

直接调用integrate(M, x)会将积分结果合并化简,无法保留原三个分段部分的分组形式(比如希望保留最后一部分积分后的-9(x-4)^3/6形式)。尝试M.piecewise_integrate(x)因M是分段函数之和而无法生效。

解决方法

无需单独手动计算每个分段积分,只需先分别定义每个分段函数,对每个函数单独积分后再求和,即可保留原分组的积分形式:

代码实现

from sympy import *
init_printing()
x = symbols('x')

# 拆分定义每个分段函数
M1 = Piecewise((13*x, x >= 0), (0, True))
M2 = Piecewise((-15*(x-2), x >= 2), (0, True))
M3 = Piecewise((-9*(x-4)**2/2, x >= 4), (0, True))

# 分别积分后再相加
integrated_M = integrate(M1, x) + integrate(M2, x) + integrate(M3, x)

如果需要处理更多分段函数,也可以用列表推导简化代码:

pieces = [
    Piecewise((13*x, x >= 0), (0, True)),
    Piecewise((-15*(x-2), x >= 2), (0, True)),
    Piecewise((-9*(x-4)**2/2, x >= 4), (0, True))
]
integrated_M = sum(integrate(piece, x) for piece in pieces)

效果说明

通过这种方式,每个分段函数的积分结果会独立保留原有的形式,不会被合并为一个整体的分段表达式,满足保留原分组形式的需求。

内容的提问来源于stack exchange,提问作者Stef Pillaert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 13:33:17