如何使用SymPy修改Piecewise分段函数的表达式与条件
修改SymPy分段函数Piecewise的表达式与条件
直接基于现有Piecewise对象修改
Piecewise对象的.args属性存储了所有分段的表达式-条件对,你可以基于已有内容调整后,重新生成新的分段函数。
以你的示例代码为例:
from sympy import Symbol, Piecewise x = Symbol('x') p = Piecewise((x**2, x<=0), (-x, True))
如果要把第一个分段的表达式改成x**3、条件改成x < -1,第二个分段的表达式改成x + 1,可以这么写:
# 生成第一个分段的新规则 new_segment1 = (x**3, x < -1) # 复用第二个分段的原有条件,替换表达式 new_segment2 = (x + 1, p.args[1].cond) # 构造新的分段函数 new_p = Piecewise(new_segment1, new_segment2)
用ExprCondPair封装分段规则
ExprCondPair就是把“表达式”和“条件”打包成的专用对象,你可以直接创建新的实例,或者基于原有的修改:
from sympy import ExprCondPair # 直接创建新的分段对 segment1 = ExprCondPair(x**3, x < -1) segment2 = ExprCondPair(x + 1, True) # 组装成新的Piecewise new_p = Piecewise(segment1, segment2) # 也可以基于原Piecewise中的分段对修改 original_segment1 = p.args[0] # 注意:ExprCondPair是不可变对象,必须生成新实例 modified_segment1 = ExprCondPair(original_segment1.expr.subs(x**2, x**3), x < -1) new_p = Piecewise(modified_segment1, p.args[1])
关键提示
- ExprCondPair是不可变类型,不能直接修改它的
expr或cond属性,必须创建新的实例 - 通过
.expr和.cond属性可以直接访问分段对里的表达式和条件,方便基于原有内容调整 - 不管用元组还是ExprCondPair,最终都要传入Piecewise构造函数,才能生成新的分段函数
内容的提问来源于stack exchange,提问作者user829347
相关产品推荐
相关产品推荐

