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)
因此,为了回答您的问题,在您提供的示例中,使用 diff
与 Derivative
完全没有区别。
如果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
由于未定义的函数总是不会计算导数的事物,Derivative
和 diff
是相同的。
>>> 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)
在 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)
因此,为了回答您的问题,在您提供的示例中,使用 diff
与 Derivative
完全没有区别。
如果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
由于未定义的函数总是不会计算导数的事物,Derivative
和 diff
是相同的。
>>> 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)