Algoritmi numerici... LU-factorizareMihai Scorțaru
Prin LU-factorizare se înțelege scrierea unei matrice ca produs între două matrice dintre care una este inferior-triunghiulară (toate elementele de deasupra diagonalei principale au valoarea 0), iar cealaltă este superior-triunghiulară (toate elementele de sub diagonala principală au valoarea 0). Termenul de LU-factorizare poate fi tradus aproximativ prin factorizare jos-sus. Prima matrice are elemente semnificative doar sub și pe diagonala principală, adică în partea "de jos", iar a doua doar deasupra și pe aceasta, adică în partea "de sus". Prefixul LU provine din limba engleză, fiind prescurtarea pentru low up.
Determinarea LU-factorizării O metodă pentru determinarea LU-factorizării unei matrice este dată de următorul rezultat matematic:
Teoremă Fie A o matrice pătratică de dimensiune n și Ak matricele obținute prin tăierea ultimelor n - k linii și coloane ale matricei A. Dacă matricele Ak (k = 1, 2, ..., n - 1) nu sunt singulare (au determinant nenul) atunci există o matrice inferior triunghiulară L care va conține pe diaginala principală doar elemente care au valoarea 1 și o matrice superior-triunghiulară U astfel încât A = LU. Mai mult, această LU-factorizare este unică.
Demonstrație Vom folosi metoda inducției matematice. Mai întâi vom găsi și astfel încât A2 = L2U2. Vom avea
deci u11 = a11 č 0 u12 = a12 l21 u22 Avem deci LU-factorizarea este unică. Vom presupune acum că matricea Ak-1 are o LU-factorizare astfel încât: Ak-1 = Lk-1Uk-1
Obținem .
Pentru k = n existența și unicitatea LU-factorizării este dovedită.
Remarcă Determinantul matricei A este egal cu determinantul matricei U:.
Metode de factorizare Există mai multe metode pentru determinarea LU-factorizării, cele mai cunoscute fiind metoda Doolittle, metoda Crout și metoda Choleski.
Metoda Doolittle Pentru aplicarea acestei metode trebuie să alegem valoarea 1 pentru elementele de pe diagonala principală a matricei L. ;
și astfel încât A = LU. Această ecuație duce la obținerea unui sistem de ecuații: . Acest sistem poate fi rezolvat aranjând ecuațiile într-o anumită ordine după cum se poate vedea în algoritmul descris în continuare:
u11:=a 11
pentru j=2,n
u1j=a1j
lj1=aj1/u11
sfârșit pentru
pentru i=2,n-1 uii=aii-lik·uki pentru j=i+1,n uij=aij-lik·ukj lji=(aij-ljk·uki)/uii sfârșit pentru sfârșit pentru unn=ann-lnk·ukn Din algoritm reiese clar faptul că fiecare element aij este folosit o singură dată. Aceasta înseamnă că lij și uij pot fi memorate în locația pe care o ocupa aij. Deci, descompunerea este realizată "pe loc"; elementele de pe diagonala principală a matricei L nu mai sunt memorate deloc, deoarece știm că au toate valoarea 1. În concluzie, algoritmul poate fi scris și astfel:
pentru j=2,n
a1j=a1j
aj1=aj1/a11
sfârșit pentru
pentru i=2,n-1 aii=aii-aik·aki pentru j=i+1,n aij=aij-aik·akj aji=(aij-ajk·aki)/aii sfârșit pentru sfârșit pentru ann=ann-ank·akn
Metoda Crout Singura diferență între metoda Crout și metoda Doolittle este aceea că, în cazul metodei Crout, vom alege valoarea 1 pentru elementele de pe diagonala principală a matricei superior-triunghiulare, algoritmul de determinare a LU-factorizării fiind foarte asemănător cu cel folosit pentru metoda Doolittle.
Metoda Choleski Dacă o matrice A este simetrică și pozitiv definită atunci ea are o descompunere specială putând fi scrisă ca un produs dintre o matrice inferior triunghiulară și transpusa acesteia. Matricea inferior triunghiulară nu poate avea pe diagonala principală elemente care să aibă valoarea 0. Uneori această factorizare poartă denumirea de extragere a rădăcinii pătrate a unei matrice. Scriind ecuația A = L · Lt se obține: 1 Ł i Ł n, i + 1 Ł j Ł n.
Algoritmul care realizează această descompunere este descris în continuare: pentru i=1,n temp:=aii- dacă temp>0 atunci lii=temp1/2 altfel scrie "Matricea nu este pozitiv definită! (cu erori de rotunjire)" stop sfârșit dacă pentru j=i+1,n
sfârșit pentru sfârșit pentru
Aplicație Cea mai importantă aplicație a LU-factorizării este rezolvarea sistemelor liniare de n ecuații cu n necunoscute. Să considerăm sistemul de ecuații A·X = B. Dacă scriem A = L·U, avem L·U·X = B. Vom rezolva sistemul L·Y = B, pentru Y = U·X, iar apoi vom rezolva sistemul U·X = Y.
Complexitate Determinarea unui element al matricelor L sau U necesită calcularea unei sume care poate avea între 1 și n elemente, deci este nevoie de un timp O(n) pentru determinarea ei. Datorită faptului că avem n2 elemente, complexitatea algoritmului de determinare a LU-factorizării are ordinul de complexitate O(n3).
Mihai Scorțaru este student în anul III la Universitatea Tehnică din Cluj-Napoca. Poate fi contactat prin e-mail la adresa skortzy@email.ro. [cuprins] |