1 | initial version |
The following is a way to get the limit, dialog with the sage interpreter:
sage: M = matrix( QQ, 3, 3, [[0,5,10],[1/10,0,0],[0,1/2,0]] )
sage: M.charpoly().factor()
(x - 1) * (x^2 + x + 1/2)
sage: F.<a> = QuadraticField( -1 )
sage: M = M.change_ring( F )
sage: M.charpoly().factor()
(x - 1) * (x - 1/2*a + 1/2) * (x + 1/2*a + 1/2)
sage: J, S = M.jordan_form( transformation=True )
sage: J
[ 1| 0| 0]
[------------+------------+------------]
[ 0| 1/2*a - 1/2| 0]
[------------+------------+------------]
[ 0| 0|-1/2*a - 1/2]
sage: S
[ 1 1 1]
[ 1/10 -1/10*a - 1/10 1/10*a - 1/10]
[ 1/20 1/10*a -1/10*a]
sage: S * J * S.inverse() == M
True
Now it is clear that $J^n$ converges to the diagonal matrix with entries $1,0,0$. We have $SJ^nS^{-1}=M^n$. So the limit is:
sage: S * diagonal_matrix( F, [1,0,0] ) * S.inverse()
[ 2/5 4 4]
[1/25 2/5 2/5]
[1/50 1/5 1/5]
We can test numerically:
sage: (M^100).n()
[ 0.399999999999999 4.00000000000000 4.00000000000000]
[0.0400000000000000 0.399999999999999 0.400000000000000]
[0.0200000000000000 0.200000000000000 0.199999999999999]
Note: Of course, there is no need to work over the gaussian field, where the characteristic polynomial of $M$ splits, but the prints are better.