Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

How to solve a quintic only using matrix algebra

1 view
Skip to first unread message

Marc Bogaerts

unread,
Oct 3, 2010, 10:26:06 AM10/3/10
to
In the following session I describe how to use matrix algebra (with GAP)
of how to solve the quintic x^5-2*x^4+2*x^3-x^2+1 which I obtained
from this web page:
http://world.std.com/~jmccarro/math/GaloisGroups/GaloisGroupPolynomials.html

I start constructing the "companion algebra" of the polynomial.

This algebra is a generalization of the notion "companion matrix" in the
following sense:

The algebra generated by the companion 5x5 matrix M is used as a
coefficient field to construct an algebra of matrices. Since the given
polynomial is reducible over this new algebra, it contains now the
factor x-M, a new polynomial is obtained by dividing out this factor.

A new companion matrix N, based on this polynomial is made and gives a
4x4 block matrix, with 5x5 matrices as coefficients, to yield a global
20x20 matrix. The former matrix M is "promoted" to a 20x20 matrix by
constructing a scalar 4x4 block matrix. The matrices M and N generate a
new matrix algebra, that is used to repeat the same scenario over again.
Repeating this procedure until it ends in an algebra of
120x120 matrices gives us 5 "roots" for the given polynomial.

As pointed out rightly by Mr. Magidin this algebra is not a field, so it
must contain zero divisors. Finding a zero divisor of the right rank
will permit us to construct the splitting field of the polynomial as a
matrix algebra, and, if the Galois group is solvable, to calculate the
roots expessed by radical forms.

Here is the session using the GAP program, but I'm sure other programs
like Magma or Mathematica will permit the same calculations. Some of the
calculations are not stated explicitly, and only the results are shown:

gap> # calculation of the companion algebra of the polynomial gives rc:
gap> M:=rc.mats[1];;
gap> N:=rc.mats[2];;
gap> P:=rc.mats[3];;
gap> Q:=rc.mats[4];;
gap> R:=rc.mats[5];;
gap> Display(minpol); # a function I wrote to shorten a much longer command.
function ( x )
return MinimalPolynomial( Rationals, x );
end
gap> pol:=minpol(M);
x^5-2*x^4+2*x^3-x^2+1

This is indeed the polynomial studied.

gap> GaloisType(pol);
2
gap> StructureDescription(TransitiveGroup(5,2));
"D10"
The Galois group is verly likely to be the dihedral group with 10 elements.

# check if the matrices are "roots" for the given polynomial:
gap> Value(pol, M)=M*0;
true
gap> Value(pol, N)=M*0;
true
gap> Value(pol, P)=M*0;
true
gap> Value(pol, Q)=M*0;
true
gap> Value(pol, R)=M*0;
true
gap> A:=Algebra(Rationals,[M,N,P,Q,R]);
<algebra over Rationals, with 5 generators>
gap> Dimension(A);
120
gap> # look for an element i that has determinant zero:
gap> Determinant(i);
0
gap> Rank(i);
110

We will now determine the kernel of this matrix and construct a
new basis such that the first elements are a basis of the null space.
After that the matrices of algebra are transformed to this new basis.
It is not difficult to see that the ideal generated by i gives rise
to matrices which have zero submatrices in the upper left 10x10 block.
Since all matrices commute, the matrices M, N, .. all leave this
null space invariant, thus it makes sense to cut out only the left upper
10x10 block and throw the rest in the bin.

gap> ei :=NullspaceMat(i);; # a basis
for the nullspace
gap> ei:=Concatenation(ei, Basis(VectorSpace(Rationals,i)));; #
complement this basis
gap> # extract the "upper block" from
gap> # M, N, P, R and Q, after transforming to the nullspace of i:
gap> M:=extract(ei*M*ei^-1,[1..10],[1..10]); # I'll show only this one
[ [ 0, 0, 0, 0, -1, 0, 0, 0, 0, 0 ], [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 1, 0, 0, 1, 0, 0, 0, 0, 0 ], [ 0, 0, 1, 0, -2, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 1, 2, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, -1 ],
[ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 1, 0, 0, 1 ],
[ 0, 0, 0, 0, 0, 0, 0, 1, 0, -2 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 1, 2 ] ]
gap> N:=extract(ei*N*ei^-1,[1..10],[1..10]);;
gap> P:=extract(ei*P*ei^-1,[1..10],[1..10]);;
gap> Q:=extract(ei*Q*ei^-1,[1..10],[1..10]);;
gap> R:=extract(ei*R*ei^-1,[1..10],[1..10]);;

