Ask Your Question

# 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

## Comments

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 08:28:07 +0100 )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 11:51:33 +0100 )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 12:08:40 +0100 )edit

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

( 2011-10-18 13:55:10 +0100 )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 11:22:31 +0100 )edit

## 1 Answer

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

## Comments

That's a good one, thanks!

( 2013-08-03 12:26:35 +0100 )edit

## Your Answer

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

Add Answer

## Stats

Asked: 2011-10-17 12:44:30 +0100

Seen: 677 times

Last updated: Jun 26 '13