SymPy ODE 中的 Derivative() 或 diff()?

Derivative() or diff() in SymPy ODE?

在 Sympy 中 ODE 的定义(和解决方案)中使用 Derivative 而不是 diff 是否有充分的理由? diff 似乎做得很好:

diff 是一个“包装器”方法,它将实例化 Derivative class。所以,这样做:

from sympy import *
expr = x**2
expr.diff(x)

# out: 2*x

相当于做:

Derivative(expr, x).doit()

# out: 2*x

但是,Derivative class 可能有助于延迟导数的计算。例如:

Derivative(expr, x)

# out: Derivative(x**2, x)

但同样的事情也可以通过以下方式实现:

expr.diff(x, evaluate=False)

# out: Derivative(x**2, x)

因此,为了回答您的问题,在您提供的示例中,使用 diffDerivative 完全没有区别。

如果expr.diff(variable)可以计算,它将return一个Expr的实例(可以是符号,数字,乘法,加法,幂运算,取决于expr).否则,它将 return 一个 Derivative.

类型的对象

Derivative 对象表示未计算的导数。它永远不会评估,例如:

>>> Derivative(x**2, x)
Derivative(x**2, x)

diff 是一个总是尝试计算导数的函数。如果无法评估相关导数,它只是 returns 未评估的 Derivative 对象。

>>> diff(x**2, x)
2*x

由于未定义的函数总是不会计算导数的事物,Derivativediff 是相同的。

>>> diff(f(x), x)
Derivative(f(x), x)
>>> Derivative(f(x), x)
Derivative(f(x), x)

两者的区别仅在于可以计算导数的情况。对于 ODE,这意味着它通常无关紧要,除非您有类似以下内容且不想展开

>>> diff(x*f(x), x)
x*Derivative(f(x), x) + f(x)
>>> Derivative(x*f(x), x)
Derivative(x*f(x), x)