We now construct a basis for the algebra generated by the matrices M, N..
ideal candidates are the matrices I, M, M^2, M^3, M^4, N, N*M, N*M^2,
N*M^3, N*N^4

gap> basis:=[M^0,M,M^2,M^3,M^4];;
gap> basis:=Concatenation(basis,N*basis);;
gap> A:=Algebra(Rationals,basis);
<algebra over Rationals, with 10 generators>
gap> Dimension(A);
10
gap> basis:=Basis(A,basis);;
gap> tovec:=function(x) return Coefficients(basis,x); end; # a function
to express matrices
# as vectors
function( x ) ... end
We now construct one of the generators of the Galois group. We map M to N
gap> valphi:=[N^0,N,N^2,N^3,N^4];;
gap> valphi:=Concatenation(valphi, P*valphi);; # and try to map N to P
gap> phi:=List(valphi, tovec);; Convert the action to vector form:
gap> Order(phi);
infinity

Ooops, this does not work, so we can't Map N to P, let's try Q

gap> valphi:=[N^0,N,N^2,N^3,N^4];;
gap> valphi:=Concatenation(valphi, Q*valphi);;
gap> phi:=List(valphi, tovec);;
gap> Order(phi);
5

That's better, let's see to what Q is mapped, is it to P or to R?

gap> tovec(Q)*phi=tovec(P);
false
gap> tovec(Q)*phi=tovec(R);
true

Q is mapped to R, so nomally R should map to P.

gap> tovec(R)*phi=tovec(P);
true
gap> tovec(P)*phi=tovec(M); # and P back to M;
true
gap> # so phi maps M->N->Q->R->P, we need a second generator psi for the
Galois group:
gap> valpsi:=[N^0,N,N^2,N^3,N^4];; It should map to N
gap> valpsi:=Concatenation(valpsi, M*valpsi);;
gap> psi:=List(valpsi,tovec);;
gap> Order(psi);
2

The right order. Lets see what happens to P, Q and R

gap> tovec(P)*psi=tovec(Q);
true
gap> tovec(R)*psi=tovec(R);
true
gap> # so psi maps M<->N an P<->Q and leaves R invariant;

Let's construct the Galois group:

gap> G:=Group(phi,psi);
<matrix group with 2 generators>
gap> StructureDescription(G);
"D10"
gap> # just as expected; Let' pick a non trivial subgroup.
gap> norm:=NormalSubgroups(G);
[ <group of 10x10 matrices of size 1 in characteristic 0>, <group of
10x10 matrices of size
5 in characteristic 0>, <group of 10x10 matrices of size 10 in
characteristic 0> ]
gap> H:=norm[2];
<group of 10x10 matrices of size 5 in characteristic 0>
gap> StructureDescription(H);
"C5"
gap> H.1=phi;
true
gap> I:=M^0;;

It is now possible to construct the subfield corresponding to the subgroup H
as the eigenspace of the eigenvalue of the generator phi of H:

gap> V1:=space(NullspaceIntMat(phi-I));
<vector space over Rationals, with 2 generators>
gap> Dimension(V1);
2

As expected. The action of the galois group on this field is that of the
subgroup
generated by psi, so it mus contain an eigenvector of psi with
eigenvalue -1:

gap> V2:=space(NullspaceIntMat(psi+I));
<vector space over Rationals, with 5 generators>
gap> V:=Intersection(V1,V2);
<vector space of dimension 1 over Rationals>
gap> List(Basis(V));
[ [ 1, -10, 12, -8, 4, -6, 6, -8, -2, 2 ] ]
gap> v:=last[1];;

