# contract(Matrix,Matrix) -- contract a matrix by a matrix

## Synopsis

• Function: contract
• Usage:
h = contract(m,n)
• Inputs:
• m, , a map m : F <--- P between free modules of ranks f and p.
• n, , a map n : G <--- Q between free modules of ranks g and q.
• Outputs:
• h, , the contraction of n by m, a matrix with the shape h : dual F ** G <--- dual P ** Q, whose entry in the slot hg*i+j,q*k+l is the result of contracting nj,l, by mi,k

## Description

The arguments can also be ring elements or vectors.
 i1 : R = ZZ[x,y,z] o1 = R o1 : PolynomialRing i2 : f = vars R ** vars R o2 = | x2 xy xz xy y2 yz xz yz z2 | 1 9 o2 : Matrix R <--- R i3 : contract(transpose vars R, f) o3 = {1} | x y z y 0 0 z 0 0 | {1} | 0 x 0 x y z 0 z 0 | {1} | 0 0 x 0 0 y x y z | 3 9 o3 : Matrix R <--- R i4 : contract(x, f) o4 = | x y z y 0 0 z 0 0 | 1 9 o4 : Matrix R <--- R i5 : contract(y, f) o5 = | 0 x 0 x y z 0 z 0 | 1 9 o5 : Matrix R <--- R i6 : contract(z, f) o6 = | 0 0 x 0 0 y x y z | 1 9 o6 : Matrix R <--- R

This function is identical to diff(Matrix,Matrix), except that the multiplication by integers that occurs during differentiation is omitted.