# Symbolic matrices and "integrity" of their inverse

I have to solve the following problem:

Does a matrix $G\in GL(n,\mathbb{Z})$ exists such that $$G\times A\times G^{-1}=B$$ being $A,B$ given matrices in $\mathbb{Q}$?

Doing everything by hand, I finally find myself with a bunch of symbolic matrices. Now I have to check if they can lay inside $GL(n,\mathbb{Z})$, i.e. if there are integer values for the variables in the matrix such that the matrix is integer, invertible and with integer inverse.

E.g.: $$\left(\begin{array}{cc}x & 0 \\ 0 & y\end{array}\right)$$ does the trick only for $x=y=1$.

Is there a quick method within Sage to solve that last problem?

Thanks!

edit retag close merge delete

An integer matrix is in GL(n,Z) (i.e., invertible with integer inverse) if and only if its determinant is 1 or -1 (from wikipedia: a square matrix over a commutative ring is invertible if and only if its determinant is a unit in that ring.) This might help you...

( 2011-10-18 01:28:07 -0500 )edit

It does help me indeed, thanks! I should have known that... My main concern now is how to find out whether a polynomial equation (det=+/-1) has integer roots or not. "assume()" does not the trick :(

( 2011-10-18 04:51:33 -0500 )edit

This is in general an undecidable question - see http://en.wikipedia.org/wiki/Hilbert%27s_tenth_problem. However, for specific cases you might be able to find a solution.

( 2011-10-18 05:08:40 -0500 )edit

"Integrality" would be a better word than "integrity".

( 2011-10-18 06:55:10 -0500 )edit

Thanks a lot for the comments, Parzan and Palmieri! What do you think about erasing the question? I don't think it is useful for anybody.

( 2011-10-28 04:22:31 -0500 )edit

Sort by ยป oldest newest most voted

A direct approach (not using symbolic solving) could be:

sage: A = matrix(QQ,[[3,1],[2,4]]) ; A
[3 1]
[2 4]
sage: B = matrix(QQ,[[2,4],[0,5]]) ; B
[2 4]
[0 5]
sage: A.is_similar(B)
True
sage: T = A.is_similar(B,transformation=True)[1] ; T
[ 1.000000000000000?             0.?e-18]
[0.2500000000000000? 0.2500000000000000?]
sage: T.change_ring(QQ)
[  1   0]
[1/4 1/4]
sage: G = T.change_ring(QQ)/det(T) ; G
[4 0]
[1 1]
sage: G * A * G^(-1) == B
True


See A.is_similar? for details.

more

That's a good one, thanks!

( 2013-08-03 05:26:35 -0500 )edit