First we illustrate multivariate polynomial factorization:
sage: R1 = singular.ring(0, '(x,y)', 'dp') sage: R1 // characteristic : 0 // number of vars : 2 // block 1 : ordering dp // : names x y // block 2 : ordering C sage: f = singular('9x16 - 18x13y2 - 9x12y3 + 9x10y4 - 18x11y2 + 36x8y4 + 18x7y5 - 18x5y6 + 9x6y4 - 18x3y6 - 9x2y7 + 9y8') sage: f 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 sage: f.parent() Singular
sage: F = f.factorize(); F [1]: _[1]=9 _[2]=x^6-2*x^3*y^2-x^2*y^3+y^4 _[3]=-x^5+y^2 [2]: 1,1,2
sage: F[1] 9, x^6-2*x^3*y^2-x^2*y^3+y^4, -x^5+y^2 sage: F[1][2] x^6-2*x^3*y^2-x^2*y^3+y^4
We can convert
and each exponent back to SAGE objects as well.
sage: x, y = MPolynomialRing(RationalField(), 2).gens() sage: g = eval(f.sage_polystring()); g 9*x1^8 - 9*x0^2*x1^7 - 18*x0^3*x1^6 - 18*x0^5*x1^6 + 9*x0^6*x1^4 + 18*x0^7*x1^5 + 36*x0^8*x1^4 + 9*x0^10*x1^4 - 18*x0^11*x1^2 - 9*x0^12*x1^3 - 18*x0^13*x1^2 + 9*x0^16 sage: eval(F[1][2].sage_polystring()) x1^4 - x0^2*x1^3 - 2*x0^3*x1^2 + x0^6
This example illustrates polynomial GCD's:
sage: R2 = singular.ring(0, '(x,y,z)', 'lp') sage: a = singular.new('3x2*(x+y)') sage: b = singular.new('9x*(y2-x2)') sage: g = a.gcd(b) sage: g x^2+x*y
This example illustrates computation of a Groebner basis:
sage: R3 = singular.ring(0, '(a,b,c,d)', 'lp') sage: I = singular.ideal(['a + b + c + d', 'a*b + a*d + b*c + c*d', 'a*b*c + a*b*d + a*c*d + b*c*d', 'a*b*c*d - 1']) sage: I2 = I.groebner() sage: I2 c^2*d^6-c^2*d^2-d^4+1, c^3*d^2+c^2*d^3-c-d, b*d^4-b+d^5-d, b*c-b*d^5+c^2*d^4+c*d-d^6-d^2, b^2+2*b*d+d^2, a+b+c+d
The following example is the same as the one in the Singular - Gap interface documentation:
sage: R = singular.ring(0, '(x0,x1,x2)', 'lp') sage: I1 = singular.ideal(['x0*x1*x2 -x0^2*x2', 'x0^2*x1*x2-x0*x1^2*x2-x0*x1*x2^2', 'x0*x1-x0*x2-x1*x2']) sage: I2 = I1.groebner() sage: I2 x1^2*x2^2, x0*x2^3-x1^2*x2^2+x1*x2^3, x0*x1-x0*x2-x1*x2, x0^2*x2-x0*x1*x2
This example illustrates moving a polynomial from one ring to another. It also illustrates calling a method of an object with an argument.
sage: R = singular.ring(0, '(x,y,z)', 'dp') sage: f = singular('x3+y3+(x-y)*x2y2+z2') sage: f x^3*y^2-x^2*y^3+x^3+y^3+z^2 sage: R1 = singular.ring(0, '(x,y,z)', 'ds') sage: f = R.fetch(f) sage: f z^2+x^3+y^3+x^3*y^2-x^2*y^3
We can calculate the Milnor number of
:
sage: _=singular.LIB('sing.lib') # assign to _ to suppress printing sage: f.milnor() 4
The Jacobian applied twice yields the Hessian matrix of
,
with which we can compute.
sage: H = f.jacob().jacob() sage: H 6*x+6*x*y^2-2*y^3,6*x^2*y-6*x*y^2, 0, 6*x^2*y-6*x*y^2, 6*y+2*x^3-6*x^2*y,0, 0, 0, 2 sage: H.det() 72*x*y+24*x^4-72*x^3*y+72*x*y^3-24*y^4-48*x^4*y^2+64*x^3*y^3-48*x^2*y^4
The 1x1 and 2x2 minors:
sage: H.minor(1) 2, 6*y+2*x^3-6*x^2*y, 6*x^2*y-6*x*y^2, 6*x^2*y-6*x*y^2, 6*x+6*x*y^2-2*y^3 sage: H.minor(2) 12*y+4*x^3-12*x^2*y, 12*x^2*y-12*x*y^2, 12*x^2*y-12*x*y^2, 12*x+12*x*y^2-4*y^3, -36*x*y-12*x^4+36*x^3*y-36*x*y^3+12*y^4+24*x^4*y^2-32*x^3*y^3+24*x^2*y^4
sage: _=singular.eval('option(redSB)') sage: H.minor(1).groebner() 1
See About this document... for information on suggesting changes.