Hongyi Zhao on Mon, 16 Jan 2023 01:58:17 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: The companion matrix of a polynomial. |
On Sun, Jan 15, 2023 at 8:45 PM Hongyi Zhao <hongyi.zhao@gmail.com> wrote: > > On Sun, Jan 15, 2023 at 5:19 PM Bill Allombert > <Bill.Allombert@math.u-bordeaux.fr> wrote: > > > > On Sun, Jan 15, 2023 at 09:12:07AM +0800, Hongyi Zhao wrote: > > > On Sat, Jan 14, 2023 at 9:58 PM Charles Greathouse > > > <crgreathouse@gmail.com> wrote: > > > > > > > > I'm not at all sure what you're doing here. The GAP source > > > > https://github.com/gap-system/gap/blob/3d47e2bc40869ea1b232a0a658d47b1897880fec/lib/upolyirr.gi#L82 > > > > seems to require that the input to CompanionMat be a polynomial or a list of coefficients of a polynomial. It doesn't seem like it can do anything meaningful to a matrix. > > > > > > I want to get the companion matrix of matrix A in GP, which can be > > > generated in GAP, as shown below: > > > > > gap> A:=[[-1,3,-1,0,-2,0,0,-2], > > > > [-1,-1,1,1,-2,-1,0,-1], > > > > [-2,-6,4,3,-8,-4,-2,1], > > > > [-1,8,-3,-1,5,2,3,-3], > > > > [0,0,0,0,0,0,0,1], > > > > [0,0,0,0,-1,0,0,0], > > > > [1,0,0,0,2,0,0,0], > > > > [0,0,0,0,4,0,1,0]];; > > > gap> P:=RationalCanonicalFormTransform(A);; > > > gap> C:=A^P; > > > [ [ 0, 1, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, > > > 0, 0, 0, 0, -1 ], [ 0, 0, 1, 0, 0, 0, 0, -4 ], > > > [ 0, 0, 0, 1, 0, 0, 0, -4 ], [ 0, 0, 0, 0, 1, 0, 0, 2 ], [ 0, 0, 0, > > > 0, 0, 1, 0, 4 ], [ 0, 0, 0, 0, 0, 0, 1, 0 ] ] > > > > This is the rational canonical form (aka the Frobenius form), not the companion matrix. > > There are the following very similar concepts: > > https://encyclopediaofmath.org/wiki/Frobenius_matrix > https://en.wikipedia.org/wiki/Companion_matrix > > It seems to me that the explanation and form given in the links above > are no different from Frobenius form. > > > In GP, it is matfrobenius. There is a flag to the the transform. Read the doc. > > I calculated it as follows: > > ? M=[ -1,3,-1,0,-2,0,0,-2; > -1,-1,1,1,-2,-1,0,-1;-2,-6,4,3,-8,-4,-2,1;-1,8,-3,-1,5,2,3,-3;0,0,0,0,0,0,0,1;0,0,0,0,-1,0,0,0;1,0,0,0,2,0,0,0;0,0,0,0,4,0,1,0]; > > ? [F,B]=matfrobenius(A,2); > ? M==B^-1*F*B > %14 = 1 > ? F > %15 = > [0 0 0 0 0 -1 0 0] > > [1 0 0 0 0 -4 0 0] > > [0 1 0 0 0 -4 0 0] > > [0 0 1 0 0 2 0 0] > > [0 0 0 1 0 4 0 0] > > [0 0 0 0 1 0 0 0] > > [0 0 0 0 0 0 0 1] > > [0 0 0 0 0 0 1 1] > > > As you can see, the form above is not exactly the same as the result > of GAP and I tried to verify the isomorphism between them in GAP, but > failed: > > gap> P:=RationalCanonicalFormTransform(A);; > gap> C:=A^P; > [ [ 0, 1, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, > 0, 0, 0, 0, -1 ], [ 0, 0, 1, 0, 0, 0, 0, -4 ], > [ 0, 0, 0, 1, 0, 0, 0, -4 ], [ 0, 0, 0, 0, 1, 0, 0, 2 ], [ 0, 0, 0, > 0, 0, 1, 0, 4 ], [ 0, 0, 0, 0, 0, 0, 1, 0 ] ] > gap> F:=[[0,0,0,0,0,-1,0,0], > > [1,0,0,0,0,-4,0,0], > > [0,1,0,0,0,-4,0,0], > > [0,0,1,0,0,,2,0,0], > > [0,0,0,1,0,,4,0,0], > > [0,0,0,0,1,,0,0,0], > > [0,0,0,0,0,,0,0,1], > > [0,0,0,0,0,,0,1,1]]; > [ [ 0, 0, 0, 0, 0, -1, 0, 0 ], [ 1, 0, 0, 0, 0, -4, 0, 0 ], [ 0, 1, 0, > 0, 0, -4, 0, 0 ], [ 0, 0, 1, 0, 0,, 2, 0, 0 ], > [ 0, 0, 0, 1, 0,, 4, 0, 0 ], [ 0, 0, 0, 0, 1,, 0, 0, 0 ], [ 0, 0, 0, > 0, 0,, 0, 0, 1 ], [ 0, 0, 0, 0, 0,, 0, 1, 1 ] ] > gap> TransformingPermutations(F,C); > Error, no method found! For debugging hints type ?Recovery from NoMethodFound > Error, no 1st choice method found for `TransformingPermutations' on 2 > arguments at /home/werner/Public/repo/github.com/gap-system/gap.git/lib/methsel2.g:249 > called from > <function "HANDLE_METHOD_NOT_FOUND">( <arguments> ) > called from read-eval loop at *stdin*:36 > type 'quit;' to quit to outer loop > brk> Sorry, due to typo, there are several redundant commas in matrix F in my above test. In fact, they are isomorphic: gap> A:=[[-1,3,-1,0,-2,0,0,-2], > [-1,-1,1,1,-2,-1,0,-1], > [-2,-6,4,3,-8,-4,-2,1], > [-1,8,-3,-1,5,2,3,-3], > [0,0,0,0,0,0,0,1], > [0,0,0,0,-1,0,0,0], > [1,0,0,0,2,0,0,0], > [0,0,0,0,4,0,1,0]];; gap> P:=RationalCanonicalFormTransform(A);; gap> C:=A^P; [ [ 0, 1, 0, 0, 0, 0, 0, 0 ], [ 1, 1, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, -1 ], [ 0, 0, 1, 0, 0, 0, 0, -4 ], [ 0, 0, 0, 1, 0, 0, 0, -4 ], [ 0, 0, 0, 0, 1, 0, 0, 2 ], [ 0, 0, 0, 0, 0, 1, 0, 4 ], [ 0, 0, 0, 0, 0, 0, 1, 0 ] ] gap> F:=[[0,0,0,0,0,-1,0,0], > [1,0,0,0,0,-4,0,0], > [0,1,0,0,0,-4,0,0], > [0,0,1,0,0,2,0,0], > [0,0,0,1,0,4,0,0], > [0,0,0,0,1,0,0,0], > [0,0,0,0,0,0,0,1], > [0,0,0,0,0,0,1,1]];; gap> TransformingPermutations(F,C); rec( columns := (1,3,5,7)(2,4,6,8), group := Group([ (3,4) ]), rows := (1,3,5,7)(2,4,6,8) ) > > Any tips for this problem? > > > Cheers, > > Bill. > > Best, > Zhao