Ask Your Question
2

Simultaneously diagonalizing matrices exactly

asked 2018-01-22 18:43:40 +0200

watson_ladd gravatar image

updated 2018-01-24 22:41:15 +0200

I have a bunch of matrices with integer coefficients that simultaneously commute. I know that there is a basis that simultaneously diagonalizes all of them, and I want to find it exactly so that I can recover all the corresponding eigenvalues as algebraic numbers.

I've tried casting to QQbar and using eigenvectors, but this occasionally tries to divide by zero for no reason I can discern. Any ideas?

edit retag flag offensive close merge delete

Comments

could you write the code?

vdelecroix gravatar imagevdelecroix ( 2018-01-22 19:21:07 +0200 )edit

Please give us at least two of the many commuting matrices that can be diagonalized (simultaneously).

dan_fulea gravatar imagedan_fulea ( 2018-01-22 21:55:42 +0200 )edit

Let me join the club of asksage junkies : we need your code to understand your problem and (hopefully) provide a solution.

tmonteil gravatar imagetmonteil ( 2018-01-25 11:26:24 +0200 )edit

Please provide an example of matrices for the computation you are asking about.

Ready-to-copy-paste examples make it way easier to explore a question, thereby increasing chances of an answer.

slelievre gravatar imageslelievre ( 2018-04-03 09:51:29 +0200 )edit

1 Answer

Sort by ยป oldest newest most voted
4

answered 2018-04-03 10:34:07 +0200

slelievre gravatar image

updated 2018-04-03 10:42:34 +0200

Getting a simultaneous basis of diagonalization for a list of diagonalizable matrices that pairwise commute is just a matter of getting a diagonalization basis for any one of them!

This can be obtained with jordan_form with the argument transformation=True.

For example, starting from these two matrices a and b:

sage: a = matrix(QQ, [[1, 1, 1], [-2, 3, 2], [0, 1, 2]])
sage: b = matrix(QQ, [[-1, 1, 1], [1, 1, -1], [-3, 1, 3]])

Check that they commute:

sage: a * b
[-3  3  3]
[-1  3  1]
[-5  3  5]
sage: b * a
[-3  3  3]
[-1  3  1]
[-5  3  5]
sage: a * b == b * a
True

If we diagonalize them separately:

sage: da, pa = a.jordan_form(transformation=True)
sage: db, pb = b.jordan_form(transformation=True)

we can notice that the transformation matrices pa and pb have the same columns, permuted:

sage: pa
[ 1  1  0]
[ 1  0  1]
[ 1  1 -1]
sage: pb
[ 0  1  1]
[ 1  1  0]
[-1  1  1]

Obtaining the simultaneous diagonal form is just a matter of reordering the columns of:

sage: da
[3|0|0]
[-+-+-]
[0|2|0]
[-+-+-]
[0|0|1]
sage: db
[2|0|0]
[-+-+-]
[0|1|0]
[-+-+-]
[0|0|0]

For instance, use the transformation matrix pa to get simultaneous diagonalizations:

sage: qa = ~pa
sage: qa * a * pa
[3 0 0]
[0 2 0]
[0 0 1]
sage: qa * b * pa
[1 0 0]
[0 0 0]
[0 0 2]
edit flag offensive delete link more

Comments

2

If A has a higher dimensional eigenspace then an eigenvector of A is not necessarily an eigenvector of B. Example: A=[0,1; -1,-1] and B=[1,0; 0,1]. They commute, B is already in diagonal form, and A is not. You need to intersect the eigenspaces of A with those in B and make a basis out of those smaller spaces.

nbruin gravatar imagenbruin ( 2018-04-04 17:36:03 +0200 )edit

Good point.

slelievre gravatar imageslelievre ( 2018-04-04 21:10:21 +0200 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

Stats

Asked: 2018-01-22 18:43:40 +0200

Seen: 2,182 times

Last updated: Apr 03 '18