Python 辛复形上多项式的全因式分解
我想完全分解一个多项式 SymPy提供了Python 辛复形上多项式的全因式分解,python,math,sympy,polynomial-math,Python,Math,Sympy,Polynomial Math,我想完全分解一个多项式 SymPy提供了因子来执行此操作,但我非常惊讶的是,因子分解仅在整数根上执行,例如: 来自sympy导入的>>* >>>z=符号('z') >>>系数(z**2-1,z) (z-1)*(z+1) >>>系数(z**2+1,z) z**2+1 或 >因子(2*z-1,z) 2*z-1 >>>因子(2*z-1,z,扩展=[整数(1)/2]) 2*(z-1/2) 已经存在一个已回答的问题:,阿斯穆勒给出的解决方案有效: 因子(z**2+1,z,扩展=[I]) (z-I)*(
因子
来执行此操作,但我非常惊讶的是,因子分解仅在整数根上执行,例如:
来自sympy导入的>>*
>>>z=符号('z')
>>>系数(z**2-1,z)
(z-1)*(z+1)
>>>系数(z**2+1,z)
z**2+1
或
>因子(2*z-1,z)
2*z-1
>>>因子(2*z-1,z,扩展=[整数(1)/2])
2*(z-1/2)
已经存在一个已回答的问题:,阿斯穆勒给出的解决方案有效:
因子(z**2+1,z,扩展=[I])
(z-I)*(z+I)
但您需要指定非整数根的每个除数,例如:
>>因子(z**2+2,z,扩展=[I])
z**2+2
>>>因子(z**2+2,z,扩展=[I,sqrt(2)])
(z-sqrt(2)*I)*(z+sqrt(2)*I)
我的问题是:如何完全分解多项式(因此在复数上),而不需要给扩展
asmeurer提供了一个解决方案:
poly=z**2+2
>>>r=根(多边形,z)
>>>LC(poly,z)*Mul(*[(z-a)**r[a]代表r中的a])
/ ___ \ / ___ \
\z-\/2*I/*\z+\/2*I/
但是它应该有一种本地的方式来做,不是吗?
类似于因子(poly,z,complex=True)
我在房间里找,但什么也没找到。
此外,factor
可以将domain
作为可选参数,我认为该参数允许指定进行因式分解的集合,但不允许
>>因子(z**2+2,z,domain='z')
2.
z+2
>>>因子(z**2+2,z,domain='R')
/ 2 \
2.0*\0.5*z+1.0/
>>>系数(z**2+2,z,域='C')
2.
1.0*z+2.0
域参数应该有效,在高斯有理数的情况下,您也可以使用Gaussian=True
,这相当于extension=I
:
In [24]: factor(z**2 + 1, gaussian=True)
Out[24]: (z - ⅈ)⋅(z + ⅈ)
但这在您的情况下不起作用,因为分解需要在QQ(I,sqrt(2))
之上,而不是QQ(I)
。域'R'
和'C'
不能按预期工作的原因是,它们是不精确的浮点域,而不是在纯数学意义上表示实数或复数的域,并且分解是不精确的
但是,上述方法可以与
In [28]: e = z**2 + 2
In [29]: factor(e, extension=roots(e))
Out[29]: (z - √2⋅ⅈ)⋅(z + √2⋅ⅈ)
域参数应该有效,在高斯有理数的情况下,您也可以使用Gaussian=True
,这相当于extension=I
:
In [24]: factor(z**2 + 1, gaussian=True)
Out[24]: (z - ⅈ)⋅(z + ⅈ)
但这在您的情况下不起作用,因为分解需要在QQ(I,sqrt(2))
之上,而不是QQ(I)
。域'R'
和'C'
不能按预期工作的原因是,它们是不精确的浮点域,而不是在纯数学意义上表示实数或复数的域,并且分解是不精确的
但是,上述方法可以与
In [28]: e = z**2 + 2
In [29]: factor(e, extension=roots(e))
Out[29]: (z - √2⋅ⅈ)⋅(z + √2⋅ⅈ)
这正是我想要的解决方案!但事实上,我从另一个问题中得到了这个问题,这个问题是关于平方根符号根的因式分解,所以我创建了另一个问题:。也许你也能帮我一个这个:-)。这正是我想要的解决方案!但事实上,我从另一个问题中得到了这个问题,这个问题是关于平方根符号根的因式分解,所以我创建了另一个问题:。也许你也能帮我一个这个:-)。