this element corresponds to a matrix that is invariant for phi and
and is an eigenvector for phi with eigenvalue -1. The square
of the matrix is invarint for the Galois group so should belong to
the base field, let's check:

gap> tomat(v)^2;
[ [ -47, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, -47, 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, -47, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, -47, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, -47, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, -47, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, -47, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, -47, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0, -47, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, -47 ] ]
gap> D:=tomat(v);; # this matrix corresponds to the value Sqrt(-47);
gap> minpol(D);
x^2+47
gap> w:=E(5);; # a 5th root of unity

We will now construct the Lagrange resolvents, these are
the eigenvectors corresponding to the
eigenvalues of w, w^2, w^3, w^4 of phi

gap> R1:=M+w*N+w^2*Q+w^3*R+w^4*P;;
gap> R2:=M+w^2*N+w^4*Q+w*R+w^3*P;;
gap> R3:=M+w^3*N+w*Q+w^4*R+w^2*P;;
gap> R4:=M+w^4*N+w^3*Q+w^2*R+w*P;;
gap> T:=M+N+Q+R+P;;

AD is the field corresponding to the subgroup H:

gap> AD:=Subalgebra(A,[D]);
<algebra over Rationals, with 1 generators>

R1^5, R2^5, ... are fixed by the subgroup H, so they
mus belong to the subfield AD:

gap> R1^5 in AD;
true

to find the coefficients of R1^5, .. in D we construct the basis 1,
Sqrt(-47):

gap> basisD:=[I,D];;
gap> basisD:=Basis(AD,basisD);;

following function to express the cyclotomic numbers in the basis 1,w,
w^2, w^4:

gap> solve:=function(x) return Coefficients(BF,x); end;
function( x ) ... end
gap> c1:=List(Coefficients(basisD,R1^5),solve);
[ [ -203, 0, -215/2, -215/2 ], [ 5, 10, -25/2, 45/2 ] ]
gap> c2:=List(Coefficients(basisD,R2^5),solve);
[ [ -191/2, 0, 215/2, 215/2 ], [ 35/2, 35, 45/2, 25/2 ] ]
gap> c3:=List(Coefficients(basisD,R3^5),solve);
[ [ -191/2, 0, 215/2, 215/2 ], [ -35/2, -35, -45/2, -25/2 ] ]
gap> c4:=List(Coefficients(basisD,R4^5),solve);
[ [ -203, 0, -215/2, -215/2 ], [ -5, -10, 25/2, -45/2 ] ]

So we can write the lagrange solvents in radical form (Quint
representing 5th root)
and w a 5th root of unity:

R1:=Quint(-203 - 215/2(w^2+w^3) + Sqrt(-47)* (5 + 10w - 25/2w^2 +
45/2w^3) ;
R2:=Quint(-191/2 + 215/2(w^2+w^3) + Sqrt(-47)* (35/2 + 35w + 45/2w^2 +
25/2w^3) ;
R3:=Quint(-191/2 + 215/2(w^2+w^3) + Sqrt(-47)*(-35/2 - 35w - 45/2w^2 -
25/2w^3) ;
R4:=Quint(-203 - 215/2(w^2+w^3) + Sqrt(-47)*(-5 - 10w + 25/2w^2 -
45/2w^3) ;

The roots, M, N, .. can be found by applying a reverse discrete Fourrier
transform
e.g. for N:

gap> tovec(1/5*(T+w^-1*R1+w^-2*R2+w^-3*R3+w^-4*R4));
[ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 ]
gap> N=(1/5*(T+w^-1*R1+w^-2*R2+w^-3*R3+w^-4*R4));
true
gap> T;
[ [ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 2, 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 2, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 2, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 2, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 2, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 2, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0, 2, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 2 ] ]

So the root N can be expressed as

1/5( 2 + w^-1*R1 + w^-2*R2 + w^-3*R3 + w^-4*R4 )


Marc.

0 new messages