为什么 sympy.diff 没有像预期的那样区分 sympy 多项式?
Why does sympy.diff not differentiate sympy polynomials as expected?
我想弄清楚为什么 sympy.diff
没有按预期区分 sympy
多项式。通常,如果定义了符号变量并且未使用 sympy.Poly
定义多项式,sympy.diff
就可以正常工作。但是,如果函数是使用 sympy.Poly
定义的,sympy.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)
这将打印以下结果:
f1: x + 1
f2: Poly(x + 1, x, domain='QQ')
df1: 1
df2: Derivative(Poly(x + 1, x, domain='QQ'), x)
为什么 sympy.diff
不知道如何区分多项式的 sympy.Poly
版本?有没有办法对sympy
多项式进行微分,或者有办法将sympy
多项式转换成可以微分的形式?
注意:我尝试使用不同的域(即 domain='RR'
而不是 domain='QQ'
),但输出没有改变。
这似乎是一个错误。您可以通过直接在 Poly
实例上调用 diff
来绕过它。理想情况下,从顶层 sympy 模块调用函数 diff
应该产生与调用方法 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)
我想弄清楚为什么 sympy.diff
没有按预期区分 sympy
多项式。通常,如果定义了符号变量并且未使用 sympy.Poly
定义多项式,sympy.diff
就可以正常工作。但是,如果函数是使用 sympy.Poly
定义的,sympy.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)
这将打印以下结果:
f1: x + 1
f2: Poly(x + 1, x, domain='QQ')
df1: 1
df2: Derivative(Poly(x + 1, x, domain='QQ'), x)
为什么 sympy.diff
不知道如何区分多项式的 sympy.Poly
版本?有没有办法对sympy
多项式进行微分,或者有办法将sympy
多项式转换成可以微分的形式?
注意:我尝试使用不同的域(即 domain='RR'
而不是 domain='QQ'
),但输出没有改变。
这似乎是一个错误。您可以通过直接在 Poly
实例上调用 diff
来绕过它。理想情况下,从顶层 sympy 模块调用函数 diff
应该产生与调用方法 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)