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 |
The object kroneckerNormalForm is a method function with options.