SymPy中如何对分段函数分支的平方模结果进行求和聚合?
忽略Piecewise分支条件求和的实现方法
问题场景
你定义了分段波函数psi_x_0,希望跳过分支的条件判断,直接对所有分支的表达式(或其积分结果)求和,使用Sum和普通sum报错的情况下,可通过以下方法实现。
直接对分支表达式求和
Piecewise对象的所有分支可通过.args属性获取,每个分支以(表达式, 条件)的元组形式存储。我们只需提取每个元组中的表达式部分,再直接求和即可:
from sympy import * x = Symbol('x', real=True) A = Symbol('A', real=True, positive=True, constant=True) a = Symbol('a', real=True, positive=True, constant=True) b = Symbol('b', real=True, positive=True, constant=True) # 定义波函数 psi_x_0 = Piecewise( (0, x < 0), (A * x / a, x <= a), (A * (b - x) / (b - a), x <= b), (0, True) ) # 提取所有分支的表达式,忽略条件判断 branch_exprs = [expr for expr, _ in psi_x_0.args] # 计算所有分支表达式的和 total_sum = sum(branch_exprs) # 等价于用sympy的Add函数:total_sum = Add(*branch_exprs) print(total_sum)
运行后会输出所有分支表达式的总和:0 + A*x/a + A*(b - x)/(b - a) + 0,化简后为A*x/a + A*(b - x)/(b - a)。
对各分支的积分结果求和
如果你的需求是对每个分支表达式的平方积分结果求和(忽略原分支的区间限制),可以遍历分支表达式分别积分后再相加:
# 对每个分支表达式的平方做全局积分,再求和 integral_total = sum(integrate(expr**2, (x, -oo, oo)) for expr, _ in psi_x_0.args) print(integral_total)
这段代码会计算每个分支表达式在整个实数域的平方积分,再将结果累加,完全不受原分段条件的约束。
内容的提问来源于stack exchange,提问作者Galen
相关产品推荐
相关产品推荐

