Algoritmul Bareis

Algoritmul Bareiss  este un algoritm pentru calcularea determinantului sau a treptei unei matrice cu elemente întregi folosind aritmetica pur întregi. Numit după E. Bareys . Orice împărțire efectuată de algoritm garantează o împărțire exactă (fără rest ). Metoda poate fi folosită și pentru a calcula determinantul unei matrice cu elemente reale (aproximative) , ceea ce elimină erorile de rotunjire , cu excepția erorilor deja prezente în intrare.

Istorie

Algoritmul general al lui Bareis diferă de algoritmul cu același nume pentru inversarea matricelor Toeplitz .

În unele țări vorbitoare de spaniolă , algoritmul este cunoscut și sub numele de algoritmul Bareis-Monante , deoarece René Mario Montante Pardo, profesor la Universitatea Autonomă din Nuevo León din Mexic , a popularizat metoda în rândul studenților.

Prezentare generală

Definiția determinantului folosește numai operațiile de înmulțire, adunare și scădere . În mod evident, determinantul va fi întreg dacă toate elementele matricei sunt întregi. Cu toate acestea, calcularea efectivă a determinantului, fie pur din definiție, fie folosind formula lui Leibniz , este nepractică deoarece necesită operații.

Metoda Gaussiană are complexitate , dar utilizează diviziunea, ceea ce duce la erori de rotunjire dacă este implementată cu aritmetică în virgulă mobilă .

Erorile de rotunjire pot fi evitate prin stocarea tuturor numerelor ca fracții în loc de numere în virgulă mobilă. Cu toate acestea, dimensiunea fiecărui element crește exponențial în funcție de numărul de rânduri [1] .

Bareis a pus problema păstrării eliminărilor în numere întregi, păstrând în același timp valoarea coeficienților intermediari suficient de mică. Au fost propuși doi algoritmi [2] [3] :

  1. Algoritm fără diviziune - reduce matricea la o formă triunghiulară fără nicio operație de divizare.
  2. Algoritm fără resturi - folosește diviziunea pentru a reduce valorile intermediare, dar datorită identității Sylvester , transformarea rămâne întreagă (diviziunea are rest zero).

Pentru completitudine, Bareis a propus și metode de eliminare fără înmulțire, dar cu fracții [2] .

Algoritm

Structura de calcul a acestui algoritm este o buclă triplă simplă, ca în metoda obișnuită Gauss . Cu toate acestea, în acest caz, matricea este modificată astfel încât fiecare element să conțină un principal principal minor [M] k, k . Corectitudinea algoritmului este ușor de arătat prin inducție pe k [4] .

  • Date de ieșire: Matricea este schimbată în loc ,
    fiecare element M k, k conține principalul minor principal , valoarea conține determinantul matricei originale M.
  • Dacă presupunerea că principalii minori nu sunt egali cu zero se dovedește a fi incorectă, adică , iar unii sunt, atunci putem rearanja rândurile k-1 și i pe alocuri, schimbând semnul valorii finale.

    Analiză

    În timpul execuției algoritmului Bareis, orice număr întreg calculat este determinantul unei submatrici a matricei de intrare. Acest lucru permite utilizarea inegalității Hadamard pentru a limita dimensiunea numerelor întregi. Altfel, algoritmul Bareis poate fi privit ca o variantă a metodei Gauss , care necesită practic același număr de operații aritmetice.

    Rezultă că pentru o matrice cu o valoare maximă (absolută) pentru fiecare element, algoritmul Bareis rulează în O( n 3 ) operații elementare cu o constrângere asupra valorii absolute a valorilor intermediare. Complexitatea de calcul a algoritmului echivalează apoi cu utilizarea aritmeticii elementare sau utilizarea înmulțirii rapide .

    Note

    1. Middeke, Jeffrey, Koutschan, 2020 .
    2. 1 2 Bareiss, 1968 , p. 565-578.
    3. Bareiss, 1966 .
    4. Da, 2000 .

    Literatură