为什么 sympy.diff 不能按预期区分 sympy 多项式?

Joh*_*ell 4 python sympy polynomials

我想弄清楚为什么sympy.diff没有sympy按预期区分多项式。通常,sympy.diff如果定义了符号变量并且多项式未使用sympy.Poly. 但是,如果函数是使用 定义的sympy.Polysympy.diff似乎实际上并没有计算导数。下面是一个代码示例,显示了我的意思:

import sympy as sy

# define symbolic variables
x = sy.Symbol('x')
y = sy.Symbol('y')

# define function WITHOUT using sy.Poly
f1 = x + 1
# define function WITH using sy.Poly
f2 = sy.Poly(x + 1, x, domain='QQ')

# compute derivatives and return results
df1 = sy.diff(f1,x)
df2 = sy.diff(f2,x)
print('f1:  ',f1)
print('f2:  ',f2)
print('df1:  ',df1)
print('df2:  ',df2)
Run Code Online (Sandbox Code Playgroud)

这将打印以下结果:

f1:   x + 1
f2:   Poly(x + 1, x, domain='QQ')
df1:   1
df2:   Derivative(Poly(x + 1, x, domain='QQ'), x)
Run Code Online (Sandbox Code Playgroud)

为什么不sympy.diff知道如何微分sympy.Poly多项式的版本?有没有办法微分sympy多项式,或者有办法将sympy多项式转换成允许微分的形式?

注意:我尝试使用不同的域(即,domain='RR'而不是domain='QQ'),并且输出没有改变。

ptb*_*ptb 5

这似乎是一个错误。您可以通过diff直接调用Poly实例来绕过它。理想情况下,diff从顶级 sympy 模块调用函数应该产生与调用方法相同的结果diff

In [1]: from sympy import *

In [2]: from sympy.abc import x

In [3]: p = Poly(x+1, x, domain='QQ')

In [4]: p.diff(x)
Out[4]: Poly(1, x, domain='QQ')

In [5]: diff(p, x)
Out[5]: Derivative(Poly(x + 1, x, domain='QQ'), x)

In [6]: diff(p, x).doit()
Out[6]: Derivative(Poly(x + 1, x, domain='ZZ'), x)
Run Code Online (Sandbox Code Playgroud)