Find the order of a matrix group element?

For a matrix group, the order of an element a of a group, is the smallest positive integer m such that a^m = e, where e denotes the identity element of the group, and a^m denotes the product of m copies of a. If no such m exists, the order of a is infinite, as described here: Order (group theory) - Wikipedia.

So, I want to find the order of a matrix group element. Any hints for doing this in Mathematica?

Regards,
HZ

I am not sure exactly what you are asking, but perhaps this might give you an idea for a direction.

Here is the finite list generated by repeated multiplications by I:

FixedPoint[Union[Join[#, I #]] &, {1}, 1000]

So the order is:

Length[  FixedPoint[Union[Join[#, I #]] &, {1}, 1000]]

For multiplications by Exp[Pi I/12]:

FixedPoint[Union[Join[#, Exp[Pi I/12] #]] &, {1}, 10000]

Without loss of generality, we can work with 2-dimensional matrices.

The Abelian group of order 3 has these elements:

In[429]:= A3 = {IdentityMatrix[2], RotationMatrix[2 \[Pi]/3], 
  RotationMatrix[4 \[Pi]/3]}

Out[429]= {{{1, 0}, {0, 1}}, {{-(1/2), -(Sqrt[3]/2)}, {Sqrt[3]/
   2, -(1/2)}}, {{-(1/2), Sqrt[3]/2}, {-(Sqrt[3]/2), -(1/2)}}}

We can define a function to compute the order of a group element by iterating over matrix multiplication:

In[430]:= groupElementOrder[m_?MatrixQ] := 
 Module[{n = 1, e = IdentityMatrix[Length[m]]}, 
  NestWhile[(n++; Dot[#, m]) &, m, # != e &]; n]

NestWhile does the iteration, and terminates when the matrix product equals the identity matrix. Now, we can test it on the group A3:

In[431]:= groupElementOrder /@ A3

Out[431]= {1, 3, 3}

The determinant will have to be an nth root of unity. So I’d try powering to multiples of n. Of course this might just be 1, in which case it provides no shortcut. Working with the eigenvalues might be faster than brute-force powering, I’m not sure. By this I mean deducing the orbit length as LCM of the roots of unity of the diagonalized form (with some abuse of notation in that remark).

Hi Daniel Lichtblau,

What do you mean by saying LCM?

Hi Robert Nachbar,

Thank you for your wonderful trick. It works like a charm.

LCM=Least Cmmon Multiple. In this setting, if you have a tenth root and a twelfth root, take the LCM of 10 and 12.

Thank you. Got it.

In[1]:= LCM[10, 12]

Out[1]= 60