Singular

Singular提供了大量的,成熟的关于Gröbner基,多元多项式最大公因式,平面曲线的Riemann-Roch空间的基,因式分解等内容的库函数。我们使用Sage的Singular接口展示多元多项式的因式分解(...不需要输入):

  1. sage: R1 = singular.ring(0, '(x,y)', 'dp')
  2. sage: R1
  3. // characteristic : 0
  4. // number of vars : 2
  5. // block 1 : ordering dp
  6. // : names x y
  7. // block 2 : ordering C
  8. sage: f = singular('9*y^8 - 9*x^2*y^7 - 18*x^3*y^6 - 18*x^5*y^6 + '
  9. ....: '9*x^6*y^4 + 18*x^7*y^5 + 36*x^8*y^4 + 9*x^10*y^4 - 18*x^11*y^2 - '
  10. ....: '9*x^12*y^3 - 18*x^13*y^2 + 9*x^16')

现在已经定义了$f$, 我们输出它和它的因式。

  1. sage: f
  2. 9*x^16-18*x^13*y^2-9*x^12*y^3+9*x^10*y^4-18*x^11*y^2+36*x^8*y^4+18*x^7*y^5-18*x^5*y^6+9*x^6*y^4-18*x^3*y^6-9*x^2*y^7+9*y^8
  3. sage: f.parent()
  4. Singular
  5. sage: F = f.factorize(); F
  6. [1]:
  7. _[1]=9
  8. _[2]=x^6-2*x^3*y^2-x^2*y^3+y^4
  9. _[3]=-x^5+y^2
  10. [2]:
  11. 1,1,2
  12. sage: F[1][2]
  13. x^6-2*x^3*y^2-x^2*y^3+y^4

GAP中GAP的例子一样,我们可以不用明确的调用Singular来进行上面的因式分解(但是Sage在后台调用了Singular接口进行实际的计算)。

  1. sage: x, y = QQ['x, y'].gens()
  2. sage: f = (9*y^8 - 9*x^2*y^7 - 18*x^3*y^6 - 18*x^5*y^6 + 9*x^6*y^4
  3. ....: + 18*x^7*y^5 + 36*x^8*y^4 + 9*x^10*y^4 - 18*x^11*y^2 - 9*x^12*y^3
  4. ....: - 18*x^13*y^2 + 9*x^16)
  5. sage: factor(f)
  6. (9) * (-x^5 + y^2)^2 * (x^6 - 2*x^3*y^2 - x^2*y^3 + y^4)