Sunteți pe pagina 1din 3

MN_L5: REZOLVAREA SISTEMELOR DE ECUATII LINIARE IN SENSUL CELOR MAI

MICI PATRATE

Se consideră sistemul supradeterminat de ecuaţii algebrice liniare :


A⋅x = b (1)
unde A este o matrice reală cu m linii şi n coloane, m > n, iar b este un vector (coloană) real, cu m
componente. Matricea A se presupune având coloanele liniar independente (rang(A) = n ).
*
Problema constă în determinarea unei pseudosoluţii, x , a sistemului (1), în sensul celor mai mici
*
pătrate (CMMP), adică a unui vector x cu proprietatea:
*
|| b − A ⋅ x || 22 = min
nx1
{|| b − A ⋅ x || 22 } (2)
x∈ℜ

unde || . || 2 semnifică norma vectorială euclidiană.


Rezolvarea numerică eficientă a acestei probleme se bazează pe triangularizarea ortogonală a
matricii sistemului. O modalitate de a realiza aceasta este dată de folosirea reflectorilor
Householder. Aplicând aceştia, la stânga, în ambii membri ai ecuaţiei (1), se obţine, în primele n
linii, un sistem determinat de ecuaţii liniare, cu matrice superior triunghiulară. Acesta din urmă este
rezolvat prin substituţie inversă, conducând la obţinerea pseudosoluţiei în sensul celor mai mici
pătrate.

APLICAŢIE:
Să se realizeze, în mediul de programare MATLAB, programul pentru rezolvarea unui sistem
supradeterminat de ecuaţii liniare, în sensul CMMP, folosind transformări ortogonale de
echivalenţă. Programul va compara soluţia găsită cu cea furnizată de mediul MATLAB,
utilizând o funcţie similară procedurii studiate.

În realizarea programului se vor parcurge următoarele etape, descrise parţial în limbajul


pseudocod:
1. Introducere parametru de control al procedurii de triangularizare, în variabila EPS.
2. Introducere dimensiuni matrici sistem, în variabilele m (număr ecuaţii) şi, respectiv, n (număr
necunoscute). Condiţie de îndeplinit: m > n .
3. Alocare spaţiu de memorie pentru matricea sistemului, în variabila a, prin iniţializarea acesteia cu
o matrice nulă, de dimensiuni m x n. Introducerea elementelor matricii sistemului se face pe linii.
Reluare introducere în caz de eroare. Salvare matrice a:
ATRIBUIE aa ← a
4. Triangularizare ortogonală matrice sistem (descompunere QR):
ATRIBUIE u ← zeros(m,n)
ATRIBUIE beta ← zeros(n,1)
_ PENTRU k = 1,n EXECUTĂ
| ATRIBUIE sum ← sqrt( (a(k:m,k))'*a(k:m,k) )
| _ DACĂ ( a(k,k) >= 0 ) ATUNCI
| | ATRIBUIE semn ← 1
| |ALTFEL
| |_ ATRIBUIE semn ← -1
| ATRIBUIE sigma ← semn*sum
| ATRIBUIE u(k,k) ← a(k,k) + sigma
| ATRIBUIE u(k+1:m,k) ← a(k+1:m,k)
| ATRIBUIE beta(k) ← sigma*u(k,k)
| _ DACĂ ( abs(beta(k)) < EPS ) ATUNCI
| |_ SCRIE 'algoritmul va esua: beta < EPS'
| ATRIBUIE a(k,k) ← - sigma
| ATRIBUIE a(k+1:m,k) ← zeros(m-k,1)
| _ PENTRU j = k+1,n EXECUTĂ
| | ATRIBUIE sum ← u(k:m,k)'*a(k:m,j)
| | ATRIBUIE tau ← sum/beta(k)
| |_ ATRIBUIE a(k:m,j) ← a(k:m,j) - tau*u(k:m,k)
| SCRIE 'k = ',k
|_ SCRIE 'a = ',a
ATRIBUIE flag ← 0
ATRIBUIE i ← 1
_ CÂT TIMP ( (i <= n) ŞI (flag = 0) ) EXECUTĂ
| _ DACĂ ( abs(a(i,i)) < EPS ) ATUNCI
| |_ ATRIBUIE flag ← 1
|_ ATRIBUIE i ← i+1
_ DACĂ ( flag = 1 ) ATUNCI
| SCRIE 'matrice deficienta de rang'
| ATRIBUIE rang ← rank(a)
|_ SCRIE 'rang(a) =', rang
5. Alocare spaţiu de memorie pentru termenul liber al sistemului, în variabila b, prin iniţializarea
acesteia cu un vector coloană nul, cu m componente. Introducerea elementelor termenului liber al
sistemului se face pe linii. Reluare în caz de eroare. Salvare vector b:
ATRIBUIE bb ← b
6. Transformare ortogonală termen liber sistem :
_ PENTRU k = 1,n EXECUTĂ
| ATRIBUIE sum ← u(k:m,k)'*b(k:m)
| ATRIBUIE taub ← sum/beta(k)
|_ ATRIBUIE b(k:m) ← b(k:m) - taub*u(k:m,k)
SCRIE 'b =', b
7. Calcul soluţie sistem prin substituţie înapoi :
ATRIBUIE x ← zeros(n,1)
ATRIBUIE x(n) ← b(n)/a(n,n)
_ PENTRU i = n-1,(pas = -1),1 EXECUTĂ
| ATRIBUIE sum <-- a(i,i+1:n)*x(i+1:n)
|_ ATRIBUIE x(i) <-- (b(i) - sum)/a(i,i)
8. Calcul reziduu asociat soluţiei x:
ATRIBUIE b(1:n) <-- zeros(n,1)
_ PENTRU k = n,(pas = -1),1 EXECUTĂ
| ATRIBUIE sum ← (u(k:m,k))'*b(k:m)
| ATRIBUIE taud ← sum/beta(k)
|_ ATRIBUIE b(k:m) ← b(k:m) - taud*u(k:m,k)
ATRIBUIE nr ← norm(b,2)
9. Calcul soluţie şi reziduu asociat, folosind funcţia MATLAB \ :
ATRIBUIE x_bs ← aa\bb
ATRIBUIE r_bs ← bb - aa*x_bs
ATRIBUIE nr_bs ← norm(r_bs,2)
10. Afişare rezultate: x, b (reziduu asociat lui x), nr, x_bs, r_bs, nr_bs
OBSERVAŢIE :
1. Descrierea anterioară a programului de realizat foloseşte următoarele funcţii MATLAB: zeros,
sqrt, abs, rank, \, norm.

Programul se va rula pentru următoarele date de intrare:

EPS = 1.e-16

I.)
m = 5; n = 2
1 6  11 1 
2 7  12 0 
     
a = 3 8 ; b = 13; b = 0
     
4 9  14 0 
5 10 15 0

II.)
m = 5; n = 2
1 6 11  4 1 
2 7 12   0 
 5   
a = 3 8 13  ; b =  5  ; b = 0 
     
4 9 14 5  0 
5 10 15 5 0

S-ar putea să vă placă și