用 Sympy 分解一些数字域上的单变量多项式
Factorization of univariate polynomials over some number field with Sympy
我正在使用 Sympy 在一些扩展域上分解多元多项式。
如果我可以将单变量多项式分解为实数,我想我会有一个工作代码。对于我的代码,这让我在 'QQ' 上分解一个单变量多项式,如果需要的话,在一些数字字段上分解。
我现在的方法是在 'QQ' 上定义这些单变量多项式,然后查看根并确定每个根是否为实数。如果它是真实的,我将需要的项添加到 'QQ',然后让 Sympy 进行因式分解。这意味着我尝试自动执行以下步骤:
- f=Poly((x^2-3)*(x^2-5),x,domain='QQ')
- 求解(f,x)
- (给出 [-sqrt(3),sqrt(3),-sqrt(5),sqrt(5)])
- f.factor(f,extension=[sqrt(3),sqrt(5)])
(..或其他方式,但我认为具有相似的步骤和运行时间)
这当然有很长的运行时间,因为你有点两次计算因素。还有很多例外情况我也需要考虑。
长话短说:有没有办法让 Sympy 分解 'QQ' 上的多项式并允许它在需要时进行一些扩展?
是否有类似 f.factor(numberfield=True) 的内容?
提前致谢!!
这是计划中的,但尚未实施(从 1.2 版开始)。参见 Factoring polynomials into linear factors(强调我的):
Currently SymPy can factor polynomials into irreducibles over various domains, which can result in a splitting factorization (into linear factors). However, there is currently no systematic way to infer a splitting field (algebraic number field) automatically. In future the following syntax will be implemented:
factor(x**3 + x**2 - 7, split=True)
Note this is different from extension=True, because the later only tells how expression parsing should be done, not what should be the domain of computation. One can simulate the split keyword for several classes of polynomials using solve()
function.
...最后一句是指你现在正在做的事情。
我正在使用 Sympy 在一些扩展域上分解多元多项式。
如果我可以将单变量多项式分解为实数,我想我会有一个工作代码。对于我的代码,这让我在 'QQ' 上分解一个单变量多项式,如果需要的话,在一些数字字段上分解。
我现在的方法是在 'QQ' 上定义这些单变量多项式,然后查看根并确定每个根是否为实数。如果它是真实的,我将需要的项添加到 'QQ',然后让 Sympy 进行因式分解。这意味着我尝试自动执行以下步骤:
- f=Poly((x^2-3)*(x^2-5),x,domain='QQ')
- 求解(f,x)
- (给出 [-sqrt(3),sqrt(3),-sqrt(5),sqrt(5)])
- f.factor(f,extension=[sqrt(3),sqrt(5)])
(..或其他方式,但我认为具有相似的步骤和运行时间)
这当然有很长的运行时间,因为你有点两次计算因素。还有很多例外情况我也需要考虑。
长话短说:有没有办法让 Sympy 分解 'QQ' 上的多项式并允许它在需要时进行一些扩展?
是否有类似 f.factor(numberfield=True) 的内容?
提前致谢!!
这是计划中的,但尚未实施(从 1.2 版开始)。参见 Factoring polynomials into linear factors(强调我的):
Currently SymPy can factor polynomials into irreducibles over various domains, which can result in a splitting factorization (into linear factors). However, there is currently no systematic way to infer a splitting field (algebraic number field) automatically. In future the following syntax will be implemented:
factor(x**3 + x**2 - 7, split=True)
Note this is different from extension=True, because the later only tells how expression parsing should be done, not what should be the domain of computation. One can simulate the split keyword for several classes of polynomials using
solve()
function.
...最后一句是指你现在正在做的事情。