diff

diff(m,n) -- differentiate the matrix n by the matrix m
diff P -- compute the difference polynomial for a projective Hilbert polynomial, see ProjectiveHilbertPolynomial.
diff(P,i) -- compute the i-th difference polynomial for a projective Hilbert polynomial, see ProjectiveHilbertPolynomial.

Given matrices m : F0 <--- F1, and n : G0 <--- G1, produce a matrix with the shape diff(m,n) : F0' ** G0 <--- F1' ** G1, whose entry in the slot ((i,j),(k,l)) is the result of differentiating n_(j,l) by the differential operator corresponding to m_(i,k).

If m or n is a ring element, then it is interpreted as a one-by-one matrix. If m is a vector, it is interpreted as a matrix with one column, and if n is a vector, it is interpreted as a matrix with one row. If both m and n are ring elements, then the result will be a ring element rather than a one-by-one matrix. If m is a vector and n is a ring element, then the result will be a vector rather than a matrix with one column.

     i1 = R = ZZ/101[a..d]
     
     o1 = R
     
     o1 : PolynomialRing
     
     i2 = m = genericMatrix(R,a,2,2)
     
     o2 = | a c |
          | b d |
     
                  2       2
     o2 : Matrix R  <--- R
     
     i3 = diff(transpose m,m*m)
     
     o3 = | 2a c   c   0  |
          | b  0   a+d c  |
          | b  a+d 0   c  |
          | 0  b   b   2d |
     
                  4       4
     o3 : Matrix R  <--- R
     

The most common usage of this function is when m : F <--- R^1 and n : R^1 <--- G. In this case the result is a matrix with shape diff(m,n) : F' <--- G, and the (i,j) th entry is the result of differentiating n_j by the differential operator corresponding to m_i.

     i4 = m = matrix {{a,b,c,d}}
     
     o4 = | a b c d |
     
                  1       4
     o4 : Matrix R  <--- R
     
     i5 = n = matrix {{a^2, (b + c)*(a + d), a*b*c}}
     
     o5 = | a2 ab+ac+bd+cd abc |
     
                  1       3
     o5 : Matrix R  <--- R
     
     i6 = p = diff(transpose m,n)
     
     o6 = | 2a b+c bc |
          | 0  a+d ac |
          | 0  a+d ab |
          | 0  b+c 0  |
     
                  4       3
     o6 : Matrix R  <--- R
     
     i7 = target p
     
           4
     o7 = R
     
          R - module, free
     
     i8 = source p
     
           3
     o8 = R
     
          R - module, free
     

As another example, we show how to compute the Wronskian of a polynomial f.

     i9 = R = ZZ/101[a, x .. z]
     
     o9 = R
     
     o9 : PolynomialRing
     
     i10 = f = matrix {{x^3 + y^3 + z^3 - a*x*y*z}}
     
     o10 = | -axyz+x3+y3+z3 |
     
                   1       1
     o10 : Matrix R  <--- R
     
     i11 = v = matrix {{x,y,z}}
     
     o11 = | x y z |
     
                   1       3
     o11 : Matrix R  <--- R
     
     i12 = W = diff(transpose v * v, f)
     
     o12 = | 6x  -az -ay |
           | -az 6y  -ax |
           | -ay -ax 6z  |
     
                   3       3
     o12 : Matrix R  <--- R
     
     i13 = Wf = minors(3,W)
     
     o13 = ideal | -2a3xyz-6a2x3-6a2y3-6a2z3+14xyz |
     
     o13 : Ideal
     

See also contract and jacobian.

Go to main index.

Go to concepts index.