有没有办法收集衍生品?和中的相同符号? 有几个问题围绕这一点,但我还没有找到简单情况的答案:
from sympy import *
x,y,z,t = symbols('x y z t')
expr = z * (Derivative(x,t) + Derivative(y,t))
expr
'z*(Derivative(x, t) + Derivative(y, t))'
expr.simplify(doit=False)
'z*(Derivative(x, t) + Derivative(y, t))'
我希望得到
'z*Derivative(x+y, t)'
我尝试过使用
replace
函数用乘法代替求导,但由于 z
因素被重新组织,或者简化函数无法处理非交换符号,返回并没有真正起作用。
你是对的,在 SymPy 中有一种更优雅的方法来实现这一点。以下是如何收集总和中相同符号的导数:
1。使用
collect
功能:
from sympy import *
x, y, z, t = symbols('x y z t')
expr = z * (Derivative(x, t) + Derivative(y, t))
# Collect derivatives w.r.t. t
collected_expr = expr.collect(Derivative)
print(collected_expr)
这将输出:
z*Derivative(x + y, t)
collect
函数采用符号表达式和可选参数来指定收集的内容。在这种情况下,我们使用 Derivative
来收集同一符号 (t
) 的所有导数。
2。将
simplify
与 expand
参数一起使用:
# Another approach using simplify with expand
simplified_expr = expr.simplify(expand=True)
print(simplified_expr)
此方法使用
simplify
函数,并将 expand
参数设置为 True
。这有时可以达到预期的结果,但不能保证,可能取决于具体的表达。
两种方法都达到相同的结果,但
collect
函数通常更明确并且专注于您想要实现的目标。