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.
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.
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] :
Pentru completitudine, Bareis a propus și metode de eliminare fără înmulțire, dar cu fracții [2] .
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] .
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.
Î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 .
Metode numerice ale algebrei liniare | |
---|---|
Concepte cheie | Număr în virgulă mobilă • Robustețe de calcul |
Sarcini | Sistem de ecuații algebrice liniare • Descompunerea matricei • Înmulțirea matricei ( algoritmi ) • Împărțirea matricei • Matrice rară |
Suport hardware | Cache procesor • Buffer de traducere • Algoritmi insensibili la cache • SIMD • Multiprocesare |
Software | MATLAB • BLAS • LAPACK • Compararea bibliotecilor liniare de alegbra • Compararea bibliotecilor de uz general |