如何合并同一变量的导数?Sympy化简问题求助
合并SymPy中同一变量的求和式导数
要将多个对同一变量的导数求和式合并为对变量和的导数,可以通过模式匹配替换实现,以下是针对你场景的具体解法:
基础场景解法(两个导数相加)
from sympy import * x,y,z,t = symbols('x y z t') expr = z * (Derivative(x,t) + Derivative(y,t)) # 匹配对t求导的两个导数相加的模式,替换为对变量和的导数 expr = expr.replace(Derivative(a, t) + Derivative(b, t), Derivative(a + b, t)) print(expr) # 输出:z*Derivative(x + y, t)
通用场景解法(任意多个导数相加)
如果需要处理3个及以上对t的导数相加的情况,可以用更灵活的lambda匹配逻辑:
from sympy import * x,y,z,t = symbols('x y z t') expr = z * (Derivative(x,t) + Derivative(y,t) + Derivative(z,t)) # 匹配所有由对t求导的Derivative组成的Add项,替换为对所有变量和的导数 expr = expr.replace( lambda e: isinstance(e, Add) and all(isinstance(arg, Derivative) and arg.variables == (t,) for arg in e.args), lambda e: Derivative(Add(*[arg.expr for arg in e.args]), t) ) print(expr) # 输出:z*Derivative(x + y + z, t)
说明
SymPy默认的simplify等函数不会自动触发这种合并,因为它属于导数线性性质的手动应用。通过自定义模式匹配,可以精准定位并替换符合条件的导数求和结构,不受外层因子(比如示例中的z)影响。
内容的提问来源于stack exchange,提问作者JuanPi
相关产品推荐
相关产品推荐

