# Ticket #10563(new enhancement)

Opened 2 years ago

Last modified 2 years ago

## improve jordan_form over univariate rational expressions

Reported by: Owned by: zimmerma jason, was minor sage-5.10 linear algebra N/A

### Description

This was reported by Alexandre Casamayou:

```sage: R = FractionField(PolynomialRing(RationalField(),'a'))
sage: A = matrix(R,[[1,a],[a,1]])
sage: A.jordan_form()
---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)

/localdisk/tmp/c157/<ipython console> in <module>()

/usr/local/sage/local/lib/python2.6/site-packages/sage/matrix/matrix2.so in sage.matrix.matrix2.Matrix.jordan_form (sage/matrix/matrix2.c:32527)()

/usr/local/sage/local/lib/python2.6/site-packages/sage/rings/polynomial/polynomial_element.so in sage.rings.polynomial.polynomial_element.Polynomial.roots (sage/rings/polynomial/polynomial_element.c:31227)()

/usr/local/sage/local/lib/python2.6/site-packages/sage/rings/ring.so in sage.rings.ring.Ring.is_finite (sage/rings/ring.c:5810)()

NotImplementedError:
```

## Change History

### comment:1 Changed 2 years ago by rbeezer

It seems the fraction field does not know if it is finite or infinite. Maybe something else is in the way of getting Jordan form, but this looks like the first obstacle.

```sage: T.<a>=QQ[]
sage: R=FractionField(T)
sage: A = matrix(R,[[1,a],[a,1]])

sage: A.charpoly().roots()
---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)

/home/sage/sage-4.6.1.rc1/devel/sage-main/<ipython console> in <module>()

/sage/sage-4.6.1.rc1/local/lib/python2.6/site-packages/sage/rings/polynomial/polynomial_element.so in sage.rings.polynomial.polynomial_element.Polynomial.roots (sage/rings/polynomial/polynomial_element.c:31227)()

/sage/sage-4.6.1.rc1/local/lib/python2.6/site-packages/sage/rings/ring.so in sage.rings.ring.Ring.is_finite (sage/rings/ring.c:5810)()

NotImplementedError:

sage: R.is_finite()
---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)

/home/sage/sage-4.6.1.rc1/devel/sage-main/<ipython console> in <module>()

/sage/sage-4.6.1.rc1/local/lib/python2.6/site-packages/sage/rings/ring.so in sage.rings.ring.Ring.is_finite (sage/rings/ring.c:5810)()

NotImplementedError:
```

### comment:2 Changed 2 years ago by rbeezer

Even with a quick-hacked .is_finite() method, this still fails. Getting eigenvalues over an exact ring requires factoring or root-finding, neither of which seems to be implemented over this fraction field. The following uses the same matrix A as above, but with the finiteness check added in:

```sage: A.jordan_form()
---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)

/home/sage/sage-4.6.1.rc1/devel/sage-main/<ipython console> in <module>()

/sage/sage-4.6.1.rc1/local/lib/python2.6/site-packages/sage/matrix/matrix2.so in sage.matrix.matrix2.Matrix.jordan_form (sage/matrix/matrix2.c:32626)()

/sage/sage-4.6.1.rc1/local/lib/python2.6/site-packages/sage/rings/polynomial/polynomial_element.so in sage.rings.polynomial.polynomial_element.Polynomial.roots (sage/rings/polynomial/polynomial_element.c:31330)()

NotImplementedError: root finding for this polynomial not implemented

sage: A.eigenvalues()
---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)

/home/sage/sage-4.6.1.rc1/devel/sage-main/<ipython console> in <module>()

/sage/sage-4.6.1.rc1/local/lib/python2.6/site-packages/sage/matrix/matrix2.so in sage.matrix.matrix2.Matrix.eigenvalues (sage/matrix/matrix2.c:22130)()

/sage/sage-4.6.1.rc1/local/lib/python2.6/site-packages/sage/matrix/matrix2.so in sage.matrix.matrix2.Matrix.fcp (sage/matrix/matrix2.c:10516)()

/sage/sage-4.6.1.rc1/local/lib/python2.6/site-packages/sage/rings/polynomial/polynomial_element.so in sage.rings.polynomial.polynomial_element.Polynomial.factor (sage/rings/polynomial/polynomial_element.c:23007)()

NotImplementedError:
```
Note: See TracTickets for help on using tickets.