Misc matrix algorithms using MPFR - Matrices and Spaces of Matrices

Skip to content
Back to top
View this page
Edit this page

# Misc matrix algorithms using MPFR

sage.matrix.misc_mpfr.hadamard_row_bound_mpfr(A)

  Given a matrix \(A\) with entries that coerce to `RR`, compute the row Hadamard bound on the determinant.

  INPUT:

  - `A` – a matrix over `RR`

  OUTPUT:

  integer – an integer n such that the absolute value of the determinant of this matrix is at most \(10^n\).

  EXAMPLES:

  We create a very large matrix, compute the row Hadamard bound, and also compute the row Hadamard bound of the transpose, which happens to be sharp.

  Sage

      sage: a = matrix(ZZ, 2, [2^10000, 3^10000, 2^50, 3^19292])
      sage: from sage.matrix.misc_mpfr import hadamard_row_bound_mpfr
      sage: hadamard_row_bound_mpfr(a.change_ring(RR))
      13976
      sage: len(str(a.det()))
      12215
      sage: hadamard_row_bound_mpfr(a.transpose().change_ring(RR))
      12215

  Python

      >>> from sage.all import *
      >>> a = matrix(ZZ, Integer(2), [Integer(2)**Integer(10000), Integer(3)**Integer(10000), Integer(2)**Integer(50), Integer(3)**Integer(19292)])
      >>> from sage.matrix.misc_mpfr import hadamard_row_bound_mpfr
      >>> hadamard_row_bound_mpfr(a.change_ring(RR))
      13976
      >>> len(str(a.det()))
      12215
      >>> hadamard_row_bound_mpfr(a.transpose().change_ring(RR))
      12215

  Note that in the above example using RDF would overflow:

  Sage

      sage: b = a.change_ring(RDF)
      sage: b._hadamard_row_bound()
      Traceback (most recent call last):
      ...
      OverflowError: cannot convert float infinity to integer

  [Python]

      >>> from sage.all import *
      >>> b = a.change_ring(RDF)
      >>> b._hadamard_row_bound()
      Traceback (most recent call last):
      ...
      OverflowError: cannot convert float infinity to integer