How to take inverse of matrix with complex entries

asked 2024-01-29 19:11:05 +0100

luke_mattgreen gravatar image

updated 2024-01-29 23:43:35 +0100

Max Alekseyev gravatar image

I am trying to find the similarity matrix between two 18 by 18 matrices K_1 and K_2 which are cospectral. The is_similar() function takes too long to run. We can compute the similarity matrix by finding the transition matrices S and Q which diagonalize both K_1 and K_2. In other words, S^(-1)*K_1*S = H = Q^(-1)*K_2*Q, where H is a diagonal matrix. We then know that Q*S^(-1)*K_1*S*Q^(-1) = K_2. My problem now though is that we can't compute Q^(-1) or S^(-1) since both Q and S have nasty complex numbers and the inverse method in Sage doesn't run fast enough. Any thoughts on how to quickly compute these inverses?

fyi, I did try using the left and right eigenmatrices to find the similarity matrix, but the eigenvectors didn't line up.

edit retag flag offensive close merge delete


Which is the field / domain of definition for the entries of the two matrices K_1 and K_2 - that i will denote by A and B below? If this is the inexact complex field CC taken with some precision, well some in between steps are failing. Here is the reason for is_similar as documented:


     When the two matrices are similar, this routine may fail to find
     the similarity transformation.  A technical explanation follows.

   The similarity check is accomplished with rational form, which will
   be successful for any pair of matrices over the same field.
   However, the computation of rational form does not provide a
   transformation. So we instead compute Jordan form, which does
   provide a transformation.
dan_fulea gravatar imagedan_fulea ( 2024-02-05 18:33:19 +0100 )edit

.... continued:

   But Jordan form will require that the
   eigenvalues of the matrix can be represented within Sage, requiring
   the existence of the appropriate extension field. When this is not
   possible, a "RuntimeError" is raised, as demonstrated in an example

This information can be obtained via A.is_similar? for an already defined matrix A. If the domain for the entries is not exact, then there are usual determinant instability issues. If there is a special form for A, B that may be used, some better field to work in... this may make a special specific solution possible. We do not have the two $18\times 18$ matrices, so it is hard to give a general advice to work for all general cases.

dan_fulea gravatar imagedan_fulea ( 2024-02-05 18:38:05 +0100 )edit