1

我正在使用 Sympy 在一些扩展字段上分解多元多项式。

如果我可以将单变量多项式分解为实数,我想我会有一个工作代码。对于我的代码,这使我不得不在“QQ”上分解单变量多项式,如果需要,在某个数字字段上分解。

我现在的方法是在“QQ”上定义这些单变量多项式,然后查看根并确定每个根是否为真。如果它是真实的,我会在“QQ”中添加所需的术语,然后让 Sympy 考虑因素。这意味着我尝试自动化以下步骤:

  1. f=Poly((x^2-3)*(x^2-5),x,domain='QQ')
  2. 解决(f,x)
  3. (给出 [-sqrt(3),sqrt(3),-sqrt(5),sqrt(5)])
  4. f.factor(f,extension=[sqrt(3),sqrt(5)])

(..或其他方式,但我认为具有类似的步骤和运行时间)

这当然有很长的运行时间,因为您需要两次计算因子。还有很多我需要考虑的例外情况。

长话短说:有没有办法让 Sympy 将多项式分解为 'QQ' 并允许它在需要时进行一些扩展?

有没有像 f.factor(numberfield=True) 这样的东西?

先感谢您!!

4

1 回答 1

0

这是计划中的,但尚未实施(从 1.2 版开始)。请参阅将多项式分解为线性因子(强调我的):

目前 SymPy 可以将多项式分解为各个域上的不可约数,这可能导致分解分解(分解为线性因子)。然而,目前还没有系统的方法来自动推断分裂域(代数域)。将来将实现以下语法:

factor(x**3 + x**2 - 7, split=True)

请注意,这与 extension=True 不同,因为后者只告诉表达式解析应该如何进行,而不是计算域应该是什么。solve()可以使用函数模拟几类多项式的 split 关键字。

...最后一句是指您现在正在做的事情。

于 2018-08-29T14:00:52.603 回答