is in Kronecker normal form. The optional parameters
, 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
|