# Eigenvalues and eigenspaces of orthogonal (or rotation) matrices Anonymous

Given an orthogonal transformation of finite order, e.g.

Matrix([[0,0,0,-1],[1,0,0,-1],[0,1,0,-1],[0,0,1,-1]])


Its eigenvalues are going to be of the form

exp(I*pi/5),exp(2*I*pi/5),...,exp(2*I*pi*m),...


corresponding to a splitting of the matrix into rotation (and reflection) matrices. I'd like to extract these fractions m (mod ZZ) and study the corresponding (real rotation and reflection) eigenspaces.

My impression is that Sage isn't suitable for doing this directly, but that I should use e.g. the Maxima or Mathematica interface? Any suggestions for the most suitable method?

edit retag close merge delete

1

Well... here is a start:

sage: M=matrix(SR,[[0,0,0,-1],[1,0,0,-1],[0,1,0,-1],[0,0,1,-1]])
sage: list(map(lambda u:u.maxima_methods().polarform(), M.eigenvalues()))
[1/4*sqrt((sqrt(5) + 1)^2 - 2*sqrt(5) + 10)*e^(-I*pi - I*arctan(-2*sqrt(-1/2*sqrt(5) + 5/2)/(sqrt(5) + 1))),
1/4*sqrt((sqrt(5) + 1)^2 - 2*sqrt(5) + 10)*e^(I*pi + I*arctan(-2*sqrt(-1/2*sqrt(5) + 5/2)/(sqrt(5) + 1))),
1/4*sqrt((sqrt(5) - 1)^2 + 2*sqrt(5) + 10)*e^(-I*arctan(2*sqrt(1/2*sqrt(5) + 5/2)/(sqrt(5) - 1))),
1/4*sqrt((sqrt(5) - 1)^2 + 2*sqrt(5) + 10)*e^(I*arctan(2*sqrt(1/2*sqrt(5) + 5/2)/(sqrt(5) - 1)))]


Sort by » oldest newest most voted Like that

sage: M = Matrix([[0,0,0,-1],[1,0,0,-1],[0,1,0,-1],[0,0,1,-1]])
sage: [(z.multiplicative_order(), m) for z, m in M.charpoly().roots(QQbar)]
[(5, 1), (5, 1), (5, 1), (5, 1)]


or even better:

sage: [(p.is_cyclotomic(certificate=True), m) for (p, m) in M.charpoly().factor()]
[(5, 1)]

more

1

Thanks, this is excellent! (I need the actual fractions (1/5,2/5,3/5,4/5 in the example) which I can now deduce inductively from your code using the multiplicities, and then I suppose I can obtain the eigenspaces by first comparing those eigenvalues with E(5)^i in UniversalCyclotomicField, and then taking the real and complex parts of the matching eigenvectors gives the rotation planes. In other words, this is very doable now but if you know some smart tricks for this again then please do let me know!)