stringtranslate.com

Algoritmo de Bareiss

En matemáticas, el algoritmo de Bareiss , llamado así en honor a Erwin Bareiss, es un algoritmo para calcular el determinante o la forma escalonada de una matriz con entradas enteras utilizando únicamente aritmética de enteros; Se garantiza que cualquier división que se realice será exacta (no hay resto ). El método también se puede utilizar para calcular el determinante de matrices con entradas reales (aproximadas) , evitando la introducción de errores de redondeo más allá de los que ya están presentes en la entrada.

Historia

El algoritmo fue anunciado originalmente por Jack Edmonds en 1966 y publicado en 1967.[1] El algoritmo general de Bareiss es distinto del algoritmo de Bareiss para matrices de Toeplitz .

En algunos países de habla hispana, este algoritmo también se conoce como Bareiss-Montante , en honor a René Mario Montante Pardo, profesor de la Universidad Autónoma de Nuevo León , México , quien popularizó el método entre sus alumnos.

Descripción general

La definición de determinante solo tiene operaciones de multiplicación, suma y resta. Obviamente el determinante es un número entero si todas las entradas de la matriz son números enteros. Sin embargo, el cálculo real del determinante utilizando la definición o la fórmula de Leibniz no es práctico, ya que requiere operaciones O ( n! ).

La eliminación gaussiana tiene una complejidad O( n 3 ), pero introduce división, lo que da como resultado errores de redondeo cuando se implementa utilizando números de punto flotante.

Los errores de redondeo se pueden evitar si todos los números se mantienen como fracciones enteras en lugar de coma flotante. Pero luego el tamaño de cada elemento crece exponencialmente con el número de filas. [1]

Bareiss plantea la cuestión de realizar una eliminación que preserve los números enteros manteniendo las magnitudes de los coeficientes intermedios razonablemente pequeñas. Se sugieren dos algoritmos: [2] [3]

  1. Algoritmo sin división: realiza la reducción de matrices a forma triangular sin ninguna operación de división.
  2. Algoritmo sin fracciones: utiliza la división para mantener las entradas intermedias más pequeñas, pero debido a la identidad de Sylvester, la transformación aún conserva los números enteros (la división tiene resto cero).

Para completar, Bareiss también sugiere métodos de eliminación sin multiplicación que producen fracciones. [2]

el algoritmo

La estructura del programa de este algoritmo es un triple bucle simple, como en la eliminación gaussiana estándar. Sin embargo, en este caso la matriz se modifica para que cada entrada M k,k contenga el principal menor principal [ M ] k,k . La corrección del algoritmo se demuestra fácilmente mediante inducción en k . [4]

  • Entrada: M - una matriz n
    -cuadrada que supone que sus principales menores principales [ M ] k,k son todos distintos de cero.
  • Sea M 0,0 = 1 (Nota: M 0,0 es una variable especial)
  • Para k de 1 a n −1:
    • Para i de k +1 a n :
      • Para j de k +1 a n :
        • Colocar
  • Salida: La matriz se modifica in situ ,
    cada entrada M k,k contiene el menor principal [ M ] k,k ,
    la entrada M n,n contiene el determinante del M original .

Si la suposición sobre los menores principales resulta ser falsa, por ejemplo, si M k −1, k −1 = 0 y algo de M i , k −1 ≠ 0 ( i = k ,..., n ), entonces podemos intercambiar los k −1-ésima fila con la i -ésima fila y cambie el signo de la respuesta final.

Análisis

Durante la ejecución del algoritmo de Bareiss, cada número entero que se calcula es el determinante de una submatriz de la matriz de entrada. Esto permite, utilizando la desigualdad de Hadamard , limitar el tamaño de estos números enteros. De lo contrario, el algoritmo de Bareiss puede verse como una variante de la eliminación gaussiana y necesita aproximadamente el mismo número de operaciones aritméticas.

De ello se deduce que, para una matriz n × n de valor máximo (absoluto) 2 L para cada entrada, el algoritmo de Bareiss se ejecuta en O( n 3 ) operaciones elementales con un límite O( n n /2  2 nL ) en el valor absoluto. de valores intermedios necesarios. Su complejidad computacional es, por tanto, O( n 5 L 2  (log( n ) 2  +  L 2 )) cuando se utiliza aritmética elemental o O( n 4 L  (log( n ) +  L ) log(log( n ) +  L )) ) usando la multiplicación rápida .

Referencias

  1. ^ Middeke, J.; Jeffrey, DJ; Koutschan, C. (2020), "Factores comunes en descomposiciones matriciales libres de fracciones", Matemáticas en informática , 15 (4): 589–608, arXiv : 2005.12380 , doi : 10.1007/s11786-020-00495-9
  2. ^ ab Bareiss, Erwin H. (1968), "La identidad de Sylvester y la eliminación gaussiana de varios pasos que preservan enteros" (PDF) , Matemáticas de la Computación , 22 (103): 565–578, doi :10.2307/2004533, JSTOR  2004533
  3. ^ Bareiss, Erwin H. (1966), ELIMINACIÓN GAUSSIANA DE CONSERVACIÓN DE ENTEROS MÚLTIPLES (PDF). (Contiene una imagen más clara de la secuencia de operaciones)
  4. ^ Yap, Chee Keng (2000), Problemas fundamentales del álgebra algorítmica , Oxford University Press