Macaulay2 » Documentation
Packages » Kronecker :: kroneckerNormalForm
next | previous | forward | backward | up | index | toc

kroneckerNormalForm -- Kronecker normal form of a matrix of linear forms

Synopsis

Description

This function produces a matrix of linear forms B, and invertible matrices P and Q such that B = P*A*Q and B is in Kronecker normal form. The optional parameters x and y, if given, should be complementary linear forms. They are used to fill in nonzero entries of all blocks in the Kronecker normal form for which there is a choice of which linear forms to use. If they are not given, they are assumed to be the first two variables of the ring.
i1 : R = ZZ/101[x,y]

o1 = R

o1 : PolynomialRing
i2 : A = matrix{{x,y,x,y},{y,x,y,x},{x,y,x,y},{y,y,y,y},{x,x,y,y}}

o2 = | x y x y |
     | y x y x |
     | x y x y |
     | y y y y |
     | x x y y |

             5      4
o2 : Matrix R  <-- R
i3 : (B,P,Q) = kroneckerNormalForm A

o3 = (| 0 0 0   0   |, | -1 0  1  0  0 |, {1} | -1 1 1  1  |)
      | 0 x 0   0   |  | 0  1  1  -1 0 |  {1} | 1  0 0  -1 |
      | 0 y 0   0   |  | 0  0  0  1  0 |  {1} | 1  0 -1 0  |
      | 0 0 x-y 0   |  | 0  -1 -1 1  1 |  {1} | -1 0 0  0  |
      | 0 0 0   x-y |  | 0  -1 0  1  0 |

o3 : Sequence
i4 : B - P*A*Q == 0

o4 = true
i5 : kroneckerNormalForm(A, ChangeMatrix => {true,false})

o5 = (| 0 0 0   0   |, | -1 0  1  0  0 |)
      | 0 x 0   0   |  | 0  1  1  -1 0 |
      | 0 y 0   0   |  | 0  0  0  1  0 |
      | 0 0 x-y 0   |  | 0  -1 -1 1  1 |
      | 0 0 0   x-y |  | 0  -1 0  1  0 |

o5 : Sequence
i6 : kroneckerNormalForm(A, ChangeMatrix => {false,true})

o6 = (| 0 0 0   0   |, {1} | -1 1 1  1  |)
      | 0 x 0   0   |  {1} | 1  0 0  -1 |
      | 0 y 0   0   |  {1} | 1  0 -1 0  |
      | 0 0 x-y 0   |  {1} | -1 0 0  0  |
      | 0 0 0   x-y |

o6 : Sequence
i7 : kroneckerNormalForm(A, ChangeMatrix => {false,false})

o7 = | 0 0 0   0   |
     | 0 x 0   0   |
     | 0 y 0   0   |
     | 0 0 x-y 0   |
     | 0 0 0   x-y |

             5      4
o7 : Matrix R  <-- R
i8 : (B,P,Q) = kroneckerNormalForm(A,x+y,x-y)

o8 = (| 0 0   0   0   |, | -1 0  1  0 0 |, {1} | -1 -2 1  1  |)
      | 0 x+y 0   0   |  | 0  50 50 0 0 |  {1} | 1  0  0  -1 |
      | 0 x-y 0   0   |  | 0  50 50 1 0 |  {1} | 1  0  -1 0  |
      | 0 0   x-y 0   |  | 0  -1 -1 1 1 |  {1} | -1 0  0  0  |
      | 0 0   0   x-y |  | 0  -1 0  1 0 |

o8 : Sequence
i9 : B - P*A*Q == 0

o9 = true

Ways to use kroneckerNormalForm :

For the programmer

The object kroneckerNormalForm is a method function with options.