contract
usage: contract(m, n) -- contract the matrix n by the matrix m
This function is identical to diff, except that contraction is
used instead of differentiation. This means for example that x^3
contracted by x^2 is x, not 6 x. For example,
i1 : R = ZZ/101[a..c]
o1 = R
o1 : PolynomialRing |
i2 : diff(transpose matrix {{a,b,c}}, matrix {{(a+b+c)^3, a^2 * b^3 * c^2}})
o2 = {1} | 3a2+6ab+3b2+6ac+6bc+3c2 2ab3c2 |
{1} | 3a2+6ab+3b2+6ac+6bc+3c2 3a2b2c2 |
{1} | 3a2+6ab+3b2+6ac+6bc+3c2 2a2b3c |
3 2
o2 : Matrix R <--- R |
As another example, the Sylvester resultant between homogeneous polynomials
f(x,y) and g(x,y) can be found in the following way.
i3 : R = (ZZ/101[a,b])[x,y]
o3 = R
o3 : PolynomialRing |
i4 : f = a * x^3 + b * x^2 * y + y^3
3 2 3
o4 = a*x + b*x y + y
o4 : R |
i5 : g = b * x^3 + a * x * y^2 + y^3
3 2 3
o5 = b*x + a*x*y + y
o5 : R |
Multiply each of these by all quadrics, obtaining a set of elements in
degree 5:
i6 : n = matrix {{f,g}} ** symmetricPower(2,vars R)
o6 = {0} | ax5+bx4y+x2y3 ax4y+bx3y2+xy4 ax3y2+bx2y3+y5 bx5+ax3y2+x2y3 bx4y+ax2y3+xy4 bx3y2+axy4+y5 |
1 6
o6 : Matrix R <--- R |
Now create the matrix of coefficients by using contract against all
monomials of degree 5 in x and y.
i7 : M = contract(transpose symmetricPower(5,vars R), n)
o7 = {5} | a 0 0 b 0 0 |
{5} | b a 0 0 b 0 |
{5} | 0 b a a 0 b |
{5} | 1 0 b 1 a 0 |
{5} | 0 1 0 0 1 a |
{5} | 0 0 1 0 0 1 |
6 6
o7 : Matrix R <--- R |
i8 : Resfg = minors(6, M)
5 2 3 3 2 2 3 4 3 2 2 3
o8 = ideal(- a - a b - a b - a b + 2a*b - b + a - 3a b + 3a*b - b )
o8 : Ideal of R |
See also diff.



