Sunteți pe pagina 1din 222

METODE DE CALCUL

NUMERIC MATRICEAL.
ALGORITMI
FUNDAMENTALI
Bogdan Dumitrescu Corneliu Popeea Boris Jora

Partea I
Tuturor studenţilor, foşti, actuali sau viitori,
precum şi copiilor noştri

Andrei Octavia Monica


Sebastian Corneliu Şerban
i

Cuvânt introductiv

Lucrarea de faţă, prima de o asemenea amploare ı̂n limba română, este con-
struită pe structura cursului de Calcul numeric, predat de autori la Facultatea
de Automatică şi Calculatoare a Universităţii Politehnica din Bucureşti. Lucrarea
expune, ı̂n manieră eminamente algoritmică, metodele de rezolvare a problemelor
fundamentale de calcul din algebra matriceală, care constituie primele şi, de cele
mai multe ori, principalele componente ale celor mai diverse aplicaţii din inginerie,
economie şi numeroase alte ramuri ale ştiinţei.
În afara studenţilor din facultăţile cu profil tehnic sau economic, lucrarea poate
fi utilă tuturor celor care, fie ei studenţi, cadre didactice, ingineri sau cercetători,
doresc să utilizeze cele mai moderne instrumente de calcul numeric matriceal. Pen-
tru ı̂nţelegerea noţiunilor prezentate, cititorul trebuie să posede cunoştinţe minime
de matematică, la nivelul celor dobândite ı̂n liceu sau ı̂n primul an de facultate.
Pentru orientare, fiecare capitol ı̂ncepe cu o trecere ı̂n revistă a bazelor matematice
ale problemelor de calcul studiate. De asemenea, cititorul ar trebui să fie capabil a
se exprima ı̂ntr-un limbaj de programare de nivel ı̂nalt; această condiţie nu e strict
necesară, dar constituie un avantaj, pentru că ı̂i permite să se concentreze asupra
ideilor şi nu a detaliilor de implementare ale acestora.
Cartea conţine 7 capitole, descrise ı̂n câteva cuvinte mai jos. La ı̂nceput se
află o bibliografie de bază, cuprinzând lucrări de largă utilizare, referite cu cifre
romane, care oferă o privire de perspectivă asupra ı̂ntregului domeniu. În final
se găseşte o a doua bibliografie, ı̂n general formată din articole (referite cu cifre
arabe) privind aspecte specifice ale problemelor tratate şi destinată cititorului care
doreşte să adâncească studiul dincolo de textul de faţă. Pentru facilitarea lecturii,
recomandăm consultarea listelor de notaţii şi de prescurtări uzuale, aflate câteva
pagini mai departe.
Capitolul 0, numerotat astfel pentru a sublinia caracterul său de iniţiere ı̂n dome-
niu, prezintă specificul calculului numeric şi justifică necesitatea existenţei cărţii de
faţă. Este vorba aici despre: reprezentarea numerelor reale ı̂n virgulă mobilă, pro-
prietăţile (uneori neaşteptate ale) operaţiilor cu astfel de numere precum şi meca-
nismele de apariţie inevitabilă a erorilor numerice. Este apoi considerată perechea
formată din problema de calcul şi algoritmul de rezolvare, relativ la care sunt defi-
ii

nite noţiunile fundamentale de condiţionare şi, respectiv, stabilitate numerică. În


ı̂ncheiere, este aruncată o privire asupra modului ı̂n care arhitectura calculatorului
influenţează concepţia algoritmilor.
Capitolul 1 este dedicat expunerii noţiunilor primare ale algebrei matriceale
(vectori, subspaţii, matrice de diverse tipuri şi proprietăţile acestora), constituind
totodată o introducere ı̂n problematica specifică a capitolelor următoare. Algoritmii
prezentaţi rezolvă unele probleme simple, dar fundamentale, cum ar fi ı̂nmulţirea a
două matrice, sau unele cazuri particulare, de exemplu cel al matricelor triunghiu-
lare, ale unor probleme mai dificile (rezolvarea sistemelor liniare, calculul valorilor
şi vectorilor proprii). Aceşti algoritmi sunt larg utilizaţi ı̂n continuare, ca elemente
constructive primare.
Capitolul 2 tratează metodele directe de rezolvare a sistemelor liniare Ax = b,
cu matrice A nesingulară, prezentând procedura de eliminare gaussiană, inclusiv
strategiile de pivotare adecvate, precum şi versiunile compacte ale acestei metode
bazate pe factorizarea LU a matricei A. În afara matricelor de formă generală,
sunt studiate şi cazurile, des ı̂ntâlnite ı̂n practică, ale matricelor bandă, simetrice şi
simetric pozitiv definite. De asemenea, sunt abordate probleme conexe, cum ar fi
calculul inversei şi al determinantului.
Capitolul 3 descrie metodele de rezolvare ı̂n sensul celor mai mici pătrate (CMMP)
a sistemelor liniare Ax = b, ı̂n care numărul ecuaţiilor diferă de cel al necunoscutelor,
deci A este o matrice dreptunghiulară de formă generală. În acest caz se utilizează
metode de ”eliminare” specifice, bazate pe aplicarea transformărilor ortogonale (re-
flectori Householder, rotaţii Givens etc.) iar conceptul central este cel de factorizare
QR. Dacă matricea A nu este de rang maxim, se recomandă utilizarea factorizării
ortogonale complete, care are la bază un algoritm de triangularizare cu pivotarea
coloanelor. Sistemele liniare de acest tip apar frecvent ı̂n prelucrarea datelor expe-
rimentale, statistică, identificarea sistemelor etc.
Capitolul 4 expune principalele metode de calcul al valorilor şi vectorilor proprii
ai unei matrice A. Este prezentat ı̂n detaliu algoritmul QR, care aduce matricea A la
forma Schur, reală sau complexă, pornind de la forma de principiu a algoritmului, ale
cărei proprietăţi matematice sunt uşor de analizat, şi ajungând la variantele relativ
sofisticate sub care acesta este implementat ı̂n programele profesionale. Alături de
cazul general este tratat şi cel al matricelor simetrice. Nu sunt uitaţi alţi algoritmi
importanţi, utili ı̂n cazuri particulare, cum ar fi metodele puterii, puterii inverse,
bisecţiei sau Jacobi. Cunoaşterea valorilor proprii este utilă ı̂n analiza stabilităţii
sistemelor dinamice, ı̂n studiul vibraţiilor (pentru clădiri, poduri, avioane) şi ı̂n
multe alte probleme aplicative majore.
Capitolul 5 prezintă metodele de calcul al descompunerii valorilor singulare
(DVS), care constituie instrumentul cel mai sigur de rezolvare a numeroase pro-
bleme din algebra matriceală, cum ar fi determinarea rangului, calculul unor norme
matriceale, construcţia bazelor pentru diverse subspaţii, rezolvarea ı̂n sensul celor
mai mici pătrate a sistemelor cu matrice de rang nemaxim. Algoritmul DVS este
o adaptare ingenioasă a algoritmului QR simetric, cunoscut din capitolul anterior.
Utilizarea DVS este ilustrată considerând unele variante ale problemei CMMP, de
exemplu CMMP totală sau cu restricţii, frecvent ı̂ntâlnite ı̂n aplicaţii.
iii

Capitolul 6 consideră calculul valorilor şi vectorilor proprii generalizaţi ai unei


perechi de matrice (A, B). Este prezentat algoritmul QZ, care aduce perechea la
forma Schur generalizată, precum şi problema conexă a calculului bazelor ortogo-
nale pentru subspaţii de deflaţie. Noţiunile şi algoritmii studiaţi aici sunt de mare
utilitate ı̂n probleme care apar, de exemplu, ı̂n teoria sistemelor precum şi ı̂n analiza
circuitelor electrice sau mecanice cu elemente ideale.
Principalele rezultate ale expunerii sunt concretizate sub formă de algoritmi
de calcul descrişi ı̂ntr-un pseudocod extrem de apropiat de implementarea directă
ı̂ntr-un limbaj de programare de nivel ı̂nalt. Algoritmii au fost testaţi de autori
ı̂n mediul de programare MATLAB; cu toate acestea, orice observaţii şi propuneri
din partea cititorilor, care să conducă la eliminarea unor erori sau la ı̂mbunătăţirea
performanţelor, sunt binevenite şi pot fi transmise la adresa menţionată mai jos.
Pentru majoritatea algoritmilor sunt precizate proprietăţile de stabilitate numerică,
de obicei ı̂ntr-o secţiune specială dedicată acestei teme, ı̂n fiecare capitol. Menţionăm
că o altă secţiune expune ı̂ntotdeuna informaţii despre condiţionarea problemelor de
calcul studiate; ı̂n acest fel, cititorul va avea o imagine clară a acurateţii cu care se
pot obţine soluţiile numerice ale diverselor probleme studiate. De asemenea, fiecare
capitol conţine ı̂n final o secţiune ce prezintă rutine (funcţii) din biblioteca LA-
PACK (Linear Algebra PACKage) şi din limbajul MATLAB (MATrix LABoratory),
reprezentative pentru problemele de calcul studiate. LAPACK [XV] implementează
cei mai eficienţi şi siguri algoritmi de calcul numeric matriceal şi este instrumentul
cel mai utilizat ı̂n acest domeniu. MATLAB [XIV] are o componentă didactică
mai pronunţată, ı̂mbinând o interfaţă utilizator simplă cu o calitate remarcabilă a
algoritmilor.
De asemenea, fiecare capitol este ı̂nsoţit de un set de probleme, ı̂n total peste
200, ale căror rezolvări complete sau parţiale se găsesc ı̂n partea finală a lucrării.
Recomandăm cititorului să consulte indicaţiile sau rezolvarea propusă de autori
numai pentru verificarea soluţiei personale sau după tentative serioase de găsire a
acesteia. În plus, un mare câştig pentru cititor ı̂l poate reprezenta implementarea
algoritmilor (cei de bază, din lucrare, şi cei derivaţi, ı̂n probleme) precum şi testarea
funcţionării lor pe exemple numerice reprezentative.
Aducem la cunoştinţa cititorilor că Grupul de Calcul Numeric din cadrul catedrei
de Automatică şi Ingineria Sistemelor de la Facultatea de Automatică şi Calcula-
toare, din care autorii fac parte, dispune de o bibliotecă de calcul numeric matriceal
scrisă ı̂n limbajul C, care conţine implementarea tuturor algoritmilor din lucrare.
Cei interesaţi pot contacta autorii la următoarele adrese de e-mail
bogdan,popeea,jora@lucky.schur.pub.ro
Autorii mulţumesc colegilor lor prof. Paul Flondor şi conf.dr.ing. Ioan Tăbuş
pentru interesul acordat şi ı̂n special pentru comentariile şi observaţiile constructive
făcute pe marginea lucrării. De asemenea, autorii aduc mulţumiri doamnei redactor
Viorica Fătu, de la Editura ALL Educational, pentru atenţia acordată acestei cărţi
ı̂n drumul către tipar.

Autorii
iv

Bibliografie generală
• Pentru chestiuni teoretice de calcul matriceal:

[ I ] Gantmaher F.R. Teoriia matriţ (ediţia a 2-a), Ed. Nauka, Moscova,


1966. (The Theory of Matrices, vols. 1-2, Chelsea, New York, 1959).
[ II ] Horn R.A., Johnson C.R. Matrix Analysis, Cambridge University
Press, Cambridge UK, 1985.
[ III ] Strang G. Introduction to Linear Algebra, Wellesley-Cambridge
Press, Wellesley, MA, USA, 1993.

• Pentru algoritmi de calcul matriceal:

[ IV ] Wilkinson J.H. The Algebraic Eigenvalue Problem, Clarendon Press,


Oxford, 1965.
[ V ] Stewart G. W. Introduction to Matrix Computations, Academic
Press, New York and London, 1973.
[ VI ] Golub G. H., Van Loan Ch. F. Matrix Computations, Second edition,
The John Hopkins University Press, Baltimore, Maryland, 1989.
[ VII ] Lawson C.L., Hanson R.J. Solving Least Squares Problems, SIAM,
Philadelphia, PA, USA, 1995.

• Pentru studiul condiţionării problemelor de calcul matriceal şi al stabilităţii


numerice a algoritmilor aferenţi:

[ VIII ] Stewart G.W., Sun J. Matrix Perturbation Theory, Academic


Press, London, 1990.
[ IX ] Higham N.J. Accuracy and Stability of Numerical Algorithms,
SIAM, Philadelphia PA, 1996.

• Pentru programe de calcul şi indicaţii de utilizare:

[ X ] Wilkinson J.H., Reinsch C. Handbook for Automatic Computa-


tion. Linear Algebra, Springer-Verlag Berlin, 1971.
[ XI ] Smith B.T., Boyle J.M., Ikebe Y., Klema V.C., Moler C.B. Matrix
Eigensystem Routines: EISPACK Guide, 2-nd ed., Springer–Verlag,
New York, 1974.
[ XII ] Garbow B.S., Boyle J.M., Dongarra J.J., Moler C.B. Matrix
Eigensystem Routines: EISPACK Guide Extension, Springer–Verlag,
New York, 1977.
[ XIII ] Dongarra J.J., Bunch J.R., Moler C.B., Stewart G.W. LINPACK
User’s Guide, SIAM Publications, Philadelphia, PA, 1978.
[ XIV ] MATLAB User’s Guide, The MathWorks Inc., Natick, MA, USA, 1992.
v

[ XV ] Anderson E., Bai Z., Bischof C., Demmel J., Dongarra J.,
Du Croz J., Greenbaum A., Hammarling S., McKenney A.,
Ostrouchov S., Sorensen D. LAPACK Users’ Guide, Second Edition,
SIAM, Philadelphia PA, 1995. (http://www.netlib.org/lapack/lug)

• Lucrări ı̂n limba română:


[ XVI ] Brânzănescu V., Stănăşilă O. Matematici speciale – teorie,
exemple, aplicaţii, Ed. ALL, Bucureşti, 1994.
[ XVII ] Bucur C.M., Popeea C.A., Simion Gh.Gh. Matematici speciale.
Calcul numeric, E.D.P., Bucureşti, 1983.
[ XVIII ] Ionescu V., Varga A. Teoria sistemelor. Sinteza robustă.
Metode numerice de calcul., Ed. ALL, Bucureşti, 1994.
[ XIX ] Iorga V., Jora B., Nicolescu C., Lopătan I., Fătu I., Programare
numerică, Ed. Teora, Bucureşti, 1996.

Lista de notaţii
N – mulţimea numerelor naturale
Z – mulţimea numerelor ı̂ntregi
R – mulţimea numerelor reale
C – mulţimea numerelor complexe

• Vectori
ni : p : nf – vectorul cu elementele ı̂ntregi ni , ni + p, ni + 2p, . . . , nf ; dacă p = 1,
vectorul se scrie simplu ni : nf
Rn – spaţiul liniar n-dimensional al vectorilor (coloană) x cu n componente reale
xi ∈ R, i = 1 : n
Cn – spaţiul liniar n-dimensional al vectorilor (coloană) x cu n componente com-
plexe xi ∈ C, i = 1 : n
ek , k = 1 : n – baza standard a spaţiului liniar Rn , respectiv Cn
xi , x(i) – elementul vectorului x aflat ı̂n poziţia i
x(i1 : i2 ) – vectorul format din elementele din poziţiile de la i1 la i2 ale vectorului x
P
(x, y) = y T x = ni=1 xi yi – produsul scalar standard a P doi vectori x, y ∈ Rn ; ı̂n
H n
cazul complex produsul scalar este (x, y) = y x = i=1 xi ȳi
Pn 2
kxk = (x, x)1/2 = ( i=1 |xi | )1/2 – norma euclidiană a vectorului x ∈ Rn
vi

P 1/p
kxkp = ( ni=1 |xi |p ) – p-normele vectorului n-dimensional x, p ≥ 1; ı̂n calcule se
utilizează ı̂n special kxk1 ,kxk2 = kxk şi kxk∞ = maxi=1:n |xi |

• Matrice
Rm×n – spaţiul liniar al matricelor cu m linii şi n coloane cu elemente reale aij ∈ R,
i = 1 : m, j = 1 : n

Cm×n – spaţiul liniar al matricelor cu m linii şi n coloane cu elemente complexe


aij ∈ C, i = 1 : m, j = 1 : n 1

In – matricea unitate de ordinul n

aij , A(i, j) – elementul matricei A situat ı̂n linia i, coloana j

A(i1 : i2 , j1 : j2 ) – blocul matricei A format din liniile de la i1 la i2 şi coloanele de


la j1 la j2 . Indicele ”:”, fără altă precizare, semnifică luarea tuturor liniilor
sau coloanele

AT – transpusa matricei (reale sau complexe) A

AH – conjugata hermitică a matricei (complexe) A, i.e. AH = ĀT , unde Ā este


conjugata complexă a lui A

A−1 – inversa matricei pătrate nesingulare A, i.e. AA−1 = A−1 A = In


T −1
A−T = (A−1 ) = (AT )
H −1
A−H = (A−1 ) = (AH )

trA – urma matricei pătrate A, i.e. suma elementelor diagonale

detA – determinantul matricei pătrate A

λi (A), i = 1 : n – valorile proprii ale matricei pătrate A de ordin n

λ(A) – spectrul (de valori proprii) {λ1 (A), λ2 (A), . . . , λn (A)} al matricei A

ρ(A) = maxi=1:n |λi (A)| – raza spectrală a matricei A

cond(A) = kAk kA−1 k – numărul de condiţie la inversare al matricei A (k · k este o


normă matriceală consistentă)

A+ – pseudoinversa normală (Moore-Penrose) a matricei A; dacă A este monică


−1 −1
A+ = (ATA) AT , dacă A este epică, atunci A+ = AT(AAT )

σi (A), i = 1 : p, p = min(m, n) – valorile singulare ale matricei A ordonate astfel


ı̂ncât σ1 ≥ σ2 ≥ . . . ≥ σp
1 În calcule, vectorii se identifică cu matricele cu o singură coloană, iar scalarii se identifică cu

matricele (sau vectorii) cu un singur element.


vii

σ(A) – mulţimea {σ1 (A), σ2 (A), . . . , σp (A)} a valorilor singulare ale matricei A

r = rangA – rangul matricei A, i.e. numărul valorilor singulare nenule

(A, B) = tr(B T A) (tr(B H A)) – produsul scalar a două matrice reale (complexe)

kAkF = (A, A)1/2 – norma Frobenius a matricei A,


2 Pm Pn 2 2 Pr
kAkF = i=1 j=1 |aij | sau kAkF = i=1 σi 2
P 1/p
|A|p = ( ri=1 σi p ) – p-normele Schatten, p ≥ 1; ı̂n calcule se utilizează ı̂n spe-
Pr
cial norma-urmă |A|1 = i=1 σi , norma Frobenius |A|2 = kAkF şi norma
spectrală |A|∞ = σ1 (A)

kAkp = maxkxkp =1 kAxkp – p-normele induse; ı̂n calcule se utilizează ı̂n special
Pm
norma kAk1 = maxP j=1:n i=1 |aij |, norma spectrală kAk2 = σ1 (A) şi norma
n
kAk∞ = maxi=1:m j=1 |aij |

• Transformări
SAT – transformare de echivalenţă (bilaterală) a matricei A ∈ Rm×n (S şi T sunt
matrice pătrate nesingulare; transformarea de echivalenţă conservă rangul, iar
dacă S, T sunt ortogonale, atunci conservă şi valorile singulare)

T −1 AT – transformare de asemănare a matricei A ∈ Rn×n (transformarea de


asemănare conservă valorile proprii)

T T AT – transformare de congruenţă a matricei A ∈ Rn×n (T este nesingulară; apli-


cată unei matrice A simetrice, transformarea de congruenţă conservă rangul
şi inerţia i.e. numerele de valori proprii negative, nule şi, respectiv, pozitive)

Dacă T este ortogonală, atunci T −1 = T T şi transformarea T T AT se numeşte


transformare de asemănare ortogonală

• Prescurtări
i.e. – (id est) adică

e.g. – (exempli gratia) de exemplu, bunăoară

DVS – descompunerea valorilor singulare

FSR(G) – forma Schur reală (generalizată)

FSC(G) – forma Schur complexă (generalizată)

FSH – forma (bloc-)superior Hessenberg

FVM – format virgulă mobilă

ITE – matrice inferior triunghiulară elementară


viii

LU – factorizarea LU
PE – matrice de permutare elementară
QR – factorizarea QR

• Alfabetul grec

Majuscule Minuscule Denumire Corespondentul


latin
A α alfa A, a
B β beta B, b
Γ γ gamma G, g
∆ δ delta D, d
E ǫ epsilon E, e
Z ζ zeta Z, z
H η eta E, e
Θ θ theta -
I ι iota I, i
K κ kappa K, k
Λ λ lambda L, l
M µ mü M, m
N ν nü N, n
Ξ ξ xi X, x
O o omicron O, o
Π π pi P, p
P ρ rho R, r
Σ σ sigma S, s
T τ tau T, t
Υ υ upsilon U, u
Φ φ phi F, f
X χ hi H, h
Ψ ψ psi -
Ω ω omega O, o
Cuprins

0 Concepte fundamentale 1
0.1 Reprezentarea ı̂n virgulă mobilă . . . . . . . . . . . . . . . . . . . . . 2
0.2 Aritmetica ı̂n virgulă mobilă . . . . . . . . . . . . . . . . . . . . . . . 7
0.3 Condiţionarea problemelor de calcul . . . . . . . . . . . . . . . . . . 10
0.4 Stabilitatea numerică a algoritmilor . . . . . . . . . . . . . . . . . . 12
0.5 Calităţile unui algoritm numeric . . . . . . . . . . . . . . . . . . . . 15
0.6 Implicaţiile arhitecturii calculatoarelor . . . . . . . . . . . . . . . . . 16
0.7 Probleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

1 Algoritmi elementari 19
1.1 Vectori. Spaţiul vectorial Rn . . . . . . . . . . . . . . . . . . . . . . 19
1.2 Produs scalar. Norme. Ortogonalitate . . . . . . . . . . . . . . . . . 24
1.3 Matrice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.4 Înmulţirea matricelor . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
1.5 Norme matriceale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
1.6 Matrice structurate . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
1.7 Matrice bloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
1.8 Matrice normale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
1.9 Sisteme de ecuaţii liniare . . . . . . . . . . . . . . . . . . . . . . . . . 49
1.10 Valori şi vectori proprii . . . . . . . . . . . . . . . . . . . . . . . . . . 59
1.11 Rutinele BLAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
1.12 Probleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

2 Rezolvarea sistemelor de ecuaţii liniare 69


2.1 Transformări elementare . . . . . . . . . . . . . . . . . . . . . . . . . 70
2.2 Triangularizare prin eliminare gaussiană . . . . . . . . . . . . . . . . 72
2.3 Strategii de pivotare . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
2.3.1 Pivotare parţială . . . . . . . . . . . . . . . . . . . . . . . . . 76
2.3.2 Pivotare completă . . . . . . . . . . . . . . . . . . . . . . . . 78
2.4 Factorizări LU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
2.4.1 Factorizări LU rezultate din eliminarea gaussiană . . . . . . . 82
2.4.2 Factorizări LU compacte . . . . . . . . . . . . . . . . . . . . . 84
2.4.3 Factorizări LU prin eliminare gaussiană la nivel de bloc . . . 86
2.4.4 Factorizări LU compacte la nivel de bloc . . . . . . . . . . . . 89
2.5 Rezolvarea sistemelor liniare . . . . . . . . . . . . . . . . . . . . . . . 91
x CUPRINS

2.6 Calculul inversei şi al determinantului . . . . . . . . . . . . . . . . . 93


2.6.1 Calculul inversei unei matrice . . . . . . . . . . . . . . . . . . 94
2.6.2 Calculul determinantului . . . . . . . . . . . . . . . . . . . . 97
2.7 Condiţionarea sistemelor liniare . . . . . . . . . . . . . . . . . . . . . 97
2.8 Stabilitate numerică . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
2.8.1 Scalarea sistemelor liniare . . . . . . . . . . . . . . . . . . . . 103
2.8.2 Rafinarea iterativă a soluţiei calculate . . . . . . . . . . . . . 104
2.9 Sisteme bandă . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
2.10 Sisteme simetrice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
2.11 Sisteme simetrice pozitiv definite . . . . . . . . . . . . . . . . . . . . 114
2.12 Rutine LAPACK şi MATLAB . . . . . . . . . . . . . . . . . . . . . . 117
2.13 Probleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

3 Problema celor mai mici pătrate 123


3.1 Transformări ortogonale . . . . . . . . . . . . . . . . . . . . . . . . . 125
3.1.1 Reflectori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
3.1.2 Rotaţii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
3.2 Transformări unitare . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
3.2.1 Reflectori complecşi . . . . . . . . . . . . . . . . . . . . . . . 138
3.2.2 Rotaţii complexe . . . . . . . . . . . . . . . . . . . . . . . . . 142
3.3 Triangularizarea ortogonală . . . . . . . . . . . . . . . . . . . . . . . 143
3.4 Factorizarea QR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
3.4.1 Acumularea transformărilor . . . . . . . . . . . . . . . . . . . 153
3.4.2 Aplicarea transformărilor . . . . . . . . . . . . . . . . . . . . 155
3.4.3 Triangularizarea ortogonală la nivel de bloc . . . . . . . . . . 156
3.4.4 Alte metode de ortogonalizare . . . . . . . . . . . . . . . . . 160
3.4.5 Factorizarea QL . . . . . . . . . . . . . . . . . . . . . . . . . 162
3.5 Rezolvarea problemei CMMP . . . . . . . . . . . . . . . . . . . . . . 162
3.5.1 Calculul pseudosoluţiei . . . . . . . . . . . . . . . . . . . . . . 164
3.5.2 Calculul proiecţiilor . . . . . . . . . . . . . . . . . . . . . . . 167
3.5.3 Problema CMMP cu membru drept multiplu . . . . . . . . . 168
3.5.4 Calculul pseudoinversei . . . . . . . . . . . . . . . . . . . . . 168
3.5.5 Alte metode de rezolvare a problemei CMMP . . . . . . . . . 169
3.6 Sisteme liniare subdeterminate . . . . . . . . . . . . . . . . . . . . . 170
3.6.1 Triangularizarea ortogonală la dreapta . . . . . . . . . . . . . 170
3.6.2 Factorizarea LQ . . . . . . . . . . . . . . . . . . . . . . . . . 172
3.6.3 Rezolvarea sistemelor subdeterminate . . . . . . . . . . . . . 174
3.7 Condiţionarea problemelor CMMP . . . . . . . . . . . . . . . . . . . 177
3.7.1 Preliminarii . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
3.7.2 Sensibilitatea pseudosoluţiei . . . . . . . . . . . . . . . . . . . 180
3.7.3 Sensibilitatea soluţiei normale . . . . . . . . . . . . . . . . . . 182
3.8 Stabilitatea algoritmilor de triangularizare . . . . . . . . . . . . . . . 183
3.8.1 Stabilitatea numerică a algoritmilor fundamentali . . . . . . . 184
3.8.2 Acurateţea soluţiilor calculate . . . . . . . . . . . . . . . . . . 185
3.8.3 Scalarea problemei CMMP . . . . . . . . . . . . . . . . . . . 186
3.8.4 Rafinarea iterativă a soluţiei CMMP . . . . . . . . . . . . . . 187
CUPRINS xi

3.9 Descompunerea ortogonală completă . . . . . . . . . . . . . . . . . . 189


3.9.1 Triangularizarea ortogonală cu pivotarea coloanelor . . . . . . 190
3.9.2 Determinarea rangului . . . . . . . . . . . . . . . . . . . . . . 193
3.9.3 Triangularizarea ortogonală completă . . . . . . . . . . . . . 195
3.9.4 Descompunerea ortogonală completă . . . . . . . . . . . . . . 197
3.9.5 Problema generală CMMP . . . . . . . . . . . . . . . . . . . 197
3.10 Rutine LAPACK şi MATLAB . . . . . . . . . . . . . . . . . . . . . . 199
3.11 Probleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
0 CUPRINS
Capitolul 0

Concepte fundamentale ale


calculului numeric

Rezolvarea numerică — cu ajutorul calculatorului – a unei probleme de calcul se face


ı̂ntotdeauna pe baza unui algoritm, i.e. a unei succesiuni finite şi bine precizate de
operaţii elementare (cum ar fi adunarea, ı̂nmulţirea etc.) prin care soluţia problemei
este calculată ı̂n funcţie de datele iniţiale. Deşi matematica furnizează deseori, ı̂n
demonstraţiile numite constructive, algoritmi de rezolvare a problemelor pe care le
tratează, s-a dovedit că de multe ori implementările numerice ale acestor algoritmi
au dezavantaje majore care ı̂i fac de nefolosit.
Discrepanţa ı̂ntre corectitudinea matematică a unui algoritm şi adecvarea lui la
specificul calculului numeric practic poate proveni din două cauze importante. Una,
evidentă, constă ı̂n (eventuala) complexitate (ı̂n ce priveşte numărul operaţiilor de
executat şi memoria ocupată de date), care poate duce fie la timpi de execuţie foarte
mari, deci nepractici, fie, pur şi simplu, la imposibilitatea execuţiei programului
care implementează algoritmul. A doua cauză, mai subtilă, o constituie erorile
care ı̂nsoţesc calculul numeric; prin acumulare, acestea pot periclita acurateţea
rezultatului.
O serie de erori sunt inerente, cum ar fi cele care apar la determinarea datelor
din măsurători experimentale. Altele sunt legate de algoritmul de calcul utilizat,
care se poate baza pe simplificări ı̂n modelarea unor fenomene fizice sau poate
proveni dintr-o metodă matematică implicând o infinitate de operaţii, din care,
prin trunchiere, se reţine doar un număr finit de operaţii; ı̂n ambele cazuri, prin
natura lucrurilor, algoritmul va furniza o soluţie aproximativă.
În fine, există erori având cauze specifice calculului numeric, care operează cu
numere reale (şi nu doar cu numere ı̂ntregi); de acestea ne vom ocupa mai pe larg.
Desigur, numerele reale sunt reprezentate ı̂n memoria calculatorului ı̂ntr-un format
bine precizat şi ocupând un număr relativ mic de locaţii de memorie, de exemplu
4 sau 8 octeţi; astfel, o infinitate de numere este reprezentată printr-un număr
finit de combinaţii de biţi. De aici o primă sursă de erori, cele de reprezentare.
Apoi, pot apărea erori şi la efectuarea operaţiilor cu numere reale aflate ı̂n memoria
calculatorului, erori numite de rotunjire; aceasta nu se ı̂ntâmplă pentru că unitatea
2 CAPITOLUL 0. CONCEPTE FUNDAMENTALE

centrală (microprocesorul, de exemplu) ar ”greşi” la calcule, ci, din nou, datorită


faptului că numerele reale sunt reprezentate ı̂ntr-un format finit, atât ı̂n memorie,
cât şi ı̂n unitatea centrală.
Prin aceasta, calculul cu numere reale diferă fundamental de cel cu ı̂ntregi. Vom
obţine 1 + 2 = 3 pe orice calculator, ı̂n schimb 0.1 + 0.2 6= 0.3 pe orice calculator
(doar dacă nu se folosesc programe speciale !); de exemplu — pe un calculator şi
ı̂ntr-un limbaj de programare pe care nu le precizăm — adunând 0.1+0.2 şi scăzând
din rezultat 0.3 nu obţinem 0, aşa cum ne-am aştepta, ci aproximativ 5.5 · 10−17 ; e
drept, eroarea este infimă. Pericolul apare ı̂n cazul acumulării unor astfel de mici
erori, acumulare care poate duce la degradarea — uneori fatală — a rezultatului
produs.
În acest capitol ne vom ocupa de aspecte specifice elementare ale calculului
numeric: modul de reprezentare a numerelor reale, felul ı̂n care se apreciază calitatea
unui algoritm numeric, cuantificarea efectului erorilor de rotunjire asupra acurateţii
soluţiei numerice a unei probleme; acest ultim scop face obiectul analizei numerice
şi este, ı̂n general, dificil de atins.

0.1 Reprezentarea ı̂n virgulă mobilă


Fie x şi x̂ numere reale, x̂ fiind interpretat ca o aproximare a lui x. Vom prezenta
două măsuri naturale ale calităţii aproximării.
Eroarea absolută (cu care x̂ aproximează x) se defineşte prin

∆ = |x − x̂|.

Dacă x 6= 0, atunci eroarea relativă se defineşte prin



x − x̂
ε = = ∆.
x |x|

Dacă x ∈ Rn , se ı̂nlocuieşte ı̂n relaţiile de mai sus valoarea absolută | · | cu o


normă vectorială k · k (vom discuta despre norme vectoriale ı̂n capitolul 1).
Exemplul 0.1 Fie x = 1.0, şi x̂ = 0.999 o aproximare a sa. Atunci ∆ = 10−3 şi
ε = 10−3 . Dacă ŷ = 0.009 este o aproximaţie a lui y = 0.01, atunci eroarea absolută
este aceeaşi ca ı̂n cazul precedent, ∆ = 10−3 , dar eroarea relativă este de o sută de
ori mai mare: ε = 10−1 . Raportându-se la valoarea lui x, eroarea relativă este mult
mai adecvată pentru estimarea calităţii aproximării x̂. ♦
Erorile de reprezentare apar datorită memorării ı̂n calculator a numerelor reale
printr-o secvenţă finită de simboluri (cifre binare). Pentru a prezenta o estimare
a acestor erori, să reamintim bine cunoscuta reprezentare poziţională a numerelor
reale. Fie

• β ∈ N, β ≥ 2, baza de numeraţie;

• C = {0, 1, . . . , β − 1}, mulţimea cifrelor ı̂n baza β, adică primele β numere


naturale.
0.1. REPREZENTAREA ÎN VIRGULĂ MOBILĂ 3

Se ştie că orice număr x ∈ R poate fi scris unic sub forma unei secvenţe infinite

x = san−1 an−2 . . . a0 .a−1 a−2 a−3 . . . , (0.1)

care nu se termină printr-o secvenţă infinită de cifre egale cu β − 1 şi ı̂n care ai ∈ C,
iar s este semnul, s ∈ {+, −}. Valoarea lui x este
n−1 ∞
!
X X
i −i
x=s ai β + a−i β . (0.2)
i=0 i=1

Convenim să eliminăm din scriere secvenţa infinită de zerouri finale, atunci când
este cazul. Să exemplificăm relaţiile (0.1) şi (0.2).
Exemplul 0.2 Numărul ı̂n baza 10

3.25 = 3 · 100 + 2 · 10−1 + 5 · 10−2

se reprezintă ı̂n baza 2 ı̂n modul următor (verificaţi egalitatea):

11.01 = 1 · 21 + 1 · 20 + 0 · 2−1 + 1 · 2−2 .

În ambele baze, reprezentările au un număr finit de cifre. În schimb, numărul
exprimat simplu ı̂n baza 10:
0.1 = 1 · 10−1
are o reprezentare de lungime infinită ı̂n baza 2 (verificaţi din nou egalitatea):

X
0.0001100110011 . . . = (2−4 + 2−5 ) 2−4k .
k=0

În baza 10, următoarele două secvenţe

0.99999 . . .
1.00000 . . .

reprezintă acelaşi număr real. Reprezentările binare corespunzătoare sunt

0.11111 . . .
1.00000 . . .

În ambele situaţii, reprezentarea acceptată este 1.0000 . . . ♦


Evident, reprezentarea numerelor reale pe calculator poate avea doar un număr
finit de cifre şi deci, prin natura ei, este aproximativă. O ”bună” aproximare printr-o
secvenţă finită de lungime fixată trebuie să asigure:
• un domeniu suficient de mare de numere reprezentate;
• o eroare relativă de reprezentare suficient de mică;
• o distribuţie uniformă a erorii relative de reprezentare.
4 CAPITOLUL 0. CONCEPTE FUNDAMENTALE

Un bun compromis ı̂n satisfacerea acestor cerinţe este dat de aşa numitul Format
Virgulă Mobilă (FVM).

Definiţia 0.1 Un Format Virgulă Mobilă (FVM) este definit de trei ı̂ntregi (β, t, p),
cu următoarea semnificaţie:
β – baza de numeraţie (β ≥ 2);
t – precizia, adică numărul de cifre semnificative (”lungimea” mantisei);
p – numărul de cifre ale exponentului.
Un număr ı̂n virgulă mobilă este o pereche (f, e), unde

f = ±0.f1 f2 . . . ft , f1 6= 0, fi ∈ C

este un număr fracţionar cu semn (plus sau minus), normalizat (i.e. f1 6= 0), cu
t cifre, denumit mantisă, iar
e = ±e1 e2 . . . ep
este un ı̂ntreg cu semn, cu p cifre, numit exponent. Valoarea reală asociată număru-
lui ı̂n virgulă mobilă (f, e) este
x = f · βe.

Fie L valoarea minimă admisă a exponentului (de exemplu L = − ρ . . . ρ, unde


| {z }
p
ρ = β − 1) şi U cea maximă (de exemplu U = −L). Se observă că toate numerele
ı̂n virgulă mobilă x satisfac:

β L−1 = m ≤ |x| ≤ M = β U (1 − β −t )

adică domeniul reprezentării ı̂n virgulă mobilă este intervalul R = [−M, M ]. De-
sigur, pentru majoritatea reprezentărilor pe calculator, β = 2 (se mai foloseşte, de
exemplu, β = 16 şi chiar β = 10).
Exemplul 0.3 Să considerăm FVM cu (β, t, p) = (2, 2, 1). Atunci L = −1, U = 1,
m = 2−2 = 0.2510 , M = 2(1 − 2−2 ) = 1.510 . Numerele reale care au o reprezentare
exactă ı̂n acest FVM sunt:
x1 = (−0.11, +1) = −1.510 x7 = (+0.10, −1) = 0.2510
x2 = (−0.10, +1) = −1.010 x8 = (+0.11, −1) = 0.37510
x3 = (−0.11, 0) = −0.7510 x9 = (+0.10, 0) = 0.510
x4 = (−0.10, 0) = −0.510 x10 = (+0.11, 0) = 0.7510
x5 = (−0.11, −1) = −0.37510 x11 = (+0.10, +1) = 1.010
x6 = (−0.10, −1) = −0.2510 x12 = (+0.11, +1) = 1.510

şi vor fi folosite pentru reprezentarea (aproximativă) a tuturor numerelor reale din
intervalul [−1.5, 1.5]. Reprezentarea geometrică a tuturor acestor numere pe axa
reală este prezentată ı̂n figura 0.1. Numerele cu reprezentare exactă ı̂n virgulă
mobilă sunt relativ uniform distribuite; mai precis, |xi − xi−1 | / |xi | are aproximativ
aceleaşi valori pentru orice i. ♦

Exemplul 0.4 Un FVM pe 32 biţi poate fi următorul: (β, t, p) = (2, 24, 7). Doi
biţi sunt atribuiţi reprezentării semnelor mantisei şi exponentului; deoarece primul
0.1. REPREZENTAREA ÎN VIRGULĂ MOBILĂ 5
-1.5 -1 -0.5 0.5 1 1.5
0 -
x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12

Fig. 0.1: Reprezentarea numerelor ı̂n virgulă mobilă din exemplul 0.3

0 1 0 0 1 1 0 0 0 1 1 0 1 0 0 1 1 0 1 1 1 0 0 0 0 0 0 0 1 0 1 1
6 -
exponent (7 biţi)
6 mantisa (23+1 biţi) -

semn exponent semn număr (mantisă)

Fig. 0.2: Structura unui număr ı̂n virgulă mobilă, pentru (β, t, p) = (2, 24, 7)

bit al mantisei are ı̂ntotdeauna valoarea 1, semnul mantisei se memorează ı̂n locul
acestui bit, economisind astfel un bit al reprezentării. Un exemplu de număr ı̂n
virgulă mobilă ı̂n acest format este prezentat ı̂n figura 0.2.
Pentru acest FVM avem: L = −127, U = 127, m = 2−127 = (2−10 )13 23 ≈ 10−38 ,
M ≈ 1038 (putem aproxima 210 ≈ 103 ). Aceasta arată că FVM acoperă un domeniu
larg de numere, utilizând un număr relativ mic de cifre binare. Acest exemplu este
foarte apropiat de formatul standard IEEE pentru numere ı̂n virgulă mobilă ı̂n
simplă precizie.
În formatul din acest exemplu, numărul real 0.1 are mantisa

0.110011001100110011001100

şi exponentul 10000011 (−3 ı̂n baza 10; prima cifră 1 a exponentului reprezintă
semnul). Aşadar numărul 0.1 este reprezentat aproximativ (vezi exemplul 0.2). ♦

Observaţia 0.1 Definiţia 0.1 nu permite reprezentarea exactă a numărului 0,


acesta neputând avea o mantisă normalizată. Practic, pentru a reprezenta 0, precum
şi unele simboluri speciale despre care se va vorbi mai târziu, se folosesc valori
dedicate ale exponentului, ı̂n afara intervalului [L, U ]. De aceea, ı̂n standardul
IEEE pentru simplă precizie, L = −126. ♦
Pentru a estima erorile efectuate la reprezentarea unui număr real ı̂n virgulă
mobilă, să considerăm un FVM, adică (β, t, p), şi să notăm

F = {x ∈ R | x are reprezentare exactă in VM} ∪ {0}. (0.3)

Desigur, F este o mulţime finită de numere raţionale.


Reprezentarea numărului real x ∈ [−M, M ] ı̂n FVM ı̂nseamnă aproximarea lui
cu un număr x̂ ∈ F. Această aproximare poate fi exprimată printr-o funcţie de
rotunjire.

Definiţia 0.2 Dacă (β, t, p) este un FVM şi F este mulţimea definită ı̂n (0.3),
atunci o funcţie
f l : [−M, M ] → F
6 CAPITOLUL 0. CONCEPTE FUNDAMENTALE

care asociază fiecărui x ∈ [−M, M ] o unică reprezentare ı̂n virgulă mobilă

x̂ = f l(x)

este numită funcţie de rotunjire. Eroarea relativă de aproximare

|x − f l(x)|
|x|

definită pentru orice x ∈ [−M, M ] nenul este denumită eroare de reprezentare.

Deoarece intervalul [−M, M ] este o mulţime infinită de numere reale, fiecare


x̂ ∈ F constituie ”reprezentarea ı̂n VM” a unei mulţimi infinite de numere din
[−M, M ]; suntem interesaţi să găsim o margine superioară a erorii de reprezentare
pentru o funcţie de rotunjire dată. Există mai multe funcţii de rotunjire. O vom
prezenta doar pe cea mai simplă, denumită rotunjire prin tăiere. În acest scop, să
scriem numărul x ∈ [−M, M ] ı̂n forma (0.1) normalizată:

x = f · β e = ±0.f1 f2 . . . ft ft+1 . . . · β e =
= ±0.f1 f2 . . . ft · β e ± 0.ft+1 ft+2 . . . · β e−t =
= fˆ · β e + ĝ · β e−t ,

unde fi ∈ C, f1 6= 0, fˆ = ±0.f1 f2 . . . ft , ĝ = ±0.ft+1 ft+2 . . .


În mod evident:

1/β ≤ |f | < 1, 1/β ≤ |fˆ| < 1, 0 ≤ |ĝ| < 1. (0.4)

Funcţia de rotunjire prin tăiere

f l1 : [−M, M ] → F

este definită prin 


x̂ = f l1 (x) = fˆ · β e , pentru x 6= 0,
0, pentru x = 0.
Pe scurt, reprezentarea ı̂n VM se obţine prin tăierea cifrelor mantisei normalizate a
numărului x care se află ı̂n afara formatului (de la poziţia t + 1 ı̂ncolo).
Utilizând inegalităţile (0.4), este uşor de stabilit o margine superioară a erorii
de reprezentare introduse de f l1 . Într-adevăr, pentru orice x ∈ [−M, M ] \ {0} avem

|x − f l1 (x)| |f β e − fˆβ e | |ĝ|β e−t β −t


ε= = e
= e
< −1 = β −t+1 .
|x| |f |β |f |β β

Această formulă arată că, indiferent de valoarea numărului x, o margine pentru


mărimea erorii de reprezentare este determinată exclusiv de numărul de cifre ale
mantisei (ı̂n baza de numeraţie a FVM) şi acesta este motivul pentru care t este
numit precizia reprezentării ı̂n virgulă mobilă. Numărul β −t+1 este numit epsilon
maşină şi reprezintă distanţa dintre 1 şi următorul număr cu reprezentare ı̂n FVM
(vezi problema 0.5).
0.2. ARITMETICA ÎN VIRGULĂ MOBILĂ 7

Pe majoritatea calculatoarelor, numerele ı̂n virgulă mobilă au o precizie fixată.


Multe calculatoare au, de asemenea, posibilitatea de a manipula numere ı̂n virgulă
mobilă cu aproximativ 2t biţi pentru mantisă; astfel de numere sunt numite ı̂n
dublă precizie. De exemplu, ı̂n standardul IEEE, numerele ı̂n dublă precizie sunt
memorate pe 64 biţi, cu t = 53 şi p = 10 (un bit suplimentar este dedicat memorării
semnului exponentului).
Pentru toate funcţiile de rotunjire folosite, marginea superioară a erorii de re-
prezentare are forma
ε ≤ µ · β −t , (0.5)
unde µ este un număr de ordinul unităţii.
Din (0.5) rezultă existenţa unui număr ρ astfel ı̂ncât
x̂ = f l(x) = x(1 + ρ), |ρ| ≤ µβ −t , (0.6)
ceea ce este un alt mod de exprimare a erorii de reprezentare.
Cele t cifre ale mantisei sunt numite cifre semnificative ale numărului real repre-
zentat. În baza de numeraţie zecimală, numerele reprezentate ı̂n simplă precizie
conform standardului IEEE (t = 24) au 7 cifre semnificative (numărăm 3 cifre
zecimale pentru 10 cifre binare), iar cele ı̂n dublă precizie (t = 53) au 16 cifre sem-
nificative; ı̂n consecinţă, eroarea maximă de reprezentare este de aproximativ 10−7 ,
respectiv 10−16 (anume chiar epsilon maşină). O prezentare detaliată a standardu-
lui IEEE poate fi găsită ı̂n [?].

0.2 Aritmetica ı̂n virgulă mobilă


Calculatoarele cu hardware dedicat operaţiilor ı̂n virgulă mobilă sunt prevăzute cu
un set de instrucţiuni pentru implementarea unor operaţii cu numere ı̂n virgulă
mobilă ca, de exemplu, adunarea, scăderea, ı̂nmulţirea sau ı̂mpărţirea. Trebuie su-
bliniat că operaţiile menţionate diferă de cele matematice corespunzătoare deoarece
rezultatul lor aparţine ı̂ntotdeauna mulţimii finite F a numerelor ı̂n virgulă mo-
bilă. Aşadar operaţiile aritmetice nu pot fi executate exact. Eroarea introdusă de
operaţiile aritmetice ı̂n virgulă mobilă se numeşte eroare de rotunjire. Consecinţele
pot fi foarte importante; există posibilitatea ca erorile de rotunjire să se acumuleze
şi, ı̂n calcule lungi, valorile finale să fie afectate, chiar până la a le face inutilizabile.
De aceea este de dorit ca fiecare algoritm să fie analizat pentru a vedea ı̂n ce măsură
erorile de rotunjire afectează rezultatele; ı̂n general, aceasta este o sarcină dificilă.
Exemplul 0.5 Considerăm FVM cu (β, t, p) = (10, 3, 1). Adunând exact numerele
1.23 şi 20.5, amândouă reprezentabile exact ı̂n FVM ales, se obţine 21.73. Rotunjit
prin tăiere, rezultatul ı̂n VM este 21.7, deci diferit de cel exact. ♦
Analiza erorilor de rotunjire se bazează pe cunoaşterea marginilor superioare ale
erorilor ce apar ı̂n operaţiile ı̂n virgulă mobilă. Pentru majoritatea calculatoarelor
este valabil următorul model al erorilor asociate operaţiilor ı̂n virgulă mobilă, bazat
pe evaluarea (0.6): notând cu f l(xy), f l(x/y) şi f l(x + y) produsul, câtul, respectiv
suma calculate ale numerelor ı̂n virgulă mobilă x şi y, atunci, ı̂ntr-un FVM cu t cifre
avem
f l(x op y) = (x op y)(1 + ρ), |ρ| ≤ µβ −t , (0.7)
8 CAPITOLUL 0. CONCEPTE FUNDAMENTALE

unde op poate fi +, · sau /, iar µ este un număr de ordinul unităţii.


Modelul (0.7) este obţinut presupunând că x op y este calculat exact, apoi rezul-
tatul este transformat ı̂n FVM printr-o funcţie de rotunjire. În realitate, lucrurile nu
stau chiar aşa; unităţile specializate pentru calculul ı̂n VM nu obţin rezultatul exact,
dar se comportă ca şi cum l-ar obţine, lucrând pe baza unor algoritmi nebanali, a
căror cunoaştere nu este necesară pentru ı̂nţelegerea algoritmilor din această lucrare
şi a căror prezentare depăşeşte cadrul problematicii propuse.
În completarea relaţiei (0.7), trebuie să menţionăm că, atunci când o operaţie
ı̂n virgulă mobilă produce un număr cu un modul prea mare (> M ), apare eroarea
numită de depăşire superioară (overflow). Când rezultatul este prea mic ı̂n valoare
absolută (< m, dar nenulă), eroarea se numeşte de depăşire inferioară (underflow).
Desigur, orice algoritm bine conceput trebuie să specifice cum se procedează ı̂n
eventualitatea unor depăşiri şi, mai ales, să ı̂ncerce evitarea lor (vom explica ı̂n
capitolul următor tehnica folosită — scalarea). Depăşirea inferioară nu constituie
de regulă o eroare gravă, de aceea majoritatea calculatoarelor atribuie automat
rezultatului valoarea zero. În cazul unei depăşiri superioare, de obicei calculele sunt
oprite sau, cel puţin, este afişat un mesaj de avertisment. În standardul IEEE pentru
virgulă mobilă, există o valoare specială, numită Inf (infinit), care este atribuită
rezultatului ı̂n cazul unei depăşiri superioare; calculele continuă cu această valoare;
rezultatele se obţin conform regulilor uzuale de lucru cu infinităţi. O altă valoare
specială – NaN (Not a Number) – este atribuită rezultatelor nedefinite, ca 0 · ∞,
0/0, ∞/∞; o operaţie implicând NaN are ı̂ntotdeauna ca rezultat NaN.
Relaţia (0.7) garantează că o operaţie aritmetică introduce erori relative mici,
de ordinul β −t (adică al lui epsilon maşină). O problemă fundamentală a calculului
numeric este evaluarea mărimii erorii ce afectează rezultatul ı̂n cazul unei secvenţe
de operaţii.
Pentru a aborda problema, să considerăm două exemple ı̂n care apar erori nu-
merice mari, dar din cauze esenţial diferite. Lucrăm ı̂n FVM cu (β, t, p) = (10, 3, 1).
Pentru a evita confuziile, vom nota cu ⊕, ⊖, ⊗ şi ⊘ adunarea, scăderea, ı̂nmulţirea,
respectiv ı̂mpărţirea ı̂n VM; deci x + y este suma exactă, iar x ⊕ y = f l(x + y) este
suma calculată ı̂n VM.
Exemplul 0.6 În calculul rădăcinilor polinomului de gradul al doilea ax2 + bx + c,
cu a 6= 0, este necesar calculul expresiei b2 − 4ac. Considerând b = 3.34, a = 1.22,
c = 2.28, avem b2 − 4ac = 0.0292, ı̂n timp ce, rotunjind prin tăiere, b ⊗ b = 4 ⊗ a ⊗ c
= 11.1, deci b ⊗ b − 4 ⊗ a ⊗ c = 0. Rezultatul calculat are toate cifrele semnificative
eronate, iar eroarea relativă aferentă este egală cu 1; totuşi, pentru fiecare operaţie
ı̂n parte, eroarea relativă este mai mică decât 10−2 . ♦

Exemplul 0.7 Dacă polinomul de gradul II are rădăcini reale, acestea se calculează
de obicei utilizând formulele
√ √
−b − b2 − 4ac −b + b2 − 4ac (0.8)
x1 = , x2 = .
2a 2a
Luând b = 10.1, a = 0.0123, c = 32.4, valoarea exactă rotunjită la 3 cifre
semnificative a lui x2 este −3.22. Efectuând calculele ı̂n formatul ales, obţinem
∆ = b ⊗ b ⊖ 4 ⊗ a ⊗ c = 100 (ı̂n loc de 100.41, dar eroarea relativă e ı̂ncă de ordinul
0.2. ARITMETICA ÎN VIRGULĂ MOBILĂ 9


10−3 ); dar −b ⊕ SQRT (∆) = −0.1, ı̂n timp ce −b + b2 − 4ac = −0.0792, eroarea
relativă fiind acum 0.26. Valoarea calculată a rădăcinii x2 este −4.06, ı̂n timp ce
valoarea exactă este −3.22; din nou toate cifrele semnificative ale rezultatului sunt
eronate. ♦
Se observă că, ı̂n ambele exemple, erorile mari apar după scăderea a două numere
de valori apropiate. Se produce o anulare catastrofală, adică o pierdere completă a
cifrelor semnificative ale rezultatului. În primul caz anularea trebuie pusă integral
pe seama operaţiei matematice de scădere; problema calculului b2 − 4ac este cauza
erorilor, şi nu algoritmul de calcul. În schimb, ı̂n al doilea caz, algoritmul de calcul
al rădăcinilor este de vină, deoarece nu evită scăderea a două numere apropiate,
deşi aceasta este posibil, după cum vom vedea puţin mai târziu. Să studiem ı̂ntâi
mai amănunţit ce se ı̂ntâmplă la scăderea a două numere apropiate.
Exemplul 0.8 Considerăm două numere reale, x şi y, de acelaşi ordin de mărime
(cu x > y, pentru simplitate), ale căror prime k cifre coincid, cu următoarele
reprezentări (exacte) ı̂n baza β (d1 6= 0):

x = 0.d1 d2 . . . dk dk+1 . . . dt 1 · β e ,
y = 0.d1 d2 . . . dk ck+1 . . . ct 0 · β e .

Rotunjind prin tăiere, reprezentările lor ı̂ntr-un FVM cu (β, t, p) sunt

x̂ = f l(x) = 0.d1 d2 . . . dk dk+1 . . . dt · β e ,


ŷ = f l(y) = 0.d1 d2 . . . dk ck+1 . . . ct · β e .

Diferenţa lor, calculată ı̂n VM, este

x̂ ⊖ ŷ = 0.f1 . . . ft−k 0 . . . 0 · β −k+e .

Observăm că x̂ − ŷ = x̂ ⊖ ŷ, deci scăderea se efectuează fără erori. În schimb,
rezultatul scăderii cu valorile exacte ale operanzilor este

x − y = 0.f1 . . . ft−k 10 . . . 0 · β −k+e ,

iar eroarea relativă asociată lui este



(x − y) − (x̂ − ŷ) β −t+1+e
≥ = β −t−1+k .
x−y β −k+e

În concluzie, observăm că operanzii scăderii sunt afectaţi de erori relative de repre-
zentare de ordinul β −t−1 , ı̂n timp ce rezultatul ei are o eroare relativă de ordinul
β −t−1+k ; atunci când x şi y au multe cifre semnificative identice, deci k aproape de
t, (şi acelaşi ordin de mărime) eroarea asociată rezultatului scăderii poate deveni
uriaşă. ♦
Exemplul 0.8 arată că adunarea (scăderea) nu introduce erori mari prin ea ı̂nsăşi,
ci potenţează — ı̂n anumite cazuri — erorile operanzilor.
De aceea, scăderea numerelor apropiate trebuie evitată. Pentru aceasta, dacă
este posibil, algoritmul de calcul este cel care trebuie modificat.
10 CAPITOLUL 0. CONCEPTE FUNDAMENTALE

Exemplul 0.9 Am constatat, ı̂n exemplul 0.7, că formulele (0.8) nu sunt √ cele
mai bune din punct de vedere numeric, mai ales când b2 ≫ 4ac, şi deci |b| ≈ ∆.
Pentru a evita scăderea unor numere apropiate, se pot folosi formulele

−b − sgn(b) b2 − 4ac −2c
x1 = , x2 = √ . (0.9)
2a b + sgn(b) b2 − 4ac
Utilizând ı̂n (0.9) valorile numerice din exemplul 0.7, se obţine, ı̂n FVM de lucru,
un rezultat cu toate cifrele semnificative exacte. ♦

0.3 Condiţionarea problemelor de calcul


Orice problemă de calcul numeric impune obţinerea unor rezultate numerice, pornind
de la date de intrare numerice, astfel ı̂ncât rezultatele să poată fi interpretate ca o
aproximaţie a soluţiei unei probleme matematice pentru datele de intrare respec-
tive. Pentru ca o astfel de problemă să fie bine definită, trebuie asigurate existenţa şi
unicitatea soluţiei. În acest caz, o problemă de calcul numeric poate fi ı̂ntotdeauna
descrisă ca evaluare a unei funcţii
f : D ⊂ Rn −→ Rm (0.10)
ı̂ntr-un punct x ∈ D dat. Cele n componente ale argumentului constituie datele
de intrare, iar cele m componente ale vectorului f (x) sunt rezultatele sau datele de
ieşire.
Desigur, aplicaţia f este de cele mai multe ori definită implicit iar descoperirea
unei căi prin care calculul valorii f (x) devine posibil echivalează cu rezolvarea,
printr-un algoritm specific, a problemei de calcul considerate.
Exemplul 0.10 a) Fie D o mulţime de trei numere reale şi
 
a
x =  b  ∈ D = {x ∈ R3 | a 6= 0, b2 − 4ac ≥ 0} ⊂ R3 .
c
Rezolvarea ecuaţiei de gradul II
ay 2 + by + c = 0
este o problemă numerică bine definită, deoarece pentru orice x ∈ D există un unic
vector  √ 
−b − sgn(b) b2 − 4ac
  
y1 2a 
 ∈ R2 ,
 
y = f (x) = =
y2  −2c 

2
b + sgn(b) b − 4ac
care este soluţia problemei.
b) Calculul integralei
Z b
2
e−t dt,
a
0.3. CONDIŢIONAREA PROBLEMELOR DE CALCUL 11

unde a, b ∈ R sunt date (a 6= b), este de asemenea  o problemă numerică bine definită.
a
Într-adevăr, pentru datele de intrare x = ∈ D = R2 , există şi este unică
b
R 2
valoarea integralei y ∈ R, deşi integrala nedefinită e−t dt nu este exprimabilă
prin funcţii elementare. ♦
Abaterea soluţiei calculate faţă de soluţia exactă a unei probleme numerice poate
avea două surse esenţial diferite, legate de problemă ı̂n sine şi, respectiv, de algorit-
mul de calcul utilizat. De prima sursă de erori — numită condiţionarea problemei
— ne ocupăm ı̂n continuare, de cea de-a doua — stabilitatea algoritmului — ı̂n
paragraful următor.
Condiţionarea problemei caracterizează sensibilitatea soluţiei ı̂n raport cu pertur-
baţiile datelor de intrare. În practică este cunoscută doar o aproximaţie x̂ a datelor
de intrare x şi, ı̂n cel mai bun caz, presupunând că toate calculele se efectuează
exact, putem calcula f (x̂) ı̂n loc de f (x). Dacă funcţia f definind problema noastră
este prea sensibilă la variaţii ale argumentului, f (x̂) şi f (x) pot diferi semnificativ
chiar ı̂n cazul unei erori relative mici kx − x̂k / kxk a datelor de intrare (k · k este o
normă adecvată). O astfel de problemă este numită rău condiţionată.
Dacă ı̂ncercăm rezolvarea unei probleme rău condiţionate pornind de la date
inexacte, atunci soluţia obţinută va fi ı̂nsoţită de erori mari indiferent de felul ı̂n
care este calculată !

Definiţia 0.3 Condiţionarea numerică sau sensibilitatea locală a unei probleme


f : D ⊂ Rn → Rm ı̂ntr-un punct x ∈ D este exprimată de amplificarea erorii rel-
ative
kf (x) − f (x̂)k kxk
κ(x) = , (0.11)
kf (x)k kx − x̂k
pentru x 6= 0 şi f (x) 6= 0. Când κ(x) este mic (de ordinul unităţii, de exemplu)
problema este numită bine condiţionată ı̂n punctul x. Altfel, problema este rău
condiţionată.

Observaţia 0.2 Dacă f este Lipschitz continuă, i.e. există L astfel ı̂ncât

kf (x) − f (y)k ≤ Lkx − yk,

atunci
kxk
κ(x) ≤ L ,
kf (x)k
iar dacă f este de clasă C 1 iar x este apropiat de y, atunci L se poate lua kf ′ (x)k,
unde f ′ este derivata lui f ı̂n punctul x. ♦
Subliniem faptul că condiţionarea este o proprietate locală. De obicei, totuşi, o
problemă este numită bine condiţionată dacă este bine condiţionată ı̂n orice punct
x ∈ D; de asemenea, este numită rău condiţionată, dacă există puncte x ∈ D ı̂n
care este rău condiţionată.
Exemplul 0.11 Problema calculului sumei a două numere x, y ∈ R poate fi
bine sau rău condiţionată funcţie de valorile lui x şi y (datele de intrare). (Aici
12 CAPITOLUL 0. CONCEPTE FUNDAMENTALE

 
2 x
f (x, y) = x + y, f : R −→ R; convenim să scriem şi f (x, y) ı̂n loc de f ( ),
y
cum ar cere (0.10).)
Presupunem că x̂, ŷ sunt aproximări ale lui x, respectiv y, afectate de erori
relative de acelaşi ordin de mărime, γ; mai precis,

x̂ = x + εx x, cu |εx | ≤ γ ≪ 1,
ŷ = y + εy y, cu |εy | ≤ γ.

Eroarea relativă asociată sumei este (calculul sumei se face exact)

|x + εx x + y + εy y − (x + y)| |εx x + εy y|
ε= = . (0.12)
|x + y| |x + y|

Dacă x şi y au acelaşi semn, atunci


|εx x| + |εy y|
ε≤ ≤γ
|x| + |y|

şi suma este afectată de o eroare de acelaşi ordin de mărime ca şi operanzii; ı̂n acest
caz, adunarea este bine condiţionată.
Dacă x şi y au semne diferite, este posibil (atunci când εx şi εy au şi ele semne
diferite) ca ε şi
γ · max(|x|, |y|)
θ=
|x + y|
să aibă acelaşi ordin de mărime. Dar dacă |x + y| ≪ max(|x|, |y|), ceea ce se
ı̂ntâmplă atunci când x şi y au valori apropiate, atunci θ ≫ γ. În acest caz,
problema calculului sumei este rău condiţionată. Exemplele 0.6, 0.7, 0.8 ilustrează
această situaţie. Pentru a vedea câte subtilităţi ascunde calculul aparent simplu al
unei sume, cititorul este invitat să consulte [?]. ♦

0.4 Stabilitatea numerică a algoritmilor


Pentru a rezolva o problemă de calcul numeric definită de funcţia (0.10), un calcu-
lator execută o secvenţă (finiţă) bine precizată de operaţii denumită algoritm. În
general există mai mulţi algoritmi pentru rezolvarea unei probleme. Un algoritm
fˆ pentru problema f produce un răspuns unic determinat pentru date de intrare
fixate şi deci poate fi exprimat matematic printr-o funcţie

fˆ : D ∩ F ⊂ Rn −→ Rm .

Deoarece execuţia unui algoritm se face folosind numere ı̂n FVM şi calculele sunt
ı̂nsoţite de erori, este clar că fˆ(x) este de regulă diferit de f (x). De asemenea, nu ne
putem aştepta ca algoritmul fˆ să calculeze soluţia unei probleme rău condiţionate
mai precis decât o garantează datele de intrare. Totuşi, e de dorit ca fˆ să nu in-
troducă erori exagerat de mari. Noţiunea de stabilitate numerică exprimă mărimea
erorilor numerice introduse de un algoritm, ı̂n ipoteza că datele iniţiale sunt exacte.
0.4. STABILITATEA NUMERICĂ A ALGORITMILOR 13

x r r
f f (x)
6 I
@@

x̂ r
Eroare ”ı̂napoi” fˆ @
? @
@@Eroare ”ı̂nainte”
f @
@
Rr ˆ
@
@
f (x) = f (x̂)

Date de intrare Date de ieşire

Fig. 0.3: Erori ı̂nainte şi ı̂napoi

Definiţia 0.4 Un algoritm fˆ, destinat rezolvării problemei f , este numeric stabil
dacă una dintre următoarele două condiţii alternative este ı̂ndeplinită:
i) fˆ(x) este aproape de f (x) pentru orice intrare x, adică soluţia calculată aproxi-
mează bine soluţia exactă.
ii) pentru orice intrare x, există un x̂ ∈ D apropiat de x astfel ı̂ncât f (x̂) să fie
egal cu fˆ(x), adică soluţia calculată de algoritmul fˆ cu date de intrare exacte este
egală cu soluţia exactă pentru nişte date de intrare uşor perturbate.
Altfel, algoritmul este numeric instabil.

Cele două condiţii sunt similare, doar că prima se formulează ı̂n spaţiul datelor
de ieşire, iar a doua ı̂n spaţiul datelor de intrare, după cum se poate remarca
ı̂n figura 0.3; ı̂n mod plastic, eroarea (absolută) fˆ(x) − f (x) este numită eroare
”ı̂nainte”, deoarece corespunde sensului de calcul al algoritmului, iar x̂ − x eroare
”ı̂napoi”, deoarece găsirea unui x̂ care să satisfacă ii) ı̂nseamnă ı̂ntoarcerea ı̂n
spaţiul datelor de intrare, ulterior aplicării algoritmului. Analiza stabilităţii nu-
merice a unui algoritm ı̂nseamnă cuantificarea erorilor din definiţia 0.4; evaluarea
kfˆ(x)−f (x)k este caracteristică analizei ı̂nainte (directe); evaluarea kx̂−xk defineşte
analiza ı̂napoi (inversă).
Noţiunea vagă ”aproape” se poate reexprima prin cea de eroare relativă mică
(noţiune destul de vagă şi ea); ı̂n calculul numeric se folosesc deseori astfel de
exprimări. În mod sigur, o eroare relativă de ordinul erorii de rotunjire (introduse
de (0.7)) caracterizează un algoritm numeric stabil 1 : soluţia este calculată cu
precizia intrinsecă a FVM utilizat.
Este uşor de arătat că utilizarea unui algoritm stabil la rezolvarea unei probleme
bine condiţionate conduce la un rezultat de ı̂naltă acurateţe 2 .
Într-adevăr, din definiţia 0.4 varianta ii), pentru intrarea exactă x există x̂ astfel
ı̂ncât eroarea relativă este (să zicem) de ordinul erorii de rotunjire

kx − x̂k
≤ µβ −t
kxk
1 În
continuare, vom spune ”algoritm stabil” ı̂n loc de ”algoritm numeric stabil”.
2 Atragem atenţia asupra sensurilor diferite pe care le au ı̂n calculul numeric termenii precizie şi
acurateţe, aproape sinonimi ı̂n limbajul uzual. Precizia se referă la numărul de cifre semnificative
din FVM, iar acurateţea la mărimea erorii dintre rezultatul calculat numeric şi cel exact.
14 CAPITOLUL 0. CONCEPTE FUNDAMENTALE

şi
f (x̂) = fˆ(x). (0.13)
Problema fiind bine condiţionată, din (0.11) rezultă că

kf (x) − f (x̂)k kx − x̂k


=κ ≤ κµβ −t , (0.14)
kf (x)k kxk

unde κ şi µ sunt de ordinul unităţii. Deci, din (0.13) şi (0.14),

kf (x) − fˆ(x)k
≤ κµβ −t ,
kf (x)k

adică un algoritm stabil nu introduce erori suplimentare semnificative ı̂n rezolvarea


unei probleme bine condiţionate.
În mod similar, se poate observa că, ı̂n alte situaţii (de exemplu pentru probleme
rău condiţionate sau pentru algoritmi instabili), mărimea erorii asociate rezulta-
tului nu poate fi apreciată. Când un algoritm stabil este folosit pentru a rezolva
o problemă rău condiţionată, nu există nici o garanţie că f (x̂) şi f (x) au valori
apropiate şi, deşi f (x̂) este (aproximativ) egal cu fˆ(x), diferenţa dintre f (x) şi fˆ(x)
poate fi semnificativă. Când un algoritm instabil este folosit pentru rezolvarea unei
probleme bine condiţionate, soluţia calculată fˆ(x) pentru date exacte de intrare
este soluţie exactă a problemei cu x̂ departe de x, şi tot aşa este f (x̂) de f (x). În
sfârşit, nu e nici o speranţă de a obţine erori mici atunci când un algoritm instabil
este utilizat pentru o problemă rău condiţionată.
Exemplul 0.12 Revenim la problema calculului sumei, f : R2 −→ R,
f (x, y) = x + y. Problema poate fi bine sau rău condiţionată ı̂n funcţie de datele
de intrare (vezi exemplul 0.11).
”Algoritmul” de calcul al sumei ı̂n virgulă mobilă fˆ : R2 −→ R este

fˆ(x, y) = x ⊕ y = f l(x + y),

unde f l este o funcţie de rotunjire care respectă relaţia (0.7), iar x şi y sunt numere
ı̂n FVM; deci, ı̂n conformitate cu (0.7),

fˆ(x, y) = x(1 + ρ) + y(1 + ρ),

cu |ρ| de ordinul β −t , adică suma calculată este suma exactă a operanzilor uşor
perturbaţi, şi deci algoritmul de sumare este stabil. ♦

Exemplul 0.13 Să analizăm acum algoritmul de calcul al mărimii


f (a, b, c) = b2 − 4ac. Presupunem că a, b, c sunt numere ı̂n FVM. În conformitate
cu (0.7) avem

fˆ(a, b, c) = b ⊗ b ⊖ 4 ⊗ a ⊗ c = [b2 (1 + ρ1 ) − 4ac(1 + ρ2 )](1 + ρ3 ),

cu |ρ1 |, |ρ2 |, |ρ3 | de ordinul β −t ; am presupus că 4 ⊗ a se calculează fără erori, ceea
ce e adevărat ı̂n baza 2, dar nu şi ı̂n baza 10.
0.5. CALITĂŢILE UNUI ALGORITM NUMERIC 15

Definind
p
â = a(1 + ρ2 ), b̂ = b (1 + ρ1 )(1 + ρ3 ), ĉ = c(1 + ρ3 ),

constatăm că
fˆ(a, b, c) = b̂2 − 4âĉ,
şi â, b̂, ĉ sunt aproape de a, b, respectiv c (ı̂n sensul |â − a|/|a| de ordinul β −t etc.).
Condiţia ii) a definiţiei 0.4 este ı̂ndeplinită, deci algoritmul este stabil. ♦
Exemplul de mai sus este o ilustrare foarte simplă a analizei inverse a erorilor
de rotunjire ale unui algoritm. În această tehnică se utilizează limitele (0.7) ale
erorilor introduse de operaţiile ı̂n virgulă mobilă pentru a demonstra că soluţia
calculată a unei probleme este soluţia exactă a problemei cu date de intrare uşor
perturbate. O astfel de demonstraţie garantează că algoritmul este numeric stabil şi,
pentru probleme bine condiţionate, sunt asigurate erori relative mici ale rezultatelor
calculate.
Pentru probleme nebanale, a arăta că un anume algoritm este stabil poate fi
o sarcină dificilă. Există foarte puţini algoritmi pentru care există o demonstraţie
completă a stabilităţii numerice. Totuşi, mulţi algoritmi importanţi au fost validaţi
ı̂n practică printr-o experienţă de zeci de ani. Cum spunea Wilkinson: ”scopul
principal al analizei erorilor nu este de a stabili margini precise, ci de a evidenţia
instabilităţile potenţiale ale unui algoritm, dacă ele există, şi, prin aceasta, de a găsi
o cale de ı̂mbunătăţire a algoritmului” [IV].
În această lucrare vom fi interesaţi mai mult de prezentarea celor mai buni algo-
ritmi care rezolvă o problemă, şi mai puţin de demonstrarea — aproape ı̂ntotdeauna
extrem de ”tehnică” — a stabilităţii lor numerice.

0.5 Calităţile unui algoritm numeric


Pentru a ı̂ncheia acest capitol, să precizăm criteriile după care se apreciază calitatea
unui algoritm numeric.
• Numărul de operaţii. Timpul de execuţie al unui program — pe un calculator
precizat — este o caracteristică de prim ordin a acestuia. De regulă, un program se
execută de mai multe ori, pentru a rezolva o anume problemă pentru diverse date
de intrare; timpul de execuţie permite aprecierea numărului de soluţii care se pot
obţine ı̂ntr-un anumit timp, de obicei impus.
Desigur, este de dorit a estima timpul de execuţie al unui program ı̂nainte de
crearea sa efectivă, numai pe baza algoritmului implementat de program. O bună
măsură este numărul de operaţii aritmetice efectuate; ı̂n algoritmii numerici ele
constituie de obicei partea majoritară a operaţiilor, cele cu ı̂ntregi sau logice având
o pondere mică, atât ca număr, cât şi ca durată de execuţie.
Numim flop o operaţie aritmetică elementară (adunare, scădere, ı̂nmulţire, ı̂m-
părţire). Numărul de operaţii al unui algoritm este numărul de flopi necesari
obţinerii rezultatului. Trebuie precizat că deşi numărul de operaţii poate indica
doar cu aproximaţie timpul de execuţie pe un calculator dat, ı̂n schimb este o foarte
bună măsură pentru compararea a doi algoritmi.
16 CAPITOLUL 0. CONCEPTE FUNDAMENTALE

De regulă, numărul de operaţii Nop al unui algoritm e funcţie de dimensiunea


problemei care, de multe ori, poate fi apreciată prin numărul datelor de intrare,
Nop = f (n). În calculul numeric, de obicei f este un polinom (de grad mic),
f (n) = a0 nk + a1 nk−1 + . . . + ak . Pentru că f poate avea o expresie complicată, se
păstrează doar termenul cel mai semnificativ şi se scrie Nop ≈ a0 nk . O astfel de
aproximare este cu atât mai bună cu cât n este mai mare. Pentru aprecieri pur
calitative, vom omite a0 şi vom scrie3 Nop = O(nk ).
• Memoria ocupată. Pentru execuţia unui algoritm (program) este necesară
memorarea datelor de intrare, rezultatelor, precum şi a altor valori intermediare.
Numărul de elemente ı̂n FVM necesare ı̂n acest scop se numeşte memoria ocupată
de algoritm.
În majoritatea cazurilor, datele de intrare nu mai sunt necesare la terminarea al-
goritmului. Spaţiul de memorie ocupat de ele poate fi utilizat pe parcursul execuţiei
algoritmului pentru a memora rezultate parţiale şi/sau finale. În acest caz se spune
că efectuăm calculele pe loc.
• Stabilitatea numerică, discutată ı̂n paragraful anterior, arată acurateţea rezul-
tatelor obţinute de algoritmul numeric (ı̂n ipoteza că datele iniţiale sunt exacte).
Aceste trei criterii trebuie corelate cu viteza calculatorului, memoria disponibilă,
numărul de cifre semnificative al FVM utilizat.
Desigur, nu trebuie uitată nici un moment condiţionarea problemei, care influen-
ţează şi ea acurateţea rezultatului. Interesează ı̂n special performanţele algoritmului
pentru probleme rău condiţionate, adică atunci când erorile datelor de intrare sunt
mult amplificate. În orice caz, calculul soluţiei e bine a fi ı̂nsoţit de determinarea
(sau estimarea) condiţionării problemei, adică de calculul unei cantităţi de tip (0.11).
Putem adăuga astfel un al patrulea criteriu de apreciere a unui algoritm:
• Siguranţa ı̂n funcţionare – capacitatea de a semnala situaţiile ı̂n care rezultatul
poate fi afectat de erori importante datorate relei condiţionări a problemei. Decizia
de a utiliza sau nu un astfel de rezultat revine utilizatorului sau unui program
expert.

0.6 Implicaţiile arhitecturii calculatoarelor asupra


organizării algoritmilor
În consideraţiile din secţiunea precedentă am presupus calculatorul pe care se vor
implementa algoritmii ca având arhitectura clasică von Neumann, schiţată ı̂n figura
0.4a; pe un astfel de calculator, ı̂n principiu, pentru fiecare operaţie aritmetică
se aduc operanzii din memoria M ı̂n unitatea centrală UC, se execută operaţia şi
rezultatul este depus ı̂napoi ı̂n M. Cu acest mod de operare, timpul de execuţie
e dictat esenţialmente de numărul de operaţii ı̂n virgulă mobilă, durata traficului
ı̂ntre M şi UC fiind proporţională cu numărul de flopi.
În ultimele două decenii au apărut numeroase tipuri de arhitecturi pe care timpul
de execuţie a unui algoritm nu mai este proporţional cu numărul de operaţii ı̂n
3 Se scrie f (n) = O(g(n)) dacă există două constante c1 , c2 astfel ı̂ncât c1 g(n) ≤ f (n) ≤ c2 g(n).
0.6. IMPLICAŢIILE ARHITECTURII CALCULATOARELOR 17

UC

6
?
UC UCS UCV
MR
6 6
6
? ? ?
M M MP

(a) (b) (c)

Fig. 0.4: Arhitecturi de calculatoare: (a) von Neumann; (b) vectorială; (c) cu
memorie ierarhică

virgulă mobilă. Vom exemplifica ı̂n continuare cu două arhitecturi larg răspândite,
ı̂n special ı̂n gama calculatoarelor de mare performanţă.
Calculatoarele vectoriale au două (tipuri de) unităţi de calcul, ca ı̂n figura
0.4b. Una dintre unităţi – UCS – este obişnuită; ea execută operaţii scalare, adică
operaţiile aritmetice uzuale. Cealaltă – UCV – este dedicată operaţiilor vectoriale,
adică unor operaţii aritmetice de acelaşi tip repetate pentru mai multe perechi de
date; de exemplu, adunarea a n perechi de numere, xi + yi , i ∈ 1 : n. Dacă pe un
calculator von Neumann nu e nici o diferenţă de viteză ı̂ntre astfel de operaţii, pe
calculatoarele vectoriale se execută mult mai rapid operaţiile vectoriale; explicaţia e
relativ simplă: UCV e astfel construită ı̂ncât datele o parcurg ca pe o bandă rulantă
cu mai multe posturi de lucru, fiecare pereche de date suferind la un moment dat
o altă operaţie intermediară (dacă sunt p posturi de lucru, timpul de producere a
unui rezultat este de aproximativ p ori mai mic). La aceasta se adaugă şi un mod de
comunicaţie sofisticat ı̂ntre M şi UCV, astfel ı̂ncât UCV să poată fi ı̂n permanenţă
alimentată cu date. În schimb, UCS prelucrează doar o pereche de date la un mo-
ment dat. Deci, un algoritm eficient pe un calculator vectorial va conţine mai ales
operaţii de tip vectorial.
Calculatoarele cu memorie ierarhică au structura sugerată ı̂n figura 0.4c. Prin-
cipala noutate a acestei arhitecturi este organizarea memoriei pe cel puţin două
niveluri. Timpul de acces la memorie creşte odată cu distanţa dintre unitatea cen-
trală şi memoria respectivă; memoria rapidă (MR) are un timp de acces sensibil
mai mic decât cel al memoriei principale (MP), dar şi o capacitate mult mai mică;
aceste caracteristici provin mai ales din tehnologia de realizare, diferită de cea a
memoriei principale (totuşi, ı̂n mod natural, o memorie mai mică este mai rapidă).
Transferurile ı̂ntre UC şi MR durează puţin ı̂n comparaţie cu timpul de execuţie
al unei operaţii ı̂n virgulă mobilă; ı̂n schimb, transferurile ı̂ntre MR şi MP durează
mai mult. De aceea, un algoritm eficient pe un calculator cu memorie ierarhică are
un număr cât mai mic de transferuri implicând MP, acesta fiind criteriul principal de
18 CAPITOLUL 0. CONCEPTE FUNDAMENTALE

apreciere, şi nu numărul de operaţii. Caracteristica tipică a unui astfel de algoritm


este organizarea calculelor la nivel de bloc de matrice, operându-se intensiv cu date
aflate ı̂ntr-o aceeaşi zonă de memorie, suficient de mică pentru a ı̂ncăpea ı̂n MR.
Concluzia care se impune este că utilizarea unui acelaşi algoritm pentru re-
zolvarea unei anume probleme pe toate arhitecturile ar fi ineficientă. Vom sugera,
ı̂n capitolele următoare, metode de creştere a eficienţei algoritmilor pe calculatoare
vectoriale şi cu memorie ierarhică. De obicei, este necesară doar o reorganizare
a calculelor; alteori, ı̂nsă, algoritmi noi se dovedesc mult mai eficienţi pe aceste
arhitecturi.
O altă clasă de arhitecturi de mare performanţă cuprinde calculatoarele para-
lele. Acestea au mai multe procesoare identice care pot lucra independent şi care
cooperează printr-un mediu de comunicaţie (legături directe sau memorie comună).
Algoritmii eficienţi pe arhitecturi paralele au multe caracteristici ce ı̂i diferenţiază
net de cei secvenţiali; tratarea lor impune instrumente specifice, de aceea nu ı̂i vom
aborda ı̂n prezenta lucrare, ci ı̂n una următoare, dedicată numai lor. Pentru o
introducere ı̂n materie, cititorul interesat poate consulta capitolul 6 din [VI].

0.7 Probleme
P 0.1 Următorul exemplu arată că adunarea ı̂n virgulă mobilă nu este asociativă. Să
considerăm numerele x1 = 0.001, x2 = 1, x3 = −1, reprezentate ı̂ntr-un FVM cu β = 10,
t = 3. Cât de mare este eroarea relativă atunci când se calculează y = x1 + x2 + x3 ?
P 0.2 Găsiţi o limită a erorii relative pentru calculul ı̂n virgulă mobilă al sumei
y = x1 + x2 + x3 ; presupuneţi că x1 , x2 , x3 sunt numere ı̂n virgulă mobilă.
P 0.3 Să considerăm problema calculului soluţiei ecuaţiei liniare ax + b = 0, cu a, b ∈ R,
a 6= 0. Pentru ce valori ale datelor de intrare a, b este această problemă rău condiţionată ?
”Algoritmul” pentru calculul soluţiei este x = −b/a; este acest algoritm numeric stabil ?
P 0.4 Aceeaşi ı̂ntrebare pentru ecuaţia (a1 + a2 )x + (b1 + b2 ) = 0, ı̂n care datele de intrare
sunt a1 , a2 , b1 , b2 ∈ R.
P 0.5 Se consideră un FVM definit de (β, t, p). Care este distanţa ı̂ntre 1 şi cel mai
apropiat număr reprezentabil ı̂n virgulă mobilă, mai mare ca 1 ?
P 0.6 Găsiţi limita (superioară) a erorii relative a funcţiei de rotunjire care asociază
fiecărui x ∈ [−M, M ] cel mai apropiat număr ı̂n virgulă mobilă.
P 0.7 Ce formulă recomandaţi pentru calculul ı̂n virgulă mobilă: x2 −y 2 sau (x−y)(x+y) ?
(Se presupune că x şi y sunt numere ı̂n FVM.)
Capitolul 1

Algoritmi elementari de
calcul numeric

Acest capitol este dedicat prezentării noţiunilor matematice aflate la baza dez-
voltărilor ulterioare, formulării problemelor de calcul pe care le vom rezolva, ı̂n
diverse variante, pe ı̂ntreg parcursul lucrării, precum şi descrierii unor primi algo-
ritmi numiţi ad-hoc elementari, unii folosiţi ca unelte mai târziu, alţii deja rezolvând
probleme sau cazuri particulare ale unor probleme semnificative.
Noţiunile matematice aparţin ı̂n mare majoritate algebrei liniare. Am ı̂ncercat
o prezentare de sine stătătoare, dar, desigur, cunoştinţele anterioare ale cititorului
sunt binevenite.
Fiecare secţiune a capitolului are două părţi: prima, cu nuanţă teoretică, de
parcurgere a unor definiţii şi proprietăţi fundamentale; a doua, de ”aspecte algo-
ritmice”, ı̂n care sunt prezentaţi şi analizaţi algoritmi simpli, moduri de memorare
a datelor, artificii numerice etc. Subtitlurile acestor din urmă părţi vor ı̂ncepe cu
sigla AA.
Principalii algoritmi prezentaţi rezolvă următoarele probleme: produsul ma-
triceal (cu diversele lui cazuri particulare: produsul scalar, produsul exterior, pro-
dusul matrice-vector), calculul normelor vectoriale şi matriceale, rezolvarea sis-
temelor liniare triunghiulare şi calculul valorilor şi vectorilor proprii ai matricelor
triunghiulare. Sunt prezentate modalităţile prin care se măresc performanţele algo-
ritmilor pe diverse arhitecturi de calculatoare. Capitolul se ı̂ncheie cu prezentarea
rutinelor BLAS, extrem de utilizate ı̂n calculul numeric.

1.1 Vectori. Spaţiul vectorial Rn


În această lucrare vom utiliza de regulă entităţi (vectori şi matrice) construite cu
numere reale; majoritatea definiţiilor şi proprietăţilor sunt valabile şi pentru numere
complexe; vom face diferenţierile necesare atunci când va fi cazul. Un număr real
α ∈ R va fi numit şi scalar; scalarii vor fi notaţi de obicei cu litere greceşti mici.
20 CAPITOLUL 1. ALGORITMI ELEMENTARI

6 6

1
6
x3  x
1
x2   e3
  

 -

 e1 - -
 
 e2
x1 1 1

 +
+
 +

(a) (b)

Fig. 1.1: (a) Un vector ı̂n R3 şi coordonatele sale; (b) vectorii unitate ı̂n R3

Vectori. Un vector real x de dimensiune n este o colecţie de n numere reale


dispuse ordonat ı̂ntr-o coloană
 
x1
 x2 
 
x =  . , (1.1)
 .. 
xn

numerele xi fiind numite componente (elemente, sau coordonate) ale vectorului x.


În general, vom nota vectorii cu litere latine mici, iar elementele lor cu litera re-
spectivă şi indicele poziţiei. Pentru economie de spaţiu tipografic, vom nota deseori
x = [x1 . . . xn ]T , unde xT = [x1 . . . xn ] este vectorul linie cu aceleaşi elemente ca
ı̂n (1.1), iar indicele superior T denotă operaţia de transpunere.
Mulţimea tuturor vectorilor de dimensiune n va fi notată cu Rn şi va fi asimi-
lată cu spaţiul real n-dimensional. În consecinţă, din punct de vedere geometric, un
vector reprezintă segmentul orientat care uneşte originea spaţiului real cu n dimen-
siuni cu punctul de coordonate (x1 , . . . , xn ), sau chiar numai acest din urmă punct.
Vectorul cu toate componentele nule va fi notat cu 0, dimensiunea sa reieşind din
context; geometric, acesta este originea spaţiului n-dimensional. Pentru o mai bună
ı̂nţelegere, vom ilustra unele concepte ı̂n R2 sau R3 ; figura 1.1a prezintă un vector
şi semnificaţia (de coordonate) a elementelor sale.
Vectorii din Rn care au un element egal cu 1 şi celelalte nule se numesc vectori
unitate; ei vor fi notaţi
ei = [0 . . 0}]T ,
. . 0} 1 0| .{z
| .{z
i−1 n−i

indicele arătând poziţia valorii 1. Spre exemplu, vectorii unitate din R3 sunt
prezentaţi ı̂n figura 1.1b.
Doi vectori sunt egali când toate componentele lor de acelaşi indice sunt egale;
deci, dacă x, y ∈ Rn , atunci x = y când xi = yi , ∀i ∈ 1 : n.
1.1. VECTORI. SPAŢIUL VECTORIAL RN 21

:
y



- -

 x + y



 -
x αx
x
(a) (b)

Fig. 1.2: (a) Suma a doi vectori ı̂n R2 ; (b) Produsul cu un scalar

Introducem acum operaţiile elementare cu vectori.


Suma a doi vectori x, y ∈ Rn este vectorul z ∈ Rn definit prin zi = xi + yi ,
i ∈ 1 : n; aşadar, suma se face pe componente. În acest fel sunt moştenite toate
proprietăţile adunării numerelor reale:
1. asociativitate (u + (v + w) = (u + v) + w);
2. comutativitate (u + v = v + u);
3. elementul neutru este vectorul nul (x + 0 = x);
4. opusul unui vector x este −x, adică vectorul cu elementele −xi , i = 1 : n
(x + (−x) = 0).
Astfel, Rn ı̂mpreună cu operaţia de adunare formează un grup comutativ.
Produsul unui vector x ∈ Rn cu un scalar α ∈ R este vectorul y = αx ∈ Rn
definit de yi = αxi , i ∈ 1 : n; deci, produsul se face multiplicând cu α fiecare
componentă a vectorului x. Produsul cu un scalar este o operaţie externă pe Rn .
Semnificaţiile geometrice ale celor două operaţii sunt prezentate ı̂n figura 1.2;
adunarea se face după regula paralelogramului, iar produsul cu un scalar modifică
doar lungimea vectorului, păstrându-i direcţia.
Mulţimea Rn ı̂mpreună cu operaţiile de adunare şi produs cu un scalar are
structura de spaţiu vectorial, adică, ı̂n afara structurii de grup comutativ faţă de
adunare, mai sunt satisfăcute următoarele proprietăţi ale produsului cu un scalar:
1. 1 · x = x;
2. α(βx) = (αβ)x;
3. (α + β)x = αx + βx;
4. α(x + y) = αx + αy.
Combinaţie liniară. Fie X ⊂ Rn o mulţime având ca elemente vectorii 1

x1 , x2 , . . . , xp . Vectorul
p
X
def
y = α1 x1 + α2 x2 + . . . + αp xp = αi xi (1.2)
i=1

se numeşte combinaţie liniară a vectorilor din X cu coeficienţii α1 , α2 , . . . , αp ∈ R.


Dacă toţi coeficienţii sunt nuli, combinaţia se numeşte trivială.
Vectorii din X sunt liniar independenţi dacă nu există o combinaţie liniară netri-
vială a elementelor lui X care să fie nulă. Dacă o astfel de combinaţie există, vectorii
din X sunt numiţi liniar dependenţi.
1 Se observă că acum x este un vector şi nu un element de vector; aşadar, folosim indicii şi
i
pentru a numerota vectorii dintr-o mulţime.
22 CAPITOLUL 1. ALGORITMI ELEMENTARI

Dacă vectorii sunt liniar dependenţi, atunci cel puţin unul Pp dintre ei se poate
exprima printr-o combinaţie P liniară a celorlalţi; i.e., dacă i=1 αi xi = 0, atunci
există αj 6= 0, şi deci xj = − pi=1,i6=j (αi /αj )xi .
Evident, ı̂ntr-o mulţime de vectori independenţi, nici unul dintre ei nu se poate
exprima printr-o combinaţie liniară a celorlalţi. De exemplu, vectorii unitate
e1 , . . . , en sunt liniar independenţi.
Pp Dacă X ⊂ Rn este o mulţime de vectori
n
liniar independenţi şi y = i=1 αi xi ∈ R este o combinaţie liniară a acestora,
atunci coeficienţii combinaţiei liniare sunt unici (demonstraţi).
Subspaţiu liniar. O mulţime S de vectori din Rn este numită subspaţiu liniar
al spaţiului Rn dacă sunt ı̂ndeplinite următoarele două condiţii:

1. x + y ∈ S, ∀x, y ∈ S;

2. αx ∈ S, ∀α ∈ R, ∀x ∈ S.
Aşadar, orice combinaţie liniară a unor vectori din S aparţine tot lui S; altfel spus,
S e invariant la combinaţii liniare. Evident, orice subspaţiu liniar conţine vectorul
nul (originea).
Fie X ⊂ Rn o mulţime de vectori şi S mulţimea tuturor combinaţiilor liniare ale
vectorilor din X . Atunci S e un subspaţiu liniar, numit subspaţiul generat de X . De
exemplu, ı̂n R3 doi vectori generează de regulă un plan; dacă vectorii sunt coliniari
(adică există scalarul α a.ı̂. y = αx), atunci subspaţiul generat este o dreaptă.
Fie S ⊂ Rn un subspaţiu; o mulţime de vectori B ⊂ S este bază a subspaţiului
S dacă:
1. elementele lui B sunt liniar independente;

2. S e generat de B.

Aşadar o bază conţine numărul minim de vectori cu ajutorul cărora se poate genera
subspaţiul.
Dacă B = {b1 , . . . , bm }, atunci ∀x ∈ S se Pscrie ı̂n mod unic ı̂n forma unei
m
combinaţii liniare a vectorilor din bază, x = i=1 αi bi . Numerele αi se numesc
componentele sau coordonatele, vectorului x ı̂n raport cu baza B.
De exemplu, e1 , . . . , en formează o bază pentru Rn , numită şi baza canonică;
componentele vectorului x, ı̂n sensul definiţiei
Pn (1.1), sunt componentele ı̂n raport
cu această bază, deoarece evident x = i=1 xi ei .
Un subspaţiu are o infinitate de baze, dar toate au acelaşi număr de elemente.
Evident, un vector x 6= 0 are coordonate diferite ı̂n raport cu aceste baze.
Dimensiunea unui subspaţiu, notată dim S, este numărul vectorilor din bază,
adică numărul maxim de vectori din S liniari independenţi sau, cum am menţionat
deja, numărul minim de vectori care generează S.
De exemplu, Rn are dimensiunea n, numărul de vectori din baza canonică; un
plan ı̂n R3 are dimensiunea 2.
Două subspaţii S, T ⊂ Rn se numesc complementare dacă

1. S ∩ T = {0}.

2. Rn este generat de S ∪ T .
1.1. VECTORI. SPAŢIUL VECTORIAL RN 23

6
C
 C
 C
 C
C T
SC
C C 
C C
C C -
C CC
 C 
+ C


C 
CC

Fig. 1.3: Subspaţii complementare ı̂n R3 : un plan S şi o dreaptă T

În acest caz vom utiliza notaţia Rn = S ⊕ T . Fiecare dintre cele două subspaţii este
numit complementul celuilalt. Orice vector x ∈ Rn se poate exprima ı̂n mod unic
prin x = s + t, cu s ∈ S, t ∈ T . De asemenea, dim S + dim T = n. De exemplu,
ı̂n figura 1.3 sunt reprezentate un plan şi o dreaptă ı̂n R3 , care constituie imaginile
geometrice a două subspaţii complementare.
Să observăm că subspaţiul complementar al unui subspaţiu nu este, ı̂n general,
unic. În exemplul din figura 1.3, orice dreaptă care nu aparţine planului este com-
plementara acestuia.
Spaţiul vectorial complex Cn se defineşte analog cu spaţiul Rn şi are aceleaşi
proprietăţi, deoarece proprietăţile corpului numerelor reale folosite mai sus sunt
identice cu cele ale corpului numerelor complexe.
Desigur, orice vector x ∈ Cn se poate scrie ı̂n forma x = u + iv, cu u, v ∈ Rn şi
i unitatea imaginară.
AA. Saxpy. Vom descrie acum ı̂n termeni algoritmici o operaţie fundamentală
cu vectori, anume y ← αx + y, cu x, y ∈ Rn , α ∈ R, operaţie numită Saxpy2 .
Notaţia ←, citită ”ia valoarea”, are semnificaţia de atribuire. Cu alte cuvinte,
ı̂ntr-un program ce realizează operaţia şi ı̂n care vectorii x şi y reprezintă variabile,
vectorul calculat αx + y este depus ı̂n variabila y, suprascriind valoarea iniţială a
acesteia. Vom introduce direct şi alte convenţii de scriere a algoritmilor, cu premiza
că cititorul are noţiuni elementare despre limbajele de programare de nivel ı̂nalt.

Algoritmul 1.1 (Saxpy) (Se dau x, y ∈ Rn . Se calculează


y ← αx + y ∈ Rn .)
1. Pentru i = 1 : n
1. yi ← yi + αxi
2 Notaţia provine din iniţialele variabilelor folosite: αx Plus y; ı̂n BLAS, iniţiala S semnifică

faptul că calculele se efectuează ı̂n Simplă precizie; ea este ataşată ı̂n mod tradiţional numelui
operaţiei.
24 CAPITOLUL 1. ALGORITMI ELEMENTARI

Comentarii. Instrucţiunea Pentru i = 1 : n ı̂nseamnă repetarea execuţiei, pentru


toate valorile indicate ale indicelui i, a instrucţiunilor ce ı̂i urmează (până la prima
instrucţiune aflată la acelaşi nivel cu Pentru). Instrucţiunile sunt referite prin
secvenţe de numere cuprinzând (de la dreapta spre stânga) numărul din algoritm al
instrucţiunii respective şi numerele instrucţiunilor cărora le este subordonată (de la
cea mai apropiată la cea mai depărtată). În algoritmul Saxpy, prima instrucţiune
este 1, a doua 1.1.
Contorizând operaţiile executate de algoritmul 1.1, constatăm că fiecare execuţie
a instrucţiunii 1.1 necesită 2 flopi (o ı̂nmulţire şi o adunare), deci, ı̂n total, sunt
necesari Nop = 2n flopi.
În continuare, Saxpy va fi privită ca operaţie elementară şi va fi apelată prin
Saxpy(α, x, y); ea face parte din grupul operaţiilor de nivel 1, ı̂mpreună cu alte
operaţii, dintre care unele vor fi prezentate ulterior3 .
Aşa cum este normal, Saxpy şi celelalte operaţii de nivel 1 sunt executate
mai eficient pe calculatoare vectoriale. De aceea, pe astfel de calculatoare, există
tendinţa de a scrie toţi algoritmii ı̂n termeni de operaţii de nivel 1 şi nu prin operaţii
aritmetice elementare. ♦

1.2 Produs scalar. Norme. Ortogonalitate


Produsul scalar este o funcţie f : Rn × Rn −→ R cu proprietăţile:
1. f (x, y) = f (y, x) (comutativitate);
2. f (x, y + z) = f (x, y) + f (x, z) (distributivitate);
3. f (x, αy) = αf (x, y);
4. f (x, x) ≥ 0 şi f (x, x) = 0 ⇔ x = 0 (pozitivitate).
Produsul scalar standard ı̂n Rn , cel pe care ı̂l vom utiliza de obicei, se defineşte
not def Pn
prin f (x, y) = y T x, unde y T x = i=1 xi yi . Invităm cititorul să verifice satisface-
rea celor patru proprietăţi ale produsului scalar.
Spaţiul Rn ı̂mpreună cu produsul scalar uzual este un spaţiu euclidian (ı̂n el este
valabilă o geometrie similară cu cea din R2 şi R3 , cunoscută din liceu).
Norme. Prin normă se asociază unui vector o mărime (lungime). O normă
vectorială este o funcţie ν : Rn → R+ , notată de obicei ν(x) = kxk, care satisface
următoarele condiţii:
1. kxk > 0, ∀x ∈ Rn , x 6= 0 (pozitivitate);
2. kαxk = |α| · kxk, ∀x ∈ Rn , ∀α ∈ R (omogenitate);
3. kx + yk ≤ kxk + kyk, ∀x, y ∈ Rn (inegalitatea triunghiului).
Se deduce imediat că k0k = 0 şi k − xk = kxk.
Cea mai utilizată normă vectorială este cea indusă de produsul scalar şi se
numeşte normă euclidiană sau normă 2:
v
u n
√ uX
T
kxk2 = x x = t x2i . (1.3)
i=1

3 Numerotarea nivelelor se face după exponentul lui n din expresia numărului de flopi necesari

la execuţie; operaţiile de nivel 1 necesită O(n) flopi, cele de nivel 2 necesită O(n2 ) flopi etc.
1.2. PRODUS SCALAR. NORME. ORTOGONALITATE 25

'$
6
∞ @  1

@ -
@
&%
@ bb 2

Fig. 1.4: Cercuri de rază 1 ı̂n R2 , ı̂n normele 1, 2, ∞

Denumirea de normă 2 este justificată de faptul că (1.3) este un caz particular
de normă p (sau normă Hölder). Pentru p ≥ 1, norma p se defineşte prin
n
!1/p
X
p
kxkp = |xi | .
i=1

Alte cazuri particulare de normă p folosite curent sunt normele 1 şi infinit,
definite, ı̂n ordine, prin
Xn
kxk1 = |xi |,
i=1
kxk∞ = max |xi |.
i=1:n

Pentru a ilustra geometric cele trei norme de mai sus, figura 1.4 prezintă ”cer-
curile” de rază 1 ı̂n R2 , adică locul geometric al punctelor x ∈ R2 pentru care
kxkp = 1, pentru p = 1, 2, ∞.
Două norme pe Rn , să zicem k · kq şi k · kr , se numesc echivalente dacă există
γ1 , γ2 > 0 astfel ı̂ncât pentru orice x ∈ Rn avem

γ1 kxkq ≤ kxkr ≤ γ2 kxkq . (1.4)

Oricare două norme p sunt echivalente. De exemplu (demonstraţi !):

kxk∞ ≤ kxk1 ≤ nkxk∞ ;



kxk∞ ≤ kxk2 ≤ nkxk∞ ;

kxk2 ≤ kxk1 ≤ nkxk2 .

Ortogonalitate. Unghiul α a doi vectori nenuli x, y ∈ Rn se defineşte prin


α = arccos(y T x/(kxk · kyk)); geometric, acesta este chiar unghiul format de cei doi
vectori ı̂n planul generat de ei.
Doi vectori x, y ∈ Rn se numesc ortogonali dacă produsul lor scalar este nul,
T
x y = 0; semnificaţia geometrică este cea naturală: ı̂ntre cei doi vectori este un
unghi drept; de aceea vom folosi şi notaţia x ⊥ y.
Vectorii u1 , u2 , . . . , up se numesc ortogonali dacă sunt ortogonali doi câte doi,
adică
uTi uj = 0, ∀i 6= j, i, j ∈ 1 : p. (1.5)
26 CAPITOLUL 1. ALGORITMI ELEMENTARI

Dacă, ı̂n plus faţă de (1.5), vectorii ui au norme euclidiene unitare, kui k2 = 1,
∀i = 1 : p, ei sunt numiţi ortonormali.
Vectorii ortogonali sunt liniar independenţi; justificarea e intuitivă: un vector
ortogonal pe toţi ceilalţi este ortogonal şi pe orice combinaţie liniară a lor.
Orice subspaţiu de dimensiune mai mare ca unu are o infinitate de baze ortonor-
male 4 . De exemplu, baza canonică a Rn , e1 , . . . , en , este ortonormală. Folosirea
bazelor ortonormale este recomandabilă nu numai datorită proprietăţilor matema-
tice, dar şi a acurateţii numerice pe care o induc ı̂n calcule. Un mod simplu, dar nu
şi numeric stabil, de a construi o bază ortonormală, pornind de la o bază oarecare,
este sugerat ı̂n problema 1.6 (algoritmul Gram-Schmidt); metode numeric stabile
vor fi prezentate ı̂n capitolele 3 şi 5.
Teorema lui Pitagora se generalizează imediat ı̂n Rn : vectorii x, y ∈ Rn sunt
ortogonali dacă şi numai dacă kx + yk22 = kxk22 + kyk22 .
Noţiunea de ortogonalitate poate fi extinsă la subspaţii liniare. Vectorul x ∈ Rn
este ortogonal pe subspaţiul S ⊂ Rn dacă este ortogonal pe orice vector din S. Două
subspaţii S, T ⊂ Rn sunt ortogonale dacă orice vector s ∈ S este ortogonal pe orice
vector t ∈ T ; vom nota S ⊥ T .
Un subspaţiu S ⊂ Rn este numit complementul ortogonal al subspaţiului
T ⊂ Rn dacă cele două subspaţii sunt ortogonale şi complementare. (∀x ∈ Rn ,
există vectorii unici s ∈ S, t ∈ T astfel ı̂ncât x = t + s şi t ⊥ s.) Se utilizează
notaţia S = T ⊥ ; desigur, avem şi T = S ⊥ .
Particularităţi ale spaţiului euclidian complex Cn . Produsul scalar uzual
al vectorilor x, y ∈ Cn este definit de proprietăţi uşor diferite de cele ale produsului
scalar din Rn ; mai precis, notând cu α complex conjugatul scalarului complex α,
proprietăţile 1 şi 3 devin:
1’. f (x, y) = f (y, x);
3’. f (x, αy) = αf (x, y).
Pn
Produsul scalar uzual ı̂n Cn se defineşte prin y H x = i=1 xi yi .
Doi vectori x, y ∈ Cn sunt ortogonali dacă y H x = 0. √
Norma euclidiană
P k · k : Cn → R+ se defineşte prin kxk2 = xH x, ∀x ∈ Cn ,
unde xH x = ni=1 |xi |2 , iar |α| este modulul scalarului complex α.
AA. Calculul produsului scalar. Urmând (1.3), produsul scalar se calculează
astfel:

Algoritmul 1.2 (DOT – Calculul produsului scalar) (Se dau vec-


torii x, y ∈ Rn . Se calculează α = y T x.)
1. α ← 0
2. Pentru i = 1 : n
1. α ← α + xi yi

Comentarii. Algoritmul are 2n operaţii şi face deci parte din grupul operaţiilor
de nivel 1. Îl vom apela prin α = DOT(x, y).
4 În general vom spune baze ortogonale ı̂n loc de ortonormale, presupunând implicit că normele

vectorilor sunt unitare.


1.2. PRODUS SCALAR. NORME. ORTOGONALITATE 27

Datorită erorilor numerice, la execuţie algoritmul DOT nu va calcula α = y T x,


ci o valoare α̂, despre care se poate demonstra (vezi şi problema 1.5):

|α̂ − α| ≤ nεM |y|T |x| + O(ε2M ), (1.6)

unde |x| este vectorul modulelor elementelor vectorului x. Eroarea nu este neapărat
mică; dacă |y T x| ≪ |y|T |x|, atunci eroarea relativă din (1.6) poate fi mare. ♦
AA. Calculul normelor. Normele 1 şi ∞ se calculează uşor. De exemplu,
kxk∞ se calculează astfel:

Algoritmul 1.3 (Nrminf – Calculul normei infinit a unui vector)


(Se dă x ∈ Rn . Se calculează kxk∞ .)
1. norm ← 0
2. Pentru i = 1 : n
1. Dacă |xi | > norm atunci norm ← |xi |
Pentru calculul normei 2 a unui vector x ∈ Rn poate fi utilizat algoritmul 1.2,
apelând DOT(x, x), şi apoi extrăgând radicalul. Există ı̂nsă posibilitatea ca, deşi
kxk2 este reprezentabil ı̂n virgulă mobilă, xT x = kxk22 să nu fie (de exemplu 1025 este
reprezentabil ı̂n simplă precizie, dar 1050 nu) şi atunci calculul lui xT x să conducă
la depăşire superioară. Similar poate apărea o depăşire inferioară, care antrenează
pierdere de precizie sau decizii eronate: kxk2 = 0 deşi x 6= 0. Pentru a preveni acest
eveniment care ar ı̂mpiedica obţinerea rezultatului, se scalează vectorul x, adică se
ı̂mpart toate elementele sale cu, de exemplu, kxk∞ (se aduce astfel x la altă scară
de mărime). Dacă x̃ = x / kxk∞ , atunci |x̃i | ≤ 1, ∀i ∈ 1 : n, şi depăşirea superioară
este practic imposibilă. (Apariţia unor depăşiri inferioare la ridicarea la pătrat a
unor elemente ale vectorului x̃ nu este supărătoare, deoarece ı̂n acest caz rezultatul
se aproximează cu zero.) Se obţine următorul algoritm.

Algoritmul 1.4 (Nrm2 – Calculul normei 2 a unui vector) (Se dă


x ∈ Rn . Se calculează α = kxk2 , efectuând o operaţie de scalare.)
1. Se calculează β = kxk∞
2. α = 0
3. Pentru i = 1 : n
1. α √← α + (xi /β)2
4. α ← β α

Comentarii. Se observă că scalarea, care se efectuează ı̂n instrucţiunile 1 şi 3.1,
ı̂ncarcă algoritmul cu n flopi (2) şi n comparaţii (1); cu toate acestea, siguranţa
calculelor impune de regulă utilizarea ei, cu excepţia cazurilor ı̂n care informaţiile
apriorice despre date exclud apariţia depăşirii.
Un rafinament al algoritmului 1.4 este de a utiliza pentru scalare nu kxk∞ , ci
cea mai apropiată putere a bazei de numeraţie a formatului virgulă mobilă utilizat
(de regulă 2). Scalările din instrucţiunea 3.1 vor avea rezultate de acelaşi ordin de
mărime ca ı̂n cazul scalării cu kxk∞ , deci nu va exista pericol de depăşire superioară,
ı̂n schimb toate ı̂mpărţirile se vor efectua exact, neintroducându-se nici un fel de
eroare numerică suplimentară la calculul normei. ♦
28 CAPITOLUL 1. ALGORITMI ELEMENTARI

AA. Ortogonalitate numerică. Matematic, testul de ortogonalitate a doi


vectori x, y ∈ Rn este foarte clar: se verifică dacă xT y = 0. Numeric ı̂nsă, se
ı̂ntâmplă foarte rar ca DOT(x, y) să fie exact 0; aceasta se datorează atât erorilor
numerice apărute ı̂n execuţia algoritmului DOT, cât şi erorilor de reprezentare
asociate elementelor celor doi vectori. De aceea, pentru a considera doi vectori
numeric ortogonali, ne mulţumim cu condiţia

| DOT(x / kxk2 , y / kyk2 ) | < cεM ,

unde c ≥ 1 este o constantă mică, adică produsul scalar al vectorilor normalizaţi


să fie de acelaşi ordin de mărime cu epsilon maşină al formatului virgulă mobilă
utilizat.

1.3 Matrice
Matrice. O matrice reală A este un tablou bidimensional (rectangular) de
numere reale dispuse pe m linii şi n coloane; notând cu aij elementul matricei de
pe linia i şi coloana j, matricea arată astfel
 
a11 a12 ... a1n

 a21 a22 ... a2n 

A= .. .. ..  (1.7)
 . . . 
am1 am2 . . . amn

Dacă m = n, matricea se numeşte pătrată.


Mulţimea tuturor matricelor reale (complexe) cu m linii şi n coloane va fi notată
Rm×n (respectiv Cm×n ). Păstrăm ı̂n continuare convenţia de a ne referi la cazul
complex doar atunci când este diferit de cel real.
Se numeşte diagonală principală a matricei mulţimea poziţiilor de indici egali din
tablou; pentru A ∈ Rn×n , suma elementelor de pe diagonala principală se numeşte
def P
urmă şi se notează tr(A) = ni=1 aii .
Operaţii. Definim acum câteva operaţii elementare cu matrice: suma, produsul
cu un scalar, transpunerea.
Suma a două matrice A, B ∈ Rm×n este matricea C = A + B ∈ Rm×n , definită
prin cij = aij + bij ; aşadar, suma se face adunând elementele de pe poziţii cores-
pondente.
Produsul unei matrice A ∈ Rm×n cu un scalar α ∈ R este matricea
B = αA ∈ Rm×n , definită prin bij = αaij , i = 1 : m, j = 1 : n.
Cu aceste două operaţii — suma şi produsul cu un scalar — Rm×n are o structură
de spaţiu vectorial de dimensiune mn. O bază este Eij , i = 1 : m, j = 1 : n, unde
Eij este matricea nulă cu excepţia elementului (i, j) egal cu 1.
Transpusa unei matrice A ∈ Rm×n este matricea B ∈ Rn×m , notată B = AT ,
definită prin bij = aji . Propunem cititorului demonstrarea următoarelor proprietăţi
simple ale operaţiei de transpunere:
1.3. MATRICE 29

1. (AT )T = A, ∀A ∈ Rm×n ;

2. (A + B)T = AT + B T , ∀A, B ∈ Rm×n ;

3. (αA)T = αAT , ∀A ∈ Rm×n , ∀α ∈ R.

Produsul matrice-vector. În funcţie de modul de utilizare, o matrice poate fi


interpretată ı̂n mai multe feluri. De exemplu, o matrice poate fi văzută ca alăturare
de vectori:
A = [a1 a2 . . . an ], (1.8)
cu a1 , a2 , . . . , an ∈ Rm notându-se coloanele matricei A. Această interpretare este
utilă ı̂n special ı̂n lucrul cu subspaţii.
Cu notaţia (1.8), produsul dintre matricea A ∈ Rm×n şi vectorul x ∈ Rn este
vectorul y ∈ Rm
Xn
def
y = Ax = aj xj , (1.9)
j=1

i.e. combinaţia liniară a coloanelor lui A cu coeficienţii xj . Un caz particular este


produsul dintre matricea A şi vectorul unitate ej , care are ca rezultat coloana j a
matricei: Aej = aj .
Se poate observa că produsul matrice-vector defineşte o transformare liniară
f : Rn → Rm , f (x) = Ax, adică o aplicaţie cu proprietăţile (evident satisfăcute ı̂n
cazul nostru): f (u + v) = f (u) + f (v), f (αu) = αf (u), ∀u, v ∈ Rn , α ∈ R.
Matrice şi subspaţii liniare. Deoarece matricea A poate fi privită ca o
”mulţime” de vectori (coloane), se impune o notaţie specială pentru subspaţiul
generat de coloanele matricei, numit imaginea acesteia:

ImA = {y ∈ Rm | ∃x ∈ Rn astfel ı̂ncât y = Ax}. (1.10)


n
Un alt subspaţiu interesant, de data asta ı̂n R , este cel al vectorilor având ca
elemente coeficienţii combinaţiilor liniare nule ale coloanelor lui A, numit nucleul
matricei A:
KerA = {x ∈ Rn | Ax = 0}. (1.11)
O proprietate fundamentală a acestor subspaţii este dată de

Teorema 1.1 Dacă A ∈ Rm×n , atunci ImA şi KerAT sunt subspaţii ortogonale şi
complementare ı̂n Rm , i.e.
1. ImA ⊥ KerAT .
2. Rm = ImA ⊕ KerAT .

Demonstraţie. 1. Fie y = Ax ∈ ImA şi z ∈ KerAT . Atunci y T z = xT AT z = 0.


2. Fie z ⊥ ImA. Atunci xT AT z = 0, oricare x ∈ Rn , deci AT z = 0. ♦
Evident, teorema poate fi aplicată pentru AT , şi deci avem ImAT ⊥ KerA şi
R = ImAT ⊕ KerA.
n
30 CAPITOLUL 1. ALGORITMI ELEMENTARI

y3
6

(1,0,1)

(0,1,1) k
Q
Q ImA
Q
Q y1
Q -

 

y2 
KerAT

• (1,1,-1)

Fig. 1.5: KerAT este complementul ortogonal al lui ImA. Datele sunt cele din
exemplul 1.1

 
1 0
Exemplul 1.1 Fie A =  0 1 .
1 1
 
x1
Atunci, S = ImA = {y ∈ R3 | y =  x2  , x1 , x2 ∈ R}, adică S este
x1 + x2
planul de ecuaţie y3 = y1 + y2 .
T = KerAT = {y ∈ R 3
| AT y = 0} = {y
∈
3
 R | y2+ y3 = 0, y1 + y3 = 0}, deci
1 1
avem T = {y ∈ R3 | y =  1  α} = Im  1 .
−1 −1
Vezi figura 1.5. ♦
Privind ı̂n continuare matricea A ı̂n forma (1.8), rangul matricei A este dimen-
siunea subspaţiului ImA generat de coloanele lui A. Aşadar rangA = dim(ImA),
sau, altfel spus, rangul este numărul maxim de coloane liniar independente din A.
Se poate demonstra că rangA = rangAT şi deci rangul este totodată şi numărul
maxim de linii liniar independente din A. Recapitulând:
not
dim ImA = dim ImAT = r,
dim KerA = n − r, (1.12)
dim KerAT = m − r.
O matrice A ∈ Rm×n având coloanele liniar independente se numeşte monică;
ı̂n acest caz, m ≥ n, rangA = n şi KerA = {0}. Se mai spune că A are rang maxim
pe coloane.
O matrice A ∈ Rm×n având liniile liniar independente se numeşte epică; atunci
m ≤ n, rangA = m şi ImA = Rm ; se spune că A are rang maxim pe linii.
1.3. MATRICE 31

O matrice A ∈ Rm×n având una din dimensiuni egală cu 1 este un vector; dacă
n = 1, vectorul este coloană (accepţiunea implicită), iar dacă m = 1 vectorul este
linie. Este clar că transpusa unui vector linie este un vector coloană şi reciproc. În
mod analog cu (1.8), o matrice poate fi scrisă evidenţiind liniile:
 T 
a1
 aT2 
 
A =  . . (1.13)
 .. 
aTm

Atenţie: acum aTi e o notaţie pentru vectorul format de linia i a matricei A; ai nu


este coloana i din (1.8). Pentru a evita confuziile, vom folosi şi notaţiile: A(:, i)
pentru coloana i din A, respectiv A(i, :) pentru linia i din A.
Folosind forma (1.13) a matricei A, se poate observa uşor că produsul matrice-
vector se poate exprima prin intermediul unor produse scalare:
 T 
a1 x
 .. 
Ax =  .  . (1.14)
aTm x

AA. Gaxpy. Vom prezenta acum mai multe implementări ale produsului
5
matrice-vector, sub forma operaţiei y ← Ax + y, numită GaxpyPn .
Din (1.9), la nivel de element, operaţia se scrie yi ← yi + j=1 aij xj , şi deci

Algoritmul 1.5 (Gaxpy – Produs matrice-vector) (Se dau


A ∈ Rm×n , x ∈ Rn . Se calculează y ← Ax + y ∈ Rm utilizând operaţii
elementare.)
1. Pentru i = 1 : m
1. Pentru j = 1 : n
1. yi ← yi + aij xj
Se observă imediat că bucla interioară reprezintă o operaţie DOT, corespun-
zând exprimării produsului matrice-vector ı̂n forma (1.14). Algoritmul de mai sus
se scrie deci, ı̂n forma vectorială

Algoritmul 1.6 (Se dau A ∈ Rm×n , x ∈ Rn . Se calculează


y ← Ax + y ∈ Rm utilizând operaţii DOT.)
1. Pentru i = 1 : m
1. yi ← yi + DOT(A(i, :), x)
Inversând acum ordinea buclelor din algoritmul 1.5, ceea ce nu afectează ı̂n nici
un fel rezultatul (ordinea operaţiilor pentru calculul fiecărei sume yi ı̂n parte este
aceeaşi), obţinem

Algoritmul 1.7 (Se dau A ∈ Rm×n , x ∈ Rn . Se calculează


y ← Ax + y ∈ Rm utilizând operaţii elementare.)
5 Prescurtare pentru General Ax Plus y.
32 CAPITOLUL 1. ALGORITMI ELEMENTARI

1. Pentru j = 1 : n
1. Pentru i = 1 : m
1. yi ← yi + aij xj
Bucla interioară reprezintă acum o operaţie Saxpy, corespunzând exprimării
produsului matrice-vector ı̂n forma (1.9), care este o sumă de vectori. Algoritmul
1.7 se rescrie deci ı̂n forma vectorială:

Algoritmul 1.8 (Se dau A ∈ Rm×n , x ∈ Rn . Se calculează


y ← Ax + y ∈ Rm folosind operaţii Saxpy.)
1. Pentru j = 1 : n
1. y ← Saxpy(xj , A(:, j), y)
Comentarii. Toţi algoritmii de mai sus au 2n2 operaţii. De aceea Gaxpy
face parte din grupul operaţiilor de nivel 2. Vom face referinţă la ea ı̂n forma
y = Gaxpy(A, x, y). Desigur, implementările din algoritmii 1.6 şi 1.8 vor fi deosebit
de eficiente pe calculatoare vectoriale. ♦

1.4 Înmulţirea matricelor


Dedicăm o secţiune separată ı̂nmulţirii de matrice (şi unor noţiuni conexe),
deoarece această operaţie este specifică (nu se poate defini ı̂n general produsul a
doi vectori cu rezultat vector6 ) şi apare deseori ı̂n construcţia algoritmilor de nivel
superior, devenind astfel interesantă atât ”teoretic”, cât şi din punctul de vedere al
detaliilor de implementare.

Definiţia 1.1 Fie A ∈ Rm×l şi B ∈ Rl×n , două matrice; produsul lor este matricea
C = AB ∈ Rm×n , definită prin
l
X
cij = aik bkj , i = 1 : m, j = 1 : n.
k=1

Cazuri particulare. Să discutăm ı̂ntâi cazurile particulare ı̂n care cel puţin
una dintre dimensiuni este egală cu 1.
not not
Dacă m = n = 1, atunci A = xT este un vector linie, B = y este un vector
coloană, ambii ı̂n R , iar produsul lor coincide cu simplul produs scalar AB = xT y.
l
not not
Dacă l = 1, atunci A = x este un vector coloană ı̂n Rm , B = y T este un
vector linie ı̂n Rn , iar produsul lor este matricea C = xy T ∈ Rm×n , definită prin
cij = xi yj ; această operaţie cu doi vectori poartă numele de produs exterior şi va fi
notată prin OUT(x, y).
not
Dacă n = 1, atunci B = y este un vector coloană şi operaţia AB este o ı̂nmulţire
matrice-vector.
not
Dacă m = 1, atunci A = xT este un vector linie şi AB = xT B este un vector
linie (ı̂nmulţire vector linie - matrice).
6 Produsul ”vectorial” a × b este posibil, printr-un accident fericit căruia ı̂i este ı̂ndatorată

ı̂ntreaga fizică clasică, numai ı̂n R3 .


1.4. ÎNMULŢIREA MATRICELOR 33

Forme ale produsului matriceal. Vom evidenţia acum mai multe forme
de prezentare a ı̂nmulţirii a două matrice, folosind ca operaţii elementare cazurile
particulare prezentate mai sus.
1. Să privim A ca alăturare de vectori linie, ca ı̂n (1.13), şi B ca alăturare de
vectori coloană, ca ı̂n (1.8). Se observă imediat din definiţie că cij = aTi bj , adică
fiecare element al rezultatului poate fi exprimat printr-un produs scalar (DOT).
2. Privim acum A partiţionată pe coloane şi B pe linii. Produsul lor se poate
exprima ca o sumă de produse exterioare:
 T 
b1 l
 ..  X
C = AB = [a1 . . . al ]  .  = ak bTk . (1.15)
bTl k=1

Pl Pl Pl
Demonstraţie: cij = k=1 (ak bTk )ij = k=1 (ak )i (bTk )j = k=1 aik bkj .
3. Punem acum ı̂n evidenţă numai coloanele matricei B. Atunci

C = AB = A[b1 . . . bn ] = [Ab1 . . . Abn ], (1.16)

deci fiecare coloană a produsului este obţinută prin ı̂nmulţirea matrice-vector dintre
matricea A şi coloana respectivă a lui B.
4. Fie acum A partiţionată pe linii. Atunci
 T   T 
a1 a1 B
C = AB =  ...  B =  ...  ,
   
(1.17)
aTm aTm B

deci fiecare linie a produsului este obţinută prin ı̂nmulţirea vector linie - matrice
dintre linia respectivă a lui A şi matricea B.
5. Să exprimăm acum coloanele produsului C ı̂n funcţie de coloanele matricei
A. Cu ajutorul relaţiei (1.16) se obţine
l
X
cj = Abj = bkj ak , (1.18)
k=1

deci orice coloană din C este combinaţie liniară a coloanelor matricei A.


6. În sfârşit, o ultimă formă, ı̂n care vom exprima liniile produsului C ı̂n funcţie
de liniile matricei B. Din (1.17) rezultă
l
X
cTi = aTi B = aik bTk . (1.19)
k=1

Proprietăţi. Înmulţirea de matrice are unele proprietăţi imediate, prezentate ı̂n


continuare; presupunem că matricele au dimensiuni potrivite operaţiilor efectuate;
demonstraţiile sunt lăsate cititorului.
1. A(BC) = (AB)C (asociativitate);
2. A(B + C) = AB + AC (distributivitate);
34 CAPITOLUL 1. ALGORITMI ELEMENTARI

3. (AB)T = B T AT .
Trebuie subliniat faptul că ı̂nmulţirea de matrice nu este comutativă. Să detaliem
puţin; considerăm A ∈ Rm×l şi B ∈ Rl×n , cazul cel mai general pentru care este
definit produsul AB; dacă m 6= n, atunci produsul BA nici măcar nu este definit.
Dacă m = n, atunci AB ∈ Rm×l , iar BA ∈ Rl×m ; prin urmare, dacă m 6= l, atunci
AB şi BA au dimensiuni diferite, deci nu se pune problema egalităţii. În fine, dacă
şi m = l, deci ambele matrice sunt pătrate,
 atunci
 egalitatea
 AB = BA nu are loc,
1 1 1 2
ı̂n general; un exemplu simplu: A = ,B= .
1 1 3 4
Matrice pătrate. Ne vom ocupa ı̂n continuare de unele aspecte specifice ma-
tricelor pătrate din Rn×n , a căror mulţime are structură de inel necomutativ. Ma-
tricea unitate de ordinul n are elementele de pe diagonala principală egale cu 1 şi
toate celelalte elemente nule; ea este notată prin In , sau numai I dacă dimensiunea
rezultă din context; scrisă pe coloane, matricea unitate are forma In = [e1 . . . en ].
Fie o matrice A ∈ Rn×n ; dacă există o matrice X ∈ Rn×n astfel ı̂ncât
AX = XA = I, atunci X se numeşte inversa matricei A şi se notează cu A−1 .
O matrice care are inversă se numeşte inversabilă; matricea inversă este unică. Se
poate demonstra că mulţimea matricelor inversabile din Rn×n are o structură de
grup (necomutativ) ı̂n raport cu ı̂nmulţirea, notat GL(n).
Se pune ı̂ntrebarea când este o matrice inversabilă ? Vom menţiona deocamdată,
fără a demonstra, că inversabilitatea este echivalentă cu condiţia rangA = n, adică
cu independenţa coloanelor (şi liniilor) matricei A. (O altă condiţie echivalentă este
KerA = {0}, i.e. KerA are dimensiune nulă.) Testarea numerică a inversabilitaţii
va fi o problemă tratată mai mult sau mai puţin explicit ı̂n capitolele următoare,
metodele prezentate fiind din ce ı̂n ce mai sigure, dar şi mai sofisticate.
O ultimă proprietate: inversarea şi transpunerea unei matrice sunt operaţii care
not
comută ı̂ntre ele, adică (AT )−1 = (A−1 )T = A−T .
Echivalenţă. Două matrice A, B ∈ Rm×n se numesc echivalente la dreapta
dacă există o matrice T ∈ Rn×n inversabilă astfel ı̂ncât B = AT . Avem:

Propoziţia 1.1 Dacă A, B ∈ Rm×n sunt echivalente la dreapta, atunci avem ImA =
ImB.

Demonstraţie. Din definiţie, există T astfel ı̂ncât BP


= AT . Evidenţiind coloanele
n
din A şi B şi folosind (1.18) se obţine bj = Atj = i=1 tij ai , deci orice coloană
din B este combinaţie liniară a coloanelor matricei A; atunci bj ∈ ImA, pentru
j ∈ 1 : n, şi deci ImB ⊂ ImA.
Cum T este inversabilă, A = BT −1 , şi un raţionament similar conduce la con-
cluzia ImA ⊂ ImB. ♦

Dacă matricele echivalente la dreapta A şi B au coloanele liniar independente,


atunci coloanele fiecăreia formează o bază pentru ImA = ImB. În acest caz, ma-
tricea T este numită schimbare de bază (ı̂n Rn , din baza A ı̂n baza B).
Fie un vectorPx ∈ ImA; atunci x se exprimă unic ı̂n fiecare dintre Pncele două
n
baze: x = Ac = i=1 γi ai , cu c = [γ1 . . . γn ]T şi, respectiv, x = Bd = i=1 δi bi , cu
1.4. ÎNMULŢIREA MATRICELOR 35

d = [δ1 . . . δn ]T ; vectorii c şi d conţin coordonatele ı̂n cele două baze. Cum B = AT ,
atunci x = Ac = AT d, din unicitate rezultând c = T d, sau d = T −1 c. Această
ultimă relaţie justifică denumirea de transformare de coordonate dată matricei T −1
(din nou, din baza A ı̂n baza B).
Desigur, dacă A şi B sunt echivalente la dreapta, atunci şi KerAT = KerB T ,
consecinţă a propoziţiei de mai sus şi a teoremei 1.1.
Deoarece ı̂nmulţirea de matrice nu este comutativă, are sens noţiunea de echiva-
lenţă la stânga; matricele A, B ∈ Rm×n se numesc echivalente la stânga dacă există
o matrice S ∈ Rm×m inversabilă astfel ı̂ncât B = SA. În acest caz, ImAT = ImB T
şi KerA = KerB.
Dacă coloanele fiecăreia dintre matricele echivalente la stânga A şi B formează
o bază pentru ImA = ImB, atunci din (1.16) aj = Sbj , deci matricea S transformă
vectorii unei baze ı̂n vectorii celeilalte.
Două matrice sunt echivalente (bilateral) dacă există S ∈ Rm×m , T ∈ Rn×n
inversabile astfel ı̂ncât B = SAT . S şi T se numesc generic transformări (de
echivalenţă).
AA. Algoritmi. Vom prezenta mai multe variante de calcul al produsului ma-
triceal, variante ce diferă, ı̂n esenţă, prin ordinea ı̂n care sunt efectuate operaţiile
scalare. În acest mod punem ı̂n evidenţă diverse posibilităţi de organizare a cal-
culelor ı̂n vederea unei exploatări optime a particularităţilor arhitecturale ale cal-
culatorului ţintă.
Pentru ı̂nceput prezentăm un algoritm pentru produsul exterior, singurul caz
particular nedetaliat până acum ı̂n care cel puţin o dimensiune a operanzilor ı̂nmulţi-
rii este 1.
Algoritmul 1.9 (OUT – Calculul produsului exterior) (Se dau
x ∈ Rm , y ∈ Rn . Se calculează C = xy T ∈ Rm×n .)
1. Pentru j = 1 : n
1. Pentru i = 1 : m
1. cij ← xi yj
În cazul general, o implementare directă a ı̂nmulţirii de matrice, folosind definiţia,
este prezentată ı̂n continuare.
Algoritmul 1.10 (MM – Înmulţire matriceală) (Se dau
A ∈ Rm×l , B ∈ Rl×n . Se calculează C = AB ∈ Rm×n .)
1. C ← 0
2. Pentru j = 1 : n
1. Pentru i = 1 : m
1. Pentru k = 1 : l
1. cij ← cij + aik bkj
Rezultatul acestui algoritm nu se modifică dacă ordinea celor trei bucle Pentru
este alta. Algoritmul de mai sus se mai numeşte ”forma jik” a produsului ma-
triceal. Bucla Pentru cea mai interioară se poate ı̂nlocui cu apelul produsului scalar
DOT(A(i, :), B(:, j)), obţinându-se astfel un algoritm cu operaţii vectoriale. Cele
două bucle Pentru interioare se pot ı̂nlocui cu un apel la Gaxpy(A, B(:, j), C(:, j)),
după cum sugerează direct relaţia (1.16).
Forma jki pune ı̂n evidenţă operaţii Saxpy, având la bază relaţia (1.18):
36 CAPITOLUL 1. ALGORITMI ELEMENTARI

Algoritmul 1.11 (Se dau A ∈ Rm×l , B ∈ Rl×n . Se calculează


C = AB ∈ Rm×n . Forma jki.)
1. C ← 0
2. Pentru j = 1 : n
1. Pentru k = 1 : l
1. C(:, j) ← Saxpy(B(k, j), A(:, k), C(:, j))
Din nou cele două bucle interioare se pot ı̂nlocui cu Gaxpy.
Forma kji a algoritmului este o implementare directă a formulei (1.15), care
evidenţiază produse exterioare.

Algoritmul 1.12 (Se dau A ∈ Rm×l , B ∈ Rl×n . Se calculează


C = AB ∈ Rm×n folosind operaţii OUT.)
1. C ← 0
2. Pentru k = 1 : l
1. C ← C + OUT(A(:, k), B(k, :))
Apelul rutinei OUT ı̂nlocuieşte buclele Pentru cu indicii j şi i.
Formele ijk, kij şi ikj sunt, ı̂n această ordine, variante ale celor trei forme
prezentate mai sus. Permutarea buclelor i şi j nu este esenţială, deoarece acestea
au rolul de parcurgere a matricei C, pe linii sau pe coloane. Acest lucru poate
deveni important dacă se ţine seama de modul de adresare a elementelor matricei
impus de limbajul de programare utilizat. De exemplu, ı̂n FORTRAN se preferă
organizarea pe coloane, corespunzător formelor jik, jki, kji, deoarece matricele
sunt memorate pe coloane.
În oricare dintre formele menţionate, ı̂nmulţirea de matrice necesită 2mnl flopi,
deci 2n3 ı̂n cazul matricelor pătrate, şi face parte din grupul operaţiilor de nivel 3.
Vom face referire la ea ı̂n forma C = MM(A, B).
Înmulţirea matricelor complexe. Algoritmii de mai sus, ca şi toate conside-
raţiile care ı̂i preced, sunt valabili şi pentru ı̂nmulţirea matricelor complexe
C = AB ∈ Cm×n , cu A ∈ Cm×l , B ∈ Cl×n . Diferenţa constă ı̂n numărul de
flopi necesari execuţiei. Dacă adunarea a două numere complexe se face ı̂n doi flopi
(unul pentru partea reală, altul pentru partea imaginară), ı̂n schimb ı̂nmulţirea
necesită şase:
(α + iβ)(γ + iδ) = αγ − βδ + i(αδ + βγ). (1.20)
Aşadar ı̂nmulţirea matricelor complexe se execută ı̂n aproximativ 8mnl flopi (câte
mnl ı̂nmulţiri şi adunări de scalari complecşi).
Aceeaşi observaţie poate fi făcută scriind A = A1 + iA2 , cu A1 , A2 ∈ Rm×l ,
B = B1 + iB2 , cu B1 , B2 ∈ Rl×n , şi

C = A1 B1 − A2 B2 + i(A1 B2 + A2 B1 ). (1.21)

Înmulţirea matricelor complexe se poate efectua deci prin patru produse (şi două
adunări) de matrice reale.
Numărul de operaţii se poate reduce printr-un mic artificiu de calcul; o formă
echivalentă cu (1.20) este

(α + iβ)(γ + iδ) = αγ − βδ + i((α + β)(γ + δ) − αγ − βδ). (1.22)


1.5. NORME MATRICEALE 37

Aparent, nu se câştigă nimic, deoarece ı̂n loc de patru ı̂nmulţiri şi două adunări
reale, ca ı̂n (1.20), avem trei ı̂nmulţiri şi cinci adunări. Egalitatea (1.22) se scrie
ı̂nsă identic şi ı̂n cazul matriceal, ı̂nlocuindu-se (1.21) cu

G = A1 B1 ,
H = A2 B2 , (1.23)
C = G − H + i((A1 + A2 )(B1 + B2 ) − G − H).
Aşadar C se calculează acum cu doar trei ı̂nmulţiri de matrice, adică 6mnl flopi, şi
cinci adunări a căror contribuţie la numărul de operaţii este neglijabilă.
Acest algoritm rapid pentru ı̂nmulţirea matricelor complexe are totuşi şi un
dezavantaj: stabilitatea sa numerică este mai slabă decât cea a algoritmului ”clasic”
(1.21); cu toate acestea, el poate fi folosit cu succes ı̂n majoritatea aplicaţiilor.

1.5 Norme matriceale


Produsul scalar matriceal este o generalizare imediată a produsului scalar
a doi vectori. Dacă A, B ∈ Rm×n , produsul lor scalar este
m X
X n
def
(A, B) = aij bij = tr(B T A). (1.24)
i=1 j=1

Se observă că (1.24) este identică cu produsul scalar al celor doi vectori din Rmn
obţinuţi prin vectorizarea matricelor A şi B, i.e. prin concatenarea coloanelor lui
A, respectiv B.
Normele matriceale se definesc la fel ca normele vectoriale. O normă ma-
triceală este o funcţie k · k : Rm×n → R+ care satisface condiţiile
1. kAk > 0, ∀A ∈ Rm×n , A 6= 0 (pozitivitate);
2. kαAk = |α| · kAk, ∀A ∈ Rm×n , ∀α ∈ R (omogenitate);
3. kA + Bk ≤ kAk + kBk, ∀A, B ∈ Rm×n (inegalitatea triunghiului).
Pentru a utiliza normele matriceale independent de dimensiunile matricelor, in-
troducemS∞ noţiunea de familie de norme matriceale, care este o funcţie
k · k : m=1,n=1 Rm×n → R+ astfel ı̂ncât, pentru fiecare m, n > 0, restricţia lui
k · k la Rm×n este o normă matriceală. Dacă n = 1, atunci k · k este o familie de
norme vectoriale.
O familie k · k de norme matriceale este consistentă dacă

kABk ≤ kAk · kBk, (1.25)

atunci când produsul AB este definit. (Să observăm că, ı̂n general, A, B şi AB au
dimensiuni diferite, deci normele lor sunt funcţii diferite; de aceea se lucrează cu
familii de norme.)
Norma Frobenius este norma matriceală indusă de produsul scalar (1.24):
v
um X n
uX
kAkF = t a2ij . (1.26)
i=1 j=1
38 CAPITOLUL 1. ALGORITMI ELEMENTARI

Familia de norme Frobenius este consistentă.


Norme subordonate. O familie de norme matriceale poate fi obţinută dintr-o
familie de norme vectoriale k · k, prin următoarea relaţie
kAxk
kAk = sup = max kAxk, (1.27)
x6=0 kxk kxk=1

ı̂n care norma matriceală kAk se defineşte cu ajutorul normelor vectoriale kxk şi
kAxk. (Trecerea de la sup la max este justificată de faptul că hipersfera de ecuaţie
kxk = 1 este un compact iar norma vectorială k · k este o funcţie continuă, deci
mărginită şi ı̂şi atinge marginile.) Familia de norme matriceale este numită subor-
donată celei de norme vectoriale sau indusă de aceasta.
Astfel, folosind (1.27), se pot defini normele p matriceale subordonate normelor
p (Hölder) vectoriale. Cele mai utilizate norme p sunt normele 1, 2 şi ∞. Pentru
p = 1, ∞, relaţia (1.27) se reduce la expresiile simple
m
!
X
kAk1 = max kAxk1 = max |aij | ,
kxk1 =1 j=1:n
i=1
 
n (1.28)
X
kAk∞ = max kAxk∞ = max  |aij | .

kxk∞ =1 i=1:m
j=1

Pentru norma 2, atât semnificaţia cât şi modul de calcul vor fi prezentate ı̂n
capitolele următoare.
Normele p matriceale, aplicate unor vectori priviţi ca matrice, dau aceleaşi valori
ca normele p vectoriale. Astfel, nu e nici o posibilitate de confuzie ı̂n utilizarea
aceluiaşi simbol k · kp pentru normele matriceale şi cele vectoriale.
În sfârşit, normele matriceale subordonate unor norme vectoriale sunt consis-
tente (demonstraţi, folosind definiţia) şi, ı̂n plus, au proprietatea kIk = 1.
Echivalenţă. Normele matriceale prezentate mai sus sunt echivalente, ı̂n sensul
relaţiei (1.4). De exemplu (vezi problema 1.10):
1 √
√ kAk∞ ≤ kAk2 ≤ mkAk∞ ,
n

1 √ (1.29)
√ kAk1 ≤ kAk2 ≤ nkAk1 ,
m

kAk2 ≤ kAkF ≤ nkAk2 .

Cazul complex. O normă matriceală peste spaţiul complex Cm×n este o funcţie
cu valori reale pozitive satisfăcând cele trei condiţii de la ı̂nceputul secţiunii. Toate
definiţiile şi relaţiile de mai
P susPrămân valabile, cu singura observaţie că acum norma
Frobenius este kAk2F = m i=1
n 2
j=1 |aij | .

AA. Calculul normei 1 se face folosind direct relaţiile (1.28):


Algoritmul 1.13 (Nm1 – Calculul normei matriceale 1) (Se dă
A ∈ Rm×n . Se calculează ν = kAk1 .)
1.6. MATRICE STRUCTURATE 39

0
0

L U

Fig. 1.6: Matrice inferior şi superior triunghiulare

1. ν ← 0
2. Pentru j = 1 : n
1. α ← 0
2. Pentru i = 1 : m
1. α ← α + |aij |
3. Dacă α > ν atunci ν ← α
Algoritmul necesită mn flopi. Calculul normei ∞ este asemănător şi are aceeaşi
complexitate. Calculul normei Frobenius necesită 2mn flopi; desigur, pentru evitarea
depăşirilor superioare, ı̂n implementarea formulei directe (1.26) se utilizează scalarea.
În schimb, după cum vom vedea, calculul normei 2 face apel la noţiuni mai evolu-
ate şi implică O(n3 ) operaţii (pentru matrice pătrate). De aceea, normele 1, ∞ şi
Frobenius sunt cele mai folosite ı̂n calculul numeric elementar. Toate aceste norme
fiind echivalente, criteriul de alegere primordial este efortul de calcul.

1.6 Matrice structurate


În numeroase probleme apar matrice ale căror elemente sunt nule ı̂n anumite regiuni.
Astfel de matrice sunt numite generic structurate; ı̂n cazul lor, algoritmii de rezolvare
a unei probleme oarecare sunt de obicei mai simpli; de aceea, majoritatea algorit-
milor generali au ca prim obiectiv reducerea matricei iniţiale la una cu structură
mai simplă.
În această secţiune vom prezenta câteva tipuri de matrice structurate şi pro-
prietăţile lor principale. Pentru simplitate, vom considera doar matrice pătrate,
din Rn×n . Extinderea la matrice dreptunghiulare este imediată.
Definiţii. 1) O matrice D se numeşte diagonală dacă elementele nediagonale
sunt nule, adică dij = 0, pentru i 6= j.
2) O matrice T se numeşte inferior triunghiulară dacă tij = 0, pentru i < j, şi
superior triunghiulară dacă tij = 0, pentru i > j. Figura 1.6 prezintă astfel de ma-
trice. Evident, o matrice simultan inferior şi superior triunghiulară este diagonală.

O matrice se numeşte triunghiulară unitate dacă este triunghiulară şi, ı̂n plus,
toate elementele sale diagonale sunt egale cu 1.
O matrice se numeşte strict triunghiulară dacă este triunghiulară şi toate e-
lementele sale diagonale sunt nule. De exemplu, o matrice A este strict inferior
40 CAPITOLUL 1. ALGORITMI ELEMENTARI

triunghiulară dacă aij = 0, pentru i ≤ j.


Matricele triunghiulare au proprietăţi deosebite care vor fi evidenţiate ı̂n secţiuni
următoare ale acestui capitol.
3) O matrice H se numeşte inferior Hessenberg dacă hij = 0, pentru j > i + 1,
şi superior Hessenberg dacă hij = 0, pentru i > j + 1.
4) O matrice A se numeşte tridiagonală dacă este simultan inferior şi superior
Hessenberg, adică aij = 0, pentru |i − j| > 1.
În general, o matrice B se numeşte bandă, de lăţime inferioară p, dacă bij = 0,
pentru i > j+p, şi de lăţime superioară q, dacă bij = 0, pentru j > i+q. Dacă p = q,
vom spune că B este matrice bandă de lăţime p. Evident, matricele tridiagonale
sunt un caz particular de matrice bandă, cu p = q = 1. O matrice bandă cu
p = q = 2 se zice pentadiagonală.
Proprietăţi. Vom prezenta ı̂n continuare câteva proprietăţi utile ale matricelor
structurate.
Este evident că suma a două matrice cu structuri identice va avea aceeaşi struc-
tură. De asemenea, ı̂nmulţirea unei matrice cu un scalar conservă structura.
În ce priveşte produsul, proprietăţile nu mai sunt atât de generale.

Propoziţia 1.2 a. Dacă D este o matrice diagonală şi A este o matrice struc-
turată, atunci matricele DA şi AD vor avea structura matricei A.
b. Produsul a două matrice inferior (superior) triunghiulare (unitate) este o
matrice inferior (superior) triunghiulară (unitate).
c. Dacă L este o matrice inferior (superior) triunghiulară şi H este inferior (su-
perior) Hessenberg, atunci LH şi HL sunt matrice inferior (superior) Hessenberg.

Demonstraţie. Vom demonstra doar punctul b ı̂n cazul inferior triunghiular, cele-
lalte demonstraţii fiind lăsate ca exerciţiu.
FiePA şi B două matrice inferior triunghiulare, şi C = AB. Evident,
cij = nk=1 aik bkj . Considerăm i < j. A fiind inferior triunghiulară, aik = 0 pentru
k > i; ı̂n plus, bkj = 0, pentru k ≤ i < j, deoarece B este inferior triunghiulară;
aşadar, aik bkj = 0, pentru oricare k ∈ 1 : n, deci cij = 0 pentru i < j, adică C este
inferior triunghiulară.
Elementele posibil nenule ale matricei C (pentru i ≥ j) se calculează economic
cu relaţia
X i
cij = aik bkj , (1.30)
k=j

deoarece aik = 0 pentru k > i şi bkj = 0 pentru k < j.


Dacă A şi B sunt inferior triunghiulare unitate, atunci particularizând (1.30) se
obţine cii = aii bii = 1, deci şi C este inferior triunghiulară unitate. ♦
AA. Înmulţirea matricelor triunghiulare. Datorită elementelor nule, algo-
ritmii implicând matrice structurate pot fi simplificaţi astfel ı̂ncât să fie executate
doar operaţiile aritmetice strict necesare.
Vom exemplifica cu algoritmul de ı̂nmulţire a două matrice inferior triunghiulare,
A şi B. Profităm de faptul că rezultatul C este inferior triunghiular şi calculăm cij
numai pentru i ≥ j, folosind (1.30) şi nu formula generală.
1.6. MATRICE STRUCTURATE 41

Algoritmul 1.14 (TRMM – Înmulţire de matrice inferior triun-


ghiulare) (Se dau A, B ∈ Rn×n inferior triunghiulare. Se calculează
C = AB.)
1. Pentru i = 1 : n
1. Pentru j = 1 : i
P
1. cij = ik=j aik bkj
Comentarii. Cele două bucle sunt destinate parcurgerii pe linii a elementelor
triunghiului inferior al matricei C; parcurgerea se poate face şi pe coloane, prin:
Pentru j = 1 : n, Pentru i = j : n. Acest algoritm necesită n3 /3 flopi, adică de
şase ori mai puţin decât algoritmul general de ı̂nmulţire de matrice. ♦
AA. Memorarea matricelor structurate se poate face ı̂n tablouri n × n,
ca pentru toate celelalte matrice, cu dezavantajul stocării elementelor nule; totuşi,
există şi un avantaj: accesul la elementele matricelor se face identic pentru matricele
generale şi pentru cele structurate.
Dacă se doreşte economie de memorie, stocarea elementelor nule se poate evita
uşor; acest mod de memorare se numeşte compact sau ı̂mpachetat (packed). Exem-
plificăm ı̂n continuare pentru câteva tipuri de matrice.
O matrice triunghiulară se poate memora ı̂ntr-un vector, să-l notăm v, de
lungime n(n + 1)/2 (numărul elementelor posibil nenule ale matricei). Dacă L
este inferior triunghiulară, atunci o ordine naturală de memorare, cea pe linii, este
l11 , l21 , l22 , l31 , . . . (ı̂n v1 , v2 , v3 , v4 , . . . ). Se observă că lij se memorează ı̂n poziţia
i(i−1)
2 + j din v.
O matrice tridiagonală T se poate memora ı̂n trei vectori a, b, c (ı̂n fiecare câte
o diagonală), ceea ce este evident din notaţia:
 
a 1 c1
 b 2 a2 c2 
 
T =
 .. .. .. 
.
 . . . 
 bn−1 an−1 cn−1 
bn an

În general, o matrice bandă B, de lăţime p, se poate memora uşor ı̂ntr-un tablou
cu 2p + 1 linii şi n coloane. Exemplificăm pentru p = 2:
 
α β γ
δ α β γ  ∗ ∗ γ ... γ γ γ
 
ε δ α β γ  ∗ β β ... β β β
 
B= ε δ α β γ  α α α ... α α α
 
 ε δ α β γ  δ δ δ ... δ δ ∗
 
.. .. .. .. .. ε ε ε ... ε ∗ ∗
. . . . .

În stânga se găseşte matricea bandă (cu elementele notate generic), ı̂n dreapta
tabloul de memorare (prin ∗ sunt notate elemente nesemnificative); se observă că ele-
mentele de pe aceeaşi diagonală a matricei se memorează pe aceeaşi linie a tabloului.
Elementul bij se memorează pe linia p + i − j + 1, coloana j.
42 CAPITOLUL 1. ALGORITMI ELEMENTARI

× • • × •
× × × × ×
× • • × •
× • • × •

(a) (b) (c)

Fig. 1.7: Submatrice: (a) cu I = {1, 3, 4}, J = {2, 3, 5} (elementele submatricei


sunt notate cu •); (b) bloc; (c) lider principală

1.7 Matrice bloc


Submatrice, bloc. Până acum am privit o matrice A ca fiind formată din
elemente sau, eventual, din coloane sau linii, ca ı̂n (1.7), (1.8), respectiv (1.13). Un
alt punct de vedere este de a evidenţia submatrice sau blocuri, adică matrice de
dimensiuni mai mici conţinute ı̂n A.
În sensul cel mai larg, noţiunea de submatrice se defineşte după cum urmează.
Dacă A ∈ Rm×n , iar I = {i1 , i2 , . . . , ir } ⊂ 1 : m şi J = {j1 , j2 , . . . , jp } ⊂ 1 : n sunt
două mulţimi de indici astfel ı̂ncât i1 < i2 < . . . < ir , j1 < j2 < . . . < jp , atunci
matricea A′ de dimensiune r × p definită de a′kl = aik jl , este numită submatrice a
matricei A. Figura 1.7a ilustrează noţiunea.
Se observă că A′ este obţinută prin extragerea elementelor aflate la ”intersecţiile”
liniilor şi coloanelor din I, respectiv J . Dacă indicii din I, respectiv J , sunt
consecutivi, atunci submatricea mai este numită şi bloc. Pentru a ne referi la blocul
astfel definit vom folosi şi notaţia A(i1 : ir , j1 : jp ).
Dacă A ∈ Rn×n şi I = J , atunci submatricea A′ se numeşte principală. Dacă,
not
ı̂n plus, I = {1, 2, . . . , r}, atunci A′ = A[r] este numită submatrice lider principală
de ordin r a matricei A; aceasta este blocul r × r poziţionat stânga-sus ı̂n A. Vezi
figurile 1.7b,c.
Partiţionări conforme. Vom lucra ı̂n continuare cu matrice partiţionate ı̂n
blocuri, notate astfel
   
A11 A12 ... A1n B11 B12 . . . B1l

 A21 A22 ... A2n 


 B21 B22 . . . B2l 

A= .. .. .. .. , B= .. .. .. ..  , (1.31)
 . . . .   . . . . 
Am1 Am2 . . . Amn Bp1 Bp2 . . . Bpl

ı̂n care blocurile Aij au dimensiune µi × νj , iar Bij dimensiune πi × λj . Evident,


matricea A are (µ1 + . . . + µm ) linii şi (ν1 + . . . + νn ) coloane.
Este interesant să studiem operaţiile cu matrice astfel partiţionate, mai precis
modul de partiţionare care permite ı̂nlocuirea operaţiilor cu elemente prin cele cu
blocuri.
1.7. MATRICE BLOC 43

• Dacă m = p, µi = πi , ∀i ∈ 1 : m, şi n = l, cu νj = λj , ∀j ∈ 1 : n, atunci


 
C11 . . . C1n
 .. .. .. 
A+B =C = . . . , cu Cij = Aij + Bij . (1.32)
Cm1 . . . Cmn

• Dacă n = p, νi = πi , ∀i ∈ 1 : n, atunci
 
D11 . . . D1l n
AB = D =  ...
 .. ..  , cu D = X A B . (1.33)
. .  ij ik kj
Dm1 . . . Dml k=1

Partiţionările care permit scrierea relaţiilor de mai sus se numesc conforme cu


operaţia executată; se observă că formulele de calcul al sumei şi produsului la nivel
de bloc sunt similare celor la nivel de element; evident, suma şi produsul a două
blocuri se calculează cu formulele elementare cunoscute.
Întorcându-ne la secţiunea dedicată ı̂nmulţirii de matrice, putem acum constata
că relaţiile (1.15)–(1.18) sunt cazuri particulare ale relaţiei (1.33).
• Pentru transpunere avem
 
AT11 AT21 ... ATm1
 AT12 AT22 ... ATm2 
AT = 
 
.. .. .. .. . (1.34)
 . . . . 
AT1n AT2n . . . ATmn

Matrice bloc structurate. O matrice partiţionată ca ı̂n (1.31) poate fi struc-


turată la nivel de blocuri. Folosim aceleaşi definiţii ca ı̂n secţiunea precedentă,
gândind ı̂nsă acum la nivel de blocuri şi nu la nivel de element.
Presupunem că A din 1.31 este pătrată, m = n şi blocurile diagonale sunt
pătrate, adică µi = νi , i ∈ 1 : n (cu aceste ipoteze, diagonala principală a fiecărui
bloc Aii este parte din diagonala principală a matricei). Spunem că A este bloc
diagonală dacă Aij = 0, pentru i 6= j; A este bloc superior triunghiulară dacă
Aij = 0, pentru i > j, etc. Este evident că, ı̂n general, o matrice bloc diagonală nu
este diagonală, o matrice bloc triunghiulară nu este triunghiulară etc.
Structura la nivel de bloc este conservată la adunare dacă matricele operand sunt
partiţionate conform pentru adunare. Pentru ı̂nmulţire, este adevărat analogul la
nivel de bloc al propoziţiei 1.2, adică, de exemplu, produsul a două matrice bloc
superior (inferior) triunghiulare partiţionate conform este o matrice bloc superior
(inferior) triunghiulare.
AA. Înmulţire la nivel de bloc. Pe calculatoarele cu memorie ierarhică, cu
structura sugerată ı̂n figura 0.4c, partiţionarea matricelor ı̂n blocuri şi utilizarea unei
relaţii de tipul (1.33) poate conduce la o eficienţă sporită a ı̂nmulţirii de matrice.
Considerăm, pentru simplitate, matricele pătrate A, B ∈ Rq×q şi dorim să cal-
culăm produsul lor C = AB. Partiţionăm A, B şi C ca ı̂n (1.31), cu menţiunea
că acum m = n, p = l, iar toate blocurile sunt pătrate şi au aceleaşi dimensiuni,
44 CAPITOLUL 1. ALGORITMI ELEMENTARI

adică Aij ∈ Rr×r , r fiind numită dimensiunea blocurilor, iar m = q/r numărul de
blocuri; presupunem că r divide dimensiunea matricelor q doar pentru a simplifica
expunerea.
Exprimăm produsul matriceal ca ı̂n (1.33), deci
m
X
Cij = Aik Bkj . (1.35)
k=1

Pe un calculator cu memorie ierarhică trebuie minimizat traficul ı̂ntre memoria


principală MP şi memoria rapidă MR. Desigur, matricele A, B, C sunt stocate
ı̂n MP. Dacă alegem dimensiunea blocurilor r astfel ı̂ncât 3 blocuri de matrice să
poată fi stocate simultan ı̂n MR (deci, 3r2 < dim(MR)), atunci putem construi
un algoritm de calcul al produsului matriceal bazat pe ideea de a aduce, pe rând,
blocurile Aik , Bkj implicate ı̂n suma din (1.35), din MP ı̂n MR, şi abia apoi de a
efectua ı̂nmulţirea lor.

Algoritmul 1.15 (Se dau matricele A, B. Se calculează produsul


matriceal C = AB, la nivel de bloc. Se presupune că variabilele X, Y şi
Z se găsesc ı̂n MR.)
1. Pentru i = 1 : m
1. Pentru j = 1 : m
1. Z ← 0
2. Pentru k = 1 : m
1. X ← Aik , Y ← Bkj
2. Z ← Z + X · Y
3. Cij ← Z

Comentarii. În acest algoritm, atribuirile din instrucţiunea 1.1.2.1 reprezintă de


fapt transferuri din MP ı̂n MR; analog, ı̂n instrucţiunea 1.1.3 se execută un transfer
din MR ı̂n MP. Operaţia matriceală Z ← Z + X ·Y din 1.1.2.2 nu este detaliată aici;
ea se execută cu algoritmul 1.10 la nivel de element; esenţial este faptul că toate
variabilele implicate se găsesc ı̂n MR, deci nu e necesar nici un transfer din/spre MP.
Lucrând la nivel de blocuri, numărul de operaţii rămâne neschimbat, adică 2q 3 ;
ı̂n schimb, numărul de accesuri la MP devine 2r2 m3 = 2q 2 m = 2q 3 /r (instrucţiunea
1.1.2.1 se execută de m3 ori, de fiecare dată transferându-se două blocuri cu r2
elemente).
Dacă s-ar folosi algoritmul 1.10 la nivel de element pe un calculator cu memorie
ierarhică, fiecare operaţie cij ← cij + aik bkj ar implica cel puţin două transferuri
din MP ı̂n MR (putem presupune că cij rămâne ı̂n MR cât timp este calculat). Ar
avea loc deci aproximativ 2q 3 accesuri la MP.
În concluzie, faţă de versiunea la nivel de element, ı̂n algoritmul 1.15 la nivel
de bloc se accesează de r ori mai puţin memoria principală, ceea ce conduce la o
creştere semnificativă de viteză. ♦
Să rezumăm ideea eficientizării algoritmilor pe calculatoare cu memorie ier-
arhică; ea va fi folosită şi ı̂n rezolvarea altor probleme. Se partiţionează matricele de
intrare ı̂n blocuri şi se exprimă algoritmul ı̂n operaţii ı̂ntre blocuri (aceasta e banal
1.7. MATRICE BLOC 45

la produsul matriceal, dar mai complicat la alte probleme); dimensiunile blocurilor


se aleg cât mai mari (de obicei), dar astfel ı̂ncât toate blocurile implicate ı̂ntr-o
operaţie să ı̂ncapă simultan ı̂n MR.
Algoritmul Strassen. Aparent, prin ı̂nsăşi definiţia ei (algoritmul numit
generic ”standard”, ı̂n continuare), ı̂nmulţirea a două matrice n × n reale nece-
sită 2n3 flopi. Există ı̂nsă o multitudine de algoritmi, numiţi global ”rapizi”, deşi se
bazează pe idei diferite, care au o complexitate aritmetică mai mică. Primul dintre
aceştia, şi singurul dovedit utilizabil ı̂n practică (ı̂mpreună cu unele variante), este
cel descoperit ı̂n 1969 de Strassen [?].
Fie A, B ∈ Rn×n şi, pentru simplitate, considerăm că n este divizibil cu 2.
Partiţionăm matricele A, B şi C = AB ı̂n blocuri de dimensiune n/2 × n/2, adică
     
A11 A12 B11 B12 C11 C12
A= , B= , C= . (1.36)
A21 A22 B21 B22 C21 C22

Algoritmul lui Strassen este definit de formulele următoare, uşor de verificat prin
simplă substituţie:
 
M1 + M2 + M3 − M4 M4 + M6
C = A·B =
M3 + M5 M1 − M5 + M6 + M7

M1 = (A11 + A22 ) · (B11 + B22 ) M5 = (A21 + A22 ) · B11


M2 = (A12 − A22 ) · (B21 + B22 ) M6 = A11 · (B12 − B22 )
M3 = A22 · (B21 − B11 ) M7 = (A21 − A11 ) · (B11 + B12 )
M4 = (A11 + A12 ) · B22
(1.37)
Se observă că pentru calculul matricei C sunt necesare 7 ı̂nmulţiri şi 18 adunări
de matrice de dimensiune n/2 × n/2, ı̂n timp ce ı̂n algoritmul standard la nivel de
bloc se fac, pentru aceeaşi partiţionare (1.36), 8 ı̂nmulţiri şi 4 adunări de blocuri.
3
18n2
Astfel, numărul de operaţii pentru algoritmul Strassen este N1 (n) = 14n 8 + 4 .
Este evident că, pentru n suficient de mare (mai precis n > 18), N1 (n) < 2n3 şi deci
algoritmul Strassen este mai rapid decât cel standard. În schimb, implementarea
formulelor (1.37) necesită memorie suplimentară pentru rezultatele intermediare.
Un număr de operaţii şi mai bun se obţine dacă, pentru calculul celor 7 pro-
duse de matrice n/2 × n/2 din (1.37) se utilizează, recursiv, aceleaşi formule ale
lui Strassen. La fiecare nivel de recursie dimensiunea problemei se ı̂njumătăţeşte
(simplificând, presupunem acum că n este o putere a lui 2). Recursia are loc până
când se atinge o dimensiune n0 suficient de mică, pentru care algoritmul standard
este mai eficient decât cel al lui Strassen. Numărul de operaţii N (n) este definit de
recurenţa
n n2
N (n) = 7N ( ) + 18 , N (n0 ) = 2n30 , (1.38)
2 4
a cărei soluţie, pentru n ≫ n0 , este de ordinul

N (n) = O(nlog2 7 ), (log2 7 ≈ 2.807). (1.39)

Vezi problema 1.20 pentru soluţia exactă.


46 CAPITOLUL 1. ALGORITMI ELEMENTARI

În practică, dimensiunea n0 este mai mare decât 18 (dar de obicei n0 < 100),
datorită operaţiilor nearitmetice suplimentare necesare ı̂n algoritmul Strassen, ı̂n
special alocărilor de memorie şi apelurilor recursive. Aşadar, acest algoritm este
eficient pentru ı̂nmulţirea matricelor mari, cu dimensiuni de ordinul sutelor sau
miilor.
În privinţa stabilităţii numerice algoritmul Strassen este inferior celui standard,
de aceea trebuie utilizat cu anume precauţii. Recomandăm referinţele [IX], [?]
cititorului interesat.

1.8 Matrice normale


În această secţiune vom lucra ı̂n principal cu matrice pătrate, din Rn×n , specificând
explicit celelalte cazuri.
O matrice A ∈ Rn×n se numeşte normală dacă AT A = AAT .
Matricele normale au proprietăţi deosebit de interesante, cu precădere ı̂n câteva
cazuri particulare pe care le enumerăm acum şi le vom discuta pe larg ı̂n continuare:

1. matricele simetrice, pentru care A = AT ;

2. matricele antisimetrice, care satisfac A = −AT ;

3. matricele ortogonale, pentru care AT A = I.

Fie A ∈ Rn×n ; se numeşte formă P P biliniară asociată matricei A funcţia


f : Rn × Rn → R, f (x, y) = xT Ay = ni=1 nj=1 aij xi yj . Se observă că funcţia este
liniară ı̂n fiecare din cele două argumente luate separat, ceea ce ı̂i justifică numele.
Matrice simetrice. Matricea A este simetrică dacă A = AT , adică aij = aji ,
∀i, j ∈ 1 : n. Aşadar simetria este faţă de diagonala principală a matricei; se observă
că pentru o matrice nepătrată noţiunea de simetrie nu are sens, A şi AT neavând
aceleaşi dimensiuni.
Suma şi produsul cu scalari conservă simetria, adică dacă matricele A, B sunt
simetrice şi α ∈ R, atunci A + B şi αA sunt simetrice. În schimb,  ı̂n gene-

1 1
ral, produsul AB nu este simetric; consideraţi, de exemplu, A = şi
1 2
 
1 1
B= .
1 1
Matrice antisimetrice. Matricea A este antisimetrică dacă A = −AT , adică
aij = −aji , ∀i, j ∈ 1 : n. Evident, elementele sale diagonale sunt nule.
Forma pătratică
Pn P asociată unei matrice simetrice este funcţia g : Rn → R,
T n
g(x) = x Ax = i=1 j=1 aij xi xj . Forma pătratică este un polinom omogen de
gradul 2, ı̂n n variabile; de asemenea, se observă că g(x) = f (x, x), unde f este
forma biliniară asociată matricei A 7 .
7 Formele pătratice se asociază numai matricelor simetrice din următorul motiv: dacă A nu e

simetrică, luând à = (A + AT )/2 se vede că xT Ax = xT Ãx, ∀x ∈ Rn , şi à este simetrică. Să
notăm că B = (A − AT )/2 se numeşte componenta antisimetrică, iar xT Bx = 0.
1.8. MATRICE NORMALE 47

Matricele simetrice şi formele pătratice asociate pot avea ”semn”, ı̂n sensul
definit ı̂n continuare.
O matrice simetrică A este pozitiv definită dacă xT Ax > 0, pentru orice vector
x ∈ Rn , x 6= 0; se notează A > 0, dar, atenţie,  aceasta nu ı̂nseamnă că toate
2 −1
elementele matricei sunt pozitive; de exemplu, este pozitiv definită,
−1  2 
1 2
deoarece 2x21 − 2x1 x2 + 2x22 > 0, ∀[x1 x2 ]T 6= 0, ı̂nsă nu este, deoarece
2 1
x21 − 4x1 x2 + x22 poate avea orice semn când x1 , x2 ∈ R. Matricea A este pozitiv
semidefinită dacă xT Ax ≥ 0, ∀x ∈ Rn , ceea ce se notează A ≥ 0.
O matrice simetrică A este negativ (semi)definită dacă −A este pozitiv (semi)-
definită. O matrice simetrică care nu se ı̂ncadrează ı̂n nici una dintre categoriile de
mai sus se numeşte cu semn nedefinit.
Suma şi produsul cu scalari pozitivi conservă semnul; de exemplu, dacă A, B
sunt pozitiv definite şi α > 0, atunci A+B şi αA sunt pozitiv definite (demonstraţi !).

Propoziţia 1.3 O submatrice principală a unei matrice pozitiv definite A este po-
zitiv definită. În particular, submatricele lider principale A[k] , k ∈ 1 : n, sunt
pozitiv definite şi toate elementele diagonale sunt pozitive.

Demonstraţie. Fie I = {i1 , i2 , . . . , ir }, mulţimea de indici definind o submatrice


principală A′ a matricei A. Pentru orice vector nenul x ∈ Rr , definim vectorul
y ∈ Rn prin:
yik = xk , k = 1 : r,
yi = 0, i 6∈ I.
Evident, x 6= 0 implică y 6= 0, şi din pozitivitatea matricei A se deduce:
xT A′ x = y T Ay > 0, adică A′ este pozitiv definită. ♦
Congruenţă. Două matrice simetrice A, B se numesc congruente dacă există
o matrice nesingulară T ∈ Rn×n astfel ı̂ncât B = T T AT . Evident, A = T −T BT −1 .
(Demonstraţi că simetria este conservată de transformarea de congruenţă.)
Dacă A, B sunt congruente şi A > 0, atunci B > 0, adică transformarea de
congruenţă conservă semnul. (Într-adevăr, xT Bx = xT T T AT x = (T x)T A(T x) > 0,
pentru că A > 0 şi T x 6= 0, dacă x 6= 0, coloanele lui T fiind liniar independente.)
Matrice ortogonale. O matrice pătrată Q ∈ Rn×n este ortogonală dacă
Q Q = In ; evident, avem QT = Q−1 , deci transpusa matricei este chiar inversa ei,
T

iar QQT = In . Partiţionând Q pe coloane şi exprimând QT Q prin produse scalare,


definiţia este echivalentă cu qiT qj = 0, pentru i 6= j, şi kqi k2 = 1, adică matricea Q
are coloanele vectori ortonormali.
În cazul ı̂n care matricea nu este pătrată, Q ∈ Rm×n , dacă QT Q = In , atunci
matricea are coloanele ortonormale (m > n şi QQT 6= Im ). Dacă QQT = Im , atunci
matricea are liniile ortogonale (m < n şi QT Q 6= In ).
Vom considera ı̂n continuare doar matrice ortogonale pătrate. Referitor la
operaţiile elementare, vom observa că produsul a două matrice ortogonale este
o matrice ortogonală; ı̂ntr-adevăr, dacă Q, U sunt amândouă ortogonale, atunci
(QU )T (QU ) = U T QT QU = U T U = I. Aşadar, matricele ortogonale formează grup
ı̂n raport cu ı̂nmulţirea, notat GO(n).
48 CAPITOLUL 1. ALGORITMI ELEMENTARI

De asemenea, transpusa unei matrice ortogonale este ortogonală, deoarece


(QT )T QT = QQT = I. În schimb, suma a două matrice ortogonale nu este or-
togonală, nici produsul unei matrice ortogonale cu un scalar diferit de ±1.
Matricele ortogonale au proprietatea remarcabilă de a conserva normele 2 şi
Frobenius.

Propoziţia 1.4 Fie matricele ortogonale Q ∈ Rn×n , U ∈ Rm×m . Atunci:


1. kQxk2 = kxk2 , ∀x ∈ Rn , deci kQk2 = 1.
2. kU AQk2 = kAk2 , kU AQkF = kAkF , ∀A ∈ Rm×n .

Demonstraţie. 1. kQxk22 = (Qx)T (Qx) = xT QT Qx = xT x = kxk2 .


2. Aplicând punctul 1 avem

kU Ak2 = max kU (Ax)k2 = max kAxk2 = kAk2 .


kxk2 =1 kxk2 =1

Deoarece ImQ = Rn , aplicând din nou punctul 1 avem

kAQk2 = max kAQxk2 = max kA(Qx)k2 = kAk2 .


kxk2 =1 kQxk2 =1

Utilizând cele două rezultate anterioare se obţine kU AQk2 = kAQk2 = kAk2 . ♦


Revenim acum puţin la noţiunea de echivalenţă, prezentată ı̂n secţiunea 1.4.
Două matrice A, B ∈ Rm×n se numesc ortogonal echivalente la dreapta (stânga),
dacă există o matrice ortogonală Q ∈ Rn×n (Q ∈ Rm×m ) astfel ı̂ncât A = BQ (A =
QB). A şi B se numesc ortogonal echivalente dacă există Q ∈ Rm×m , P ∈ Rn×n
ortogonale astfel ı̂ncât B = QT AP .
Presupunând A, B de rang maxim (deci coloanele lor sunt baze pentru ImA, re-
spectiv ImB) şi amintindu-ne că A = QB se scrie pe coloane ai = Qbi , să observăm
că aTi aj = bTi QT Qbj = bTi bj , deci unghiurile dintre vectorii componenţi ai bazei se
păstrează la o transformare de echivalenţă ortogonală (la stânga).
Proiectori. Fie o matrice P ∈ Rn×n şi un subspaţiu S ⊂ Rn . P se numeşte
proiector pe S dacă ImP = S şi P 2 = P . Justificare: dacă x ∈ Rn , atunci P x ∈
ImP = S, deci aplicarea proiectorului unui vector oarecare ı̂l va duce pe acesta ı̂n S;
P x este proiecţia lui x pe S. Mai mult, P (P x) = P x, deci aplicarea proiectorului
nu modifică proiecţia.
În general, orice matrice P astfel ı̂ncât P 2 = P se zice matrice de proiecţie sau
def
proiector, pentru că ea proiectează pe S = ImP . Analog, Q = I − P proiectează
pe T = ImQ.
Dacă, ı̂n plus, matricea P este simetrică, atunci P se numeşte proiector or-
togonal. Justificare: dacă x ∈ Rn , atunci P x ∈ ImP şi P (x − P x) = 0, deci
x − P x ∈ KerP = KerP T , deci P x ⊥ (x − P x), adică x se descompune ca sumă a
doi vectori ortogonali ca ı̂n figura 1.8.
Dacă matricea B ∈ Rn×r are coloanele ortonormale (formând deci o bază or-
togonală pentru ImB = S), atunci P = BB T este proiecţie ortogonală pe S şi, mai
mult, este unică (demonstraţi !).
Particularităţi ale matricelor complexe. Noţiunile de simetrie şi ortogona-
litate se pot defini şi pentru matrice complexe. Având ı̂n vedere definiţia produsului
1.9. SISTEME DE ECUAŢII LINIARE 49


*
6
x 
 x − Px

"
"  "
"
" S
"  -
"
" Px "
"
" "

Fig. 1.8: Acţiunea unui proiector ortogonal pe S asupra unui vector oarecare x

scalar complex, mai utile sunt noţiunile analoage obţinute (formal) prin ı̂nlocuirea
transpunerii prin transpunere şi complex conjugare. Dacă A ∈ Cn×n , se notează
cu AH = AT conjugata transpusei matricei A. Matricea A ∈ Cn×n se numeşte
normală dacă AAH = AH A.
Matricea A ∈ Cn×n se numeşte hermitică dacă AH = A. În acest caz scalarul
x Ax este real pentru orice x ∈ Cn . O matrice hermitică A ∈ Cn×n este pozitiv
H

definită dacă xH Ax > 0, ∀x ∈ Cn , x 6= 0. O matrice A ∈ Cn×n este unitară dacă


AH A = I, adică are coloanele ortogonale ı̂n Cn .
AA. Memorarea matricelor simetrice. Dacă A ∈ Rn×n este simetrică, deci
A = AT , nu este necesară memorarea ı̂ntregii matrice, ci doar a unei ”jumătăţi”,
mai precis a triunghiului inferior sau a celui superior. Memorarea se poate face ı̂n
variantele discutate pentru matrice triunghiulare, ı̂n secţiunea 1.6.
Desigur, acest mod de memorare va implica particularizări ale algoritmilor; vom
exemplifica pentru produsul matrice-vector (Gaxpy) y ← Ax + y, presupunând că
A este memorată prin triunghiul superior. În exprimarea elementului yi ,
n
X i−1
X n
X
yi ← yi + aij xj = yi + aji xj + aij xj ,
j=1 j=1 j=i

ı̂nlocuim elementele matricei A din linia i aflate ı̂n triunghiul inferior, prin cele egale
aflate pe coloana i, ı̂n triunghiul superior, după cum este sugerat ı̂n figura 1.9.
Acelaşi mod de memorare, printr-un singur triunghi, se utilizează şi ı̂n cazul
matricelor antisimetrice sau hermitice. Propunem cititorului adaptarea algoritmului
Gaxpy ı̂n aceste două cazuri.

1.9 Sisteme de ecuaţii liniare


Un sistem de m ecuaţii liniare cu n necunoscute are forma

 a11 x1 + a12 x2 + . . . + a1n xn


= b1
a21 x1 + a22 x2 + . . . + a2n xn = b2
, (1.40)

 ...

am1 x1 + am2 x2 + . . . + amn xn = bm

unde aij ∈ R, bi ∈ R, pentru i = 1 : m, j = 1 : n, sunt date şi xj , j = 1 : n, sunt


50 CAPITOLUL 1. ALGORITMI ELEMENTARI
i

A x

Fig. 1.9: Utilizarea elementelor din triunghiul superior ı̂n produsul dintre o matrice
simetrică şi un vector

necunoscutele. În formă matriceală, sistemul este

Ax = b, (1.41)

A fiind numită matricea coeficienţilor, b termenul liber (sau partea dreaptă a sis-
temului), iar x vectorul necunoscutelor.
Dacă termenul liber al sistemului este vectorul nul (b = 0), sistemul este numit
omogen.
Prima caracteristică importantă a unui sistem liniar este relaţia ı̂ntre m şi n:

• când numărul de ecuaţii este mai mare decât numărul de necunoscute (m > n),
sistemul (1.41) se numeşte supradeterminat;

• când, dimpotrivă, numărul de necunoscute este mai mare (n > m), sistemul
este numit subdeterminat;

• ı̂n cazul unei matrice A pătrate (m = n), sistemul (1.41) este determinat.

A găsi soluţia sistemului liniar (1.41) ı̂nseamnă a calcula un vector x ∈ Rn astfel


ı̂ncât egalitatea Ax = b să fie satisfăcută. Desigur, aceasta se poate realiza doar
dacă sistemul are ı̂ntr-adevăr (cel puţin) o soluţie. Dacă nu are, vom atribui o nouă
semnificaţie noţiunii de ”soluţie”, astfel ı̂ncât sistemul să aibă cel puţin una. Dacă
există mai multe soluţii, va trebui selectată, ı̂ntr-un anume fel, una singură care va
fi calculată.
Condiţiile ı̂n care sistemul (1.41) are soluţie şi ı̂n care aceasta este unică sunt
bine cunoscute din algebra liniară.

Teorema 1.2 Sistemul liniar (1.41) are soluţie dacă şi numai dacă b ∈ ImA.
Dacă ImA = Rm , adică A este epică (are liniile independente), atunci sistemul
(1.41) are soluţie pentru orice termen liber b ∈ Rm şi reciproc.

Demonstraţia este imediată prin definiţia lui ImA. ♦


1.9. SISTEME DE ECUAŢII LINIARE 51

y3
6

b 6∈ ImA
HbH∈ ImA
Y  1
HH 
HH y1
-

 

y2 
ImA

Fig. 1.10: ImA şi posibili b pentru exemplul 1.2

 
1 0
Exemplul 1.2 Dacă A =  1 1 , atunci ImA este planul y2 = y1 + y3 . Dacă
0 1
b = [b1 b2 b3 ]T este astfel ı̂ncât b2 = b1 + b3 , atunci sistemul Ax = b are soluţie
deoarece condiţia din teorema 1.2 este ı̂ndeplinită. Altfel, sistemul nu are soluţie
(vezi figura 1.10). ♦
Când soluţia există, unicitatea ei rezultă din

Teorema 1.3 1) Dacă x0 ∈ Rn este o soluţie particulară a sistemului liniar (1.41),


atunci mulţimea tuturor soluţiilor sistemului este varietatea liniară

x0 + KerA = {x = x0 + z | z ∈ KerA}.

2) Soluţia x este unică dacă şi numai dacă KerA = {0}, adică matricea A este
monică (are coloanele independente).

Demonstraţie. Dacă Ax0 = b, atunci z = x − x0 satisface Az = 0, deci z ∈ KerA;


reciproc, Az = 0 implică A(x0 + z) = b. ♦
 
    1
1 1 0 2
Exemplul 1.3 Dacă A = şi b = , atunci x0 =  1  este
0 1 1 1
0
soluţie particulară pentru Ax = b. Pe de altă parte, KerA este dreapta descrisă de

x1 + x2 = 0
,
x2 + x3 = 0

care trece prin punctele O(0, 0, 0) şi P (1, −1, 1). Astfel, vectorii din KerA au forma
 
1
Ker A ∋ z = α  −1  , α ∈ R,
1
52 CAPITOLUL 1. ALGORITMI ELEMENTARI

x3
6

P•

x 
:
 x1
O  -
•
 x@
9
x2 
0
R
@

KerA
x + KerA

Fig. 1.11: Soluţiile (x0 – soluţie particulară, x – soluţie generală) sistemului din
exemplul 1.3

şi deci (vezi figura 1.11),


   
 1+α 
x + KerA = y =  1 − α  | α ∈ R .
 
α

Corolar 1.1 Când matricea A este pătrată (A ∈ Rn×n ), atunci următoarele afir-
maţii sunt echivalente:
i) ImA = Rn , i.e. sistemul (1.41) admite soluţie unică pentru orice b ∈ Rn ;
ii) KerA = {0};
iii) A este inversabilă.
Dacă sistemul are soluţie, aceasta se poate scrie

x = A−1 b. (1.42)

Dacă sistemul este omogen, atunci soluţia unică este x = 0.

Trebuie subliniat că (1.42) nu este o formulă adecvată calculului numeric al


soluţiei sistemului Ax = b. Vom vedea ı̂n capitolul 2 metode numerice eficiente şi
precise pentru a face acest lucru.
Când sistemul (1.41) nu are soluţie, este convenabil să definim pseudosoluţia x∗
ca vectorul care minimizează o normă a reziduului r = b − Ax. Este evident că dacă
b ∈ ImA, atunci această pseudosoluţie devine soluţie adevărată a sistemului.
Când sistemul (1.41) are mai multe soluţii, o posibilitate de a selecta una dintre
ele este de a defini soluţia normală x∗ de ”lungime” minimă, lungimea fiind definită
printr-o normă adecvată.
Vom reveni asupra acestor definiţii ı̂n capitolul 3, acolo unde vom prezenta şi
algoritmi de calcul al soluţiilor astfel definite.
1.9. SISTEME DE ECUAŢII LINIARE 53

Determinantul. Fie o matrice pătrată A ∈ Rn×n ; determinantul matricei A


not
este un număr real, notat det(A), pe care ı̂l vom defini recursiv. Dacă A = a ∈ R,
atunci det(A) = a. Pentru A ∈ Rn×n ,
n
X
det(A) = (−1)j+1 a1j det(Ā1j ),
j=1

unde Ā1j ∈ R(n−1)×(n−1) este matricea obţinută din A prin eliminarea liniei 1 şi
coloanei j.
Câteva proprietăţi importante ale determinantului sunt:
1. det(I) = 1;
2. det(αA) = αn det(A), ∀α ∈ R;
3. det(AT ) = det(A);
4. det(AB) = det(A) · det(B).
O matrice A ∈ Rn×n pentru care det(A) 6= 0 se numeşte nesingulară. Se poate
demonstra că noţiunea de nesingularitate este echivalentă cu cea de inversabili-
tate. Să notăm de acum că ı̂n rezolvarea numerică a sistemului determinat Ax = b
nesingularitatea matricei A nu se verifică prin calculul determinantului, ci prin alte
mijloace, mult mai eficiente şi sigure, după cum se va vedea ı̂n capitolul 2. De aceea
mai departe vom spune de cele mai multe ori inversabilă ı̂n loc de nesingulară.
AA. Rezolvarea sistemelor triunghiulare. Sistemul Ax = b este numit in-
ferior (superior) triunghiular dacă matricea A este inferior (superior) triunghiulară.
O matrice triunghiulară este inversabilă dacă şi numai dacă toate elementele
sale diagonale sunt nenule.
Algoritmii pentru rezolvarea sistemelor triunghiulare sunt foarte simpli, deoarece
necunoscutele pot fi calculate, ı̂ntr-o ordine precizată, prin substituţie numerică.
Să considerăm ı̂ntâi un sistem inferior triunghiular, Lx = b, unde L ∈ Rn×n , cu
lij = 0 pentru i < j, lii 6= 0, i ∈ 1 : n, şi b ∈ Rn . Prima ecuaţie este l11 x1 = b1 , din
care
x1 = b1 / l11 . (1.43)
În general, dacă se cunosc x1 , x2 , . . . , xi−1 , se poate rezolva a i-a ecuaţie,
i−1
X
lij xj + lii xi = bi ,
j=1

pentru a obţine  
i−1
X
xi = bi − lij xj  / lii . (1.44)
j=1

Formulele (1.43) şi (1.44) definesc un algoritm pentru calculul soluţiei sistemului
Lx = b, cunoscut ca metoda substituţiei ı̂nainte.

Algoritmul 1.16 (LTRIS – Calculul soluţiei unui sistem inferior


triunghiular) (Se dau L ∈ Rn×n , inferior triunghiulară, inversabilă, şi
b ∈ Rn . Se calculează soluţia x a sistemului Lx = b.)
54 CAPITOLUL 1. ALGORITMI ELEMENTARI

1. x ← b
2. Pentru i = 1 : n
1. Pentru j = 1 : i − 1
1. xi ← xi − lij xj
2. xi ← xi / lii

Comentarii. Bucla Pentru interioară se poate ı̂nlocui cu un apel la produsul


scalar DOT(L(i, 1 : i − 1), x(1 : i − 1)). Fiecare execuţie a buclei Pentru i necesită
2(i − 1) flopi ı̂n 2.1.1, pentru calculul sumei Pndin (1.44), şi 1 flop pentru ı̂mpărţirea
din 2.2. În total, sunt necesari NLTRIS = i=1 (2(i − 1) + 1) = n(n − 1) + n = n2
flopi şi MLTRIS = n(n + 1)/2 + 2n + 1 ≈ n2 /2 locaţii de memorie (pentru elemente
ı̂n virgulă mobilă). Dacă vectorul b nu este necesar ulterior, soluţia x poate fi
memorată ı̂n aceeaşi zonă de memorie cu b; se spune că se efectuează calculul pe loc
ı̂n b. Ulterior, vom apela acest algoritm prin x = LTRIS(L, b). ♦
Un algoritm cu aceleaşi proprietăţi se obţine dacă schimbăm ordinea celor două
bucle, ceea ce revine la a parcurge matricea L pe coloane, nu pe linii. Substituţia
decurge acum astfel: după calculul lui x1 cu (1.43), se actualizează valorile celorlalte
necunoscute xi , i = 2 : n (iniţializate cu bi ), cu termenul li1 x1 care contribuie la
sumele din (1.44); se poate calcula acum x2 , după care se actualizează din nou
restul necunoscutelor.

Algoritmul 1.17 (LTRIS – versiunea pe coloane) (Se dau


L ∈ Rn×n , inferior triunghiulară, inversabilă, şi b ∈ Rn . Se calculează
soluţia x a sistemului Lx = b.)
1. x ← b
2. Pentru j = 1 : n
1. xj ← xj / ljj
2. Pentru i = j + 1 : n
1. xi ← xi − lij xj

Comentarii. Se observă că bucla Pentru interioară se poate ı̂nlocui cu un apel la


Saxpy(−x(j), L(j + 1 : n, :), x(j + 1 : n)). ♦
Datorită erorilor numerice, execuţia algoritmului LTRIS nu produce x = L−1 b,
ci o soluţie aproximativă x̂. Se poate demonstra că acest x̂ satisface

(L + F )x̂ = b, cu |fij | ≤ nεM |lij | + O(ε2M ), (1.45)

adică x̂ este soluţia unui sistem cu matricea coeficienţilor uşor perturbată faţă
de L. Aşadar algoritmul LTRIS este numeric stabil. (Acesta este un rezultat tipic
de analiză inversă a erorilor.) Practica numerică arată o acurateţe a algoritmului
LTRIS mult superioară celei indicate de (1.45).
Pentru a rezolva sistemul superior triunghiular (nesingular) U x = b, unde
U ∈ Rn×n este o matrice superior triunghiulară, cu uii 6= 0, i ∈ 1 : n, şi b ∈ Rn , să
observăm că ultima ecuaţie are forma unn xn = bn , iar de aici

xn = bn /unn . (1.46)
1.9. SISTEME DE ECUAŢII LINIARE 55

Mai mult, dacă xn , xn−1 , . . . , xi+1 , sunt deja calculate, atunci, din a i-a ecuaţie,
n
X
uii xi + uij xj = bi ,
j=i+1

se obţine  
n
X
xi = bi − uij xj  /uii . (1.47)
j=i+1

Din formulele (1.46) şi (1.47), care definesc aşa numita substituţie ı̂napoi, obţinem
direct algoritmul următor.

Algoritmul 1.18 (UTRIS – Calculul soluţiei unui sistem superior


triunghiular) (Se dau U ∈ Rn×n , superior triunghiulară, inversabilă, şi
b ∈ Rn . Se calculează soluţia x a sistemului U x = b.)
1. x ← b
2. Pentru i = n : −1 : 1
1. Pentru j = i + 1 : n
1. xi ← xi − uij xj
2. xi ← xi /uii

Perfect analog cu algoritmul 1.17 avem versiunea pe coloane a UTRIS.

Algoritmul 1.19 (UTRIS – versiunea pe coloane) (Se dau


U ∈ Rn×n , superior triunghiulară, inversabilă, şi b ∈ Rn . Se calculează
soluţia x a sistemului U x = b.)
1. x ← b
2. Pentru j = n : −1 : 1
1. xj ← xj /ujj
1. Pentru i = 1 : j − 1
1. xi ← xi − uij xj

Comentarii. Ca şi ı̂n cazul inferior triunghiular, efortul de calcul este NUTRIS = n2
flopi, iar memoria ocupată MUTRIS ≈ n2 /2 locaţii ı̂n virgulă mobilă. Vom apela
acest algoritm prin x = UTRIS(L, b). Şi pentru algoritmul UTRIS este valabilă
o relaţie de genul (1.45), i.e. algoritmul de mai sus este numeric stabil. Rezolvarea
sistemelor triunghiulare este o operaţie de nivel 2. ♦
AA. Sisteme triunghiulare cu parte dreaptă multiplă. Se spune despre
un sistem de forma AX = B, cu A ∈ Rn×n , B ∈ Rn×p (rezultând X ∈ Rn×p ), cu
p > 1, că este un sistem cu parte dreaptă multiplă. Desigur, a rezolva AX = B este
matematic echivalent cu a calcula X = A−1 B. Partiţionând X şi B pe coloane,
rezolvarea sistemului AX = B se poate reduce rezolvarea a p sisteme de forma
(1.41), Axj = bj , j ∈ 1 : p.
Considerăm A inferior triunghiulară. Prezentăm o variantă bloc de rezolvare a
sistemului AX = B, adecvată calculatoarelor cu memorie ierarhică. Partiţionăm
sistemul astfel
56 CAPITOLUL 1. ALGORITMI ELEMENTARI

    
A11 0 ... 0 X1 B1

 A21 A22 ... 0 
 X2  
  B2 

 .. .. ..  .. = .. , (1.48)
 . . . 0  .   . 
Am1 Am2 . . . Amm Xm Bm
ı̂n care Aij ∈ Rr×r , iar Bi , Xi ∈ Rr×p . Evident, blocurile diagonale Aii sunt inferior
triunghiulare. Se presupune că r divide n şi fie m = n/r.
Sistemul (1.48) se rezolvă ı̂n mod analog cu sistemul inferior triunghiular cu o
singură parte dreaptă, tratat mai sus. Bloc linia i a sistemului (1.48) conduce la o
relaţie asemănătoare cu (1.44):
i
X i−1
X
Aij Xj = Bi =⇒ Aii Xi = Bi − Aij Xj , (1.49)
j=1 j=1

din care se poate deduce un algoritm similar cu LTRIS (prin substituţie ı̂nainte).
Pe un calculator cu memorie ierarhică (figura 0.4c), A, B şi X sunt stocate ı̂n
memoria principală MP. Alegem r astfel ı̂ncât blocurile Aij , Xj şi Bi să poată fi
stocate simultan ı̂n memoria rapidă MR (deci r2 + 2rp < dim(MR)). Algoritmul
următor se bazează pe ideea aducerii acestor blocuri ı̂n MR şi apoi a efectuării
calculelor din (1.49).

Algoritmul 1.20 (Se dau A ∈ Rn×n , inferior triunghiulară, in-


versabilă, şi B ∈ Rn×p . Se rezolvă sistemul AX = B. Se utilizează
variabilele C, D, Z ı̂n MR.)
1. Pentru i = 1 : m
1. D ← Bi
2. Pentru j = 1 : i − 1
1. C ← Aij , Z ← Xj
2. D ← D − CZ
3. C ← Aii
4. rezolvă sistemul triunghiular cu p.d.m. CZ = D
(aplicând de p ori algoritmul LTRIS pentru
Czj = dj , j ∈ 1 : p)
5. Xi ← Z

Comentarii. Toate operaţiile aritmetice, ı̂n număr de pn2 (de p ori mai multe
decât pentru algoritmul LTRIS aplicat unui sistem Axj = bj ), se efectuează cu
operanzi din MR. Instrucţiunile 1.1, 1.2.1, 1.3, 1.5 reprezintă transferuri ı̂ntre MP
şi MR; numărul acestor transferuri este de
 
m i−1 2 2
 (r2 + rp) + r2 + rp ≈ pn + n ,
X X

i=1 j=1
2r 2

sensibil mai mic decât ı̂n cazul ı̂n care operanzii s-ar fi aflat ı̂n MP (atunci ar fi fost
aproximativ 2pn2 accesuri la MP).
1.9. SISTEME DE ECUAŢII LINIARE 57

Rezolvarea sistemelor triunghiulare cu parte dreaptă multiplă face parte din


grupul operaţiilor de nivel 3. ♦
AA. Inversarea matricelor triunghiulare. Fie L ∈ Rn×n o matrice inferior
triunghiulară; presupunem că L este inversabilă, adică lii 6= 0, i ∈ 1 : n. Pentru a
calcula X = L−1 , utilizăm egalitatea evidentă

LX = In ,

pe care o partiţionăm pe coloane

Lxj = ej , j ∈ 1 : n, (1.50)

xj = Xej fiind cea de-a j-a coloană a matricei X. Sistemul inferior triunghiular
(1.50) poate fi rezolvat ı̂n mod eficient prin adaptarea algoritmului LTRIS la forma
particulară a termenului drept. Într-adevăr, sistemul (1.50) poate fi partiţionat
astfel: " #   
(j)
L11 0 x′j 0
= , (1.51)
(j)
L21 L22
(j) x′′j e′′j
(j)
unde L11 este submatricea de dimensiune (j − 1) × (j − 1) din colţul stânga sus al
matricei L şi
e′′j = [1 0 . . . 0]T ∈ Rn−j+1 .
Din (1.51) rezultă (
(j)
L11 x′j = 0,
(j) (j) (1.52)
L21 x′j + L22 x′′j = e′′j .
(j) (j)
Deoarece L este inversabilă şi, prin urmare, la fel sunt L11 şi L22 , relaţia (1.52)
devine (
x′j = 0,
(j) (1.53)
L22 x′′j = e′′j .
Această relaţie stabileşte un fapt important, dat de

Propoziţia 1.5 Inversa unei matrice inferior triunghiulare nesingulare este infe-
rior triunghiulară.

În concluzie, matricele inferior triunghiulare inversabile formează grup ı̂n raport
cu ı̂nmulţirea matriceală.
Din (1.53) poate fi dedus un algoritm de calcul al inversei unei matrice nesingu-
lare, având la bază următoarea schemă de calcul:

L−1 1. Pentru j = 1 : n
1. Dacă j > 1 atunci x′j = 0
(j)
2. x′′j = LTRIS(L22 , e′′j )

Se poate observa că inversa calculată poate fi memorată ı̂n aceeaşi zonă de
memorie ca matricea L. Explicitând rezolvarea sistemului inferior triunghiular,
obţinem
58 CAPITOLUL 1. ALGORITMI ELEMENTARI

Algoritmul 1.21 (LINV – Calculul inversei unei matrice inferior


triunghiulare) (Se dă L ∈ Rn×n , inferior triunghiulară şi inversabilă. Se
calculează pe loc ı̂n L inversa acesteia.)
1. Pentru j = 1 : n
1. ljj ← xjj = 1 / ljj
2. Pentru i = j + 1 : n 
Pi−1
1. lij ← xij = − k=j lik xkj / lii

Comentarii. Numărul de operaţii necesar este


n−1 n
X X n3
NLINV = n + 2(i − j) ≈ .
j=1 i=j+1
3

Memoria necesară este MLINV ≈ n2 /2 locaţii ı̂n virgulă mobilă. Se vede acum că
rezolvarea sistemului liniar Lx = b folosind relaţia x = L−1 b (adică LINV) este
ineficientă ı̂n comparaţie cu algoritmul direct LTRIS. ♦
Pentru a calcula inversa unei matrice superior triunghiulare nesingulare
U ∈ Rn×n , trebuie rezolvată ecuaţia matriceală U X = In , sau, echivalent, cele
n ecuaţii liniare
U xj = ej , j = 1 : n, (1.54)
unde xj este coloana j a matricei X = U −1 .
Utilizând partiţia
" #   ′ 
(j) (j)
U11 U12 x′j ej
(j) ′′ = , (1.55)
0 U22 x j 0

(j)
unde U11 este submatricea de dimensiune j × j din colţul stânga sus a lui U şi
e′j = [0 0 . . . 0 1]T ∈ Rj , şi urmând o cale asemănătoare celei parcurse pentru inver-
sarea matricelor inferior triunghiulare, se obţin analoagele relaţiei (1.53), propoziţiei
1.5 şi algoritmului LINV. Avem:
(
(j)
U11 x′j = e′j ,
′′ (1.56)
xj = 0.

Propoziţia 1.6 Inversa unei matrice superior triunghiulare nesingulare este supe-
rior triunghiulară.

Aşadar matricele superior triunghiulare inversabile formează grup ı̂n raport cu


ı̂nmulţirea.
Dacă sistemele (1.56) sunt rezolvate ı̂n ordine inversă (pentru j = n, n−1, . . . , 1),
se poate vedea cu uşurinţă că elementele matricei inverse se pot memora peste cele
ale matricei originale, pe măsură ce sunt calculate. Vom obţine deci următorul
algoritm.
1.10. VALORI ŞI VECTORI PROPRII 59

Algoritmul 1.22 (UINV – Calculul inversei unei matrice superior


triunghiulare) (Se dă U ∈ Rn×n , superior triunghiulară şi inversabilă.
Se calculează pe loc ı̂n U inversa acesteia.)
1. Pentru j = n : −1 : 1
1. ujj ← xjj = 1/ujj
2. Pentru i = j − 1 : −1P: 1 
j
1. uij ← xij = − k=i+1 u ik xkj /uii

Comentarii. Ca ı̂n cazul inferior triunghiular, NUINV ≈ n3 /3 şi MUINV ≈ n2 /2.


Algoritmii de inversare a matricelor triunghiulare sunt numeric stabili. ♦

1.10 Valori şi vectori proprii


Fie A ∈ Cn×n . Numărul λ ∈ C se numeşte valoare proprie a matricei A dacă există
un vector v ∈ Cn , v 6= 0, astfel ı̂ncât

Av = λv. (1.57)

În acest caz, v se numeşte vector propriu al matricei A, asociat lui λ.


Se observă că dacă v este vector propriu al matricei A, atunci şi u = αv este
vector propriu al lui A, corespunzând aceleiaşi valori proprii, oricare α ∈ C, α 6= 0.
Aşadar, vectorii proprii sunt determinaţi numai ca direcţie, nu şi ca mărime.
Teorema 1.4 Fie A ∈ Cn×n . Scalarul λ ∈ C este valoare proprie a matricei A
dacă şi numai dacă matricea λI − A este singulară. Mai mult, matricea A are
exact n valori proprii (numărând separat valorile proprii multiple), care coincid cu
zerourile polinomului caracteristic

p(λ) = det(λIn − A). (1.58)

Dacă A ∈ Rn×n , valorile proprii apar ı̂n perechi complex conjugate (iar vectorii
proprii asociaţi acestor perechi pot fi aleşi complex conjugaţi).

Demonstraţie. Dacă λ este valoare proprie a matricei A, atunci există un vector


v 6= 0 astfel ı̂ncât Av = λv, deci (λIn − A)v = 0 şi ı̂n consecinţă λIn − A este
singulară. Reciproc, dacă pentru un λ ∈ C matricea λIn − A este singulară, atunci
există v ∈ Cn , v 6= 0, astfel ı̂ncât (λIn − A)v = 0, adică Av = λv şi deci λ este
valoare proprie a matricei A.
Deoarece λIn − A este singulară dacă şi numai dacă λ satisface det(λI − A) = 0,
iar p(λ) = det(λI − A) este un polinom monic de grad n, din teorema fundamentală
a algebrei rezultă că (1.58) are n zerouri care coincid cu valorile proprii ale matri-
cei A. Dacă A este reală, polinomul caracteristic p(λ) are coeficienţi reali şi atunci
zerourile sale complexe apar ı̂n perechi complex conjugate (pentru vectori proprii,
vezi problema 1.28). ♦
Ca o consecinţă directă a faptului că valorile proprii sunt rădăcinile ecuaţiei
det(λIn − A) = 0, să observăm că dacă A este diagonală sau triunghiulară, atunci
valorile sale proprii sunt chiar elementele diagonale.
60 CAPITOLUL 1. ALGORITMI ELEMENTARI

Notăm prin

λ(A) = {λ1 , λ2 , . . . , λn } = {λ ∈ C | det(λI − A) = 0} (1.59)

mulţimea valorilor proprii ale matricei A ∈ Cn×n (cu repetarea valorilor proprii
multiple). Mulţimea λ(A) se numeşte spectrul matricei A.
Transformări de asemănare. Suntem interesaţi de transformările care con-
servă spectrul unei matrice date; se observă că valorile proprii nu sunt conservate
ı̂n urma premultiplicării sau postmultiplicării cu o altă matrice.
Două matrice A, B ∈ Cn×n sunt numite asemenea dacă există o matrice nesin-
gulară T ∈ Cn×n astfel ı̂ncât
B = T AT −1. (1.60)
T se numeşte transformare de asemănare. Dacă T este unitară (ortogonală, ı̂n cazul
real), atunci A şi B sunt ortogonal asemenea.

Teorema 1.5 Două matrice asemenea A, B ∈ Cn×n au acelaşi spectru, adică


λ(A) = λ(B). Mai mult, dacă T este matricea de transformare din (1.60) şi dacă
vA este vector propriu al matricei A corespunzător valorii proprii λ ∈ λ(A), atunci
vectorul
vB = T vA (1.61)
este vector propriu al matricei B, corespunzător aceleiaşi valori proprii.

Demonstraţie. Dacă A şi B satisfac (1.60), atunci

det(λI − B) = det(λI − T AT −1 ) = det(T (λI − A)T −1 ) =

= det(T ) det(λI − A) det(T −1 ) = det(λI − A),


deci λ(A) = λ(B). Dacă vA este vector propriu al matricei A corespunzător valorii
proprii λ, atunci AvA = λvA , sau T AT −1T vA = λT vA , de unde BvB = λvB şi deci
(1.61) este adevărată. ♦
Matrice simple. O matrice A ∈ Cn×n care are un set complet de n vectori
proprii liniar independenţi se numeşte simplă. Acesta este cazul generic şi toto-
dată cel ı̂n care proprietăţile spectrale ale matricelor sunt mai ”vizibile”. Se poate
demonstra că dacă matricea A are n valori proprii distincte, atunci ea este simplă.

Teorema 1.6 Fie A ∈ Cn×n o matrice simplă şi V ∈ Cn×n matricea ale cărei
coloane sunt vectorii proprii ai lui A. Atunci

V −1 AV = Λ ∈ Cn×n (1.62)

este o matrice diagonală.

Demonstraţie. V = [v1 v2 . . . vn ] şi Avj = λj vj , j ∈ 1 : n, unde λj sunt valorile


proprii ale lui A. Atunci

AV = [Av1 Av2 . . . Avn ] = [λ1 v1 λ2 v2 . . . λn vn ] =


1.10. VALORI ŞI VECTORI PROPRII 61

= [v1 v2 . . . vn ] diag(λ1 , λ2 , . . . , λn ) = V Λ.
Deoarece vectorii vj , j ∈ 1 : n, sunt liniar independenţi, matricea V este nesingulară
şi (1.62) este adevărată. ♦
Aşadar o matrice simplă poate fi diagonalizată peste C printr-o transformare de
asemănare. Nu aceasta este şi abordarea numerică a problemei, care va fi discutată
pe larg ı̂n capitolul 4.
Subspaţii invariante. Fie A ∈ Cn×n şi un subspaţiu S ⊂ Cn ; spunem că S
este A-invariant dacă Av ∈ S, ∀v ∈ S. (Definiţia este identică pentru A ∈ Rn×n ,
S ⊂ Rn .)
Se observă uşor că dacă S are o bază formată din vectori proprii ai matricei A,
atunci S este A-invariant. Reciproca acestei afirmaţii nu este, ı̂n general, adevărată.
AA. Calculul vectorilor proprii ai matricelor triunghiulare. Fie
U ∈ Rn×n o matrice superior triunghiulară. Aşa cum am observat mai sus, valorile
sale proprii sunt λi = uii , i ∈ 1 : n. Dorim acum să calculăm vectorii proprii.
1. Considerăm ı̂ntâi cazul ı̂n care valorile proprii sunt distincte două câte două.
Fie T = λj I −U ; vectorul propriu vj va fi calculat rezolvând sistemul liniar T vj = 0,
care poate fi partiţionat
  ′  
T11 y T13 vj  T11 vj′ + vjj y + T13 vj′′ = 0
 0 w T 
vjj  =0 ⇔ wT vj′′ = 0 , (1.63)
′′ 
T33 vj T33 vj′′ = 0

unde vj′ ∈ Rj−1 , vj′′ ∈ Rn−j . Valorile proprii fiind distincte, T11 şi T33 sunt nesin-
gulare. Din (1.63), T33 vj′′ = 0, şi deci vj′′ = 0. Ecuaţia wT vj′′ = 0 este ı̂ntotdeauna
satisfăcută iar vjj poate avea o valoare nenulă oarecare, să zicem vjj = 1. În fine,
sistemul superior triunghiular T11 vj′ = −y are soluţie unică, care se poate calcula
cu algoritmul UTRIS.
Vectorii proprii astfel calculaţi sunt liniar independenţi, deoarece matricea
V = [v1 v2 . . . vn ] este superior triunghiulară unitate; rezultatul e natural, deoarece
U este simplă. Direcţiile vectorilor proprii sunt unic definite, mărimile lor fiind alese
arbitrar prin constrângerea vjj = 1.
2. Dacă există valori proprii multiple, atunci T va avea mai multe valori di-
agonale nule. Putem alege ı̂n continuare, ı̂n (1.63), vj′′ = 0, vjj = 1. Acum ı̂nsă,
T11 poate fi singulară, deci se pune problema dacă sistemul superior triunghiular
T11 vj′ = −y are soluţie. Procedând prin substituţie ı̂napoi, presupunem că vjj = 1,
vj−1,j , . . . , vi+1,j au fost calculate şi scriem ecuaţia i a acestui sistem
j−1
X
tii vij = βij , cu βij = −tij − tik vkj . (1.64)
k=i+1

Dacă tii 6= 0, evident că ı̂n (1.64) vij = βij / tii şi substituţia poate continua. Dacă
tii = 0, sunt două variante: fie βij = 0, şi atunci vij din (1.64) poate avea o valoare
arbitrară, de exemplu vij = 1, şi substituţia continuă; fie βij 6= 0, şi atunci (1.64)
nu este satisfăcută, deci sistemul (1.63) nu are soluţie vj ; ı̂n acest caz, matricea U
este defectivă, adică nu are n vectori proprii liniar independenţi.
62 CAPITOLUL 1. ALGORITMI ELEMENTARI

Consideraţiile de mai sus conduc la următorul algoritm general, ı̂n care matricea
T = λj − U nu se formează explicit

Algoritmul 1.23 (TRV – Calculul vectorilor proprii ai unei ma-


trice superior triunghiulare) (Se dă U ∈ Rn×n , superior triunghiulară.
Se calculează vectorii proprii ai matricei U ı̂n matricea V ; coloanele nule
din V desemnează cazurile de defectivitate.)
1. V ← 0
2. Pentru j = 1 : n
1. vjj ← 1
2. Pentru i = j − 1 : −1 : 1
P
1. β ← uij + j−1 k=i+1 uik vkj
2. Dacă uii 6= ujj atunci % tii 6= 0
1. vij ← β/(ujj − uii )
altfel dacă β = 0 atunci
2. vij ← 1
altfel % β 6= 0
3. vkj ← 0, cu k = i + 1 : j
4. treci la următorul j
Comentarii. Instrucţiunile 2.2.2.1, 2.2.2.2, 2.2.2.3 implementează cele trei cazuri
posibile ı̂n rezolvarea ecuaţiei (1.64); ı̂n 2.2.2.3 se refac zerourile din coloana j
a matricei V , pentru a se marca necalcularea unui vector propriu. Numărul de
operaţii este de cel mult n3 /3 flopi.
Deoarece calculul valorii β este afectat de erori numerice, decizia β = 0 se
implementează efectiv printr-un test de genul |β| < cεM , unde c > 1 este o constantă
mică. În unele programe de calcul, cazurile de defectivitate sunt pur şi simplu
ocolite; atunci când uii = ujj , se ia forţat ı̂n 2.2.2.1 ujj − uii = εM şi se lucrează ca
şi cum matricea U are avea valori proprii distincte. Se obţin astfel ı̂ntotdeauna n
vectori proprii distincţi; ı̂n cazurile de defectivitate, vectorii proprii corespunzători
aceleiaşi valori proprii sunt aproape (cu o aproximaţie de ordinul preciziei de calcul)
coliniari. ♦
Cazul matricelor inferior triunghiulare se tratează analog şi e lăsat ca exerciţiu.

1.11 Rutinele BLAS


Am prezentat ı̂n secţiunile anterioare algoritmi simpli adecvaţi calculatoarelor cu
memorie ierarhică: 1.15 pentru ı̂nmulţirea de matrice şi 1.20 pentru rezolvarea
sistemelor triunghiulare cu parte dreaptă multiplă. Pentru majoritatea problemelor,
ı̂nsă, algoritmii sunt complicaţi şi efortul găsirii unei idei de adaptare poate fi consi-
derabil; programatorul ar fi obligat să cunoască detalii arhitecturale şi ale sistemului
de operare pentru calculatorul ı̂n cauză. În plus, programul realizat ar funcţiona
doar pe tipul respectiv de calculator, transferul pe un altul implicând rescrierea
parţială.
Pentru a uşura sarcina programatorului şi pentru a realiza portabilitatea, a
apărut ideea scrierii unor biblioteci de rutine fundamentale, puţine la număr, dar
1.11. RUTINELE BLAS 63

S – real simplă precizie C – complex simplă precizie


D – real dublă precizie Z – complex dublă precizie
GE - generală GB - generală bandă
SY - simetrică SB - simetrică bandă SP - simetrică ı̂mpachetat
HE - hermitică HB - hermitică bandă HP - hermitică ı̂mpachetat
TR - triunghiulară TB - triungh. bandă TP - triungh. ı̂mpachetat

Tabelul 1.1: Convenţii de nume ı̂n BLAS: tipuri de date şi structuri de matrice

implementate foarte eficient pe majoritatea calculatoarelor (de către programatori


profesionişti). Atunci, un program obişnuit va folosi cât mai mult aceste rutine, şi
cât mai puţin alt gen de operaţii; eficienţa este asigurată, datorită adecvării rutinelor
de bază la arhitectură, iar efortul de programare este redus, datorită numărului
redus al rutinelor.
Astfel s-au născut (ı̂ncepând din 1973, până ı̂n 1989) bibliotecile BLAS (Basic
Linear Algebra Subroutines – rutine de bază ı̂n algebra liniară), care s-au impus ca
un standard unanim acceptat şi sunt implementate pe marea majoritate a calcula-
toarelor de performanţă. Există trei nivele BLAS, ı̂n fapt trei biblioteci distincte
al căror conţinut tratează operaţii asemănătoare din punct de vedere al datelor
implicate:

• nivel 1: dedicat operaţiilor vectoriale, de genul Saxpy sau DOT, care necesită
O(n) flopi. BLAS-1 este adecvat calculatoarelor vectoriale.

• nivel 2: dedicat operaţiilor matrice-vector, de tipul Gaxpy sau rezolvare de


sisteme triunghiulare, care necesită O(n2 ) flops. Şi BLAS-2 are aplicabilitate
ı̂n special pe calculatoare vectoriale.

• nivel 3: operaţii matrice-matrice, ca ı̂nmulţirea de matrice sau rezolvarea de


sisteme triunghiulare cu parte dreaptă multiplă, care necesită O(n3 ) flops.
BLAS-3 este eficient ı̂ndeosebi pe calculatoare cu memorie ierarhică.

Prezentăm ı̂n continuare câteva din rutinele BLAS, insistând asupra nivelului 3,
deoarece calculatoarele cu memorie ierarhică sunt tot mai răspândite.
Convenţii de nume. Scrise iniţial ı̂n FORTRAN, numele rutinelor sunt foarte
scurte (cel mult şase caractere) şi de aceea greu de ı̂nţeles fără explicaţii asupra
convenţiilor utilizate pentru stabilirea lor. În tabelul 1.1, prima literă a numelui
unei rutine indică tipul datelor, iar următoarele două (numai pentru nivelele 2 şi
3), structura matricelor argumente ale funcţiei.
În fine, ultimele trei (uneori două) litere — tot pentru nivelele 2 şi 3 — codifică
operaţia executată, după cum se va vedea imediat.
BLAS 1. Prezentăm ı̂n tabelul 1.2 cele mai importante rutine ale nivelului 1 al
BLAS, fără a preciza argumentele lor, ci numai operaţia realizată; ca şi până acum,
x, y sunt vectori ı̂n Rn sau Cn , iar α scalar. Prima literă a numelui, care arată tipul
datelor, este precizată ı̂n ultima coloană.
64 CAPITOLUL 1. ALGORITMI ELEMENTARI

Nume Operaţie Prefixe


xSWAP x↔y S, D, C, Z
xSCAL x ← αx S, D, C, Z
xCOPY x←y S, D, C, Z
xAXPY y ← αx + y S, D, C, Z
xDOT dot ← xT y S, D
xDOTU dot ← xT y C, Z
xDOTC dot ← xH y C, Z
xNRM2 nrm2 ← kxk2 S, D, C, Z

Tabelul 1.2: Rutine din BLAS 1

Deoarece argumentele funcţiilor sunt asemănătoare, exemplificăm cu un apel


tipic:
SAXPY(N, ALFA, X, INCX, Y, INCY)
INCX reprezintă distanţa, ı̂n memorie, ı̂ntre două elemente succesive ale vectoru-
lui al cărui prim element se găseşte la adresa X. Argumentul INCX permite utilizarea
ca vectori, ı̂n SAXPY, atât a coloanelor cât şi a liniilor unei matrice. Să presupunem
că o matrice A este memorată ı̂ntr-un tablou m × n, ı̂n ordinea coloanelor (adică
a11 , a21 , . . . , am1 , a12 , . . . ). Atunci coloana j este reprezentată astfel: X este adresa
elementului a1j (adică A + mjd, unde d este numărul de octeţi necesari memorării
unui element), iar INCX = 1. Pentru a reprezenta linia i a matricei A, luăm X adresa
elementului ai1 (adică A + id), iar INCX = m.
BLAS 2. Nivelul 2 al BLAS conţine rutine pentru trei operaţii: produsul
matrice-vector, rezolvarea sistemelor triunghiulare şi produsul exterior, ı̂n diverse
variante pe care le enumerăm ı̂n continuare.
Rutinele care execută ı̂nmulţire matrice-vector de forma y ← αAx + βy au
numele de tipul xyyMV, ı̂n care primele trei litere sunt cele din tabelul 1.1 (toate
combinaţiile permise).
Rezolvarea sistemelor (inferior sau superior) triunghiulare este efectuată de ru-
tinele xyySV, unde yy este TR, TB sau TP.
Pentru produsul exterior, rutina de bază este xGER, care execută operaţia
A ← αxy T + A, unde A este o matrice.
Nu dăm un exemplu de apel, deoarece descrierea matricelor se face ca la rutinele
de nivel 3, explicate mai jos, iar cea a vectorilor ca ı̂n rutinele de nivel 1.
BLAS 3. Vom prezenta acum cele 6 rutine alese a face parte din setul BLAS
nivel 3 ı̂n [?]. Ele sunt puţine la număr, deoarece munca de creare a unei rutine
optime este dificilă; chiar dacă rutinele rezolvă probleme relativ simple, arhitectura
complicată implică folosirea aproape exclusivă a limbajului de asamblare; pe un
calculator CRAY, s-a ajuns chiar la 100 000 linii de program pentru o, ı̂n aparenţă
banală, ı̂nmulţire de matrice.
Operaţiile implementate de rutinele BLAS nivel 3 sunt esenţialmente ı̂n număr
de două: ı̂nmulţirea de matrice, ı̂n câteva variante, şi rezolvarea de sisteme triunghiu-
lare cu parte dreaptă multiplă. Numele rutinelor sunt deja intrate ı̂n uzul curent şi
1.11. RUTINELE BLAS 65

 K -

6 6

M
LDA
?

Fig. 1.12: Memorarea (pe coloane a) unei matrice ı̂ntr-un tablou

respectă regulile din tabelul 1.1; pentru a nu ı̂ncărca expunerea, nu vom prezenta
modul efectiv de apel decât pentru prima rutină prezentată.
În cele ce urmează, A, B, C sı̂nt matrice oarecare, cu dimensiuni oarecare,
dar adecvate operaţiilor, sau simetrice şi pătrate, T este o matrice triunghiulară,
superior sau inferior, iar α şi β sı̂nt scalari.
1. xGEMM (GEneral Matrix Multiplication) – ı̂nmulţirea matrice-matrice, ı̂n cazul
general. Modul complet de apel este:
xGEMM(TRANSA, TRANSB, M, N, K, ALFA, A, LDA, B, LDB, BETA, C, LDC)
Operaţiile efectuate de rutină sı̂nt prezentate ı̂n tabelul următor; C este ı̂ntot-
deuna de dimensiune m × n.

TRANSA = ’N’ TRANSA = ’T’


TRANSB = ’N’ C ←− αAB + βC C ←− αAT B + βC
A este m × k, B este k × n A este k × m, B este k × n
TRANSB = ’T’ C ←− αAB T + βC C ←− αAT B T + βC
A este m × k, B este n × k A este k × m, B este n × k

Argumentele rutinei devin acum mai clare: TRANSA şi TRANSB arată dacă ma-
tricele A, B se transpun sau nu; M, N, K sunt dimensiunile efective ale matricelor;
LDA, LDB, LDC conţin dimensiunea principală a variabilelor ı̂n care sunt stocate
matricele, presupuse memorate pe coloane. Semnificaţia acestor variabile dimen-
sionale este mai clară ı̂n figura 1.12. Elementele de pe aceeaşi linie se află la distanţă
LDA ı̂n memorie. Se mai poate observa că patru variabile (analog cu A, M, K, LDA)
sunt suficiente pentru utilizarea oricărei submatrice a matricei din figură.
Rutina acoperă toate variantele de ı̂nmulţire a două matrice, operaţia de bază
fiind C ← αAB + βC; transpunerea nu este lăsată utilizatorului, deoarece poate
fi mare consumatoare de timp dacă se execută explicit (ı̂n xGEMM nu se ı̂ntâmplă
aşa); la fel, ı̂nmulţirea matrice-scalar. Cum toate celelalte rutine BLAS nivel 3 au
argumente de apelare asemănătoare, vom prezenta ı̂n continuare doar operaţia de
bază implementată.
2. xSYMM (SYmetric Matrix Multiplication) – ı̂nmulţire matrice-matrice, cu una
din matrice simetrică:
66 CAPITOLUL 1. ALGORITMI ELEMENTARI

C ← αAB + βC. (1.65)

3. xSYRK (SYmmetric Rank-K update) – actualizare de rang k a unei matrice


simetrice; A are dimensiune n × k.

C ← αAAT + βC. (1.66)

De obicei, k < n; de aici numele rutinei, AAT având rang ≤ k.


4. xSYR2K – actualizare de rang 2k a unei matrice simetrice:

C ← αAB T + αBAT + βC. (1.67)

5. xTRMM (TRiangular Matrix Multiplication) – ı̂nmulţire matrice-matrice, cu


una dintre matrice triunghiulară:

B ← αT B. (1.68)

Evident, există şi varianta ı̂n care T este la dreapta; de asemenea, T poate fi inferior
sau superior triunghiulară.
6. xTRSM (TRiangular system Solver, with Multiple right hand term) – cal-
culează soluţia unui sistem liniar triunghiular, cu parte dreaptă multiplă (T X = B):

X ← αT −1 B. (1.69)

Şi pentru această rutină există versiuni ı̂n care necunoscuta este ı̂n stânga (de genul
XT = B); T este fie superior, fie inferior triunghiulară.
Ca pentru orice standard, alegerea setului de mai sus poate părea mai mult sau
mai puţin arbitrară; principala justificare a alegerii este numărul mare de algoritmi
din algebra liniară care folosesc rutine din setul propus.
Vom prezenta ı̂n cursul acestei lucrări şi algoritmi scrişi astfel ı̂ncât marea ma-
joritate a operaţiilor să apară ı̂n execuţia unor rutine BLAS de nivel 3. Pentru a
cuantifica eficienţa lor, introducem ponderea operaţiilor de nivel 3 prin raportul

N3 (n)
P3 (n) = . (1.70)
Ntotal (n)

Ntotal (n) reprezintă numărul total de flopi necesari execuţiei algoritmului, iar N3 (n)
numărul de flopi executaţi ı̂n rutinele din BLAS-3; ele depind (cel puţin) de dimen-
siunea problemei n.
Pe un calculator cu memorie ierarhică, un algoritm este cu atât mai bun cu cât
P3 (n) este mai apropiată de 1; evident, P3 (n) ≤ 1. Motivul este clar: pe un astfel
de calculator, operaţiile din rutinele BLAS-3 se execută mai rapid decât celelalte
deoarece memoria rapidă este utilizată optim.
1.12. PROBLEME 67

1.12 Probleme
P 1.1 Demonstraţi că un subspaţiu liniar ı̂n Rn este un spaţiu vectorial.
P 1.2 Scrieţi algoritmi pentru calculul normelor 1 şi ∞ ale unui vector x ∈ Rn .
P 1.3 (Cauchy-Buniakowski-Schwarz) Demonstraţi că |xT y| ≤ kxk2 kyk2 , ∀x, y ∈ Rn .
P 1.4 Găsiţi vectori liniar independenţi x, y ∈ Rn care să satisfacă kx+ykp = kxkp +kykp ,
pentru p = 1, 2, ∞.
P 1.5 Demonstraţi (1.6) pentru n = 2, apoi ı̂n cazul general.
P 1.6 (Ortogonalizare Gram-Schmidt) Fie b1 , . . . , bp o bază a unui subspaţiu S ⊂ Rn .
Să se găsească o bază ortogonală a1 , . . . , ap a lui S procedând prin inducţie: a1 = b1 şi
ak+1 = ki=1 αik ai + bk+1 . (Evident, baza devine ortonormală prin normalizare.)
P

P 1.7 Fie x ∈ Rm şi y ∈ Rn doi vectori, şi A = xy T ∈ Rm×n produsul lor exterior.
Demonstraţi că rangA = 1.
P 1.8 Fie matricele A ∈ Rn1 ×n2 , B ∈ Rn2 ×n3 , C ∈ Rn3 ×n4 . Sugeraţi un algoritm de
calcul al produsului ABC.

P 1.9 Demonstraţi că maxi,j |aij | ≤ kAk2 ≤ mn maxi,j |aij |, ∀A ∈ Rm×n .
P 1.10 Demonstraţi (1.29) şi găsiţi matrice pentru care inegalităţile (fie cele de majorare,
fie cele de minorare) devin egalităţi.
P 1.11 Fie B o submatrice a matricei A. Arătaţi că kBkp ≤ kAkp .
P 1.12 Demonstraţi că: 1. kAk2 = maxkxk2 =1,kyk2 =1 |y T Ax|; 2. kAT k2 = kAk2 ;
3. kAT Ak2 = kAk22 .
P 1.13 Demonstraţi că dacă A ∈ Rn×n este inversabilă, atunci pentru orice normă ma-
triceală subordonată unei norme vectoriale avem 1 / kA−1 k = minkxk=1 kAxk.
P 1.14 Fie L ∈ Rn×n o matrice strict inferior triunghiulară. Demonstraţi că Ln = 0.
P 1.15 Fie A, B ∈ Rn×n două matrice bandă, prima de lăţime p, a doua de lăţime q.
Demonstraţi că AB este o matrice bandă de lăţime p + q şi scrieţi un algoritm pentru
calculul acestui produs.
P 1.16 Scrieţi un algoritm pentru calculul produsului dintre o matrice inferior triunghiu-
lară şi una superior triunghiulară.
P 1.17 Arătaţi că algoritmul 1.14 de ı̂nmulţire de matrice inferior triunghiulare se poate
executa pe loc ı̂n A. Cum trebuie modificat pentru a se putea executa pe loc ı̂n B ?
P 1.18 Arătaţi că submatricele lider principale ale unor matrice triunghiulare, Hessen-
berg, simetrice sunt triunghiulare, Hessenberg, respectiv simetrice. Este afirmaţia valabilă
pentru matrice ortogonale ?
P 1.19 Presupunem că dispuneţi de un algoritm general de rezolvare a sistemelor liniare.
Indicaţi un mod eficient de rezolvare a sistemului Ax = b atunci când A, partiţionată ca
ı̂n (1.31), este pătrată şi bloc superior triunghiulară.
P 1.20 Demonstraţi că numărul de operaţii N (n) al algoritmului Strassen, respectând
recurenţa (1.38), este
2n30 + 6n20 log 7
N (n) = n − 6n20 .
nlog
0
7
68 CAPITOLUL 1. ALGORITMI ELEMENTARI


P 1.21 Dacă A ∈ Rn×n este simetrică pozitiv definită, demonstraţi că kxkA = xT Ax
este o normă vectorială. (Indicaţie: matricele simetrice sunt ortogonal diagonalizabile.)
P 1.22 Fie A ∈ Rn×n , simetrică pozitiv definită. Demonstraţi că A este inversabilă şi că
A−1 este pozitiv definită.
P 1.23 a. Este clar că o matrice triunghulară şi simetrică este diagonală. Cum este o
matrice triunghiulară şi antisimetrică ?
b. Demonstraţi că o matrice triunghiulară şi ortogonală este diagonală.
c. Puteţi extinde rezultatul ı̂n cazul matricelor triunghiulare şi normale ?
P 1.24 Scrieţi algoritmi eficienţi pentru rezolvarea sistemului Ax = b, cu A ∈ Rn×n şi
b ∈ Rn , ı̂n cazurile:
a. A inferior bidiagonală, adică aij = 0 pentru i < j sau i > j + 1.
b. A inferior triunghiulară şi bandă de lăţime p (aij = 0 pentru i < j sau i > j + p).
c. A superior bidiagonală.
d. A superior triunghiulară şi bandă de lăţime p.
P 1.25 Adaptaţi algoritmii LINV şi UINV pentru inversarea matricelor inferior, respec-
tiv superior bidiagonale.
P 1.26 Propuneţi algoritmi de rezolvare a sistemelor inferior (superior) triunghiulare,
folosind operaţiile vectoriale DOT sau Saxpy.
P 1.27 Prezentaţi un algoritm de rezolvare a sistemului inferior triunghiular Lx = b,
ştiind că matricea L este memorată compact, pe linii (i.e. sunt memorate doar elementele
din triunghiul inferior, ı̂n ordinea l11 , l21 , l22 , l31 etc. Dar dacă L este memorată pe
coloane ?
P 1.28 Fie A ∈ Rn×n şi x = u + iv ∈ Cn un vector propriu al său, cu u, v ∈ Rn , v = 6 0.
Demonstraţi că:
a. u − iv este vector propriu al matricei A.
b. Vectorii u şi v sunt liniar independenţi iar subspaţiul generat de ei ı̂n Rn este
A-invariant.
Dacă matricea A Q∈ Rn×n are spectrul λ(A)
P 1.29 P = {λ1 , . . . , λn }, atunci
tr(A) = n
i=1 λi , iar detA =
n
i=1 λi . Puteţi generaliza ?

P 1.30 Fie A ∈ Rn×n , simetrică pozitiv definită. Demonstraţi că toate valorile proprii
ale matricei A sunt (reale şi) pozitive.
Capitolul 2

Rezolvarea sistemelor de
ecuaţii liniare

În acest capitol vom prezenta principalele metode de rezolvare a sistemelor deter-
minate de ecuaţii liniare
Ax = b, (2.1)
unde A ∈ Rn×n este o matrice inversabilă, iar b ∈ Rn este un vector dat. Aşa cum
am văzut ı̂n secţiunea 1.9, ı̂n virtutea condiţiei de inversabilitate, sistemul (2.1) are
o soluţie unică x ∈ Rn .
În practica numerică actuală se folosesc două categorii principale de metode
numerice sigure pentru determinarea acestei soluţii:

• Metode directe, bazate pe reducerea sistemului (2.1), printr-o secvenţă finită


de transformări elementare, la unul sau două sisteme triunghiulare, care se
rezolvă utilizând procedurile de substituţie cunoscute din secţiunea 1.9 (al-
goritmii LTRIS şi UTRIS). Din această categorie fac parte metodele de
eliminare gaussiană şi de factorizare compactă LU , care sunt recomandate
pentru sisteme de dimensiuni medii, să zicem n < 500, dar această limită
depinde de puterea calculatorului pe care rezolvăm sistemul.
• Metode iterative, bazate pe construirea recursivă a unui şir de vectori care
converge către soluţia sistemului (2.1). Aceste metode sunt recomandate pen-
tru sisteme de dimensiuni foarte mari, sau/şi atunci când matricea A are o
structură specială, eventual rară.

Acest capitol este dedicat prezentării celor mai importante metode directe de
rezolvare a sistemelor liniare.
Deoarece ı̂n reducerea sistemului (2.1) la formă triunghiulară transformările
matricei A sunt primordiale, ı̂n primele patru secţiuni ale capitolului vom trata
aceste transformări ca subiect de sine stătător. Algoritmii descrişi vor fi utilizaţi
ı̂n secţiunea 2.5 pentru rezolvarea efectivă a unui sistem (2.1), de formă generală.
Ca probleme conexe, ı̂n secţiunea 2.6 vor fi prezentaţi algoritmi de calcul al in-
versei şi determinantului unei matrice. Următoarele două secţiuni sunt dedicate
70 CAPITOLUL 2. REZOLVAREA SISTEMELOR DE ECUAŢII LINIARE

analizei condiţionării unui sistem liniar şi respectiv stabilităţii numerice a algo-
ritmilor prezentaţi. De asemenea, sunt descrise unele metode de ı̂mbunătăţire a
acurateţii soluţiei numerice obţinute. În fine, ultimele secţiuni ale capitolului se
ocupă de cazuri particulare de sisteme liniare cu structură — bandă, bloc, simetrice
şi pozitiv definite — care apar frecvent ı̂n practică.

2.1 Transformări elementare


Transformările matricei A necesare pentru rezolvarea sistemului (2.1) se pot descrie
concis şi elegant ı̂n termeni de operaţii matriceale, mai precis ca produs ı̂ntre A
şi anumite matrice elementare. (În loc de produs sau ı̂nmulţire, vom vorbi despre
aplicarea asupra lui A a matricei de transformare corespunzătoare.)

Definiţia 2.1 O matrice inferior triunghiulară elementară (ITE) de ordin n şi in-
dice k este o matrice de forma

Mk = In − mk eTk , (2.2)

unde
mk = [0 0 . . . 0 µk+1,k . . . µnk ]T (2.3)
este un vector având primele k componente nule, iar ek este vectorul unitate de
indice k.

Din motive ce vor fi evidente ulterior, Mk se mai numeşte transformare ele-


mentară sau gaussiană, mk se numeşte vector Gauss, iar scalarii µik se numesc
multiplicatori (gaussieni).
Structura unei matrice elementare inferior triunghiulare de ordinul n şi indice k
este  
1 0 ... 0 ... 0
 0 1 ... 0 ... 0 
 
 .. 

 . ... 

Mk =  0 0 . . .
 1 ... 0 .
 0 0 . . . −µk+1,k . . . 0 
 
 .. 
 ... ... . 0 
0 0 ... −µnk ... 1

Notăm de acum faptul că o matrice ITE este complet definită de vectorul mk
din (2.3); ı̂n orice algoritm, matricea Mk nu se memorează integral, ci doar prin
vectorul mk , i.e. prin multiplicatorii µik , i = k + 1 : n. Principalele proprietăţi ale
unei astfel de matrice sunt rezumate ı̂n următoarea propoziţie.

Propoziţia 2.1 a) O matrice ITE este inversabilă şi

Mk−1 = In + mk eTk . (2.4)


2.1. TRANSFORMĂRI ELEMENTARE 71

b) Fie x ∈ Rn un vector dat, iar Mk o matrice ITE precizată. Atunci vectorul


transformat y = Mk x are elementele

xi , pentru i = 1 : k,
(Mk x)i = (2.5)
xi − µik xk , pentru i = k + 1 : n.
c) Fie x ∈ Rn . Dacă xk 6= 0, atunci există o matrice ITE Mk astfel ı̂ncât
vectorul transformat y = Mk x are ultimele n − k componente nule, mai precis

xi , pentru i = 1 : k,
(Mk x)i = (2.6)
0, pentru i = k + 1 : n.
Dacă xk = 0, atunci pentru orice Mk
Mk x = x. (2.7)

Demonstraţie. a) Evident, det(Mk ) = 1, adică Mk este inversabilă. Mai mult,


Mk (In + mk eTk ) = (In − mk eTk )(In + mk eTk ) = In − mk (eTk mk )eTk = In
deoarece, din (2.3), eTk mk = 0. Deci (2.4) este adevărată.
b) Utilizând (2.2), obţinem
Mk x = (In − mk eTk )x = x − mk eTk x = xi − xk mk .
Scriind relaţia de mai sus pe componente şi ţinând seama de (2.3), obţinem (2.5).
c) Ţinând seama de (2.5) şi alegând
µik = xi /xk , i = k + 1 : n, (2.8)
rezultă (Mk x)i = 0, pentru i = k + 1 : n. Dacă xk = 0, atunci (2.5) conduce direct
la (2.7). De observat că, dacă xk 6= 0, atunci matricea ITE definită de vectorul
Gauss cu elementele din (2.8) este unica matrice ITE de indice k care introduce
zerouri ı̂n ultimele n − k componente ale vectorului x. ♦
După cum vom vedea ı̂n secţiunea următoare, proprietăţile (2.6) şi (2.7) sunt
cruciale ı̂n reducerea unei matrice la formă triunghiulară.
Similar se introduce noţiunea de matrice superior triunghiulară elementară (STE)
sau transformare elementară ”retrogradă”, ı̂n care vectorul mk are ultimele k com-
ponente nule. Propunem cititorului formularea şi demonstrarea analoagei propo-
ziţiei 2.1.
Vom introduce acum noţiunea de matrice de permutare, care permite descrierea
concisă a interschimbărilor de linii sau coloane ı̂n termeni de operaţii matriceale.

Definiţia 2.2 O matrice Pij ∈ Rn×n obţinută din matricea unitate In prin inter-
schimbarea a două coloane (sau linii) i şi j, adică o matrice de forma (aici i < j):
 
Ii−1

 0 1 

Pij = [e1 e2 . . . ei−1 ej ei+1 . . . ej−1 ei ej+1 . . . en ] = 
 Ij−i−1 

 1 0 
In−j
72 CAPITOLUL 2. REZOLVAREA SISTEMELOR DE ECUAŢII LINIARE

ı̂n care toate elementele nefigurate sunt nule, se numeşte (matrice de) permutare
elementară (PE).

Dacă (i1 , i2 , . . . , in ) este o permutare a mulţimii 1 : n, atunci matricea


P = [ei1 ei2 . . . ein ] este o matrice de permutare. Desigur, un produs de matrice
elementare de permutare este o matrice de permutare şi, reciproc, orice matrice de
permutare se poate exprima ca produs de matrice PE.
Proprietăţile matricelor elementare de permutare sunt expuse ı̂n următoarea
propoziţie, a cărei demonstraţie e evidentă.

Propoziţia 2.2 a) O PE este ortogonală şi simetrică, deci Pij−1 = Pij , iar
det Pij = −1.
b) Premultiplicarea unei matrice A cu PE Pij interschimbă linia i cu linia j din
A, adică:  T
 ek A, pentru k 6= i, j,
eTk (Pij A) = eTj A, pentru k = i,
 T
ei A, pentru k = j.
c) Postmultiplicarea unei matrice A cu PE Pij interschimbă coloana i cu coloana
j din A, adică:
(
Aek , pentru k 6= i, j,
(APij )ek = Aej , pentru k = i,
Aei , pentru k = j.

2.2 Triangularizare prin eliminare gaussiană


Fie A ∈ Rn×n (cazul A ∈ Cn×n este identic) o matrice nu neapărat inversabilă.
Eliminarea gaussiană este o metodă de reducere a matricei A la formă superior
triunghiulară prin aplicarea la stânga lui A a unei secvenţe Mk , k = 1 : n − 1,
de matrice ITE, fiecare aleasă astfel ı̂ncât să anuleze elementele subdiagonale ı̂n
coloana corespunzătoare ak a matricei A.
Pentru prezentarea metodei avem nevoie de două rezultate cu caracter tehnic,
a căror demonstraţie e lăsată cititorului.

Propoziţia 2.3 Fie A ∈ Rn×n . a) Dacă L ∈ Rn×n este inferior triunghiulară,


atunci 1
(LA)[k] = L[k] A[k] .
b) Dacă Li ∈ Rn×n , i = 1 : p, sunt matrice inferior triunghiulare, atunci
[k] [k]
(L1 L2 . . . Lp A)[k] = L1 L2 . . . L[k] [k]
p A .

Următoarea teoremă stabileşte condiţiile ı̂n care este posibilă reducerea unei
matrice la formă triunghiulară, utilizând transformări ITE.

1 Reamintim def
că A[k] = A(1 : k, 1 : k) este submatricea lider principală de ordin k a matricei A.
2.2. TRIANGULARIZARE PRIN ELIMINARE GAUSSIANĂ 73

Teorema 2.1 Dacă matricea A ∈ Rn×n satisface condiţia


(i) submatricele lider principale A[k] , k = 1 : n − 1, sunt nesingulare,
atunci există o matrice inferior triunghiulară unitate M astfel ı̂ncât matricea

MA = U

este superior triunghiulară. Dacă A este nesingulară, atunci U este nesingulară.

Demonstraţia este constructivă, adică descrie o procedură pentru reducerea efectivă


a matricei A la forma superior triunghiulară U . Procedura constă ı̂n n − 1 paşi.
[1]
Pasul 1. Fie A1 = A şi a1 = Ae1 prima sa coloană. Prin ipoteză, A1 = A[1] =
= a11 6= 0. Din propoziţia 2.1, există o matrice ITE M1 astfel ı̂ncât

a11 , pentru i = 1,
(M1 a1 )i =
0, pentru i = 2 : n,

adică matricea A2 = M1 A1 are toate elementele subdiagonale ale primei coloane


egale cu zero:  (2) 
(2) (2)
a11 a12 ... a1n
 (2) (2) 
 0 a22 ... a2n 
 (2) (2) 
A2 =  0 a32 ... a3n .
 
 ... ... ... ... 
(2) (2)
0 an2 ... ann
Pasul k. Presupunem că matricea curentă

Ak = Mk−1 . . . M2 M1 A

este superior triunghiulară ı̂n primele k − 1 coloane, i.e. are toate elementele sub-
diagonale ale acestor coloane egale cu zero. Aplicând propoziţia 2.3, obţinem
[k] [k] [k]
Ak = Mk−1 . . . M1 A[k] ,
[k] [k]
unde matricele Mi sunt toate inferior triunghiulare unitate, deci det(Mi ) = 1,
[k]
i = 1 : k − 1. Deoarece Ak este superior triunghiulară, ı̂n virtutea condiţiei (i) din
enunţul teoremei avem
k
Y
[k] (k)
det(Ak ) = aii = det(A[k] ) 6= 0,
i=1

(k)
adică elementul akk , numit pivot, este nenul. Considerăm partiţionarea pe coloane
a matricei Ak :
(k) (k) (k)
Ak = [ a1 a2 . . . ak . . . a(k)
n ].

Putem utiliza acum propoziţia 2.1 pentru a conchide că există o matrice ITE Mk
(k)
astfel ı̂ncât (Mk ak )i = 0, pentru i = k + 1 : n. Mai mult, premultiplicarea cu
Mk a matricei Ak nu alterează primele k − 1 coloane şi ı̂n particular zerourile deja
74 CAPITOLUL 2. REZOLVAREA SISTEMELOR DE ECUAŢII LINIARE

(k)
introduse la paşii anteriori, deoarece akj = 0, pentru j = 1 : k − 1 (vezi propoziţia
2.1, punctul c). Prin urmare matricea

Ak+1 = Mk Ak (2.9)

este superior triunghiulară ı̂n primele k coloane.


Astfel, procedura de introducere a zerourilor subdiagonale, ı̂ncepută la pasul 1
şi continuată până la pasul n − 1 (inclusiv), are ca rezultat matricea
def
U = An = Mn−1 Mn−2 . . . M1 A, (2.10)

evident superior triunghiulară. Mai mult, deoarece produsul matriceal conservă


structura inferior triunghiulară unitate (vezi propoziţia 1.2), matricea

M = Mn−1 Mn−2 . . . M1

este inferior triunghiulară unitate iar, dacă A este nesingulară, atunci şi U rezultă
nesingulară, ca produs a două matrice nesingulare. ♦
Demonstraţia de mai sus furnizează o procedură de triangularizare a unei ma-
trice, cunoscută sub numele de eliminare gaussiană. Procedura este bazată pe
următoarea schemă, ı̂n care calculele se desfăşoară pe loc ı̂n tabloul A

ElG 1. Pentru k = 1 : n − 1
1. Se calculează matricea ITE Mk (adică multiplicatorii µik ,
i = k + 1 : n), astfel ı̂ncât (Mk A)i = 0, pentru i = k + 1 : n
2. Se calculează A ← Mk A

La pasul 1.1, multiplicatorii gaussieni µik sunt calculaţi conform (2.8) prin
(k) (k)
µik = aik /akk , i = k + 1 : n, (2.11)

şi pot fi memoraţi pe poziţiile elementelor anulate. Prin instrucţiunea 1.2 a schemei
de mai sus, toate rezultatele intermediare sunt depuse ı̂n spaţiul de memorie ocupat
de matricea A; vezi şi figura 2.1.
La pasul 1.2, transformarea A ← Mk A este echivalentă cu calculul aj ← Mk aj ,
pentru toate coloanele aj = Aej ale matricei A. Transformarea poate fi efectuată
eficient ţinând cont că primele k−1 coloane ale matricei A nu sunt afectate. Coloana
k este modificată prin anularea elementelor subdiagonale. Pentru restul submatricei,
ţinând seama de propoziţia 2.1b, coloana transformată are elementele

aij ← (Mk aj )i = ((In − mk eTk )aj )i = aij − µik akj , i = k + 1 : n, (2.12)

unde j = k + 1 : n. Relaţiile (2.11) şi (2.12) ı̂mpreună cu schema de calcul ElG


definesc algoritmul de eliminare gaussiană detaliat ı̂n continuare. Condiţia de ter-
(k)
minare corectă a algoritmului este ca numerele akk , k = 1 : n − 1, numite elemente
pivot, să fie nenule, adică submatricele lider principale A[k] , k = 1 : n − 1, ale
matricei iniţiale, să fie nesingulare.
2.2. TRIANGULARIZARE PRIN ELIMINARE GAUSSIANĂ 75

   
u11 u12 . . . u1k u1,k+1 . . . u1n u11 u12 . . . u1k . . . u1n
 µ21 u22 . . . u2k u2,k+1 . . . u2n   µ21
   u22 . . . u2k . . . u2n 


 ... ... 
  ... ... 
 µk1  
 µk2 . . . ukk uk,k+1 . . . ukn    µk1 µk2 . . . ukk . . . ukn 
µ (k+1) (k+1)  
µ
 k+1,1 k+1,2 . . . µk+1,k ak+1,k+1 . . . ak+1,n 
 
 ... ... 

 
 ... ...   ... ... 
(k+1) (k+1) µn1 µn2 . . . µnk . . . unn
µn1 µn2 . . . µnk an,k+1 . . . ann

După pasul k În final

Fig. 2.1: Conţinutul matricei A după pasul k al eliminării gaussiene şi la terminarea
execuţiei algoritmului

Algoritmul 2.1 (G – Eliminare gaussiană) (Se dă A ∈ Rn×n , cu


submatricele lider principale A[k] , k = 1 : n − 1, nesingulare. Se cal-
culează matricea superior triunghiulară U şi matricele ITE M1 , . . . ,
Mn−1 , astfel ı̂ncât U = Mn−1 Mn−2 . . . M1 A. Matricea U se memorează
ı̂n triunghiul superior al lui A, inclusiv diagonala, iar multiplicatorii
gaussieni µik care definesc transformările Mk se memorează ı̂n triunghiul
inferior al matricei A, pe poziţiile elementelor anulate.)
1. Pentru k = 1 : n − 1
1. Pentru i = k + 1 : n
1. aik ← µik = aik /akk
2. Pentru j = k + 1 : n
1. Pentru i = k + 1 : n
1. aij ← aij − µik akj

O formă vectorială a eliminării gaussiene se poate deduce imediat din cea de


mai sus, prin ı̂nlocuirea buclelor 1.1 şi 1.2.1 cu operaţiile corespunzătoare: scalare,
respectiv Saxpy (aceasta din urmă putând fi dedusă din (2.12), care se mai scrie
Mk aj = aj − akj mk ). Avem

Algoritmul 2.2 (G – varianta vectorială)


1. Pentru k = 1 : n − 1
1. A(k + 1 : n, k) ← mk = A(k + 1 : n, k)/A(k, k)
2. Pentru j = k + 1 : n
1. A(k + 1 : n, j) ← A(k + 1 : n, j) − A(k, j)mk

Comentarii. În oricare dintre cele două forme de mai sus, algoritmul necesită
n−1
X n(n − 1) n(n − 1)(2n − 1) 2n3
NG = (n − k + 2(n − k)2 ) = +2 ≈ ,
2 6 3
k=1
76 CAPITOLUL 2. REZOLVAREA SISTEMELOR DE ECUAŢII LINIARE

operaţii ı̂n virgulă mobilă (flopi), iar memoria ocupată este de MG = n2 locaţii
(elemente ı̂n virgulă mobilă). ♦
Algoritmul G poate fi utilizat pentru rezolvarea sistemului liniar Ax = b atunci
când A are toate submatricele lider principale nesingulare (inclusiv A[n] = A).
Într-adevăr, sistemul Ax = b are aceeaşi soluţie ca sistemul superior triunghiular

U x = Mn−1 Mn−2 . . . M1 b,

ı̂n care matricea U este furnizată de algoritmul G. Acest sistem triunghiular poate
fi rezolvat cu algoritmul UTRIS.
Semnificaţia operaţiilor din algoritmul G este imediată; introducerea de zero-
uri subdiagonale ı̂n coloana k ı̂nseamnă eliminarea necunoscutei xk din ecuaţiile
k + 1 : n; buclele 1.2 şi 1.2.1 reprezintă scăderea din ecuaţiile i = k + 1 : n a ecuaţiei
k ı̂nmulţite, pe rând, cu multiplicatorii µik , cu scopul de a elimina xk din fiecare
ecuaţie i.
Totuşi, nesingularitatea submatricelor lider principale ale matricei A nu este o
condiţie necesară pentru existenţa şi unicitatea soluţiei sistemului (2.2). De aceea,
algoritmul G trebuie modificat astfel ı̂ncât să producă rezultatul dorit şi atunci
când unele submatrice lider principale sunt singulare, dar A este nesingulară.

2.3 Strategii de pivotare


Dacă o submatrice lider principală A[k] este singulară, atunci, la pasul k al procedurii
(k)
de eliminare gaussiană, pivotul akk este nul; deci, conform propoziţiei 2.1c, nu există
nici o matrice ITE Mk care să anuleze, prin premultiplicare, elementele subdiagonale
ale coloanei k din Ak . Modificarea algoritmului G recomandată pentru a evita
această dificultate constă ı̂ntr-o interschimbare de linii (sau/şi coloane), care aduce
ı̂n poziţia pivotului un element nenul. Un alt motiv pentru permutarea de linii şi
coloane este asigurarea stabilităţii numerice a procesului de calcul. O explicaţie
intuitivă este că, atunci când un proces matematic nu poate fi definit pentru o
anumită valoare ”critică” a unui parametru (de exemplu A[k] singulară), există
şanse mari ca procesul numeric corespunzător să fie instabil atunci când parametrul
efectiv este ı̂n vecinătatea valorii critice. În cazul nostru, trebuie evitaţi pivoţii
mici (ı̂n modul), corespunzători cazului ı̂n care submatricele lider principale sunt
”aproape” singulare; astfel se ı̂mbunătăţeşte stabilitatea numerică a algoritmului.

2.3.1 Pivotare parţială


Vom modifica algoritmul G după cum urmează. La pasul k al procedurii de trian-
gularizare a matricei A ∈ Rn×n (vezi demonstraţia teoremei 2.1), se alege ca pivot
primul element maxim ı̂n modul din coloana k. Presupunând că acest element
(k)
se găseşte ı̂n linia ik şi este nenul, i.e. aik k 6= 0, interschimbarea liniilor k şi ik ,
(k)
obţinută matriceal prin ı̂nmulţirea la stânga a lui Ak cu PE Pkik , va muta aik k ı̂n
poziţia (k, k), astfel ı̂ncât acest element devine noul pivot. Pentru a evita alterarea
structurii matricei obţinute până la pasul k (superior triunghiulară ı̂n primele k − 1
coloane), trebuie să alegem ik ≥ k. Vezi figura 2.2.
2.3. STRATEGII DE PIVOTARE 77

   
u11 . . . u1k . . . u1n u11 . . . u1k . . . u1n
 0 ...  0 ...
   
 ... 
  ... 

 (k) (k)   (k) (k) 
 akk . . . akn   aik k . . . aik n 
Ak = 
 0 ... 
 Pkik Ak = 
 0 ... 

 (k) (k)   (k) (k) 
 aik k . . . aik n   akk . . . akn 
   
 0 ...   0 ... 
(k) (k) (k) (k)
ank . . . ann ank . . . ann

(k)
Fig. 2.2: Pasul k al eliminării gaussiene cu interschimbare de linii; akk este nul
(k)
sau prea aproape de zero; ı̂n Pkik Ak , noul pivot este aik k şi are o valoare ”bună”
(suficient de mare, ı̂n modul)

Pentru simplitate, vom nota matricea Pik k cu Pk . Pasul k al algoritmului G


devine
1. Se determină cel mai mic (primul) ik ≥ k astfel ı̂ncât |aik k | = maxi=k:n |aik |.
2. Se interschimbă liniile ik şi k, adică A ← Pk A.
3. Se determină matricea ITE Mk astfel ı̂ncât (Mk A)ik = 0, i = k + 1 : n.
4. Se aplică transformarea A ← Mk A.
Astfel la pasul k are loc transformarea

A ← Ak+1 = Mk Pk Ak , (2.13)

unde matricea Tk = Mk Pk se numeşte transformare elementară stabilizată.


Procesul global, cunoscut sub numele de eliminare gaussiană cu pivotare parţială,
conduce ı̂n cele din urmă la matricea superior triunghiulară
def
U = An = Mn−1 Pn−1 Mn−2 Pn−2 . . . M1 P1 A. (2.14)

Această egalitate afirmă că orice matrice A este echivalentă la stânga cu o ma-
trice superior triunghiulară, iar matricea de transformare poate fi un produs de
transformări elementare stabilizate.
Algoritmul corespunzător este prezentat ı̂n continuare.

Algoritmul 2.3 (GPP – Eliminare gaussiană cu pivotare parţială)


(Se dă A ∈ Rn×n , nesingulară. Se calculează matricea superior triun-
ghiulară U , matricele ITE M1 , . . . , Mn−1 şi PE P1 , . . . , Pn−1 astfel
ı̂ncât (2.14) să fie satisfăcută. Matricea U se memorează ı̂n triunghiul
superior al lui A, inclusiv diagonala, iar multiplicatorii gaussieni µik
care definesc matricele Mk se memorează ı̂n triunghiul inferior al lui
A. Întregii ik care definesc PE Pk , sunt memoraţi ı̂ntr-un vector p de
dimensiune n − 1, cu elementele p(k) = ik , pentru k = 1 : n − 1.)
78 CAPITOLUL 2. REZOLVAREA SISTEMELOR DE ECUAŢII LINIARE

1. Pentru k = 1 : n − 1
1. Se determină cel mai mic ik ∈ k : n astfel ı̂ncât
|aik k | = maxi=k:n |aik |.
2. p(k) ← ik
3. Pentru j = k : n % interschimbă liniile k şi ik
1. akj ↔ aik j
4. Pentru i = k + 1 : n
1. aik ← µik = aik /akk
5. Pentru j = k + 1 : n
1. Pentru i = k + 1 : n
1. aij ← aij − µik akj

Comentarii. Operaţiile suplimentare necesare ı̂n algoritmul GPP, faţă de algorit-


mul G, apar numai ı̂n căutarea pivotului şi constau ı̂n comparaţiile necesare găsirii
maximului din instrucţiunea 1.1; numărul de comparaţii este
n−1
X
(n − k + 1) ≈ n2 /2 ≪ 2n3 /3,
k=1

deci pivotarea parţială nu este costisitoare (relativ la numărul de operaţii aritme-


tice). Necesarul de memorie este MGPP = n2 . ♦

Un rezultat important referitor la algoritmul GPP este dat de

Teorema 2.2 Dacă A ∈ Rn×n este nesingulară, atunci algoritmul GPP se va


executa complet iar matricea superior triunghiulară U rezultată ı̂n final, vezi (2.14),
este nesingulară.

Demonstraţie. Algoritmul GPP nu se execută complet dacă, la un pas k, ele-


mentul pivot aik k = 0. Într-un astfel de caz, deoarece pivotul este maxim ı̂n modul
pe coloană (sub diagonală), toate elementele aik , i = k : n, sunt nule, deci matricea
[k]
Ak este singulară (vezi structura matricei Ak , cu Ak superior triunghiulară).
Matricele ITE şi PE fiind nesingulare, singularitatea matricei

Ak = Mk−1 Pk−1 . . . M1 P1 A

implică A singulară; contradicţie. Deci, toţi pivoţii aik k 6= 0 şi algoritmul se exe-
cută complet. Nesingularitatea matricei U rezultă din nesingularitatea tuturor ma-
tricelor din termenul drept din (2.14). ♦

2.3.2 Pivotare completă


Proprietăţi numerice superioare se pot obţine dacă, la pasul k al eliminării gaussiene,
(k)
pivotul maxim ı̂n modul este căutat printre elementele aij , i = k : n, j = k : n,
adică ı̂n ı̂ntregul colţ dreapta jos al matricei Ak . Primul element cu modul maxim
2.3. STRATEGII DE PIVOTARE 79

   
u11 . . . u1k . . . u1jk . . . u1n u11 . . . u1jk . . . u1k . . . u1n
. .
 0 ..  0 ..
   
 ... ... 
  ... ... 

(k) (k) (k)  (k) (k) (k) 

 akk . . . akjk . . . akn  
 aik jk . . . aik k . . . aik n 
Ak = 
 0 ...  Pki Ak Qkj
 k k
=
 0 ... 

 (k) (k) (k)   (k) (k) (k) 
 aik k . . . aik jk . . . aik n   akjk . . . akk . . . akn 
   
 0 ...   0 ... 
(k) (k) (k) (k) (k) (k)
ank . . . anjk . . . ann anjk . . . ank . . . ann

Fig. 2.3: Pasul k al eliminării gaussiene, cu interschimbări de linii şi coloane

(e.g. ı̂n ordinea explorării pe coloane), să zicem aik jk , este mutat ı̂n poziţia pivot
(k, k), prin intermediul a două interschimbări, una de linii, cealaltă de coloane,
exprimate matriceal prin ı̂nmulţirea lui Ak la stânga, respectiv la dreapta, cu PE
Pkik , respectiv Qkjk ; vezi figura 2.3.
Notând Pkik cu Pk şi Qkjk cu Qk , pasul k al algoritmului G devine:
1. Se determină cei mai mici ik şi jk astfel ı̂ncât |aik jk | = maxi=k:n,j=k:n |aij |.
2. Se interschimbă liniile ik şi k, adică A ← Pk A.
3. Se interschimbă coloanele jk şi k, adică A ← AQk .
4. Se determină matricea ITE Mk astfel ı̂ncât (Mk A)ik = 0, i = k + 1 : n.
5. Se aplică transformarea A ← Mk A.
Astfel, la pasul k are loc transformarea

A ← Ak+1 = Mk Pk Ak Qk , (2.15)

iar procesul global de calcul, cunoscut sub numele de eliminare gaussienă cu pivotare
completă, conduce la matricea superior triunghiulară
def
A ← U = Mn−1 Pn−1 . . . M1 P1 AQ1 . . . Qn−1 . (2.16)

Algoritmul rezultat este prezentat ı̂n continuare.

Algoritmul 2.4 (GPC – Eliminare gaussiană cu pivotare completă)


(Se dă A ∈ Rn×n , nesingulară. Se calculează matricea superior triun-
ghiulară U , matricele ITE M1 , . . . , Mn−1 şi PE P1 , Q1 , . . . , Pn−1 ,
Qn−1 , astfel ı̂ncât (2.16) să fie satisfăcută. Matricea U se memorează
ı̂n triunghiul superior al lui A, inclusiv diagonala, iar multiplicatorii
gaussieni µik care definesc matricele Mk se memorează ı̂n triunghiul in-
ferior al matricei A. Întregii ik şi jk , definind PE Pk , respectiv Qk , sunt
memoraţi ı̂n vectorii p, respectiv q, de dimensiune n − 1, astfel ı̂ncât
p(k) = ik şi q(k) = jk , pentru k = 1 : n − 1.)
80 CAPITOLUL 2. REZOLVAREA SISTEMELOR DE ECUAŢII LINIARE

1. Pentru k = 1 : n − 1
1. Se determină ik ∈ k : n şi jk ∈ k : n astfel ı̂ncât
|aik jk | = maxi=k:n,j=k:n |aij |.
2. p(k) ← ik
3. q(k) ← jk
4. Pentru j = k : n % interschimbă liniile k şi ik
1. akj ↔ aik j
5. Pentru i = 1 : n % interschimbă coloanele k şi jk
1. aik ↔ aijk
6. Pentru i = k + 1 : n
1. aik ← µik = aik /akk
7. Pentru j = k + 1 : n
1. Pentru i = k + 1 : n
1. aij ← aij − µik akj

Comentarii. Operaţiile suplimentare ce apar ı̂n algoritmul GPC, faţă de algorit-


mul G, sunt doar cele necesare căutării pivotului, ca şi la pivotarea parţială; acum
ı̂nsă, numărul de comparaţii este
n−1
X n
X
(n − k + 1)2 = k 2 ≈ n3 /3;
k=1 k=2

spre deosebire de pivotarea parţială, pivotarea completă introduce un număr de


comparaţii de acelaşi ordin de mărime cu numărul operaţiilor aritmetice; aceasta
poate conduce la creşterea semnificativă a timpului de execuţie, de aceea pivotarea
completă trebuie folosită doar atunci când se doreşte o mare siguranţă ı̂n calculul
rezultatului. Vom prezenta ulterior argumentele care conduc la alegerea strategiei
de pivotare. Necesarul de memorie este şi aici MGPC = n2 . ♦
Teorema următoare corespunde teoremei 2.2, demonstraţia fiind asemănătoare.

Teorema 2.3 Dacă A ∈ Rn×n este nesingulară, atunci algoritmul GPC se execută
complet, iar matricea superior triunghiulară rezultată U din (2.16) este nesingulară.

Observaţia 2.1 Algoritmii GPP şi GPC pot fi modificaţi cu uşurinţă pentru a
putea triangulariza şi matrice singulare.
În GPP, după pasul 1.1, trebuie adăugată următoarea condiţie: dacă aik k = 0,
adică aik = 0, i = k : n, atunci pentru acest k, instrucţiunile 1.2 – 1.5 nu trebuie
executate. În acest caz matricea U = An poate avea elemente diagonale nule
În GPC, dacă aik jk = 0, adică aij = 0, i = k : n, j = k : n, atunci algoritmul
se termină la pasul k, deoarece matricea U = Ak este deja superior triunghiulară,
mai precis superior trapezoidală, iar rangA = k − 1. Desigur, datorită erorilor de
rotunjire inerente, găsirea unui pivot nul este un eveniment destul de rar. Deoarece
este dificil de stabilit, ı̂n general, o toleranţă de trunchiere ǫ astfel ı̂ncât |aik jk | < ǫ
să fie considerat pivot nul, algoritmul GPC nu se foloseşte pentru determinarea
rangului unei matrice; proceduri mai sigure sunt oferite de algoritmii de factorizare
QR cu pivotarea coloanelor şi DVS, vezi capitolele 3 şi 5. ♦
2.4. FACTORIZĂRI LU 81

2.4 Factorizări LU
În multe situaţii, este convenabil a exprima o matrice dată ca produs a două matrice
triunghiulare. Această formă poate fi utilizată pentru a simplifica anumite calcule
implicând matricea respectivă.

Definiţia 2.3 Fie A ∈ Rn×n . Dacă există o matrice inferior triunghiulară


L ∈ Rn×n şi o matrice superior triunghiulară U ∈ Rn×n astfel ı̂ncât

A = LU (2.17)

atunci se spune că A admite o factorizare (sau descompunere) LU. L şi U se numesc
factori triunghiulari ai matricei A.
În general, orice exprimare a matricei A ca produs de două matrice triunghiulare
(cu eventuale permutări) se numeşte factorizare triunghiulară.

Dacă A ∈ Rn×n este o matrice care are o factorizare LU, iar D este o matrice
diagonală nesingulară, atunci, D−1 fiind de asemenea diagonală, (2.17) poate fi
scrisă ı̂n forma
A = LU = LDD−1 U = L′ U ′ , (2.18)
unde L′ = LD este inferior triunghiulară şi U ′ = D−1 U este superior triunghiulară.
Dacă D 6= I, atunci factorizările (2.17) şi (2.18) diferă şi deci factorizarea LU, dacă
există, nu este unică. De aceea este util a se introduce definiţia următoare.

Definiţia 2.4 Fie A ∈ Rn×n . Dacă există matricele L ∈ Rn×n inferior triunghiu-
lară unitate, U ∈ Rn×n superior triunghiulară unitate şi D ∈ Rn×n diagonală astfel
ı̂ncât
A = LDU,
atunci expresia de mai sus este numită factorizare LDU a matricei A.

Arătăm ı̂n continuare ı̂n ce condiţii o factorizare LDU există şi este unică.

Teorema 2.4 O matrice A ∈ Rn×n are o unică factorizare LDU dacă şi numai
dacă submatricele lider principale A[k] , k = 1 : n − 1, sunt nesingulare.

Demonstraţie. Demonstrăm aici doar existenţa factorizării LDU, pentru unicitate


vezi problema 2.5.
În condiţiile enunţate, din teorema 2.1, care constituie baza eliminării gaussiene,
rezultă că există M inferior triunghiulară unitate (deci inversabilă) astfel ı̂ncât
M A = U , cu U superior triunghiulară. Cu notaţia L = M −1 , matrice inferior
triunghiulară unitate, avem A = LU . Notând acum

D = diag(u11 , u22 , . . . , unn ),


U ′ = D−1 U,

atunci A = LDU ′ , cu L, D, U ′ satisfăcând condiţiile descompunerii LDU.


82 CAPITOLUL 2. REZOLVAREA SISTEMELOR DE ECUAŢII LINIARE

Reciproc, se poate demonstra prin reducere la absurd — vezi problema 2.6 —


că dacă factorizarea LDU este unică, atunci submatricele A[k] , k = 1 : n − 1, sunt
nesingulare. ♦
Factorizările LU utilizate ı̂n practica numerică curentă asociază matricea dia-
gonală D din cu una dintre matricele U , L ale factorizării LDU. Astfel se obţin,
respectiv:
• factorizarea Doolittle A = LU , cu L inferior triunghiulară unitate şi U superior
triunghiulară,
• factorizarea Crout A = LU , cu L inferior triunghiulară şi U superior triun-
ghiulară unitate.
Din teorema 2.4 rezultă că ambele factorizări, Doolittle şi Crout, există şi sunt
unice dacă şi numai dacă submatricele lider principale A[k] , k = 1 : n − 1, sunt
nesingulare. Vom păstra ı̂n continuare această ipoteză, specificând cazurile ı̂n care
ea nu este necesară.

2.4.1 Factorizări LU rezultate din eliminarea gaussiană


Factorizarea Doolittle este calculată chiar de algoritmul G de triangularizare gaus-
siană ! Este una din ”surprizele” plăcute ale calculului numeric.
Teorema 2.5 Algoritmul G, aplicat matricei A ∈ Rn×n , cu det A[k] 6= 0,
k = 1 : n − 1, calculează factorizarea Doolittle A = LU , cu L inferior triunghiulară
unitate şi U superior triunghiulară. Factorii L (mai puţin elementele diagonale) şi
U sunt memoraţi peste A.

Demonstraţie. Algoritmul G produce matricele ITE Mk , k = 1 : n − 1, astfel


ı̂ncât din (2.10) rezultă A = LU , cu L = (Mn−1 . . . M2 M1 )−1 şi U memorată peste
A. Aşadar
L = M1−1 M2−1 . . . Mn−1
−1
.
Dar (vezi propoziţia 2.1), Mk−1 = In + mk eTk , deci
n−1
X
L = (In + m1 eT1 )(In + m2 eT2 ) . . . (In + mn−1 eTn−1 ) = In + mk eTk + S,
k=1

unde S este o sumă de matrice de forma


T = . . . mp eTp mq eTq . . .
cu p < q. Deoarece eTp mq = 0, pentru orice p < q, obţinem T = 0 şi S = 0. Astfel,
 
1 0 ... 0 0
 µ21 1 . . . 0 0 
 
n−1  µ31 µ . . . 0 0 
X 32
mk eTk = 
 
L = In + . ,
 ... .. ... 
k=1  
 µn−1,1 µn−1,2 . . . 1 0 
µn1 µn2 . . . µn,n−1 1
2.4. FACTORIZĂRI LU 83

deci matricea L este formată chiar din multiplicatorii gaussieni memoraţi ı̂n A, ı̂n
algoritmul G. ♦
Vom studia acum legătura ı̂ntre algoritmul GPP de eliminare gaussiană cu pi-
votare parţială şi factorizările LU.
Teorema 2.6 Triangularizarea (2.14) (Mn−1 Pn−1 . . . M1 P1 A = U ) a matricei
A ∈ Rn×n , obţinută prin algoritmul GPP, este echivalentă cu factorizarea Doolittle
a matricei A cu liniile permutate, adică
P A = LU, (2.19)
unde P = Pn−1 . . . P1 . În partea subdiagonală, coloana k ∈ 1 : n − 1 a matri-
cei L este o permutare a vectorului Gauss corespunzător mk ; mai precis, dacă
hk = Pn−1 . . . Pk+1 mk , atunci L(k + 1 : n, k) = hk (k + 1 : n).

Demonstraţie. Se poate verifica uşor echivalenţa dintre (2.14) şi


M̃n−1 . . . M̃1 P A = U, (2.20)
unde M̃n−1 = Mn−1 şi, pentru k < n − 1,
M̃k = Pn−1 . . . Pk+1 Mk Pk+1 . . . Pn−1 =
= I − Pn−1 . . . Pk+1 mk eTk Pk+1 . . . Pn−1 =
= I − Pn−1 . . . Pk+1 mk eTk = I − hk eTk .
În relaţiile de mai sus am ţinut seama că Mk = I − mk eTk şi Ps−1 = Ps ; ı̂n plus,
eTk Ps = eTk , pentru s > k, deoarece Ps este o PE de indici s şi t ≥ s. Deci M̃k este o
matrice ITE definită de vectorul Gauss hk . Deoarece (2.20) şi (2.10) sunt analoage,
rezultă, ca ı̂n teorema 2.5, că matricea L = M̃1−1 . . . M̃n−1
−1
este inferior triunghiulară
unitate cu coloanele egale ı̂n partea subdiagonală cu vectorii hk , k ∈ 1 : n − 1. Prin
urmare relaţia (2.19) este satisfăcută. ♦
Expresia vectorului hk arată cum trebuie modificat algoritmul GPP pentru a
produce factorizarea LU cu pivotare (2.19); se observă că asupra fiecărui vector
Gauss mk trebuie aplicate toate permutările ulterioare Ps , cu s > k. Pentru a
implementa aceasta, modificăm instrucţiunea 1.3 a GPP din ”Pentru j = k : n”
ı̂n ”Pentru j = 1 : n”, adică, ceea ce e echivalent cu afirmaţia anterioară, fiecare
permutare Pk se aplică şi tuturor vectorilor Gauss anteriori mj , cu j ∈ 1 : k − 1.
După execuţia algoritmului GPP astfel modificat, matricele triunghiulare L şi U
din (2.19) se vor afla ı̂n A.
Cazul eliminării gaussiane cu pivotare completă este acum clar şi vom lăsa de-
taliile ca exerciţiu pentru cititor (problema 2.8). Modificând algoritmul GPC ı̂n
acelaşi mod ca pe GPP, se va obţine pe loc ı̂n matricea A o factorizare LU a unei
matrice obţinute din A prin permutări de linii şi coloane:
P AQ = LU, (2.21)
unde P , L şi U au aceeaşi semnificaţie (dar nu aceleaşi elemente) ca ı̂n teorema
2.6, iar Q = Q1 . . . Qn−1 este construită din matricele de permutare elementară din
relaţia (2.16).
84 CAPITOLUL 2. REZOLVAREA SISTEMELOR DE ECUAŢII LINIARE

elemente calculate
1 ?
0
akk . . . akj . . . = lkk 1 . . . ukj . . .
.. ..
. .
aik i lik 0
.. .. 1
.  .
k
elemente calculate

Fig. 2.4: Stadiu intermediar al factorizării Crout.

2.4.2 Factorizări LU compacte


Factorizarea Crout poate fi calculată luând ı̂n relaţia (2.18) expresia LU ca fiind fac-
torizarea Doolittle şi D = diag(u11 , u12 , . . . , unn ). Atunci, L′ U ′ este descompunerea
Crout a matricei A.
Totuşi, există şi alte posibilităţi de a organiza calculele, care de obicei se numesc
scheme de factorizare compactă. Vom deduce o astfel de factorizare Crout pe baza
ideii de a utiliza direct identitatea A = LU , calculând succesiv câte o coloană din
L şi câte o linie din U . Procedura poate fi iniţializată considerând prima coloană a
identităţii A = LU , i.e.
Ae1 = LU e1 = Le1 ,
de unde
li1 = ai1 , i = 1 : n, (2.22)
respectiv prima linie a aceleiaşi identităţi,
eT1 A = eT1 LU = l11 eT1 U,
adică
a1j = l11 u1j , j = 2 : n.
Deoarece l11 = a11 = A[1] 6= 0, din relaţia anterioară rezultă
u1j = a1j / l11 , j = 2 : n. (2.23)
Presupunem acum că primele k − 1 coloane din L şi primele k − 1 linii din U
sunt cunoscute (calculate); vezi figura 2.4. Din identitatea A = LU obţinem
k−1
X
aik = lis usk + lik , i = k : n,
s=1

ı̂n care singura necunoscută este scalarul lik . Deci,


k−1
X
lik = aik − lis usk , i = k : n. (2.24)
s=1
2.4. FACTORIZĂRI LU 85

De asemenea,
k−1
X
akj = lks usj + lkk ukj , j = k + 1 : n,
s=1

ı̂n care acum singura necunoscută este scalarul ukj . Din propoziţia 2.3 rezultă
A[k] = L[k] U [k] , unde A[k] , deci şi L[k] sunt nesingulare, adică lkk 6= 0. Aşadar,
k−1
!
X
ukj = akj − lks usj / lkk , j = k + 1 : n. (2.25)
s=1

Astfel, procedura iniţiată prin (2.22) şi (2.23) poate fi continuată prin (2.24) şi
(2.25); dacă submatricele A[k] , k = 1 : n − 1, sunt nesingulare, ceea ce garantează
că ı̂mpărţirea din (2.25) poate fi executată, procedura va calcula complet factorii
L şi U . Observând că (2.22) şi (2.23) sunt cazuri particulare ale (2.24), respectiv
(2.25), putem include primul pas ı̂n bucla generală, rezultând algoritmul următor.

Algoritmul 2.5 (CROUT – Factorizare Crout) (Se dă A ∈ Rn×n ,


cu submatricele lider principale A[k] , k = 1 : n − 1, nesingulare. Se
calculează factorizarea Crout A = LU , cu L inferior triunghiulară şi U
superior triunghiulară unitate. Matricele L şi U sunt memorate peste
elementele corespunzătoare din A, mai puţin elementele diagonale ale
lui U , egale cu 1.)
1. Pentru k = 1 : n
1. Pentru i = k : n
P
1. aik ← lik = aik − k−1
s=1 lis usk
2. Pentru j = k + 1 : n 
P
1. akj ← ukj = akj − k−1 l u
s=1 ks sj / lkk

Comentarii. Numărul de operaţii ı̂n virgulă mobilă este NCROUT ≈ 2n3 /3 la fel
ca ı̂n algoritmii G, GPP sau GPC, iar memoria ocupată este MCROUT ≈ n2 . ♦
Ca şi algoritmul G de eliminare gaussiană, algoritmul CROUT eşuează pe
parcurs dacă se obţine un lkk = 0 (ceea ce este echivalent cu A[k] singulară); mai
mult, valori apropiate de zero ale unui lkk conduc la valori absolute foarte mari ale
elementelor matricei U calculate ı̂n instrucţiunea 1.2.1 precum şi la erori numerice
inadmisibile ı̂n rezultat.
Pentru a preveni această situaţie se introduce pivotarea parţială (pe linii). Spre
deosebire de algoritmul G unde, la pasul k, permutarea liniilor se efectua ı̂naintea
celorlaltor operaţii, aici permutarea poate avea loc doar după calcularea elementelor
lik , cu i ∈ k : n, pentru a putea aduce cea mai convenabilă valoare ı̂n poziţia (k, k).
(Să observăm că pivotarea completă este acum imposibilă, deoarece ar implica an-
ticiparea calculelor pentru toată matricea.) Aceasta revine la ı̂nmulţirea la stânga
a matricei A cu o PE Pkik , cu ik ≥ k, la fiecare pas k şi, global, la o factorizare
P A = LU , cu P = Pn−1 . . . P1 . Algoritmul corespunzător este următorul.

Algoritmul 2.6 (CROUTP – Factorizare Crout cu pivotare par-


ţială) (Se dă A ∈ Rn×n nesingulară. Se calculează factorizarea Crout
86 CAPITOLUL 2. REZOLVAREA SISTEMELOR DE ECUAŢII LINIARE

P A = LU , cu L inferior triunghiulară, U superior triunghiulară uni-


tate şi P = Pn−1 . . . P1 matrice de permutare. Matricele L şi U sunt
memorate peste elementele corespunzătoare din A, mai puţin elementele
diagonale ale lui U , egale cu 1. Întregii ik definind PE Pk sunt memoraţi
ı̂ntr-un vector p astfel ı̂ncât p(k) = ik , k = 1 : n − 1.)
1. Pentru k = 1 : n
1. Pentru i = k : n
Pk−1
1. aik ← lik = aik − s=1 lis usk
2. Se determină ik ∈ k : n astfel ı̂ncât |lik k | = maxi=k:n |lik |
3. Pentru j = 1 : n {interschimbă liniile k şi ik }
1. akj ↔ aik j
4. Pentru j = k + 1 : n 
Pk−1
1. akj ← ukj = akj − s=1 lks usj / lkk

Comentarii. Desigur, numărul comparaţiilor efectuate ı̂n instrucţiunea 1.2 este


de ordinul O(n2 ), adică neglijabil faţă de cel al operaţiilor aritmetice. ♦

2.4.3 Factorizări LU prin eliminare gaussiană la nivel de bloc


Vom elabora ı̂n continuare un algoritm pentru calculul factorizării Doolittle a unei
matrice A ∈ Rn×n , folosind cât mai mult operaţii din setul BLAS nivel 3, anume
GEMM şi TRSM. Abordarea problemei se face ı̂n mod natural prin partiţionarea ma-
tricelor ı̂n blocuri. Vom prezenta ı̂ntâi varianta fără pivotare, deci presupunem că
submatricele A[k] sunt nesingulare, pentru k ∈ 1 : n − 1.
Partiţionăm matricea A astfel
 
A11 A12 }r
A =
A21 A22 } n−r , (2.26)
|{z} |{z}
r n−r

alegerea lui r urmând a fi precizată ulterior.


În ideea calculului la nivel de bloc al factorizării LU, să ı̂ncepem prin a determina
L11 , L21 , U11 , U12 , astfel ı̂ncât să fie satisfăcută egalitatea:
       
A11 A12 L11 0 Ir 0 U11 U12
= · · . (2.27)
A21 A22 L21 In−r 0 B 0 In−r

Din această egalitate, privită pe rând pentru cele patru blocuri componente, se pot
deduce uşor blocurile dorite din L şi U :

1. A11 = L11 U11 , deci L11 şi U11 provin din factorizarea LU la nivel de element
a matricei A11 .
−1
2. A21 = L21 U11 ⇒ L21 = A21 U11 . Deci, U11 fiind cunoscut de la pasul
anterior, L21 poate fi calculat prin rezolvarea unui sistem superior triunghiular
cu parte dreaptă multiplă.
2.4. FACTORIZĂRI LU 87

3. A12 = L11 U12 ⇒ U12 = L−1 11 A12 . Deci, U12 este soluţia unui sistem inferior
triunghiular cu parte dreaptă multiplă.
4. A22 = L21 U12 + B ⇒ B = A22 − L21 U12 ; blocul ”restant” B depinde doar
de matrice cunoscute sau deja calculate.

Deci, ı̂n ordinea de mai sus, se pot calcula toate necunoscutele din (2.27).
Procedând mai departe ı̂n mod similar cu matricea B, se poate calcula o facto-
rizare LU a acesteia, adică
B = L22 U22 . (2.28)
În acest caz, egalitatea (2.27) devine o factorizare LU a matricei A, cu
   
L11 0 U11 U12
L= ; U= . (2.29)
L21 L22 0 U22
Pe scurt, aplicând ı̂n mod repetat paşii 1-4 de mai sus, dimensiunea problemei
se reduce de la n la n − r, n − 2r etc. La etapa m (unde n = mr), problema constă
ı̂n factorizarea LU a unui bloc r × r, factorizarea ı̂ntregii matrice A fiind terminată.
Algoritmul de factorizare LU va consta deci dintr-o buclă conţinând paşii 1-4. În
figura 2.5 sunt reprezentate blocurile de interes pe parcursul unei iteraţii.

Algoritmul 2.7 (Gbl – Eliminare gaussiană la nivel de bloc) (Se


dau A ∈ Rn×n , cu A[k] , k = 1 : n − 1, nesingulare, şi r ∈ N astfel ı̂ncât
n = mr. Se calculează factorizarea Doolittle A = LU , prin operaţii la
nivel de bloc.)
1. Pentru k = 1 : m
1. s ← (k − 1)r + 1
2. f ← kr
3. Se calculează factorizarea LU
A(s : f, s : f ) = L(s : f, s : f ) · U (s : f, s : f )
4. Se rezolvă sistemul superior triunghiular
Z · U (s : f, s : f ) = A(f + 1 : n, s : f )
5. L(f + 1 : n, s : f ) ← Z
6. Se rezolvă sistemul inferior triunghiular
L(s : f, s : f ) · Z = A(s : f, f + 1 : n)
7. U (s : f, f + 1 : n) ← Z
8. A(f + 1 : n, f + 1 : n) ← A(f + 1 : n, f + 1 : n)−
−L(f + 1 : n, s : f )U (s : f, f + 1 : n)

Comentarii. Se observă că doar ı̂n instrucţiunea 1.3, factorizarea LU a blocului


A(s : f, s : f ), de dimensiune r × r, trebuie explicitată cu operaţii la nivel de
element; ı̂n rest, ı̂n instrucţiunile 1.4 şi 1.6 se foloseşte TRSM, iar ı̂n 1.8 GEMM. Din
totalul de 2n3 /3 flopi ai algoritmului 2.7 (la fel ca pentru algoritmul G), doar
2mr3 /3 = 2nr2 /3 apar ı̂n factorizările LU ”mici” din instrucţiunea 1.3. În acest
caz, ponderea operaţiilor de nivel 3 este
2n3 /3 − 2nr2 /3 r2
P 3LU (n, r) = 3
= 1 − 2. (2.30)
2n /3 n
88 CAPITOLUL 2. REZOLVAREA SISTEMELOR DE ECUAŢII LINIARE
deja factorizat
B
B s f n
B
BN
U
?
s
L   curent
6
f

HH
Y
H de factorizat
H
n
curent

Fig. 2.5: Structura blocurilor ı̂ntr-un pas al factorizării Doolittle la nivel de bloc

Cum, ı̂n general, se alege r ≪ n (şi deci, cu atât mai mult, r2 ≪ n2 ), ponderea
operaţiilor de nivel 3 este apropiată de 1, deci putem estima o bună comportare
a algoritmului pe un calculator cu memorie ierarhică. Totuşi, alegerea dimensiunii
blocurilor r se face ı̂n urma unui compromis: pe de o parte, din (2.30) e de dorit
ca r să fie cât mai mic, pe de alta, pentru ca rutinele din BLAS-3 să fie eficiente
trebuie ca r să fie suficient de mare; valoarea ideală se determină fie din estimări
teoretice, fie, mai ales, prin ı̂ncercări experimentale. ♦
Introducerea pivotării se face relativ simplu, ţinându-se seama că ı̂n (2.27) apare
ı̂n plus o matrice de permutare P1 :
       
A11 A12 L11 0 Ir 0 U11 U12
P1 · = · · . (2.31)
A21 A22 L21 In−r 0 B 0 In−r
Reducerea calculului factorizării LU a matricei A la un calcul analog pentru
matricea de dimensiuni mai mici B se face ı̂n felul următor:
1. Se calculează, de exemplu prin eliminare gaussiană, factorizarea LU (rezultată
din (2.31), pentru cele două blocuri din stânga):
   
A11 L11
P1 · = · U11 . (2.32)
A21 L21
(Se aplică algoritmul GPP, chiar dacă matricea ı̂n cauză este n × r; căutarea
pivotului se face pe toată porţiunea subdiagonală a unei coloane. Vezi pro-
blema 2.9.)
2. Se aplică permutarea restului matricei A (cele două blocuri din dreapta),
obţinându-se    
Ã12 A12
= P1 · .
Ã22 A22
2.4. FACTORIZĂRI LU 89

3. Din Ã12 = L11 U12 se poate calcula U12 = L−1


11 Ã12 , prin rezolvarea unui sistem
inferior triunghiular cu parte dreaptă multiplă (se apelează TRSM).
4. Mai rămâne B = Ã22 − L21 U12 , termenii din dreapta fiind toţi deja calculaţi;
deci B se poate obţine ı̂n urma unui apel la GEMM.
Lăsăm cititorului detalierea ideii algoritmice de mai sus, ca şi calculul ponderii
operaţiilor de nivel 3; deşi acum vor fi mai multe operaţii la nivel de element faţă de
cazul factorizării fără pivotare, totuşi numărul lor rămâne suficient de mic pentru
a putea aprecia algoritmul ca eficient.

2.4.4 Factorizări LU compacte la nivel de bloc


Vom prezenta ı̂n continuare o variantă la nivel de bloc a metodei Crout pentru
factorizarea LU; ne vom ocupa doar de cazul ı̂n care nu se efectuează pivotare.
Raţionamentul este absolut identic cu cel la nivel de element. La nivel de bloc,
egalitatea A = LU se poate scrie
     
A11 A12 . . . A1m L11 0 . . . 0 U11 U12 . . . U1m
 A21 A22 . . . A2m   L21 L22 . . . 0   0 U22 . . . U2m 
     
 .. .. . . ..  =  .. .. . . ..  ·  .. .. . . ..  ,
 . . . .   . . . .   . . . . 
Am1 Am2 . . . Amm Lm1 Lm2 . . . Lmm 0 0 . . . Umm
(2.33)
Pmin(i,j)
ceea ce, pentru blocul cu indici i, j, revine la Aij = t=1 Lit Utj .
Detaliind această relaţie, distingem următoarele cazuri:
k k−1
!
X X
i = j = k ⇒ Akk = Lkt Utk ⇒ Lkk Ukk = Akk − Lkt Utk . (2.34)
t=1 t=1

k k−1
!
X X
−1
i > j = k ⇒ Aik = Lit Utk ⇒ Lik = Aik − Lit Utk Ukk ; (2.35)
t=1 t=1
k k−1
!
X X
k = i < j ⇒ Akj = Lkt Utj ⇒ Ukj = L−1
kk Akj − Lkt Utj . (2.36)
t=1 t=1
Ordinea ı̂n care se aplică formulele de mai sus este aceeaşi ca ı̂n algoritmul la
nivel de element: se calculează ı̂ntâi prima bloc coloană din L şi prima bloc linie din
U ; diferenţa este că acum trebuie calculate două blocuri diagonale, L11 şi U11 (ı̂n
algoritmul la nivel de element, u11 = 1); aceasta se face printr-o factorizare Crout
LU; se continuă apoi cu a doua bloc coloană din L şi a doua bloc linie din U etc.
Procesul de calcul va decurge conform următoarei scheme:
1. Pentru k = 1 : m
1. Se calculează Lkk şi Ukk factorizând LU termenul drept din (2.34)
2. Pentru i = k + 1 : m
1. Se calculează Lik ca ı̂n (2.35)
3. Pentru j = k + 1 : m
1. Se calculează Ukj ca ı̂n (2.36)
90 CAPITOLUL 2. REZOLVAREA SISTEMELOR DE ECUAŢII LINIARE

Pentru a detalia algoritmul şi a-l scrie ı̂n mod cât mai eficient prin apeluri la
rutine BLAS-3, să observăm că sumele din relaţiile (2.34–2.36) se pot scrie compact;
exemplificăm doar pentru una dintre sume, cea din (2.35), notând s = (k − 1)r + 1,
f = kr, si = (i − 1)r + 1, fi = ir:

k−1
X
Lit Utk ≡ L(si : fi , 1 : s − 1) · U (1 : s − 1, s : f ).
t=1

Mai mult, putem scrie compact toate relaţiile de tip (2.35), pentru un k fixat, dar
cu i = k + 1 : m. Mai exact, bucla 1.2 din schema de mai sus se transformă ı̂ntr-o
−1
singură atribuire (profitând de faptul că Ukk nu depinde de i), anume:

L(f +1 : n, s : f ) ← [A(f +1 : n, s : f ) − L(f +1 : n, 1 : s−1) · U (1 : s−1, s : f )] ·


·U (s : f, s : f )−1

În fine, combinând forma de mai sus cu termenul drept din (2.34), obţinem instruc-
ţiunea 1.3 din algoritmul detaliat ı̂n continuare (calculele se pot efectua pe loc ı̂n
matricea A, dar, pentru claritate, nu procedăm astfel).

Algoritmul 2.8 (CROUTbl – Factorizare Crout la nivel de bloc)


(Se dau A ∈ Rn×n şi r ∈ N astfel ı̂ncât n = mr. Se calculează factori-
zarea A = LU , utilizând operaţii la nivel de bloc.)
1. Pentru k = 1 : m
1. s ← (k − 1)r + 1
2. f ← kr
3. A(s : n, s : f ) ← A(s : n, s : f ) − L(s : n, 1 : s−1)·U (1 : s−1, s : f )
4. Se calculează factorizarea LU Crout
A(s : f, s : f ) = L(s : f, s : f ) · U (s : f, s : f )
5. Se rezolvă sistemul superior triunghiular
Z · U (s : f, s : f ) = A(f + 1 : n, s : f )
6. L(f + 1 : n, s : f ) ← Z (o bloc coloană din L)
7. A(s : f, f + 1 : n) ← A(s : f, f + 1 : n)−
−L(s : f, 1 : s − 1) · U (1 : s − 1, f + 1 : n)
8. Se rezolvă sistemul inferior triunghiular
L(s : f, s : f ) · Z = A(s : f, f + 1 : n)
9. U (s : f, f + 1 : n) ← Z (o bloc linie din U )

Comentarii. Desigur, ı̂nmulţirile matriceale din instrucţiunile 1.3 şi 1.7 se vor
executa prin apeluri la GEMM, iar rezolvările de sisteme triunghiulare din 1.5 şi 1.8,
prin apeluri la TRSM. Ponderea operaţiilor de nivel 3 este aceeaşi ca pentru algoritmul
2.7, diferenţa fiind că aici se execută mai multe apeluri la GEMM, ceea ce ar putea
mări timpul de execuţie, dar probabil numai ı̂ntr-o măsură nesemnificativă.
Algoritmul de mai sus poate calcula şi o factorizare LU Doolittle dacă ı̂n in-
strucţiunea 1.4 se utilizează algoritmul G ı̂n loc de CROUT. ♦
2.5. REZOLVAREA SISTEMELOR LINIARE 91

2.5 Rezolvarea sistemelor liniare


Teoremele 2.2 şi 2.3 arată că algoritmii GPP şi GPC constituie un bun instrument
pentru rezolvarea sistemului liniar nesingular Ax = b.
Să considerăm următoarea sintaxă neformală pentru utilizarea algoritmilor GPP
şi respectiv GPC:
[M, U, p] = GPP(A)
[M, U, p, q] = GPC(A)
unde M denotă multiplicatorii gaussieni µik , k = 1 : n − 1, i = k + 1 : n, U
este matricea superior triunghiulară produsă de algoritm, iar p şi q sunt vectori de
ı̂ntregi definind permutările de linii şi, respectiv, coloane. Deşi matricele M şi U se
memorează peste A (aşa cum am şi procedat ı̂n GPP şi GPC), vom utiliza sintaxa
de mai sus pentru claritate.
Rezolvarea sistemelor utilizând GPP. Considerăm sistemul liniar Ax = b,
cu A nesingulară şi utilizăm GPP pentru triangularizarea matricei A conform
relaţiei (2.14). Doarece toate matricele Mk şi Pk sunt nesingulare, sistemul Ax = b
este echivalent (are aceeaşi soluţie) cu sistemul

Mn−1 Pn−1 . . . M1 P1 Ax = Mn−1 Pn−1 . . . M1 P1 b. (2.37)

În consecinţă, (2.37) se scrie ı̂n forma

U x = d,

unde matricea superior triunghiulară U se află ı̂n A, iar vectorul

d = Mn−1 Pn−1 . . . M1 P1 b, (2.38)

se poate calcula pe loc ı̂n b, utilizând următoarea schemă de calcul:

b 1. Pentru k = 1 : n − 1
1. b ← Pk b
2. b ← Mk b

În definitiv, soluţia x a sistemului Ax = b se obţine rezolvând (pe loc ı̂n b) sis-
temul superior triunghiular U x = b. Evident, ı̂n acest scop se utilizează algoritmul
UTRIS, cu sintaxa
x = UTRIS(U, b).

Pentru detalierea schemei facem apel la propoziţiile 2.1 şi 2.2. Se obţine algo-
ritmul de mai jos.

Algoritmul 2.9 (S GPP – Calculul soluţiei unui sistem liniar uti-


lizând GPP) (Se dau A ∈ Rn×n nesingulară şi b ∈ Rn . Se calculează
soluţia x ∈ Rn a sistemului liniar Ax = b, utilizând procedura de elimi-
nare gaussiană cu pivotare parţială.)
92 CAPITOLUL 2. REZOLVAREA SISTEMELOR DE ECUAŢII LINIARE

1. [M, U, p] = GPP(A)
2. Pentru k = 1 : n − 1
1. bk ↔ bp(k)
2. Pentru i = k + 1 : n
1. bi ← bi − µik bk
3. x = UTRIS(U, b)

Comentarii. Numărul de operaţii este:


n−1
X 2n3 2n3
NS GPP = NGPP + 2(n − k) + NUTRIS ≈ + n2 + n2 ≈ ≈ NGPP ,
3 3
k=1

şi deci principalul efort constă ı̂n triangularizarea matricei A. Evident, memoria
necesară este MS GPP ≈ n2 . ♦
Rezolvarea sistemelor utilizând GPC. Alternativ, dar mai costisitor, putem
utiliza GPC, vezi (2.16); ı̂n acest caz, sistemul Ax = b este echivalent cu

Mn−1 Pn−1 . . . M1 P1 AQ1 . . . Qn−1 Qn−1 . . . Q1 x = Mn−1 Pn−1 . . . M1 P1 b. (2.39)

Notând
Qn−1 . . . Q1 x = y, (2.40)
din (2.16) rezultă că vectorul y poate fi calculat prin rezolvarea sistemului superior
triunghiular
U y = d, (2.41)
unde d este vectorul dat de (2.38). În final, din (2.40), şi ştiind că Q−1
k = Qk ,
obţinem
x = Q1 Q2 . . . Qn−1 y. (2.42)
Din relaţiile (2.38)–(2.42), rezultă algoritmul următor.

Algoritmul 2.10 (S GPC – Calculul soluţiei unui sistem liniar


utilizând GPC) (Se dau A ∈ Rn×n nesingulară şi b ∈ Rn . Se cal-
culează soluţia x ∈ Rn a sistemului liniar Ax = b, utilizând procedura
de eliminare gaussiană cu pivotare completă.)
1. [M, U, p, q] = GPC(A)
2. Pentru k = 1 : n − 1
1. bk ↔ bp(k)
2. Pentru i = k + 1 : n
1. bi ← bi − µik bk
3. x = UTRIS(U, b)
4. Pentru k = n − 1 : −1 : 1
1. xk ↔ xq(k)

Comentarii. Complexitatea acestui algoritm este asimptotic aceeaşi cu cea a


algoritmului GPC. ♦
2.6. CALCULUL INVERSEI ŞI AL DETERMINANTULUI 93

Observaţia 2.2 Eliminarea gaussiană, prezentată aici ı̂ntr-un mod sistematic,


este binecunoscuta metodă de calcul manual prin reducere şi substituţie. Pivotarea
pe linii corespunde unei reordonări a ecuaţiilor ı̂n (2.1), iar pivotarea pe coloane
corespunde unei reordonări a componentelor necunoscutei x. Subliniem că această
metodă este cea mai eficientă procedură de rezolvare a sistemelor de ecuaţii liniare
nesingulare de formă generală. Stabilitatea numerică a acestor algoritmi va fi dis-
cutată ulterior. ♦

Este clar că sistemul Ax = b se poate rezolva şi recurgând explicit la factorizarea
LU a matricei A. Presupunând, pentru simplitate, că nu a fost utilizată pivotarea,
factorizarea este A = LU . Avem LU x = b, sau Ly = b, unde am notat U x = y.
Prin urmare, soluţia sistemului poate fi găsită după următoarea schemă:

Ax = b 1. A = LU (calculează factorizarea LU)


2. Se rezolvă sistemul inferior triunghiular Ly = b
3. Se rezolvă sistemul superior triunghiular U x = y

Efortul de calcul este acelaşi ca ı̂n eliminarea gaussiană şi partea sa cea mai
importantă se consumă ı̂n procesul de factorizare.
Dacă sistemul liniar are parte dreaptă multiplă, adică este de forma AX = B
cu B ∈ Rn×p , p > 1, atunci X va rezulta de aceeaşi dimensiune; sistemul AX = B
poate fi redus la p sisteme cu parte dreaptă simplă, Axj = bj , j = 1 : p, unde
vectorii bj şi xj sunt coloanele j din B, respectiv X. Utilizarea naivă de p ori a
algoritmului S GPP ar conduce la un efort de calcul de pn3 /3 flopi, inacceptabil
de mare. Dar, deoarece A este aceeaşi pentru toate cele p sisteme, factorizarea LU
sau, ı̂n general, triangularizarea matricei A, se efectuează o singură dată, rămânând
apoi de rezolvat doar sisteme triunghiulare. Ideea algoritmului, ı̂n cazul factorizării
LU, este următoarea:

AX = B 1. A = LU (calculează factorizarea LU)


2. Pentru j = 1 : p
1. Se rezolvă sistemul inferior triunghiular Ly = bj
2. Se rezolvă sistemul superior triunghiular U xj = y

Numărul de operaţii va de numai aproximativ 2n3 /3 + 2pn2 flopi, menţinându-


se complexitatea O(n3 ). Desigur, ı̂n practică este recomandat a se folosi pivotarea,
efectuând o factorizare LU de forma P A = LU sau apelând algoritmul GPP.
Modificarea corespunzătoare a schemelor de calcul prezentate mai sus este propusă
cititorului (vezi problema 2.15).

2.6 Calculul inversei şi al determinantului


unei matrice
Grupăm ı̂n această secţiune două probleme care au ı̂n comun metoda de rezolvare
utilizată — eliminarea gaussiană, precum şi recomandarea de a calcula inversa sau
determinantul unei matrice doar atunci când acestea se doresc explicit. Repetăm
94 CAPITOLUL 2. REZOLVAREA SISTEMELOR DE ECUAŢII LINIARE

U U −1
A← ⇒ A←
M M

Fig. 2.6: Memorarea datelor ı̂n inversarea matriceală

că, de exemplu, inversa nu se calculează atunci când se rezolvă sisteme liniare, după
cum nu se calculează determinantul pentru a testa nesingularitatea unei matrice.

2.6.1 Calculul inversei unei matrice


Dacă A ∈ Rn×n este nesingulară, atunci procedura de eliminare gaussiană cu pi-
votare parţială se termină cu succes şi produce o matrice superior triunghiulară
nesingulară U astfel ı̂ncât

Mn−1 Pn−1 . . . M1 P1 A = U, (2.43)

unde Mk sunt matrice ITE şi Pk sunt matrice elementare de permutare. Din (2.43)
rezultă
X ≡ A−1 = U −1 Mn−1 Pn−1 . . . M1 P1 ,
deci inversa matricei A poate fi calculată astfel

A−1 1. [M, U, p] = GPP(A)


2. X = UINV(U )
3. Pentru k = n − 1 : −1 : 1
1. X ← XMk
2. X ← XPk

Ne amintim că ı̂n algoritmul GPP, matricea U şi multiplicatorii gaussieni µik ,
k = 1 : n − 1, i = k + 1 : n, notaţi global cu M ı̂n schema de mai sus, se memorează
peste matricea A ca ı̂n partea stângă a figurii 2.6. În algoritmul UINV, am văzut
că U −1 se poate memora peste U , astfel că, după instrucţiunea 2 a schemei de mai
sus, datele sunt memorate ca ı̂n partea dreaptă a figurii 2.6.
Pornind de la schema precedentă, vom prezenta un algoritm care calculează
inversa matricei A, folosind minimum de memorie. Pentru aceasta, observăm că
primele două instrucţiuni necesită memorie adiţională doar pentru vectorul p ∈
Rn−1 , ı̂n care se memorează permutările de linii din GPP. Analizăm acum bucla
Pentru din instrucţiunea 3. Prima atribuire, X ← XMk , poate fi detaliată utilizând
o partiţionare pe linii a lui X:

xTi Mk = xTi (In − mk eTk ) = xTi − (xTi mk )eTk (2.44)


T
= [xi1 xi2 . . . xi,k−1 xik − xi mk xi,k+1 . . . xin ], i = 1 : n.

Se poate observa că sunt modificate numai elementele de pe coloana k a lui X.


2.6. CALCULUL INVERSEI ŞI AL DETERMINANTULUI 95

(−1)
u1k × ... × × × ... ×
Ū −1 .. ... Ū −1 . ...
. ..
(−1)
ukk × ... × X ← XMk Pk × × ... ×
-
µk+1,k ×
M̄ ... M̄ ...
.. ..
. .
µnk × ... × × × ... ×
k k

Fig. 2.7: Memorarea datelor ı̂n pasul k al inversării matriceale

A doua instrucţiune a buclei Pentru, X ← XPk , interschimbă coloanele k şi ik


(ik ≥ k).
Ţinând cont de toate aceste consideraţii şi de ordinea inversă de calcul a coloa-
nelor, pasul k al buclei Pentru din schema de mai sus, adică X ← XMk Pk , poate fi
descris ca ı̂n figura 2.7, unde Ū −1 şi M̄ reprezintă elementele din U −1 şi, respectiv,
multiplicatorii gaussieni care nu au fost utilizaţi (şi nici modificaţi) ı̂n execuţia buclei
până la pasul curent; elementele modificate (parte a lui X) sunt notate prin ×.
Astfel, singura informaţie care trebuie salvată constă ı̂n multiplicatorii gaussieni
din coloana curentă, µik , i = k + 1 : n, necesari pentru calculul din (2.45).
În acest fel, inversarea matricei A poate fi executată utilizând doar doi vec-
tori suplimentari de lungime (n − 1), anume p pentru memorarea permutărilor şi,
să zicem, g pentru salvarea temporară a multiplicatorilor gaussieni de pe coloana
curentă.
Algoritmul care implementează consideraţiile de mai sus este:

Algoritmul 2.11 (INV GPP – Calculul inversei unei matrice) (Se


dă A ∈ Rn×n nesingulară. Se calculează matricea A−1 peste A. Algo-
ritmul utilizează algoritmii GPP pentru triangularizarea gaussiană şi
UINV pentru inversarea unei matrice superior triunghiulare.)

1. [M, U, p] = GPP(A) % M şi U sunt memorate ı̂n A


2. A ← X = UINV(U ) % doar triunghiul sup. e modificat
3. Pentru k = n − 1 : −1 : 1
1. Pentru i = k + 1 : n
1. gi ← µik % salvează multiplicatorii
2. Pentru i = 1 : k P
n
1. aik ← aik − t=k+1 ait gt % relaţia (2.45), primele k linii
3. Pentru i = k P +1:n
n
1. aik ← − t=k+1 ait gt % relaţia (2.45), celelalte linii
4. Dacă p(k) 6= k atunci
1. Pentru i = 1 : n % interschimbă coloanele k şi p(k)
1. aik ↔ ai,p(k)
96 CAPITOLUL 2. REZOLVAREA SISTEMELOR DE ECUAŢII LINIARE

Comentarii. Numărul de operaţii ı̂n virgulă mobilă este


n−1
X 2n3 n3
NINV GPP = NGPP + NUINV + 2n(n − k) ≈ + + n3 = 2n3
3 3
k=1

şi memoria utilizată MINV GPP = n2 .


Este remarcabil faptul că inversarea matriceală nu este mai complexă (ca număr
de operaţii) decât ı̂nmulţirea de matrice. ♦
O acurateţe mai bună a matricei inverse calculate se poate obţine utilizând
algoritmul GPC ı̂n locul lui GPP. În acest caz,

Mn−1 Pn−1 . . . M1 P1 AQ1 Q2 . . . Qn−1 = U,

şi deci
X ≡ A−1 = Q1 Q2 . . . Qn−1 U −1 Mn−1 Pn−1 . . . M1 P1 .
Scrierea algoritmului corespunzător este lăsată ı̂n sarcina cititorului.
În practică, acurateţea obţinută cu INV GPP este suficient de bună pentru
majoritatea aplicaţiilor.
Observaţia 2.3 Efortul de calcul necesar inversării unei matrice este de aproxi-
mativ trei ori mai mare decât cel pentru rezolvarea unui sistem liniar de aceeaşi
dimensiune. De aceea, de câte ori e posibil, inversarea matriceală trebuie evitată
şi ı̂nlocuită de rezolvarea de sisteme liniare. De exemplu, pentru calculul scalarului
real
α = cT A−1 b,
unde A ∈ Rn×n , b, c ∈ Rn , schema recomandată este

cT A−1 b 1. Se rezolvă sistemul Ax = b % rezultă x = A−1 b


2. α ← cT x

sensibil mai eficientă decât varianta cu inversarea matricei A ♦


Este clar că inversa matricei A se poate calcula şi recurgând explicit la factori-
zarea LU a matricei. Presupunând că A = LU , avem

A−1 = U −1 L−1 ,

iar o procedură de inversare ar putea consta ı̂n:

1. A = LU (se calculează factorizarea LU)


2. U ← X = U −1
3. L ← Y = L−1
3. A−1 ← XY

Numărul de operaţii este tot 2n3 . Desigur, ı̂n practică este indicat a se folosi o
factorizare LU cu pivotare.
2.7. CONDIŢIONAREA SISTEMELOR LINIARE 97

2.6.2 Calculul determinantului


Algoritmii GPP şi GPC sunt utili şi ı̂n calculul determinantului unei matrice.
Amintim că interschimbarea a două linii sau coloane ale unei matrice schimbă
semnul determinantului acesteia, sau, echivalent, dacă P este o permutare elemen-
tară, atunci det(P ) = −1. În plus, matricele ITE Mk , k = 1 : n − 1, din (2.43), au
elementele diagonale egale cu 1 şi deci det(Mk ) = 1. Aşadar
n
Y
det(A) = (−1)s det(U ) = (−1)s uii ,
i=1

unde s ≤ n − 1 este numărul de PE proprii (adică Pk 6= In ) ı̂n (2.43).


Algoritmul corespunzător celor de mai sus este:

Algoritmul 2.12 (DET GPP – Calculul determinantului) (Se dă


A ∈ Rn×n . Se calculează detA, utilizând algoritmul GPP.)
1. [M, U, p] = GPP(A)
2. det ← 1
3. Pentru k = 1 : n
1. det ← det · ukk
4. Pentru k = 1 : n − 1
1. Dacă p(k) 6= k atunci
1. det ← −det

Principalul efort de calcul ı̂n algoritmul de mai sus este efectuat ı̂n execuţia
algoritmului GPP. Desigur, algoritmul GPC poate fi utilizat ı̂n loc de GPP,
obţinându-se, de regulă, o acurateţe superioară a rezultatului. Scrierea algoritmului
corespunzător este propusă cititorului.
Dacă este disponibilă
Qon factorizare
Qn LU a matricei A, atunci det(A) = det(LU ) =
= det(L) · det(U ) = ( i=1 lii ) ( i=1 uii ), ceea ce permite evaluarea imediată a
determinantului.

2.7 Condiţionarea sistemelor liniare


După cum am văzut ı̂n capitolul 0, condiţionarea unei probleme de calcul, ı̂n cazul
nostru rezolvarea sistemului liniar determinat nesingular Ax = b, este crucială ı̂n
aprecierea acurateţii rezultatelor obţinute. Să considerăm o perturbaţie a datelor
de intrare ale sistemului

(A, b) −→ (A + ∆A, b + ∆b) ≡ (Â, b̂),

care va avea ca efect o perturbaţie a soluţiei x

x −→ x + ∆x ≡ x̂, (2.45)

astfel ı̂ncât
(A + ∆A)(x + ∆x) = b + ∆b. (2.46)
98 CAPITOLUL 2. REZOLVAREA SISTEMELOR DE ECUAŢII LINIARE

Considerăm doar perturbaţii mici, respectând k∆Ak ≪ kAk, k∆bk ≪ kbk (unde
k · k este o normă consistentă oarecare), i.e. efectuăm o analiză a sensibilităţii locale
a soluţiei ı̂n raport cu variaţia datelor.

Teorema 2.7 Presupunem că x 6= 0. Eroarea relativă a soluţiei (2.45) a sistemului


perturbat (2.46) este mărginită conform relaţiei
 
k∆xk k∆Ak k∆bk
≤ κ(A) + , (2.47)
kxk kAk kbk
unde
κ(A) = kA−1 k · kAk (2.48)
se numeşte număr de condiţionare (la inversare) al matricei A.

Cu alte cuvinte, erorile relative k∆Ak / kAk şi k∆bk / kbk ale datelor de intrare
pot fi amplificate de κ(A) ori ı̂n soluţie, presupunând că toate calculele se efectuează
exact (deci indiferent de algoritmul folosit).
Demonstraţie. Deoarece Ax = b, din (2.46) rezultă

A · ∆x + ∆A · x + ∆A · ∆x = ∆b.

Neglijând produsul ∆A · ∆x (deoarece perturbaţiile sunt mici), obţinem

∆x ≈ −A−1 · ∆A · x + A−1 · ∆b.

Utilizând o familie consistentă de norme matriceale k · k, din relaţia de mai sus


rezultă
k∆xk ≤ kA−1 k · k∆Ak · kxk + kA−1 k · k∆bk.
Prin urmare, dacă x 6= 0, o limită superioară a erorii relative este dată de
k∆xk k∆Ak k∆bk
≤ kA−1 k · kAk · + kA−1 k · kAk · ≤
kxk kAk kAk · kxk
 
k∆Ak k∆bk
≤ kA−1 k · kAk + ,
kAk kbk

ceea ce demonstrează (2.47). (Am ţinut seama că kbk = kAxk ≤ kAk · kxk.) ♦
Aşadar numărul de condiţionare κ(A) definit ı̂n (2.48) furnizează o măsură a
condiţionării problemei rezolvării unui sistem liniar Ax = b. Un κ(A) mic cores-
punde unei bune condiţionări, adică unei sensibilităţi reduse a soluţiei ı̂n raport cu
perturbaţiile datelor. Vom prezenta ı̂n secţiunea următoare un rezultat care permite
aprecierea mai precisă a condiţionării ı̂n funcţie de valoarea κ(A). Se observă că
doar matricea A determină condiţionarea unui sistem, termenul liber b neavând
nici un rol; de aceea vorbim de ”condiţionarea matricei A” ı̂n loc de ”condiţionarea
sistemului”. Vom ataşa un indice notaţiei κ(A) atunci când vom preciza norma
folosită ı̂n (2.48); de exemplu, κ∞ (A) = kA−1 k∞ · kAk∞ . Între norme echivalente,
alegerea uneia anume pentru evaluarea lui κ(A) nu este relevantă, ordinul de mărime
al rezultatului fiind acelaşi; de obicei, dintre normele p se alege κ∞ (A) pentru
2.7. CONDIŢIONAREA SISTEMELOR LINIARE 99

uşurinţa calculului (vezi mai jos). Să notăm că κp (A) ≥ 1 şi κ2 (A) = 1 dacă şi
numai dacă A este ortogonală (demonstraţi !).
Este intuitiv faptul că un sistem este cu atât mai rău condiţionat cu cât matricea
A este mai ”aproape” de o matrice singulară. Trebuie subliniat că măsura acestei
apropieri este dată de numărul de condiţionare şi nu de determinantul matricei A.
Exemplul 2.1 Să considerăm matricele D, T ∈ Rn×n
   
0.1 1 −1 . . . −1

 0.1 


 1 . . . −1 
D= ..  , T =  .. ..  .
 .   . . 
0.1 1
Fiind diagonală, este evident că D este bine condiţionată; se verifică imediat că
κ(D) = 1, ı̂n schimb det(D) = 10−n , adică, dacă de exemplu n = 20, o va-
loare foarte mică. Pentru matricea triunghiulară T situaţia este contrară: deşi
det(A) = 1, matricea este rău condiţionată pentru că κ∞ (T ) = n2n−1 (U = T −1
este inferior triunghiulară unitate cu elementele uij = 2j−i−1 , pentru j > i, deci
kT −1 k∞ = 1 + 2 + 22 + . . . + 2n−2 = 2n−1 − 1. Pe de altă parte, kT k∞ = n). ♦
Un mod uzual dar naiv de verificare a posteriori a ”calităţii” soluţiei calculate
x̂ a unui sistem liniar Ax = b constă ı̂n a calcula norma reziduului r = b − Ax̂, i.e.
krk = kb − Ax̂k
şi de a conchide că dacă krk este ”mic”, atunci x̂ este o soluţie precisă. De fapt,
această concluzie, corectă pentru matricele bine condiţionate, poate să nu fie (şi
de cele mai multe ori nu este) adevărată dacă matricea A este rău condiţionată.
Într-adevăr, soluţia exactă este x = A−1 b, astfel că avem
x − x̂ = A−1 b − A−1 (b − r) = A−1 r,
deci eroarea relativă este mărginită conform relaţiei
kx − x̂k kA−1 rk kA−1 k · krk krk krk
= ≤ ≤ κ(A) ≤ κ(A) ,
kxk kA−1 bk kA−1 rk kAk · kA−1 bk kbk
pentru orice normă consistentă k · k. Astfel, testul ”r este mic” e valid doar dacă
matricea A este bine condiţionată.
Exemplul 2.2 Matricele Hilbert Hn ∈ Rn×n , definite prin hij = 1/(i + j − 1) sunt
rău condiţionate, κ(Hn ) crescând foarte repede cu n. De exemplu, κ∞ (H3 ) ≈ 748.
Dacă luăm
     
8.27 11.646 . . . 0.0128
x =  4.60  , b =  6.475 . . .  , d =  −0.0714  , x̂ = x + d,
3.23 4.552 . . . 0.0689
atunci x este soluţia sistemului H3 x = b (ı̂n acest exemplu am ales x şi am calculat
b). Pentru soluţia ”aproximativă” x̂ avem
kb − H3 x̂k∞ kx − x̂k∞
≈ 1.7 · 10−5 , ≈ 8.6 · 10−3 .
kbk∞ kxk∞
100 CAPITOLUL 2. REZOLVAREA SISTEMELOR DE ECUAŢII LINIARE

Deci, deşi reziduul kb − H3 x̂k este relativ mic faţă de b, eroarea relativă a soluţiei
aproximative x̂ este mult mai mare, de aproximativ 510 ori, i.e. cu un factor de
mărime de ordinul lui κ∞ (H3 ). ♦

Estimarea numărului de condiţionare


Un algoritm bun de calcul al soluţiei sistemului Ax = b indică şi cât de sigură este
soluţia obţinută, ı̂n condiţiile perturbării inerente a datelor de intrare. Numărul
de condiţionare κ∞ (A) (se alege norma ∞ doar pentru uşurinţa calculului) poate
furniza informaţii sigure asupra acurateţii soluţiei. În continuare, presupunem că
rezolvarea sistemului se face prin intermediul unei factorizări cu pivotare P A = LU ,
de exemplu cu algoritmul GPP modificat după cum este sugerat ı̂n secţiunea 2.4.1,
dar concluziile pot fi extinse şi ı̂n celelalte cazuri.
Calculul exact al κ∞ (A), utilizând relaţia de definiţie, (2.48) este prea costisitor.
Dacă kAk∞ se obţine simplu ı̂n O(n2 ) flopi conform (1.28), a calcula kA−1 k∞
implică o inversare matriceală care necesită de trei ori mai multe operaţii decât
rezolvarea sistemului, adică inacceptabil de mult. Deoarece κ∞ (A) indică numai o
limită superioară, şi nu valoarea exactă a amplificării erorii datelor de intrare, ne
punem problema estimării numărului de condiţionare cu doar O(n2 ) operaţii.
Cline et al. [?] au propus o metodă eficientă prin care se obţin estimaţii de bună
calitate ale normei kA−1 k∞ . Metoda se bazează pe implicaţia

kA−1 f k∞ kyk∞
Ay = d ⇒ kA−1 k∞ = sup ≥ .
f 6=0 kf k∞ kdk∞

Problema este de a găsi un vector d care conduce la un y suficient de mare ı̂n normă.
Considerăm cazul simplu ı̂n care A este inferior triunghiulară. Deoarece sistemul
Ay = d se rezolvă prin substituţie ı̂nainte (algoritmul LTRIS), elementele lui d nu
trebuie precizate toate de la ı̂nceput ci se pot alege convenabil pe măsură ce sistemul
este rezolvat. O primă idee constă ı̂n a considera di ∈ {1, −1} (deci kdk∞ = 1) şi
de a alege ı̂n expresia
i−1
X
yi = (di − aij yj )/aii
j=1

acea valoare di care produce cel mai mare |yi |. Schema de calcul poate fi rezumată
astfel:

ν ≈ kA−1 k∞ 1. Pentru i = 1 : n
Pi−1
1. ζ ← j=1 aij yj
2. Dacă ζ ≥ 0 atunci di ← −1
altfel di ← 1
3. yi ← (di − ζ)/aii
2. ν ← kyk∞

Sunt necesari aproximativ n2 flopi, la fel ca pentru LTRIS.


O metodă mai eficientă constă ı̂n a urmări, la pasul i al schemei de mai
Psus, majo-
i
rarea ı̂n modul nu numai a lui yi , ci şi a tuturor sumelor parţiale zki = j=1 akj yj ,
2.7. CONDIŢIONAREA SISTEMELOR LINIARE 101

cu k > i, contribuind astfel la majorarea tuturor yk , şi deci a lui kyk∞ . Putem
realiza aceasta alegând valoarea di = ±1 care corespunde celei mai mari dintre
sumele
Xn
s+ = |yi+ | + +
|zki |,
k=i+1
Xn
s− = |yi− | + −
|zki |,
k=i+1

unde elementele yi+ , yi− corespund alegerii di = 1, respectiv di = −1, iar sumele
± Pi−1
parţiale au valorile zki = j=1 akj yj + aki yi± . Algoritmul rezultat pentru estimarea
numărului de condiţionare κ∞ (A) = kAk∞ kA−1 k∞ este prezentat mai jos; pentru
k fixat, sumele zki de mai sus se memorează ı̂ntr-un scalar notat ζk .
Algoritmul 2.13 (COND – Estimarea numărului de condiţionare)
(Se dă A ∈ Rn×n , inferior triunghiulară nesingulară. Se calculează o
estimare κ̄ a lui κ∞ (A).)
1. Pentru k = 1 : n
1. ζk ← 0
2. Pentru i = 1 : n
1. yi+ ← (1 − ζi )/aii
2. yi− ← (−1 − ζi )/aii
3. Pentru k = i + 1 : n
1. ζk+ ← ζk + aki yi+
2. ζk− ← ζk P
+ aki yi−
n
4. s ← |yi | + Pk=i+1 |ζk+ |
+ +
n
5. s− ← |yi | + k=i+1 |ζk− |

6. Dacă s+ ≥ s− atunci
1. yi ← yi+
2. Pentru k = i + 1 : n
1. ζk ← ζk+
altfel
3. yi ← yi−
4. Pentru k = i + 1 : n
1. ζk ← ζk−
3. κ̄ ← kyk∞ kAk∞
Execuţia algoritmului necesită aproximativ 3n2 flopi.
Considerăm acum cazul general al unei matrice A ∈ Rn×n a cărei factorizare
P A = LU este cunoscută. Numărul de condiţionare κ∞ (A) se poate estima uti-
lizând următoarea schemă de calcul, a cărei justificare depăşeşte cadrul acestei
lucrări.
κ̄ ≈ κ∞ (A) 1. Se aplică algoritmul 2.13 pentru a obţine o soluţie de
normă cât mai mare a sistemului U T y = d
2. Se rezolvă sistemele triunghiulare LT r = y, Lv = P r,
Uw = v
3. κ̄ ← kAk∞ kwk∞ / krk∞
102 CAPITOLUL 2. REZOLVAREA SISTEMELOR DE ECUAŢII LINIARE

Algoritmul necesită aproximativ 7n2 flopi şi s-a dovedit excelent ı̂n practică,
valorile obţinute fiind de regulă de cel mult 2-5 ori mai mici decât κ∞ (A), ceea ce
constituie o aproximaţie acceptabilă, mai ales ı̂n situaţiile critice când κ∞ (A) are
valori foarte mari.

2.8 Stabilitatea numerică a algoritmilor de


eliminare gaussiană
Vom prezenta ı̂n această secţiune caracterizări ale stabilităţii numerice a algoritmilor
de eliminare gaussiană (G, GPP, GPC), precum şi modalităţi de ı̂mbunătăţire a
rezultatelor numerice obţinute.
Un algoritm de rezolvare a sistemului liniar determinat Ax = b produce o soluţie
calculată x̂ afectată de erori numerice. Vectorul x̂ este soluţia aceluiaşi sistem cu
datele perturbate, i.e.
(A + H)x̂ = b. (2.49)
Vom evalua ”mărimea” matricei H pentru algoritmii menţionaţi, adică vom prezenta
rezultate ale analizei inverse a erorilor. Evaluarea unor margini superioare pentru
kHk este o sarcină dificilă, iar marginile au de obicei expresii complicate, de aceea
nu va fi prezentată nici o demonstraţie. În plus, aceste margini sunt mult mai mari
decât erorile numerice ı̂ntâlnite ı̂n practică; ele au rolul de a preciza cazurile când
erorile pot fi importante, nu de a cuantifica cu precizie aceste erori.
Nu trebuie uitat nici o clipă că, chiar ı̂n prezenţa unor valori ale kHk foarte
mici, acurateţea soluţiei este asigurată doar dacă matricea A este bine condiţionată.
Altfel, kHk / kAk mic poate implica (kx̂ − xk) / kxk mare, indiferent de algoritmul
utilizat.
În contextul teoremei 2.1, notăm cu Âk şi M̂k matricele Ak , respectiv Mk , calcu-
late efectiv de algoritmul de eliminare gaussiană G. Introducem ı̂n plus următoarele
notaţii:
(k)
βk = max |âij |, k ∈ 1 : n,
i,j

maxk=1:n βk
γ= .
β1
Numărul real γ este numit factor de creştere, deoarece arată cât de mult cresc
valorile elementelor matricei A ı̂n cursul transformărilor efectuate de algoritmul G.

Teorema 2.8 Matricele M̂1 , M̂2 , . . . , M̂n−1 , Ân = Û calculate ı̂n algoritmul G
satisfac
M̂1−1 . . . M̂n−1
−1
Û = A + E, cu |eij | ≤ nτ β1 γεM , (2.50)
cu τ o constantă de ordinul unităţii, independentă de A.

Deoarece procedura de rezolvare a sistemelor triunghiulare prin substituţie este


numeric stabilă, majoritatea erorile numerice ı̂n rezolvarea unui sistem Ax = b apar
la triangularizarea matricei A. De aceea, matricea H din (2.49) satisface margini
superioare la nivel de element asemănătoare cu (2.50).
2.8. STABILITATE NUMERICĂ 103

Se observă că valoarea marginii din (2.50) este determinată ı̂n special de factorul
de creştere γ. Pentru algoritmii GPP şi GPC sunt valabile margini identice cu
(2.50), dar cu valori maxime diferite pentru γ.

• În algoritmul G, factorul de creştere γ poate avea valori oricât de mari; aşadar
acest algoritm este numeric instabil.
• Introducerea pivotării parţiale conduce la γ ≤ 2n−1 . Deşi teoretic această
margine este mare chiar pentru valori modeste ale lui n, totuşi algoritmul
GPP produce rezultate precise ı̂n marea majoritate a cazurilor uzuale (unele
excepţii sunt prezentate ı̂n [?]); marginea este atinsă numai pentru anumite
matrice ”patologice”, special construite ı̂n acest scop; un exemplu este prezen-
tat ı̂n problema 2.24. De aceea, GPP poate fi considerat practic stabil.
• În cazul pivotării complete avem γ ≤ [n · 21 · 31/2 · 41/3 · . . . · n1/(n−1) ]1/2 .
Această margine creşte lent cu n şi practic se poate considera γ ≤ n, ceea ce
ı̂nseamnă că algoritmul GPC este necondiţionat stabil.

Combinând constatările de mai sus cu efortul de calcul cerut de algoritmii


studiaţi, putem conchide că algoritmul GPP este cel mai recomandat pentru re-
zolvarea sistemelor liniare. În cazuri speciale, când se doreşte o siguranţă deosebită
a rezultatului, se pot utiliza algoritmul GPC sau metodele prezentate ı̂n continuare.
Pentru că marginea superioară (2.50) e relativ complicată, să deducem un rezul-
tat euristic, şi deci aproximativ, dar cu aplicaţii practice clare şi imediate. Dacă ı̂n
rezolvarea sistemului Ax = b se foloseşte o strategie de pivotare, atunci γ este sufi-
cient de mic; pe de altă parte, β1 ≤ kAk∞ , dar de acelaşi ordin de mărime (ı̂n orice
caz, nβ1 ≥ kAk∞ ). Atunci (2.50) este esenţial echivalentă cu afirmaţia grosieră

kEk∞ ≈ kHk∞ ≈ kAk∞ εM . (2.51)

Combinând (2.51) cu (2.47) (ı̂n care ∆A = H, ∆b = 0, ∆x = x̂ − x), se obţine


aproximaţia
kx̂ − xk∞
≈ κ∞ (A) · εM , (2.52)
kxk∞
care conduce la următoarea regulă de apreciere a acurateţii rezolvării unui sistem:
Dacă εM ≈ 10−t şi κ∞ (A) ≈ 10q , atunci soluţia calculată are aproximativ t − q
cifre zecimale corecte (restul de q fiind nesigure).
Altfel spus, un număr de condiţionare de ordinul 10q antrenează pierderea a q
cifre semnificative ı̂n soluţie. Această constatare subliniază importanţa cunoaşterii
unei evaluări a lui κ(A) pentru aprecierea acurateţii soluţiei calculate.

2.8.1 Scalarea sistemelor liniare


Fie D1 , D2 ∈ Rn×n două matrice diagonale nesingulare ale căror elemente sunt pu-
teri ale bazei de numeraţie β a formatului virgulă mobilă utilizat. Evident, sistemul
Ax = b este echivalent cu sistemul

D1 AD2 y = D1 b, unde x = D2 y. (2.53)


104 CAPITOLUL 2. REZOLVAREA SISTEMELOR DE ECUAŢII LINIARE

Transformarea A ← D1 AD2 , b ← D1 b, prin care sistemul Ax = b se aduce la forma


(2.53) se numeşte scalare.
Astfel definită, scalarea nu introduce erori numerice, iar costul ei este de O(n2 )
flopi, deci convenabil. Sunt mai multe considerente care sugerează ideea de scalare
şi strategia de alegere a factorilor de scală D1 , D2 .
Dacă elementele din A sunt de mărimi foarte diferite, atunci, marginea din (2.50)
fiind aceeaşi pentru toate elementele, e posibil ca erorile relative asociate elementelor
aij mici (ı̂n modul) să fie foarte mari. De aceea, un obiectiv al scalării poate fi acela
de a echilibra valorile elementelor matricei A.
Pe de altă parte, (2.52) sugerează să alegem D1 , D2 astfel ı̂ncât să minimizăm
κ∞ (D1 AD2 ). Acest obiectiv este dificil de realizat ı̂n general şi imposibil cu restricţia
de cost impusă; de altfel, nu are sens a optimiza pornind de la o relaţie aproximativă.
Ţinând seama de cele spuse mai sus precum şi de cerinţa evidentă ca D1 şi D2
să fie calculate cu O(n2 ) operaţii, s-au impus câteva modalităţi de scalare:

• scalare pe linii: D2 = I şi D1 se alege astfel ı̂ncât liniile matricei D1 A să aibă
aproximativ aceeaşi normă ∞.

• echilibrare linii-coloane: D1 şi D2 se aleg astfel ı̂ncât fiecare linie şi coloană
din D1 AD2 să aibă norma ∞ cuprinsă ı̂n intervalul [1/β, 1] (vezi problema
2.26).

De obicei, soluţia calculată a sistemului (2.53) astfel scalat este mai precisă decât
soluţia calculată a sistemului iniţial, dar ı̂n general nu există nici o garanţie ı̂n acest
sens, de aceea scalarea nu trebuie privită ca panaceu universal ci aplicată ı̂n funcţie
de problemă.

2.8.2 Rafinarea iterativă a soluţiei calculate


O altă metodă de ı̂mbunătăţire a acurateţii soluţiei calculate x̂ a sistemului Ax = b
este prezentată ı̂n continuare. Presupunem că sistemul a fost rezolvat folosind un
algoritm cu pivotare parţială şi deci că o factorizare P A = LU este disponibilă.
Fie r = b − Ax̂ reziduul corespunzător lui x̂. Dacă notăm e = x − x̂, atunci

Ae = Ax − Ax̂ = b − (b − r) = r. (2.54)

Această egalitate sugerează să rezolvăm sistemul Ae = r, obţinând soluţia ê, şi apoi
să calculăm o nouă soluţie
x̂nou = x̂ + ê, (2.55)
sperând că aceasta este mai precisă decât x̂ (dacă nu ar exista erori numerice ı̂n
rezolvarea sistemului Ae = r, atunci ê = e, deci x̂nou = x). Procedura poate fi
repetată pentru noua soluţie, până la atingerea unei acurateţi mulţumitoare sau
până când nu se mai obţine o ı̂mbunătăţire a acesteia. (Nu discutăm aici modali-
tatea tehnică de estimare a acurateţii soluţiei, care depăşeşte nivelul acestei lucrări.)
Aparent, aşa cum rezultă din (2.52), sistemele Ax = b şi Ae = r se rezolvă
cu acurateţi asemănătoare, ı̂n esenţă dictate de κ∞ (A), iar adunarea soluţiilor lor
ı̂n (2.55) nu ar produce un rezultat mai precis. Se poate ı̂nsă demonstra că, dacă
2.9. SISTEME BANDĂ 105

κ∞ (A)εM ≪ 1, atunci schema de rafinare iterativă sugerată mai sus conduce (de
obicei ı̂ntr-un număr foarte mic de iteraţii) la soluţia aproximativă x̂ satisfăcând

kx̂ − xk∞
≤ 2n · cond(A, x) · εM , (2.56)
kxk∞
unde
def k |A−1 | · |A| · |x| k∞
cond(A, x) = , (2.57)
kxk∞
iar |A| este matricea cu elementele |aij |.
Comparând acum (2.52) şi (2.56) constatăm că ı̂n general rafinarea iterativă
conduce ı̂ntr-adevăr la ı̂mbunătăţirea acurateţii soluţiei calculate deoarece

cond(A, x) ≤ κ∞ (A). (2.58)

(Pentru demonstrarea acestei inegalităţi vezi problema 2.25.) Creşterea acurateţii


soluţiei este cu atât mai mare cu cât raportul dintre cei doi termeni ai inegalităţii
(2.58) este mai mic.
Rafinarea iterativă dă rezultate şi mai bune dacă se calculează reziduul r ı̂n
dublă precizie (utilizând un format virgulă mobilă cu mai multe cifre semnificative
decât cel utilizat la rezolvarea Ax = b). Mai precis, dacă κ∞ (A)εM ≪ 1, atunci prin
rafinare se obţine kx̂ − xk∞ / kxk∞ ≈ εM , adică cel mai precis rezultat la care se
poate ajunge ı̂n formatul virgulă mobilă de lucru. Aceasta concluzie este intuitivă,
deoarece ı̂n (2.55) ê este calculat mai precis decât x̂.
Pentru a rezuma, o iteraţie a schemei de rafinare are forma (beneficiind de
factorizarea P A = LU disponibilă)

xnou 1. Se calculează r = b − Ax (eventual ı̂n dublă precizie)


2. Se rezolvă sistemele triunghiulare Ly = P r, U z = y
3. x ← x + z

Numărul de operaţii este de O(n2 ), deci câteva iteraţii au un cost semnificativ


mai mic decât cel al eliminării gaussiene. Există şi dezavantaje: trebuie păstrată o
copie a matricei A pentru calculul reziduului, iar implementarea calculelor ı̂n dublă
precizie poate fi dependentă de maşină (deşi standardul IEEE este respectat pe ma-
joritatea calculatoarelor); de aceea, ı̂n bibliotecile actuale, de exemplu LAPACK, se
utilizează precizia de lucru. O analiză detaliată a erorilor pentru rafinarea iterativă
poate fi găsită ı̂n [IX].

2.9 Sisteme bandă


În această secţiune vom considera sisteme Ax = b, ı̂n care A ∈ Rn×n este o matrice
bandă nesingulară, de lăţime inferioară r şi superioară q. Astfel de matrice apar
deseori ı̂n practică, de exemplu la soluţionarea numerică a ecuaţiilor cu derivate
parţiale. Vom vedea ı̂n continuare că aplicarea adecvată a procedurii de eliminare
gaussiană poate aduce o mare reducere a numărului de operaţii, faţă de cazul ma-
tricelor oarecare.
106 CAPITOLUL 2. REZOLVAREA SISTEMELOR DE ECUAŢII LINIARE

     
× × × × × ×
× × ×  0 ∗ ×   × × 
  k=1   k=2   k=3
× × × ×  ∗ × ×  0 ∗ × 
 −→  0  −→   −→ . . .
 

 × × × ×   ×× × ×   0 ∗ × ×
× × × × × × × ××

Fig. 2.8: Eliminarea gaussiană aplicată unei matrice bandă de lăţime inferioară 2
şi superioară 1. S-au notat cu ∗ elementele modificate la pasul respectiv, cu 0 cele
anulate, iar cu × cele rămase nemodificate

Teorema 2.9 Dacă eliminarea gaussiană (algoritmul G) este aplicată matricei


A ∈ Rn×n bandă de lăţime inferioară r şi superioară q, nesingulară şi cu A[k] nesin-
gulare, k = 1 : n − 1, atunci ı̂n egalitatea (2.10) (Mn−1 . . . M1 A = U ), matricea U
este superior triunghiulară bandă de lăţime q, iar matricele ELT Mk = I − mk eTk
sunt caracterizate de µik = 0, pentru i > k + r (altfel spus, ı̂n factorizarea LU
produsă de algoritmul G, matricea L este inferior triunghiulară bandă de lăţime r).

Pe scurt, ı̂n procedura de eliminare gaussiană fără pivotare, structura bandă a


matricei A este ereditară, i.e. se transmite ca atare factorilor L, U furnizaţi de
procedură.
Demonstraţie. Figura 2.8 ilustrează procesul de eliminare gaussiană. Deoarece
µi1 = ai1 /a11 , rezultă µi1 = 0 pentru i > 1 + r. În atribuirea A ← M1 A scrisă
detaliat
aij ← aij − µi1 a1j , pentru i, j = 2 : n,
se observă că aij rămâne nemodificat pentru i > 1+r (deoarece µi1 = 0) şi j > 1+q
(deoarece a1j = 0). Aşadar, se modifică doar blocul A(2 : 1 + r, 1 : 1 + q) (ı̂n prima
coloană sunt introduse zerouri subdiagonale) şi matricea A, inferior triunghiulară
ı̂n prima coloană, rămâne bandă de lăţime inferioară r şi superioară q.
Procesul continuă analog pentru k = 2, . . . , n− 1, la fiecare pas k modificându-se
blocul A(k + 1 : k + r, k : k + q), ceea ce conduce la structura bandă a matricei
U , iar blocul (n − k) × (n − k) dreapta jos păstrându-şi structura bandă, ceea ce
asigură forma enunţată a matricelor ITE. ♦
Algoritmul rezultat este prezentat ı̂n continuare.

Algoritmul 2.14 (Gb – Eliminare gaussiană pentru matrice bandă)


(Se dă A ∈ Rn×n , bandă de lăţime inferioară r şi superioară q, cu A[k]
nesingulare, k = 1 : n − 1. Se calculează matricea superior triunghiulară
U şi matricele ITE M1 , . . . , Mn−1 astfel ı̂ncât U = Mn−1 Mn−2 . . . M1 A.)

1. Pentru k = 1 : n − 1
1. Pentru i = k + 1 : min(k + r, n)
1. aik ← µik = aik /akk
2. Pentru i = k + 1 : min(k + r, n)
2.9. SISTEME BANDĂ 107

1. Pentru j = k + 1 : min(k + q, n)
1. aij ← aij − µik akj

Lăsăm cititorului calculul unei formule pentru numărul de operaţii; dacă r ≪ n


sau q ≪ n, acesta este ≪ 2n3 /3.
Triangularizarea matricei A conform algoritmului de mai sus permite reducerea
sistemului Ax = b la sistemul echivalent superior triunghiular U x = d, cu U bandă
de lăţime superioară q. Adaptarea UTRIS la acest caz este imediată, elementele
xi calculându-se prin substituţie ı̂napoi cu formula
 
min(i+q,n)
X
xi = di − uij xj  /uii .
j=i+1

Vom vedea acum ce efect are pivotarea asupra structurii bandă.

Teorema 2.10 Dacă eliminarea gaussiană cu pivotare parţială (algoritmul GPP)


este aplicată matricei A ∈ Rn×n bandă de lăţime inferioară r şi superioară q, nesin-
gulară, atunci ı̂n egalitatea (2.14) (Mn−1 Pn−1 . . . M1 P1 A = U ), matricea U este
superior triunghiulară bandă de lăţime q + r, iar matricele ITE Mk = I − mk eTk
sunt caracterizate de µik = 0, pentru i > k + r.

Demonstraţia va fi doar schiţată, procesul de eliminare fiind ilustrat cu ajutorul


figurii 2.9. Primul pivot este găsit pe linia i1 ∈ 1 : 1 + r, restul elementelor din
prima coloană fiind nule. Permutarea liniilor 1 şi i1 (operaţia A ← P1 A) va face ca
pe prima linie elementele nenule să fie ı̂n coloanele 1 : 1+q +r, ı̂n cel mai defavorabil
caz (i1 = 1 + r). Evident, µi1 = ai1 /a11 , deci µi1 = 0 pentru i > 1 + r. În atribuirea
A ← M1 A scrisă detaliat

aij ← aij − µi1 a1j , pentru i, j = 2 : n,

aij rămâne nemodificat pentru i > 1 + r (deoarece µi1 = 0) şi j > 1 + q + r


(deoarece a1j = 0). Aşadar se modifică doar blocul A(2 : 1 + r, 1 : 1 + q + r).
Matricea A rămâne bandă de lăţime inferioară r; ı̂n prima linie, A este bandă de
lăţime superioară q + r, iar ı̂n liniile 1 + r : n bandă de lăţime superioară q.
Procesul continuă asemănător pentru k = 2, . . . , n − 1; după A ← Pk A, ı̂n linia
k rezultă akj = 0 pentru j > k + q + r; operaţia A ← Mk A modifică doar blocul
A(k + 1 : k + r, k : k + r + q). În final, U şi matricele ITE Mk au structura prezentată
ı̂n enunţ. ♦
Observăm că pivotarea parţială conduce la o matrice U superior triunghiulară
bandă de lăţime mai mare decât cea a matricei iniţiale A. Mai mult, ı̂n factorizarea
rezultată P A = LU , matricea inferior triunghiulară L nu mai este bandă, ca ı̂n
lipsa pivotării; ţinând seama de teorema 2.6, deoarece o coloană a matricei L este
o permutare a vectorului mk (ce defineşte matricea ITE Mk = I − mk eTk ), coloana
respectivă are doar r elemente nediagonale nenule, dar ı̂n poziţii ce diferă de la caz
la caz.
Prezentăm mai jos algoritmul sugerat de demonstraţia teoremei 2.10.
108 CAPITOLUL 2. REZOLVAREA SISTEMELOR DE ECUAŢII LINIARE

     
× × ∗ ∗ ∗ ∗ ×× × ×
× × ×  × × ×  0 ∗ ∗ ∗ 
     
× × ××  P1  ∗ ∗
  M1  0 ∗ ∗ ∗
 
  −→  −→ 

 × ×× ×  
 × × ×× 
 
 × × × × 
 
 ×× × ×   × ×× ×   × × × ×
× × × ×× × × × ×
   
× ×× × × × ××

 ∗ ∗ ∗ ∗ 

 × ×× × 
 

P2  × × ×  M2  0 ∗ ∗ ∗  P3
−→   −→ 
   −→ . . .
 ∗ ∗ ∗   0 ∗ ∗ ∗ 

 × × × ×  × × × ×
× × × × × ×

Fig. 2.9: Eliminarea gaussiană cu pivotare parţială aplicată unei matrice bandă
de lăţime inferioară 2 şi superioară 1. S-a presupus că la pasul k se efectuează
permutarea liniilor k (curentă) şi k + 2 (cea mai depărtată posibil de cea curentă)

Algoritmul 2.15 (GPPb – Eliminare gaussiană cu pivotare par-


ţială pentru matrice bandă) (Se dă A ∈ Rn×n , bandă de lăţime infe-
rioară r şi superioară q, nesingulară. Se calculează matricea superior
triunghiulară U , matricele ITE M1 , . . . , Mn−1 (memorate peste A)
şi matricele PE P1 , . . . , Pn−1 (memorate ı̂n vectorul p), astfel ı̂ncât
U = Mn−1 Pn−1 . . . M1 P1 A.)
1. Pentru k = 1 : n − 1
1. r1 = min(k + r, n), q1 = min(k + q + r, n)
2. Se determină ik ∈ k : r1 astfel ı̂ncât |aik k | = maxi=k:r1 |aik |
3. p(k) ← ik
4. Pentru j = k : q1
1. akj ↔ aik j
5. Pentru i = k + 1 : r1
1. aik ← µik = aik /akk
6. Pentru i = k + 1 : r1
1. Pentru j = k + 1 : q1
1. aij ← aij − µik akj

Comentarii. Numărul de operaţii este mai mare decât pentru algoritmul 2.14,
dar, dacă r ≪ n sau q ≪ n, acesta este totuşi ≪ 2n3 /3. ♦
Lăsăm cititorului problema scrierii unui algoritm eficient de rezolvare a sistemu-
lui Ax = b, atunci când A are structură bandă, utilizând algoritmul 2.15.
În final, precizăm că pivotarea completă distruge structura bandă şi deci nu este
recomandată ı̂n acest caz.
2.10. SISTEME SIMETRICE 109

Factorizarea Crout aplicată unei matrice A ∈ Rn×n bandă de lăţime inferioară


r şi superioară q are proprietăţi similare cu cele ale eliminării gaussiane; cititorul
este invitat să demonstreze afirmaţiile următoare.
Algoritmul CROUT produce o matrice L inferior triunghiulară bandă de lăţime
r şi o matrice U superior triunghiulară (unitate) bandă de lăţime q.
Algoritmul CROUTP (cu pivotare parţială) produce o matrice L inferior tri-
unghiulară şi o matrice U superior triunghiulară (unitate) bandă de lăţime q + r.
În plus, fiecare coloană a matricei L are cel mult r elemente nediagonale nenule.

2.10 Sisteme simetrice


Ne ocupăm ı̂n această secţiune de rezolvarea sistemului Ax = b, cu A inversabilă
şi simetrică, ı̂n general de semn nedefinit. Nucleul rezolvării sistemului este fac-
torizarea matricei A, chiar dacă eventual ea nu se face explicit. Presupunând că
matricea A are factorizare LDU, deoarece A = AT şi factorizarea este unică (ı̂n
condiţiile teoremei 2.4), rezultă imediat că U = LT . Se pune ı̂ntrebarea cum putem
profita de simetrie pentru a reduce numărul operaţiilor de la 2n3 /3 (cazul general)
la, sperăm, jumătate, adică n3 /3.
Dificultăţile problemei. Aplicarea ca atare a procedurii de eliminare gaus-
siană (algoritmul G) pare a avea inconvenientul major de a distruge simetria ma-
tricei A. Să explicităm primul pas al eliminării gaussiene; se calculează A ← M1 A,
unde M1 = I − m1 eT1 este matricea ITE pentru care (M1 A)i1 = 0, i ∈ 2 : n. Ma-
tricea M1 A nu este simetrică: prima coloană are elementele subdiagonale nule, ı̂n
schimb prima linie are elemente ı̂n general nenule. Totuşi submatricea (M1 A)2:n,2:n
este simetrică, ceea ce se observă şi detaliind instrucţiunea 1.2.1.1 din algoritmul G
(cu k = 1), adică,
aij ← aij − ai1 a1j /a11
care se aplică identic şi elementului aji = aij

aji ← aji − aj1 a1i /a11 = aij − ai1 a1j /a11 .

Aşadar nu este necesară modificarea tuturor elementelor matricei, ci doar a celor din
(să zicem) triunghiul inferior; numărul de operaţii se reduce astfel la aproximativ
jumătate.
Pentru a păstra simetria sunt necesare transformări de congruenţă, adică se
aplică transformările ITE de ambele părţi ale matricei A. Primul pas al eliminării
gaussiene (modificate) va fi acum A ← M1 AM1T = M1 A − (M1 A)e1 mT1 ; deoarece
(M1 A)e1 = a11 e1 , se observă că ı̂nmulţirea la dreapta cu M1T , adică (M1 A)M1T ,
nu afectează decât prima linie a matricei M1 A (identică cu prima linie a matricei
A), anume introducând zerouri ı̂n toate poziţiile din dreapta diagonalei. Aşadar,
din punctul de vedere al implementării, ı̂nmulţirea la dreapta cu M1T nu necesită
calcule.
Continuând analog pentru celelalte coloane, se obţine echivalentul relaţiei (2.10)
ı̂n cazul simetric
def
D = Mn−1 . . . M2 M1 AM1T M2T . . . Mn−1
T
, (2.59)
110 CAPITOLUL 2. REZOLVAREA SISTEMELOR DE ECUAŢII LINIARE

unde D este evident o matrice diagonală.


Modificând algoritmul G astfel ı̂ncât să se acceseze doar triunghiul inferior al
matricei A, se obţine factorizarea A = LDLT , cu L = M1−1 M2−1 . . . Mn−1−1
inferior
triunghiulară unitate şi D memorate peste A:

LDLT 1. Pentru k = 1 : n − 1
1. Pentru i = k + 1 : n
1. ti ← aik
2. aik ← aik /akk
2. Pentru j = k + 1 : n
1. Pentru i = j : n
1. aij ← aij − aik tj

Vectorul auxiliar t se foloseşte pentru salvarea elementelor coloanei curente k,


egale cu cele de pe linia k ı̂n triunghiul superior, pe poziţiile cărora se memorează
multiplicatorii.
Ca şi ı̂n cazul general, chiar dacă A este inversabilă, se pot obţine pivoţi
 nuli

[k] 0 1
dacă det(A ) = 0 pentru un k ∈ 1 : n − 1. Un exemplu evident este A = .
1 0
În plus, algoritmul este numeric instabil. De aceea se impune pivotarea.
Din păcate, strategiile de pivotare (parţială sau completă) propuse anterior pen-
tru eliminarea gaussiană distrug simetria. O primă idee ar fi de a aplica permutările
elementare de ambele părţi ale matricei A, aşa cum am procedat şi cu transformările
ITE; de exemplu, la primul pas, să se calculeze A ← P1 AP1T . O astfel de permutare
nu poate aduce pe poziţia pivotului decât unul dintre elementele diagonale; exem-
plul de mai sus dovedeşte că această strategie poate da greş ı̂n situaţii banale.
Factorizarea cvasi-diagonală. Păstrarea simetriei trebuie deci ı̂mbinată cu
participarea la pivotare a elementelor nediagonale. O posibilitate de realizare a
acestui compromis este de a calcula o factorizare LDLT de un tip special, ı̂n care
matricea D este cvasi-diagonală 2 .

Teorema 2.11 Fie A ∈ Rn×n o matrice inversabilă şi simetrică. Atunci exis-
tă o matrice inferior triunghiulară unitate L ∈ Rn×n , o matrice cvasi-diagonală
D ∈ Rn×n cu blocuri diagonale de dimensiune 1 × 1 sau 2 × 2, şi o matrice de
permutare P ∈ Rn×n astfel ı̂ncât

P AP T = LDLT . (2.60)

Desigur, matricea D este inversabilă. Expresia de mai sus este numită factorizare
cvasi-diagonală a matricei A.

Demonstraţia este constructivă. Vom descrie modul de calcul al factorizării cvasi-


diagonale fără a preciza strategia de permutare mai mult decât este matematic
necesar demonstraţiei. Desigur, ı̂ntr-un algoritm de calcul efectiv matricea de per-
mutare P va fi construită pornind de la considerente de stabilitate numerică.
2O idee alternativă, descrisă ı̂n [?], este de a lua D tridiagonală.
2.10. SISTEME SIMETRICE 111

Primul pas al procedurii de factorizare se aplică matricei


 
E CT
P1 AP1T = , (2.61)
C B

unde E este un bloc s × s, cu s = 1 sau s = 2, iar P1 o matrice de permutare,


eventual elementară. Demonstrăm acum că dacă A este inversabilă, atunci există
P1 astfel ı̂ncât E să fie inversabil; de exemplu, dacă a11 6= 0, se poate lua s = 1,
P1 = I; dacă a11 = 0, există a1j 6= 0, altfel prima coloană a matricei A este nulă,
deci A este singulară; ı̂n acest caz, cu s = 2 şi P1 permutând liniile 2 şi j se obţine
det(E) = −a21j 6= 0.
Pentru a determina primele s coloane ale factorilor L şi D, se utilizează o relaţie
asemănătoare cu (2.31):
   
Is 0 E 0 Is E −1 C T
P1 AP1T = (2.62)
CE −1 In−s 0 B − CE −1 C T 0 In−s

Dacă s = 1, calculul factorizării (2.62) este efectuat de schema LDLT . Dacă


s = 2, atunci CE −1 se poate calcula folosind eliminarea gaussiană cu pivotare (vezi
problema 2.30) sau chiar — variantă pe care o adoptăm aici pentru simplitate —
calculând direct  
1 e22 −e21
E −1 = (2.63)
det(E) −e21 e11
şi apoi ı̂nmulţind C şi E −1 ; evident, blocul B − CE −1 C T se calculează acum banal,
printr-un produs şi o adunare matriceale, dar numai ı̂n partea sa inferior triunghiu-
lară, deoarece este simetric.
Procedura continuă identic pentru matricea B − CE −1 C T de dimensiune
(n − s) × (n − s), şi aşa mai departe până la obţinerea factorizării cvasi-diagonale
(2.60). ♦
Algoritmul corespunzător este prezentat ı̂n continuare. Se vede uşor că proce-
dura se poate executa pe loc ı̂n A; totuşi, la fel ca ı̂n schema LDLT , e necesară
alocarea unui spaţiu suplimentar pentru salvarea temporară, acum ı̂ntr-o matrice
T ∈ Rn×2 , a elementelor coloanei (coloanelor, dacă s = 2) curente.

Algoritmul 2.16 (FCD – Factorizare cvasi-diagonală) (Se dă


A ∈ Rn×n simetrică şi inversabilă. Se calculează matricea inferior tri-
unghiulară unitate L, matricea D ∈ Rn×n cvasi-diagonală, cu blocuri de
dimensiune 1 × 1 sau 2 × 2, şi matricea de permutare P ∈ Rn×n astfel
ı̂ncât relaţia (2.60) să fie satisfăcută. Matricele L şi D se memorează
peste A. Modul de calcul al lui P nu este detaliat.)
0. k ← 1
1. C^at timp k < n
1. Se determină Pk şi s.
2. Se efectuează permutarea (simetrică) A ← Pk APkT
3. Dacă s = 1 atunci
1. Pentru i = k + 1 : n
1. ti1 ← aik
112 CAPITOLUL 2. REZOLVAREA SISTEMELOR DE ECUAŢII LINIARE

2. aik ← aik /akk


altfel
   
e11 · 1 ak+1,k+1 ·
2. ← akk ak+1,k+1 −a2
e21 e22 k+1,k −ak+1,k akk
3. Pentru i = k + 2 : n
1. ti1 ← aik , ti2 ← ai,k+1
2. aik ← aik e11 + ai,k+1 e21
3. ai,k+1 ← ti1 e21 + ai,k+1 e22
4. Pentru j = k + s : n
1. Pentru i = j : n
1. Dacă s = 1 atunci
1. aij ← aij − aik tj1
altfel
2. aij ← aij − aik tj1 − ai,k+1 tj2
5. k ← k + s

Comentarii. Numărul de operaţii este de ordinul n3 /3 flopi, iar memoria ocupată


de n(n + 1)/2 + 2n. ♦
Strategii de pivotare. Vom prezenta ı̂n continuare două strategii de alegere
a permutărilor, completând astfel algoritmul FCD cu detalierea instrucţiunii 1.1.
Ne vom limita la descrierea primei etape din procedura de factorizare. Prin exten-
sie de terminologie, numim pivot blocul E din (2.61) şi pivotare permutarea din
instrucţiunea 1.2.
Pivotare completă. Spre deosebire de eliminarea gaussiană, la procedura de
factorizare cvasi-diagonală pivotarea completă se poate descrie mai uşor decât cea
parţială. Matricea P1 şi ı̂ntregul s sunt alese conform următoarei scheme [?]:

FCDPC1 1. Se alege α ∈ (0, 1)


2. µ0 = maxi,j |aij |, µ1 = maxi |aii |
3. Dacă µ1 ≥ αµ0 atunci
1. s = 1, se alege P1 astfel ı̂ncât ı̂n (2.61) |e11 | = µ1
altfel
2. s = 2, se alege P1 astfel ı̂ncât ı̂n (2.61) |e21 | = µ0

Ideea este de a alege un pivot 1 × 1 dacă există un element diagonal suficient


de mare ı̂n raport cu elementul de modul maxim µ0 (depăşind un prag dictat de
constanta α). Altfel pivotul este
 
a11 ar1
E= , unde |ar1 | = µ0 . (2.64)
ar1 arr

Notând à = B − CE −1 C T , se poate demonstra că (vezi problema 2.31):


( 
1 + α1 µ
0, dacă s = 1,
|ãij | ≤ 2 (2.65)
1 + 1−α µ0 , dacă s = 2.
2.10. SISTEME SIMETRICE 113

2  
Constanta α se determină impunând condiţia 1 + α1 = 1 + 1−α 2
, ceea ce
va conduce la factori de creştere (vezi secţiunea √ 2.8) asemănători indiferent de di-
mensiunile pivoţilor. Se obţine α = (1 + 17)/8 ≈ 0.64.
Această strategie de pivotare face ca algoritmul FCD să fie numeric stabil.
O analiză inversă a erorilor conduce la o margine similară cu cea din (2.50), cu
γ ≤ 3n · [21 · 31/2 · 41/3 · . . . · n1/(n−1) ]1/2 ; această margine pentru factorul de creştere
γ este puţin mai mare decât cea pentru eliminarea gaussiană cu pivotare completă
(algoritmul GPC).
Costul pivotării complete este de O(n3 ) comparaţii, la fel ca pentru algoritmul
GPC, ceea ce constituie un efort de calcul important. De aceea este interesantă
găsirea unei strategii de pivotare parţială.
Pivotare parţială. Se poate demonstra că alegerea pivotului căutând pe o sin-
gură coloană (şi eventual pe diagonală) nu poate avea succes. Surprinzător, căutând
pe două coloane se poate descrie o strategie de pivotare parţială eficientă (vezi [?]),
detaliată de schema (ne ocupăm din nou doar de primul pas al factorizării):

FCDPP1 1. Se alege α ∈ (0, 1)


2. λ = maxi=2:n |ai1 | (şi |ar1 | = λ)
3. Dacă |a11 | ≥ αλ atunci
1. s = 1, P1 = I
altfel
2. σ = maxi=1:n, i6=r |air |
3. Dacă |a11 |σ ≥ αλ2 atunci
1. s = 1, P1 = I
altfel dacă |arr | ≥ ασ atunci
2. s = 1, se alege P1 astfel ı̂ncât ı̂n (2.61) e11 = arr
altfel
3. s = 2, se alege P1 astfel ı̂ncât ı̂n (2.61) |e21 | = λ

Pentru a ı̂nţelege ideea pivotării,


este util a considera matricea
 
a11 . . . λ ... ... ...
 .. .. 
 . . 
 
 λ ... arr . . . σ . . . 
 
 .. .. 
 . . 
 
 . 
 .. σ 
 
.. ..
. .
 
a11 ar1
şi a observa că pivotul este a11 sau arr când s = 1, sau când s = 2.
ar1 arr
Se poate demonstra că relaţia (2.65) rămâne ı̂n continuare adevărată, deci se va
alege aceeaşi valoare pentru α. Factorul de creştere din (2.50) va fi acum limitat de
γ ≤ (1 + 1/α)n−1 ≈ (2.57)n−1 , o margine ceva mai largă decât pentru algoritmul
GPP. În practică, algoritmul de factorizare cvasi-diagonală cu pivotare parţială
114 CAPITOLUL 2. REZOLVAREA SISTEMELOR DE ECUAŢII LINIARE

are o stabilitate numerică satisfăcătoare. Cum numărul de comparaţii este redus


acum la O(n2 ), pivotarea parţială este de obicei preferată celei complete (la fel ca
la eliminarea gaussiană).
Utilizarea factorizării cvasi-diagonale. Factorizarea (2.60) poate fi folosită
ı̂n modul cel mai simplu pentru rezolvarea sistemelor liniare, redusă la rezolvarea
a două sisteme triunghiulare şi a unuia cvasi-diagonal; lăsăm cititorului detaliile de
implementare.
De asemenea, (2.60) se poate utiliza pentru calculul inversei matricei A, ţinând
seama că
A−1 = P T L−T D−1 L−1 P.
Remarcăm faptul că şi matricea A−1 este simetrică.
Cazul complex. În cazul ı̂n care A ∈ Cn×n este hermitică (A = AH ), factori-
zarea sa cvasi-diagonală are forma (analoagă cu (2.60))

P AP T = LDLH ,

unde P este o matrice de permutare, L ∈ Cn×n este inferior triunghiulară unitate,


iar D ∈ Cn×n este bloc diagonală (cu blocuri 1 × 1 sau 2 × 2) şi hermitică.
Algoritmul FCD ı̂şi păstrează forma generală; trebuie luat ı̂nsă ı̂n considerare
faptul că ı̂n cazul complex transpunerea este ı̂nsoţită şi de conjugare. De exemplu,
(2.61) devine
 
T E CH
P1 AP1 = , (2.66)
C B
iar E este hermitică, adică, ı̂n cazul 2 × 2,
 
e11 ē21
E= .
e21 e22

Instrucţiunile algoritmului FCD se modifică corespunzător, de exemplu 1.4.1.1.1


are forma aij ← aij − aik ājk .

2.11 Sisteme simetrice pozitiv definite


Considerăm acum sistemul Ax = b, unde matricea A ∈ Rn×n este simetrică şi
pozitiv definită. Ideea de bază a rezolvării lui este dată de teorema următoare.

Teorema 2.12 Pentru orice matrice simetrică şi pozitiv definită A ∈ Rn×n , există
o unică matrice inferior triunghiulară L ∈ Rn×n , cu elemente diagonale pozitive,
astfel ı̂ncât
A = LLT , (2.67)
expresie care este numită factorizare Cholesky (iar L este numit factorul Cholesky
al matricei A). Reciproc, dacă factorizarea Cholesky există, atunci A este pozitiv
definită.
2.11. SISTEME SIMETRICE POZITIV DEFINITE 115

Evident, (2.67) se poate scrie sub forma A = RT R, unde R = LT este superior


triunghiulară. De asemenea, factorizările A = LT L, respectiv A = RRT , se numesc
tot Cholesky.
Demonstraţie. Deoarece A este pozitiv definită atunci, conform propoziţiei 1.3,
submatricele lider principale A[k] , k = 1 : n − 1, sunt pozitiv definite, deci nesingu-
lare. Atunci A are o unică factorizare LDU (vezi teorema 2.4), A = L′ DU ′ şi, din
motive de simetrie, U ′ = (L′ )T . Dar A şi D sunt congruente, deci D este pozitiv
definită,
√ adică dii > 0, i = 1 : n. Fie F ∈ Rn×n matricea diagonală definită de

fii = √dii , i = 1 : n. Notând L = L F , prima parte a teoremei este demonstrată
(lii = dii , i = 1 : n).
Reciproca este evidentă; fie x ∈ Rn nenul, altfel arbitrar; atunci avem xT Ax =
x LLT x = kLT xk22 > 0 (deoarece L este nesingulară, LT x 6= 0).
T

Există mai mulţi algoritmi pentru calculul factorizării Cholesky a unei matrice
pozitiv definite, care diferă doar prin ordinea de efectuare a calculelor. Vom deduce
aici o procedură de factorizare compactă, similară cu cea folosită la calculul fac-
torizării Crout, ı̂n care elementele factorului Cholesky L sunt calculate ı̂n ordinea
(crescătoare a) coloanelor. Din identitatea A = LLT (doar triunghiul inferior stâng
al lui A este reprezentat, deoarece A este simetrică)
     
a11 l11 l11 . . . lk1 . . . ln1
 .. . .   .. . .   .. . .. 
 .
 . 

 .
 . 0  
  . .. . 

 ak1 . . . akk  =  lk1 . . . lkk   lkk . . . lnk 
     
 . .. . .   . .. . .   .. . 
 .. . .   .. . .   0 . .. 
an1 . . . ank . . . ann ln1 . . . lnk . . . lnn lnn
obţinem pentru prima coloană:
2 √
a11 = l11 ⇒ l11 = a11 ,
(2.68)
ai1 = li1 l11 ⇒ li1 = ai1 / l11 , i = 2 : n,
şi deci procesul de calcul poate fi iniţiat.
Acum, presupunând că primele k−1 coloane din L au fost calculate, identificarea
elementului din poziţia (k, k) ı̂n A = LLT furnizează
k−1
X
2 2
akk = lkj + lkk , (2.69)
j=1

ı̂n care singura necunoscută este lkk . Conform teoremei 2.12, dacă A este pozitiv
definită, atunci există un unic lkk pozitiv astfel ı̂ncât (2.69) să aibă loc. Atunci,
k−1
X
2
akk − lkj >0 (2.70)
j=1

şi v
u k−1
u X
lkk = takk − 2 .
lkj (2.71)
j=1
116 CAPITOLUL 2. REZOLVAREA SISTEMELOR DE ECUAŢII LINIARE

De asemenea,
k−1
X
aik = lij lkj + lik lkk , i = k + 1 : n,
j=1

ı̂n care, ı̂n ordinea de calcul considerată, singura necunoscută este lik . Aşadar
 
k−1
X
lik = aik − lij lkj  / lkk , i = k + 1 : n. (2.72)
j=1

Formulele (2.68), (2.71) şi (2.72) definesc algoritmul de mai jos; pentru concizie,
am inclus şi primul pas ı̂n bucla de parcurgere a coloanelor. Totodată, acest algoritm
este cel mai bun mijloc de testare a pozitivităţii unei matrice; testul se bazează pe
faptul că factorizarea Cholesky a unei matrice poate fi calculată dacă şi numai
dacă matricea este pozitiv definită (teorema 2.12); aşadar, dacă termenul stâng al
inegalităţii (2.70) nu este pozitiv, atunci matricea A nu este pozitiv definită.

Algoritmul 2.17 (CHOL – factorizare Cholesky) (Se dă A ∈ Rn×n


simetrică. Se stabileşte dacă A este pozitiv definită şi, ı̂n acest caz,
se scrie peste triunghiul inferior al lui A matricea L din factorizarea
Cholesky A = LLT .)
1. Pentru k = 1 : n
P
1. α ← akk − k−1 2
j=1 lkj
2. Dacă α ≤ 0 atunci
1. Tipăreşte ’A nu este pozitiv definită’
2. Stop √
3. akk ← lkk = α
4. Pentru i = k + 1: n 
Pk−1
1. aik ← lik = aik − j=1 lij lkj / lkk

Comentarii. În mod evident, instrucţiunea 1.4.1 reprezintă o operaţie DOT. O


altă ordonare a calculelor, care, ı̂n variantă vectorială, conduce la operaţii Saxpy,
este propusă ı̂n problema 2.33. Tot ca exerciţiu pentru cititor (problema 2.34)
este lăsată varianta la nivel de bloc a factorizării Cholesky, foarte asemănătoare
algoritmilor de factorizare LU la nivel de bloc, prezentaţi ı̂n secţiunea 2.4.
Algoritmul CHOL necesită aproximativ NCHOL = n3 /3 flopi şi, ı̂n plus, calculul
a n rădăcini pătrate (care e neglijabil). Memoria necesară este de aproximativ
MCHOL = n2 /2.
Algoritmul este numeric stabil; dacă L̂ reprezintă factorul Cholesky calculat,
atunci L̂L̂T = A + E, unde perturbaţia E satisface limita (2.50) pentru γ = 1; deci,
stabilitatea este mai bună decât a eliminării gaussiene cu pivotare completă. ♦
Desigur, sistemul liniar Ax = b, cu A pozitiv definită se calculează cu schema
Ch 1. Se factorizează A = LLT cu algoritmul CHOL
2. Se rezolvă sistemul inferior triunghiular Ly = b
3. Se rezolvă sistemul superior triunghiular LT x = y
2.12. RUTINE LAPACK ŞI MATLAB 117

efectuându-se de două ori mai puţine operaţii decât dacă s-ar aplica algoritmul de
eliminare gaussiană.
În privinţa condiţionării, problema rezolvării sistemului pozitiv definit Ax = b
satisface inegalitatea (2.47).
Inversa (care este tot simetrică şi pozitiv definită) şi determinantul unei matrice
simetrice pozitiv definite se calculează adaptând ideile din secţiunea 2.6 la contextul
factorizării Cholesky A = LLT .
Matrice bandă. Dacă A ∈ Rn×n este o matrice simetrică, pozitiv definită
şi bandă de lăţime r, atunci factorul Cholesky este inferior triunghiular bandă de
lăţime r. Aceasta se poate observa cu uşurinţă din relaţia (2.72), ı̂n care un element
lik depinde de valorile lij aflate la stânga sa pe linia i (i.e. j < k); aşadar, li1 = ai1 ,
deci ı̂n prima coloană se moşteneşte structura matricei A; dacă, pentru un indice
de coloană s, avem lij = 0 pentru j = 1 : s − 1, atunci este evident că lis = ais /lss ,
deci structura se moşteneşte şi ı̂n coloana s. În concluzie, linia i are, ı̂n porţiunea
subdiagonală, aceeaşi structură ı̂n A şi L.
Adaptarea algoritmului CHOL la cazul matricelor bandă este un exerciţiu re-
lativ simplu pe care ı̂l lăsăm cititorului (vezi problema 2.36).
Cazul complex. Dacă matricea A ∈ Cn×n este hermitică şi pozitiv definită,
atunci factorizarea sa Cholesky este unică şi are forma

A = LLH ,

unde L ∈ Cn×n este inferior triunghiulară, cu elementele diagonale reale şi pozi-
tive (şi A are elementele diagonale reale, fiind hermitică, şi pozitive, fiind pozitiv
definită). Factorul Cholesky se poate calcula cu algoritmul CHOL uşor modificat,
deoarece (2.71) şi (2.72) se transformă ı̂n
v
u k−1
u X
lkk = takk − lkj lkj , (2.73)
j=1

respectiv  
k−1
X
lik = aik − lij lkj  / lkk , i = k + 1 : n. (2.74)
j=1

2.12 Rutine LAPACK şi MATLAB


Prezentăm pe scurt ı̂n continuare rutinele din biblioteca LAPACK şi instrucţiunile
sau funcţiile limbajului MATLAB care rezolvă problemele tratate ı̂n acest capitol.
LAPACK (Linear Algebra PACKage) [XV] este o bibliotecă de rutine scrise
iniţial ı̂n FORTRAN dar apelabile din mai multe limbaje de programare. Rutinele
implementează ı̂n special algoritmi la nivel de bloc (apelând rutinele BLAS de nivel
3) şi de aceea ating maximul de performanţă pe calculatoare cu memorie ierarhică.
Pentru fiecare problemă au fost aleşi algoritmii cei mai fiabili şi rapizi dintre cei
cunoscuţi, bună parte dintre aceştia fiind adaptarea celor din bibliotecile LINPACK
118 CAPITOLUL 2. REZOLVAREA SISTEMELOR DE ECUAŢII LINIARE

[XIII] (dedicată ı̂n special rezolvării sistemelor liniare) şi EISPACK [XI,XII] (pentru
calculul valorilor proprii şi probleme conexe), cele mai performante şi folosite pa-
chete de programe de calcul numeric ale anilor ’70–’80. De aceea se poate aprecia că
LAPACK este cel mai modern şi puternic instrument de calcul ı̂n algebra matriceală.
În plus, sursele LAPACK sunt disponibile gratuit (vezi http://www.netlib.org).
Numele rutinelor LAPACK respectă convenţiile BLAS (vezi secţiunea 1.11),
adică au forma xyyzzz, unde x codifică formatul de reprezentare a datelor, yy
reprezintă tipul matricei (vezi tabelul 1.1 pentru cele mai importante tipuri), iar
zzz arată operaţia executată.
Rutinele LAPACK sunt ı̂mpărţite ı̂n trei categorii:

• rutine driver, care rezolvă o problemă completă, de exemplu aflarea soluţiei


unui sistem liniar;

• rutine de calcul, care rezolvă subprobleme sau completează rezolvarea unei


probleme, de exemplu calculul factorizării LU sau rafinarea iterativă a soluţiei
unui sistem liniar;

• rutine auxiliare.

Rezolvării sistemelor liniare ı̂i sunt dedicate ı̂n LAPACK două tipuri de rutine
driver:
1. Driverul simplu, cu numele de forma xyySV, rezolvă sistemele (cu parte
dreaptă multiplă) AX = B sau AT X = B. De exemplu, xGESV se utilizează pentru
matrice A oarecare (implementând eliminarea gaussiană la nivel de bloc), xPOSV se
utilizează când matricea A este simetrică pozitiv definită (implementând algoritmul
Cholesky la nivel de bloc) etc.
2. Driverul expert, cu numele xyySVX, care, ı̂n plus

• scalează matricea A dacă este necesar;

• estimează numărul de condiţionare al matricei A;

• rafinează iterativ soluţia.

În contextul rezolvării de sisteme, rutinele de calcul cele mai importante sunt
următoarele:

1. xyyTRF calculează factorizarea P A = LU ı̂n cazul general (yy=GE), factori-


zarea Cholesky A = LLT pentru matrice simetrice (hermitice) pozitiv definite
(yy=PO), factorizarea cvasi-diagonală P AP T = LDLT pentru matrice sime-
trice (hermitice) (yy=SY, yy=HE). În toate cazurile de mai sus există rutine şi
pentru matrice bandă.

2. xyyTRS utilizează rezultatul factorizării (ieşirea rutinei xyyTRF corespunzătoa-


re) pentru a calcula soluţia unui sistem liniar.

3. xyyEQU scalează matricea A.

4. xyyRFS rafinează iterativ soluţia unui sistem liniar.


2.13. PROBLEME 119

5. xyyCON estimează inversul numărului de condiţionare, adică 1/κ(A).


6. xyyTRI calculează inversa unei matrice, utilizând rezultatul factorizării.

MATLAB (MATrix LABoratory) [XIV] are o interfaţă mai simplă, dar rutinele
sale implementează de asemenea algoritmi de mare performanţă.
Rezolvarea sistemului liniar (eventual cu parte dreaptă multiplă) AX = B se
face apelând la operatorul de ”ı̂mpărţire” la stânga; dacă A şi B sunt variabilele
memorând matricea coeficienţilor sistemului şi, respectiv, termenul său drept, atunci
soluţia se calculează cu A\B. Sistemul (cu necunoscuta la stânga) XA = B se rezolvă
utilizând operatorul de ”ı̂mpărţire” la dreapta, soluţia fiind B/A. În ambele cazuri,
algoritmul implementat este eliminarea gaussiană cu pivotare parţială, indiferent
de tipul matricei.
Factorizarea P A = LU este calculată de funcţia lu, iar factorizarea Cholesky
de funcţia chol. Nu există o funcţie dedicată factorizării cvasi-diagonale.
Inversa unei matrice se calculează cu funcţia inv, iar determinantul cu det.
Reamintim că ı̂n nici un caz soluţia unui sistem AX = B nu se calculează cu
inv(A)*B.
Pentru calculul numărului de condiţionare există mai multe funcţii; cond cal-
culează exact κ2 (A), ceea ce necesită mai multe operaţii decât rezolvarea sistemului
liniar Ax = b (algoritmul va fi prezentat ı̂n capitolul 5); rcond estimează 1/κ∞ (A),
utilizând algoritmul din finalul secţiunii 2.7; ı̂n fine, condest estimează 1/κ1 (A) cu
un algoritm neprezentat ı̂n această lucrare.

2.13 Probleme
P 2.1 Descrieţi o variantă a eliminării gaussiene ı̂n care se introduc zerouri ı̂n coloanele
lui A, deasupra diagonalei, ı̂n ordinea n : −1 : 2, şi care produce factorizarea A = U L,
unde U este superior triunghiulară unitate şi L este inferior triunghiulară.
P 2.2 Scrieţi variantele vectoriale ale algoritmilor GPP şi GPC, utilizând apeluri la
funcţii din biblioteca BLAS 1.
n×n
PnA ∈ R
P 2.3 Fie o matrice strict diagonal dominantă pe coloane, i.e. cu proprietatea
|ajj | > i=1,i6=j |aij |. Demonstraţi că pivotarea parţială nu este necesară ı̂n procesul de
eliminare gaussiană şi că toţi multiplicatorii gaussieni sunt subunitari (ı̂n modul).
P 2.4 Fie matricea de transformare elementară Gauss-Jordan M̃k = In − m̃k eTk , definită
de vectorul m̃k = [µ1k . . . µk−1,k 0 µk+1,k . . . µnk ]T .
a. Fie x ∈ Rn , cu xk 6= 0. Determinaţi m̃k astfel ı̂ncât M̃k x = xk ek .
b. Fie A ∈ Rn×n , având submatricele lider principale A[k] nesingulare, k = 1 : n − 1.
Scrieţi un algoritm care, utilizând transformări Gauss-Jordan, diagonalizează matricea A,
i.e. generează M̃1 , M̃2 , . . . , M̃n−1 astfel ı̂ncât M̃n−1 . . . M̃2 M̃1 A = D, cu D diagonală.
Care este numărul de operaţii ?
c. Introduceţi pivotarea ı̂n algoritmul anterior.
P 2.5 Demonstraţi unicitatea factorizării LDU ı̂n condiţiile teoremei 2.4.
P 2.6 Demonstraţi că dacă A ∈ Rn×n admite o factorizare LDU unică, atunci subma-
tricele lider principale A[k] , k = 1 : n − 1, sunt nesingulare. (Indicaţie: utilizaţi reducerea
la absurd.)
120 CAPITOLUL 2. REZOLVAREA SISTEMELOR DE ECUAŢII LINIARE

P 2.7 Demonstraţi că algoritmul GPP modificat conform descrierii din secţiunea 2.4.1
produce o factorizare LU pentru care |lik | ≤ 1, pentru i > k.

P 2.8 Cum trebuie modificat algoritmul GPC aplicat matricei A ∈ Rn×n pentru a furniza
factorizarea LU cu permutări pe linii şi pe coloane de forma P AQ = LU ? Demonstraţi
că |ukk | ≥ |ukj |, pentru j > k (ı̂n plus, |lik | ≤ 1, pentru i > k).

P 2.9 Adaptaţi algoritmul de eliminare gaussiană cu pivotare parţială astfel ı̂ncât să
calculeze factorizarea (2.32).

P 2.10 Scrieţi o variantă la nivel de bloc a algoritmului de factorizare Crout cu pivotare


CROUTP.

P 2.11 Cum trebuie modificaţi algoritmii 2.7 şi 2.8 astfel ı̂ncât să funcţioneze corect şi
atunci când dimensiunea n a matricei nu este multiplu al dimensiunii r a blocurilor ?

P 2.12 Prezentaţi o variantă a algoritmului de rezolvare a sistemelor liniare de forma


Ax = b prin eliminare gaussiană cu pivotare parţială, fără a memora multiplicatorii.

P 2.13 Fie H ∈ Rn×n o matrice nesingulară superior Hessenberg (hij = 0, pentru


i > j + 1).
a. Dacă toate submatricele lider principale ale lui H sunt nesingulare, adaptaţi algo-
ritmul de eliminare gaussiană pentru rezolvarea sistemului liniar Hx = b, unde b ∈ Rn ;
calculaţi numărul de operaţii.
b. Adaptaţi algoritmul GPP pentru aceeaşi problemă.
c. Adaptaţi algoritmul Crout de factorizare LU.

P 2.14 Se consideră două matrice: H ∈ Rn×n , superior Hessenberg nesingulară, şi


R ∈ Rn×n , superior triunghiulară unitate. Prezentaţi algoritmi eficienţi pentru:
a. rezolvarea sistemului liniar HRx = b, cu b ∈ Rn .
b. Atunci când toate submatricele lider principale ale lui H sunt nesingulare, factori-
zarea Crout A = HR poate fi obţinută printr-una din următoarele două scheme:
Schema 1. 1. Calculează A = HR.
2. Calculează factorizarea Crout a lui A: A = LU .
Schema 2. 1. Calculează factorizarea Crout a lui H: H = LŪ .
2. Calculează U = Ū R.
Care dintre ele este mai eficientă ?

P 2.15 a. Propuneţi un algoritm pentru rezolvarea sistemului liniar Ax = b, unde


A ∈ Rn×n este nesingulară şi b ∈ Cn , utilizând numai aritmetica reală.
b. Prezentaţi un algoritm pentru rezolvarea ecuaţiei matriceale AX = B, ı̂n care
A ∈ Rn×n este nesingulară şi B ∈ Rn×m . (Indicaţie: utilizaţi GPP.)
c. Idem, dar pentru ecuaţia XA = B, cu A ∈ Rn×n , B ∈ Rm×n .

P 2.16 Se dă matricea A ∈ Rn×n nesingulară. Utilizând rezultatul algoritmului de elim-


inare gaussiană cu pivotare parţială (Mn−1 Pn−1 . . . M1 P1 A = U ) sau factorizarea LU
(P A = LU ), scrieţi algoritmii pentru rezolvarea sistemelor AT y = c, AT Y = C, unde
c ∈ Rn , C ∈ Rn×m .

P 2.17 Prezentaţi un algoritm eficient pentru rezolvarea sistemului liniar Ak x = b, unde


A ∈ Rn×n este nesingulară, b ∈ Rn şi k ∈ N, k > 1.

P 2.18 Dacă A, B ∈ Rn×n sunt matrice nesingulare, prezentaţi un algoritm eficient de


rezolvare a sistemului liniar (AB)k x = c, unde c ∈ Rn .
2.13. PROBLEME 121

P 2.19 Sistemul complex Cz = w (cu C = A + iB, z = x + iy, w = u + iv) se poate scrie


(prin ”decomplexificare”) ı̂n forma
» –» – » –
A −B x u
=
B A y v

Ce este preferabil: (a) rezolvarea sistemului Cz = w cu operaţii complexe sau (b) rezolvarea
sistemului decomplexificat cu operaţii reale ?

P 2.20 Se presupune că A ∈ Rn×n are o factorizare LU şi că L şi U sunt cunoscuţi.
Prezentaţi un algoritm care calculează elementul din poziţia (i, j) a matricei A−1 , cu
aproximativ (n − j)2 + (n − i)2 flopi.

P 2.21 Detaliaţi algoritmii de calcul al inversei unei matrice A ∈ Rn×n şi al det(A),
utilizând eliminarea gaussiană cu pivotare completă.

P 2.22 Se dau A ∈ Rn×n , B ∈ Rn×r , C ∈ Rr×n , D ∈ Rr×r , matricele A şi D fiind


inversabile. Fie A+ = A+BD−1 C (actualizare de rang r a matricei A). Cazuri particulare:
1◦ A, D simetrice pozitiv definite, C = B T ; 2◦ r = 1, adică A+ = A + bcT /δ (actualizare
de rang 1).
a. Demonstraţi că are loc formula (Sherman-Morrison-Woodbury):

A−1
+ = A
−1
− A−1 BD+
−1
CA−1 , unde D+ = D + CA−1 B.

b. Scrieţi un algoritm de calcul al matricei A−1 + , presupunând A


−1
cunoscută (actu-
◦ ◦
alizarea inversei). Consideraţi cazurile
» particulare
– 1 şi 2 . Evaluaţi numărul de operaţii.
A B
c. Se consideră matricea H = . Demonstraţi că
C −D

A−1 A−1 BD+−1


» –
H −1 = −1
+
−1 .
D+ CA−1 −D+

P 2.23 Fie u, v ∈ Rn doi vectori nenuli şi matricea A = In + uv T .


a. Prezentaţi un algoritm eficient pentru calculul determinantului matricei A. Când
este A nesingulară ?
b. Dacă A este nesingulară şi b ∈ Rn , scrieţi un algoritm eficient pentru rezolvarea
sistemului liniar Ax = b.

P 2.24 Matricea A ∈ Rn×n de mai jos este un exemplu (construit special ı̂n acest scop)
ı̂n care factorul de creştere γ atinge valoarea maximă ı̂n algoritmul GPP.

1 0 ... 0 1
2 3
6 −1 1 ... 0 1 7
.. .. .. ..
6 7
A=6
6 .. 7.
7
6 . . . . . 7
4 −1 −1 ... 1 1 5
−1 −1 ... −1 1

Demonstraţi că ı̂n algoritmul GPP nu se efectuează nici o permutare şi că γ = 2n−1 .

P 2.25 Fie A ∈ Rn×n şi x ∈ Rn . Demonstraţi inegalitatea cond(A, x) ≤ κ∞ (A) (relaţia


(2.58)).
122 CAPITOLUL 2. REZOLVAREA SISTEMELOR DE ECUAŢII LINIARE

P 2.26 Se dă A ∈ Rn×n . Să se găsească matricele diagonale D1 şi D2 astfel ı̂ncât fiecare
linie şi coloană din D1 AD2 să aibă norma ∞ egală cu 1. (Impunându-se restricţia ca
elementele matricelor D1 şi D2 să fie puteri ale bazei de numeraţie β, să se construiască
D1 şi D2 astfel ı̂ncât liniile şi coloanele lui D1 AD2 să aibă norma ∞ cuprinsă ı̂n intervalul
[1/β, 1].)
» –
A 0
P 2.27 Fie B = , cu A, R ∈ Rn×n , nesingulare, R superior triunghiulară. Se
R A
presupune că factorizarea LU a lui A există şi este cunoscută (A = LU ).
a. Scrieţi un algoritm pentru calculul factorizării LU a lui B, B = L̃Ũ .
b. Propuneţi un algoritm pentru rezolvarea sistemului liniar Bx = d, ı̂n care d ∈ R2n .
Calculaţi numărul de operaţii pentru ambii algoritmi.
P 2.28 Fie A ∈ R2n×2n » o matrice– nesingulară cu toate submatricele lider principale nesin-
A1 A2
gulare, de forma A = , cu A1 , A2 , A3 , A4 ∈ Rn×n şi A3 superior triunghiulară.
A3 A4
a. Scrieţi un algoritm pentru rezolvarea sistemului liniar Ax = b, cu b ∈ R2n .
b. Aceeaşi problemă, dar presupunând doar că A este nesingulară.
P 2.29 Fie A ∈ Rn×n o matrice nesingulară tridiagonală (aij = 0, pentru i > j + 1 sau
i < j − 1).
a. Adaptaţi algoritmul de eliminare gaussiană la acest tip de matrice.
b. Prezentaţi un algoritm care rezolvă sistemul Ax = b, cu b ∈ Rn .
c. Dacă matricea A este simetrică şi pozitiv definită, adaptaţi algoritmul de factorizare
Cholesky pentru A.
P 2.30 Detaliaţi o procedură de calcul al matricei F = CE −1 din (2.62), pentru cazul
s = 2, utilizând eliminarea gaussiană cu pivotare parţială.
P 2.31 Demonstraţi relaţia (2.65) (care mărgineşte creşterea elementelor matricei sime-
trice A ı̂n timpul execuţiei algoritmul FCD, de factorizare cvasi-diagonală cu pivotare
completă).
P 2.32 Detaliaţi permutările efectuate ı̂n algoritmul de factorizare cvasi-diagonală cu pi-
votare completă (schema FCDPC1 ), operând numai ı̂n triunghiul inferior al matricei si-
metrice date.
P 2.33 Scrieţi un algoritm de calcul al factorului Cholesky L al unei matrice A ∈ Rn×n
pozitiv definite, ı̂n care elementele lui L să fie calculate prin operaţii Saxpy (şi nu DOT,
ca ı̂n algoritmul CHOL). Indicaţie: algoritmul este asemănător eliminării gaussiene.
P 2.34 Scrieţi o variantă la nivel de bloc a algoritmului de factorizare Cholesky a unei
matrice simetrice pozitiv definite.
P 2.35 Fie A ∈ Rn×n o matrice nesingulară inferior bidiagonală, şi T = AAT . Prezentaţi
un algoritm eficient pentru calculul factorizării Cholesky a matricei T (demonstraţi ı̂ntâi
că T este simetrică şi pozitiv definită).
P 2.36 Adaptaţi algoritmul CHOL pentru factorizarea matricelor simetrice pozitiv de-
finite bandă de lăţime r.
P 2.37 Dacă matricea A ∈ Rn×n este simetrică şi pozitiv definită, propuneţi un algo-
ritm pentru factorizarea Cholesky A = RRT , unde R este superior triunghiulară şi are
elementele diagonale pozitive.
P 2.38 Fie A ∈ Rn×n o matrice simetrică şi pozitiv definită. Scrieţi un algoritm de calcul
al factorizării A = LDLT , cu L inferior triunghiulară unitate şi D diagonală. (A = LDLT
mai este numită factorizare Cholesky ”fără radical”.)
Capitolul 3

Problema celor mai mici


pătrate

În acest capitol vom prezenta principalele metode numerice de rezolvare a sistemelor
de ecuaţii liniare
Ax = b, (3.1)
ı̂n care matricea A ∈ Rm×n şi vectorul b ∈ Rm sunt date, iar m 6= n, adică
numărul ecuaţiilor este diferit de cel al necunoscutelor. Întrucât, de regulă, un
sistem supradeterminat (cu m > n) nu are soluţii, iar un sistem subdeterminat (cu
m < n) nu are soluţie unică, pentru a asigura buna formulare a problemei de calcul,
ı̂n prima situaţie trebuie să redefinim, iar ı̂n a doua trebuie să precizăm noţiunea
de ”soluţie” a sistemului (3.1).
În cazul m > n, o reformulare naturală a problemei (3.1) constă ı̂n a cere deter-
minarea unei soluţii aproximative a sistemului (3.1), adică a unui vector
x∗ ∈ Rn astfel ı̂ncât reziduul corespunzător r∗ = b − Ax∗ să fie, ı̂ntr-un anumit
sens, cât mai mic. (Altfel spus, vectorul b trebuie să fie aproximat cât mai bine
printr-o combinaţie liniară a coloanelor lui A.) Într-o exprimare mai precisă, aceasta
ı̂nseamnă că x∗ trebuie să minimizeze funcţia

ρ(x) = ν(b − Ax), (3.2)

unde ν(·) este o normă pe Rm , aleasă ı̂n mod adecvat.


În cazul m < n, un criteriu natural de selecţie a unei singure soluţii x∗ ∈ Rn a
sistemului (3.1) impune ca aceasta să fie, ı̂ntr-un anumit sens, cât mai ”economică”,
de exemplu să aibă o ”lungime”, adică o normă, cât mai mică. Altfel spus, x∗ trebuie
să minimizeze funcţia
φ(x) = µ(x)|Ax=b , (3.3)
unde µ(·) este o normă pe Rn 1 .
1 Notaţia din (3.3) spune că φ este restricţia normei µ pe mulţimea X a soluţiilor sistemului

(3.1). Desigur, pentru ca problema minimizării funcţiei φ să aibă sens, este necesar să presupunem
că sistemul liniar (3.1) are cel puţin o soluţie, i.e. b ∈ ImA.
124 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

Subliniem din start că alegerea normelor din (3.2) şi (3.3) depinde de natura
problemei considerate şi, ı̂n acelaşi timp, determină specificul metodelor de calcul
utilizate pentru rezolvarea ei. (De exemplu, ı̂n cazul normelor k · k1 sau k · k∞
se obţin probleme de programare liniară, care se rezolvă prin metodele expuse ı̂n
capitolul 2, vezi [X]).
În acest capitol vom considera că normele ν şi µ coincid cu norma euclidiană
k · k = k · k2 , iar terminologia utilizată va fi următoarea.
1. În cazul m ≥ n problema de minimizare
kb − Ax∗ k = minn kb − Axk (3.4)
x∈R

a normei euclidiene a reziduului r = b − Ax se numeşte problema (liniară) a


celor mai mici patrate (CMMP), iar soluţia ei x∗ este, prin definiţie, pseudo-
soluţia sistemului (3.1) ı̂n sensul CMMP. Vectorul b∗ = Ax∗ constituie cea
mai bună aproximare a lui b printr-o combinaţie liniară a coloanelor matricei
A, i.e. pe ImA, iar reziduul de normă minimă r∗ = b − Ax∗ reprezintă eroarea
de aproximare optimală.
2. În cazul m ≤ n soluţia problemei de minimizare cu restricţii liniare
kx∗ k = min kxk (3.5)
Ax=b

este, prin definiţie, soluţia normală ı̂n sensul CMMP (i.e. soluţia de normă
euclidiană minimă) a sistemului (3.1).
Problemele de tip CMMP enunţate mai sus apar sub diverse forme (inclusiv cu
date complexe) ı̂n multe aplicaţii care, de exemplu, vizează aproximarea funcţiilor,
prelucrarea statistică a datelor experimentale, modelarea şi identificarea sistemelor
dinamice, prelucrarea semnalelor etc.
Exemplul 3.1 Considerăm un proces descris printr-o dependenţă funcţională
y = f0 (u), cunoscută doar parţial din date experimentale constând ı̂ntr-o mulţime
de perechi intrare-ieşire (ui , yi ), unde yi = f0 (ui ), i = 1 : m.
Se pune problema găsirii unei expresii analitice aproximative f pentru funcţia
f0 , sub forma unei combinaţii liniare cu coeficienţii c1 , c2 , . . . , cn a n funcţii date
g1 , g2 , . . . , gn , i.e.
Xn
f (u) = cj gj (u),
j=1

astfel ı̂ncât erorile de aproximare (sau reziduurile)


ri = yi − f (ui ), i = 1 : m,
evaluate ı̂n punctele date (ui , yi ), să fie cât mai mici.
În cazul tipic m > n, formularea ı̂n sens CMMP a problemei de aproximare
considerate mai sus constă ı̂n determinarea coeficienţilor cj , j = 1 : n, astfel ı̂ncât
eroarea medie pătratică
 2
Xm X m Xn
2
krk = ri2 = yi − cj gj (ui ) (3.6)
i=1 i=1 j=1
3.1. TRANSFORMĂRI ORTOGONALE 125

să fie minimă.


Introducând matricea A ∈ Rm×n cu elementele aij = gj (ui ), i = 1 : m,
j = 1 : n, precum şi vectorii b = [ y1 y2 . . . ym ]T ∈ Rm şi x = [ c1 c2 . . . cn ]T ∈ Rn ,
problema minimizării lui (3.6) se scrie evident sub forma sintetică (3.4). ♦

Exemplul 3.2 În problemele de identificare şi estimare a parametrilor, relaţiile


din exemplul anterior apar scrise sub forma
n
X
yi = cj gj (ui ) + ri , i = 1 : m,
j=1

ı̂n care acum reziduurile ri reprezintă erori (sau zgomote) de măsură şi, ı̂n consecinţă,
au o descriere statistică. Se poate arăta că, ı̂n anumite condiţii standard, estimările
optimale ale parametrilor x = [c1 . . . cn ]T sunt soluţii ale problemei CMMP (3.6)
cu exact aceleaşi date A, b ca mai sus. În general, probleme de modelare sistemică
extrem de complicate admit o dublă interpretare, ca probleme de aproximare sau de
estimare, şi ı̂n consecinţă se tratează ı̂n spiritul principiului CMMP. Pentru detalii
şi aplicaţii specifice, cititorul poate consulta [?, ?]. ♦
Teoria problemelor CMMP este intim legată de geometria spaţiului euclidian
Rm , ı̂n special de noţiunea de ortogonalitate, care – după cum vom vedea mai de-
parte – dă un sens (geometric) clar şi extrem de intuitiv problemelor de minimizare
formulate mai sus. În mod corespunzător, practica numerică actuală recomandă
rezolvarea acestor probleme prin metode directe de triangularizare a matricei A,
bazate pe utilizarea transformărilor ortogonale 2 .
De aceea, ı̂n primele secţiuni ale acestui capitol, vom introduce transformările
ortogonale utilizate ı̂n calcule şi vom descrie procedurile corespunzătoare de trian-
gularizare ortogonală. Pe această bază, ı̂n continuare vom prezenta procedurile de
rezolvare a problemelor CMMP de tip (3.4) şi (3.5), insistând totodată asupra unor
aspecte practice importante privind condiţionarea problemelor considerate precum
şi stabilitatea numerică a algoritmilor de calcul propuşi.

3.1 Transformări ortogonale


În această secţiune vom defini cele două tipuri de transformări ortogonale utilizate
ı̂n calculul numeric şi vom descrie proprietăţile lor importante.

3.1.1 Reflectori
Considerăm spaţiul Rm cu produsul scalar (x, y) = y T x şi notăm cu kxk = (xT x)1/2
norma euclidiană indusă. Amintim că o matrice U ∈ Rm×m se numeşte ortogonală
dacă U T U = Im .
2 Aicieste esenţial faptul că norma euclidiană considerată ı̂n (3.4) şi (3.5) este invariantă ı̂n
raport cu grupul transformărilor ortogonale. În legătură cu aceste noţiuni, cititorul este invitat să
consulte capitolul 1.
126 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

Definiţia 3.1 Fie u ∈ Rm un vector normat, i.e. kuk = 1. O matrice U ∈ Rm×m


de forma
U = Im − 2uuT (3.7)
se numeşte reflector elementar de ordinul m sau transformare Householder 3 .
Se constată imediat că orice reflector elementar U este o matrice simetrică şi
ortogonală. Într-adevăr, produsul exterior uuT este evident o matrice simetrică, iar
ı̂n virtutea condiţiei de normare, kuk2 = uT u = 1, avem
 
U T U = U 2 = Im − 2uuT Im − 2uuT = Im − 4uuT + 4u(uT u)uT = Im .
Aşadar, un reflector elementar este o transformare involutivă, i.e. coincide cu pro-
pria sa inversă.
În cele ce urmează vom fixa un ı̂ntreg k ∈ 1 : m − 1 şi vom considera că vectorul
u 6= 0 din (3.7), nu neapărat normat, are primele k − 1 componente nule, i.e. ui = 0,
i = 1 : k − 1. Pentru precizare, ı̂n acest caz vom scrie
uuT def 1
Uk = Im − , β = kuk2 (3.8)
β 2
unde
u = [ 0 . . . 0 uk . . . um ]T (3.9)
şi vom spune că Uk este un reflector de ordin m şi indice k. Vectorul u se numeşte
vector Householder, iar β este factorul de normare corespunzător. (Uneori, ı̂n loc de
β se utilizează scalarul τ = β −1 . Vom reveni asupra acestei chestiuni ı̂n secţiunea
următoare.) Observăm că datorită zerourilor din (3.9) matricea Uk are structura
 
Ik−1 0
Uk = , (3.10)
0 Ũ1

ı̂n care Ũ1 este evident un reflector de ordin m − k + 1 şi indice 1.


Reflectorii Uk cu structura precizată mai sus au două proprietăţi importante 4 .
AA. Fiind daţi un reflector Uk şi un vector x ∈ Rm , aplicarea transformării
Uk , i.e. calculul vectorului transformat y = Uk x, se face simplu, observând că
uuT u(uT x)
Uk x = (Im − )x = x − = x − νu, (3.11)
β β
unde, evident
uT x
ν= . (3.12)
β
Relaţia (3.11) scrisă pe componente (unde amintim că ui = 0, i = 1 : k − 1)
arată că premultiplicarea cu Uk nu modifică primele k − 1 componente ale lui x. De
aceea, transformarea y = Uk x se efectuează avantajos pe loc ı̂n x, conform schemei
x ← y = Uk x. Considerând că reflectorul Uk este definit de vectorul u ∈ Rm precum
şi de scalarul β, procedura de calcul este următoarea.
3 Transformările de tip (3.7) au fost introduse ı̂n calculul numeric de A. Householder ı̂n 1958.

De regulă, mai departe vom omite calificativul ”elementar”.


4 La fel ca ı̂n capitolul 1, sigla AA indică expunerea unor aspecte algoritmice semnificative.
3.1. TRANSFORMĂRI ORTOGONALE 127

Uk x Y
H
H * x


H 
HH 
HH 
HH 
HH 
 H - -
−νu 0 u (uT x)u

Fig. 3.1: Efectul aplicării unui reflector U asupra unui vector x, ı̂n R2

Algoritmul 3.1 (Se dau un reflector Uk şi un vector x ∈ Rm . Se


aplică transformarea
P x ← Uk x).
1. ν = ( m i=k ui xi ) /β.
2. xi ← xi − νui , pentru i = k : m
Comentarii. În esenţă, la pasul 1 se calculează un produs scalar (de exemplu,
utilizând funcţia DOT), iar la pasul 2 se face o actualizare de tip Saxpy a lui x
(funcţiile DOT şi Saxpy au fost definite ı̂n capitolul 1). De fiecare dată se operează
asupra unor vectori de dimensiune m − k + 1. Prin urmare, numărul de operaţii
necesar este aproximativ Nop = 4(m − k). ♦
Semnificaţia geometrică a transformării (3.11) rezultă din figura 3.1, unde pentru
claritate am considerat m = 2 şi kuk = 1, deci ν = 2uT x (vezi (3.12)), iar (uT x)u
este proiecţia ortogonală a lui x pe direcţia lui u. În general, transformarea Uk
reprezintă simetria (”reflexia”) ı̂n raport cu hiperplanul H (”oglinda”) care trece
prin origine şi are vectorul normal u.
În practică, algoritmul 3.1 apare extrem de frecvent.
• Aplicarea transformării B = Uk A, unde A ∈ Rm×n este o matrice cu n coloane,
iar Uk acţionează la stânga, se face partiţionând A pe coloane. Avem
A = [a1 a2 . . . an ] ⇒ Uk A = [Uk a1 Uk a2 . . . Uk an ],
deci calculul se poate desfăşura pe loc ı̂n tabloul A, utilizând algoritmul 3.1 pentru
actualizarea fiecărei coloane a matricei A.
% Se aplică transformarea A ← Uk A
1. Pentru j = 1 : n
1. aj ← Uk aj
Conform celor spuse mai sus, premultiplicarea cu Uk nu modifică primele k − 1
linii ale matricei A. Mai precis, partiţionând A conform cu Uk din (3.10), avem
   
B B
A= ⇒ Uk A = .
C Ũ1 C
128 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

Pe de altă parte, ı̂n formă compactă, similară cu (3.11), avem evident

uuT AT u
Uk A = (Im − )A = A − uv T , unde v= .
β β
Altfel spus, matricea transformată B = Uk A este o modificare de rang 1 a lui A.
• Aplicarea transformării C = AUk , unde acum A ∈ Rl×m are m coloane,
iar Uk acţionează la dreapta, se face partiţionând A pe linii şi observând că, ı̂n
T
virtutea simetriei lui Uk , avem AUk = (Uk AT ) . Prin urmare, asupra coloanelor
lui AT , adică a liniilor lui A, are loc aceeaşi transformare ca mai sus. În particular,
postmultiplicarea cu Uk nu modifică primele k − 1 coloane ale matricei A.
AA. În calculul numeric generarea reflectorilor se face ı̂n scopul introducerii
de zerouri ı̂ntr-un vector. Pe scurt, fiind dat un vector x ∈ Rm , putem determina
un reflector Uk de forma (3.8) astfel ı̂ncât ultimele m − k componente ale vectorului
transformat să fie nule, i.e. (Uk x)i = 0, pentru i = k + 1 : m. Formularea precisă a
acestui fapt esenţial trebuie reţinută.

Propoziţia 3.1 Fixăm un ı̂ntreg k ∈ 1 : m − 1 şi fie x ∈ Rm un vector astfel ı̂ncât


m
X
2 def
σ = x2i 6= 0. (3.13)
i=k

Vectorul Householder u ∈ Rm având componentele


(
0, pentru i = 1 : k − 1
ui = xk + σ, pentru i = k (3.14)
xi , pentru i = k + 1 : m
precum şi scalarul
1
def
β = kuk2 = σuk (3.15)
2
definesc un reflector Uk de ordin m şi indice k astfel ı̂ncât
(
xi , pentru i = 1 : k − 1
(Uk x)i = −σ, pentru i = k (3.16)
0, pentru i = k + 1 : m.

Demonstraţie. Într-adevăr, datorită alegerii (3.14), avem


m m
!
1X 2 1 2
X
β= ui = (xk + σ) + xi = σ 2 + xk σ = σuk ,
2
2 2
i=k i=k+1

deci (3.15) are loc. Mai departe, din (3.12) rezultă


P
xk (xk + σ) + m
Pm 2
i=1 ui xi i=k+1 xi σ 2 + xk σ
ν= = = = 1.
β β β

În virtutea acestui fapt, (3.16) rezultă imediat din (3.11) şi (3.14). ♦
3.1. TRANSFORMĂRI ORTOGONALE 129

Relaţiile (3.13)–(3.15) furnizează un algoritm aproape complet pentru calculul


reflectorului Uk cu proprietatea cerută. Constanta σ este determinată, mai puţin
semnul, de faptul că Uk este o matrice ortogonală, deci kUk xk = kxk (vezi (3.13) şi
(3.16)). Pentru a evita pierderea de cifre semnificative la calculul componentei
uk = xk + σ, semnul lui σ se alege acelaşi cu cel al lui xk . (Menţionăm că
această alegere este esenţială pentru stabilitatea numerică a algoritmului rezultat.)
Consideraţiile de mai sus pot fi rezumate astfel.
Algoritmul 3.2 (Se dau un ı̂ntreg k ∈ 1 : m − 1 şi un vector
x ∈ Rm cu proprietatea (3.13). Se determină un reflector Uk astfel
ı̂ncât (Uk x)i = 0, pentru i = k+ 1 : m.)
Pm 2 1/2
1. σ = sgn(xk ) · i=k xi
2. uk = σ + xk ; ui = xi , pentru i = k + 1 : m
3. β = σuk
% Vectorul transformat
4. xk = −σ; xi = 0, pentru i = k + 1 : m
Comentarii. Subliniem ı̂ncă o dată că reflectorul Uk nu se formează niciodată
ca matrice, ci este complet definit numai prin intermediul vectorului u (ale cărui
prime k − 1 componente sunt nule) precum şi al scalarului β. Ultimele componente
ui , i = k + 1 : m, ale lui u se memorează natural pe poziţiile elementelor anulate
din x, după aplicarea transformării (vezi paşii 2 şi 4). Componenta uk şi scalarul
β se memorează separat. Numărul de operaţii necesar este Nop ≈ 2(m − k) (plus o
extragere de radical), vezi pasul 1. ♦
5
Implementarea algoritmului 3.2 ţine seama de următoarele considerente speci-
fice.
1◦ . Pentru a evita eventualele depăşiri ı̂n virgulă mobilă, posibile dacă elementele
xi , i = k : m, au valori absolute foarte mari sau foarte mici, calculul normei
euclidiene de la pasul 1 se asociază cu scalarea vectorului corespunzător, e.g. prin
raportare la M = maxi=k:m |xi |. (Pentru indicaţii mai precise, vezi secţiunea 3.1.2.)
2◦ . Dacă ı̂n situaţia de la punctul 1◦ rezultă M = 0 sau σ = 0, i.e. toate
componentele xi , i = k : m, ale vectorului dat x sunt deja nule, atunci convenim
să considerăm Uk = Im şi să semnalăm această situaţie punând β = 0. (Matricea
unitate Im este ortogonală şi poate fi asimilată cu un reflector ”impropriu”). Aceeaşi
convenţie se adoptă dacă algoritmul 3.2 este apelat pentru k = m.
3◦ . Deoarece vectorul Householder u este esenţial determinat numai ca direcţie,
la pasul 2 se poate face scalarea acestuia, e.g. luând
xk xi
2′ . uk = 1 + ; ui = , i = k + 1 : m.
σ σ
Se vede uşor că ı̂n acest caz rezultă β = uk , deci organizarea procedurală a calculelor
se simplifică, ı̂n particular se memorează separat un singur număr 6 . (Creşterea
numărului de operaţii este fără importanţă.) Rezumând cele de mai sus, obţinem
5 Convenim ca funcţia sgn : R → R utilizată ı̂n algoritmii ce urmează este definită de

−1, dacă x < 0
sgn(x) = . Atragem atenţia că utilizarea unor funcţii sgn predefinite ı̂n di-
1, dacă x ≥ 0
verse limbaje de nivel ı̂nalt (pentru care de regulă sgn(0) = 0) poate conduce la rezultate eronate.
6 Alternativ, u poate fi scalat astfel ı̂ncât u = 1. Această posibilitate va fi discutată mai
k
departe.
130 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

% Forma implementabilă a algoritmului 3.2.


1. β = 0
2. Dacă k < m
Pm 2 1/2
1. σ = i=k xi
2. Dacă σ 6= 0
1. σ ← sgn(xk ) σ
2. xi ← ui = xi /σ, pentru i = k : m
3. β ← uk = 1 + xk
% Componenta k a vectorului transformat
4. xk = −σ
Pe scurt, la pasul 2.1 are loc calculul normei, căreia mai departe i se atribuie
semnul corespunzător, iar la pasul 2.2.2 are loc scalarea vectorului Householder u.
Componentele ui , i = k + 1 : m, care constituie partea esenţială a vectorului u, se
memorează pe poziţiile corespunzătoare din x. În final, se calculează şi se memo-
rează separat scalarul β = uk , iar componenta de indice k a vectorului transformat
este returnată pe poziţia corespunzătoare xk , vezi (3.16).
Observaţia 3.1 În unele aplicaţii apar reflectori modificaţi Uk , de forma (3.8), ı̂n
care, spre deosebire de (3.9), vectorul Householder u are ultimele k − 1 componente
nule, i.e.
u = [ u1 . . . um−k+1 0 . . . 0 ]T . (3.17)
În consecinţă, matricea Uk are acum structura
 
Ũ1 0
Uk = , (3.18)
0 Ik−1
deci, ı̂n procesul de aplicare a transformării x ← Uk x, premultiplicarea cu Uk
nu modifică ultimele k − 1 componente ale lui x. De asemenea, este clar că prin
alegerea adecvată a vectorului Householder u, putem genera un reflector modificat
Uk astfel ı̂ncât primele m − k componente ale vectorului transformat să fie nule, i.e.
(Uk x)i = 0, i = 1 : m − k. Scrierea algoritmilor de transformare şi generare a
reflectorilor modificaţi, perfect similari cu algoritmii 3.1 şi 3.2 stabiliţi anterior, este
propusă ca exerciţiu. ♦

Proceduri de calcul cu reflectori


În problemele de calcul numeric relativ simple, algoritmii 3.1 şi 3.2 (ultimul, sub
forma sa implementabilă) pot fi utilizaţi ca atare. În practica profesională, cal-
culele se organizează procedural, exploatând faptul că algoritmii menţionaţi sunt
vectorizaţi ı̂n mod natural.
Pentru ı̂nceput, observăm că, ı̂n acord cu (3.10), partea ”activă” a unui reflector
Uk de indice k este ı̂ntotdeauna un reflector de indice 1 care acţionează asupra unui
vector de dimensiune adecvată. De aceea, ı̂n continuare vom considera k = 1.
AA. Fie x ∈ Rm un vector dat. Generarea unui reflector U1 astfel ı̂ncât (U1 x)i =
0, i = 2 : m, adică
U1 x = −σe1 , (3.19)
se face utilizând forma implementabilă a algoritmului 3.2 ı̂n care punem k = 1.
3.1. TRANSFORMĂRI ORTOGONALE 131

   
x1 x1
     ..   .. 
x1 −σ

 . 


 . 

 xk−1   xk−1 

 x2 
 U1

 u2 
   Uk  
 ..  −→  ..   xk

 −→

 −σ



 .   .   xk+1   uk+1 
   
xm um  .   . 
 ..   .. 
xm um

Fig. 3.2: Efectul aplicării procedurii RFG asupra vectorului x ∈ Rm ; ı̂n stânga,
β = RFG(x); ı̂n dreapta, β = RFG(x(k : m))

RFG % Se dă x ∈ Rm . Se generează un reflector U1 cu proprie-


tatea (3.19) şi se aplică transformarea. Partea esenţială ui ,
i = 2 : m, a vectorului Householder u se memorează pe
poziţiile corespunzătoare din x. La aplicarea ulterioară a
transformării se consideră u1 = β.
1. β = 0
2. Dacă m > 1 atunci
1. σ = kxk % NRM2
2. Dacă σ 6= 0 atunci
1. Dacă x1 6= 0 atunci σ ← sgn(x1 )σ
2. xi ← ui = xi /σ, pentru i = 1 : m % SCAL
3. β ← u1 = 1 + x1
4. x1 ← −σ

Comentarii. La pasul 2.1 nu am explicitat modul de calcul al normei euclidiene


pentru a aminti necesitatea scalării lui x. La pasul 2.2.2 are loc scalarea lui u, spe-
cifică procedurii RFG. Având ı̂n vedere considerente de eficienţă, la paşii menţionaţi
se recomandă utilizarea procedurilor NRM2 şi SCAL din BLAS. Observăm că dacă
vectorul dat x este nul sau are o singură componentă, atunci algoritmul returnează
β = 0, ceea ce, conform convenţiei adoptate anterior, ı̂nseamnă că U1 = Im .
Modul de apel al procedurii de generare (evidenţiind argumentele de intrare şi
ieşire) este [u, β, x] = RFG(x). Pentru a sublinia că, după cum am spus, partea
esenţială ui , i = 2 : m, a vectorului Householder este returnată ı̂n x, mai departe
vom nota
β = RFG(x),
ı̂n care x apare ca tablou de intrare/ieşire. În consecinţă, execuţia instrucţiunilor
β = RFG(x), respectiv β = RFG(x(k : m)), are efectul indicat ı̂n figura 3.2. ♦
AA. Fie acum U1 un reflector dat, generat de RFG, iar x ∈ Rm un vector
arbitrar. Aplicarea transformării

x ← U1 x (3.20)
132 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

Transformare Funcţie Mod de apel Apel ”rapid” Obs.


Reflector U1 x = −σe1 [u, β, x] = RFG(x) β = RFG(x)
def
U1 = (u, β) u1 = β
x ∈ Rm x ← U1 x x = RF(u, β, x) RF(u, β, x)
Reflector
modificat U1 x = −σem [u, β, x] = mRFG(x) β = mRFG(x)
def um = β
U1 = (u, β) x ← U1 x x = mRF(u, β, x) mRF(u, β, x)
x ∈ Rm

Tabelul 3.1: Proceduri de calcul cu reflectori

se face având ı̂n vedere algoritmul 3.1 precum şi convenţia specifică de memorare
a vectorului Householder u. Notând α = −ν şi ţinând seama că u1 = β, vectorul
transformat poate fi calculat efectuând numai adunări şi ı̂nmulţiri.

RF % Se dau un reflector U1 generat de RFG şi un vector


x ∈ Rm . Se aplică transformarea x ← U1 x.
1. Dacă β 6= 0 atunci
1. t = u1
2. u1 = β P
m
3. α = −( i=1 ui xi )/β % DOT
4. xi ← xi + αui , pentru i = 1 : m % SAXPY
5. u1 = t

Comentarii. Deoarece β = 0 semnalează că U1 = Im , transformarea se aplică


efectiv numai dacă β 6= 0. Prima componentă u1 a lui u nu este alterată, deoarece
ea conţine informaţii despre vectorul transformat ı̂n procesul de generare a reflec-
torului.
Modul de apel al procedurii este x = RF(u, β, x). Deoarece transformarea se
efectuează ı̂ntotdeauna pe loc ı̂n x, vom scrie simplu RF(u, β, x). ♦
Procedurile de calcul cu reflectori modificaţi se scriu similar. De exemplu, gene-
rarea unui reflector (modificat) U1 astfel ı̂ncât (U1 x)i = 0, i = 1 : m − 1, adică

U1 x = −σem ,

se face ı̂nlocuind pur şi simplu x1 cu xm ı̂n RFG. (Desigur, acum partea esenţială
a vectorului Householder u este ui , i = 1 : m − 1, iar um = β.) Scrierea detaliată
a procedurilor de generare şi aplicare a reflectorilor modificaţi, notate mai departe
mRFG şi respectiv mRF, este propusă cititorului ca exerciţiu.
Procedurile de calcul cu reflectori sunt prezentate sintetic ı̂n tabelul 3.1.
Subliniem că, ı̂n general, procedurile de generare şi aplicare a reflectorilor apar
ı̂n perechi, modificarea convenţiei de memorare a vectorului Householder din RFG
antrenând după sine o modificare corespunzătoare ı̂n RF.
Ilustrăm utilizarea procedurilor prin două exemple simple, dar extrem de im-
portante pentru ı̂ntreaga expunere ulterioară.
3.1. TRANSFORMĂRI ORTOGONALE 133

Exemplul 3.3 Se dă o matrice A ∈ Rm×n . Vom determina un reflector


m×m
U1 ∈ R astfel ı̂ncât elementele subdiagonale din prima coloană a matricei
B = U1 A să fie nule; apoi, vom calcula matricea transformată A ← B = U1 A.
Deoarece transformarea se aplică la stânga, partiţionăm A pe coloane. Notând
aj = A(:, j), j = 1 : n, trebuie să avem U1 a1 = −σe1 , deci U1 se determină aplicând
procedura RFG primei coloane a1 a matricei A. Totodată are loc şi transformarea
acestei coloane, i.e. scalarul −σ este returnat pe prima poziţie a11 . În continuare
transformarea celorlalte coloane aj , j = 2 : n, se face aplicând repetat procedura
RF. Prin urmare, rezultatul dorit se obţine pe loc ı̂n A utilizând algoritmul

QR1 1. β = RFG(A(:, 1))


2. Pentru j = 2 : n
1. RF(A(:, 1), β, A(:, j)).

Desigur, reflectorul U1 obţinut la pasul 1 poate fi aplicat mai departe unei alte
matrice, atâta timp cât partea esenţială A(2 : m, 1) a vectorului Householder u
precum şi scalarul β sunt disponibili. De exemplu, dacă C ∈ Rl×m , atunci trans-
formarea la dreapta C ← CU1 se efectuează partiţionând C pe linii, i.e.

1. Pentru i = 1 : l
1. RF(A(:, 1), β, C(i, :)).

Exemplul 3.4 Se dă o matrice A ∈ Rm×n . Vom determina un reflector


n×n
Z1 ∈ R astfel ı̂ncât elementele nediagonale din prima linie a matricei B = AZ1
să fie nule; apoi vom calcula matricea transformată A ← B = AZ1 .
Deoarece transformarea se aplică la dreapta, partiţionăm A pe linii. Raţionând
la fel ca mai sus, algoritmul de calcul este

LQ1 1. β = RFG(A(1, :))


1. Pentru i = 2 : m
1. RF(A(1, :), β, A(i, :)).

Pentru a evidenţia avantajele organizării procedurale, propunem cititorului să
scrie detaliat algoritmii de calcul stabiliţi mai sus, ı̂nlocuind apelurile la procedurile
RFG şi RF cu secvenţele de instrucţiuni ”scalare” corespunzătoare. Având ı̂n
vedere expunerea ulterioară, menţionăm că aceşti algoritmi efectuează prima etapă
de triangularizare a matricei A prin transformări ortogonale la stânga şi respectiv
la dreapta (vezi secţiunile 3.3 şi 3.6).

3.1.2 Rotaţii
După cum se ştie, ı̂n cazul m = 2 o rotaţie (plană) de unghi θ se reprezintă prin
matricea  
cos θ − sin θ
P = . (3.21)
sin θ cos θ

În cazul general m ≥ 2, vom adopta următoarea definiţie.


134 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

Definiţia 3.2 Fixăm doi ı̂ntregi i 6= k ∈ 1 : m. O matrice Pki ∈ Rm×m de forma


 
Ik−1

 c s 

Pki = 
 Ii−k−1  , unde c2 + s2 = 1 (3.22)

 −s c 
Im−i

se numeşte rotaţie de ordinul m ı̂n planul (k, i) sau transformare Givens 7 .

Se constată imediat că orice rotaţie Pki este o matrice ortogonală.


Rotaţiile Pki cu structura precizată mai sus au două proprietăţi importante.
AA. Fiind date o rotaţie Pki şi un vector x ∈ Rm , aplicarea transformării Pki ,
i.e. calculul vectorului transformat y = Pki x, se face extrem de simplu. Din (3.22)
se vede că Pki modifică numai elementele lui x cu aceiaşi indici, deci calculele se
desfăşoară avantajos pe loc ı̂n x, utilizând următoarea procedură.

Algoritmul 3.3 (Se dau o rotaţie Pki şi un vector x ∈ Rm . Se


aplică transformarea x ← Pki x).
1. t = xk
2. xk = ct + sxi
3. xi = cxi − st
Numărul de operaţii necesar este Nop = 6.
Aplicarea transformării B = Pki A, unde A ∈ Rm×n este o matrice cu n coloane,
se face utilizând algoritmul 3.3 pentru actualizarea fiecărei coloane.

% Se aplică transformarea A ← Pki A


1. Pentru j = 1 : n
1. aj ← Pki aj
T
Aplicarea transformării C = APki se face similar, partiţionând A pe linii.
În legatură cu algoritmul 3.3, este important să reţinem că, spre deosebire de
T
reflectori, rotaţiile nu sunt matrice simetrice. Mai precis, transformarea x ← Pki x
diferă de transformarea x ← Pki x, considerată mai sus, prin semnul scalarului s.
AA. La fel ca ı̂n cazul reflectorilor, generarea rotaţiilor vizează introducerea de
zerouri ı̂ntr-un vector. Mai precis, fiind dat un vector x ∈ Rm , putem determina
o rotaţie Pki astfel ı̂ncât componenta i a vectorului transformat să fie nulă, i.e.
(Pki x)i = 0.

Propoziţia 3.2 Fixăm doi ı̂ntregi i 6= k ∈ 1 : m şi fie x ∈ Rm un vector astfel


ı̂ncât
def
r2 = x2k + x2i 6= 0. (3.23)
7 Deşi cunoscute din secolul trecut şi utilizate de Jacobi, Rotaţiile au fost introduse ı̂n calculul

numeric de W. Givens ı̂n 1954. Structura (3.22) corespunde cazului i > k, iar ı̂n (3.21) avem
P = P12 cu c = cos θ, s = − sin θ. Subliniem că, ı̂n accepţiunea noastră, o rotaţie este definită de
două numere reale c, s, satisfăcând condiţia c2 + s2 = 1. Evident, ı̂n acest fel se evită utilizarea
ı̂n calcule a funcţiilor trigonometrice.
3.1. TRANSFORMĂRI ORTOGONALE 135

Numerele reale
xk xi
c= , s= (3.24)
r r
definesc o rotaţie Pki de ordin m ı̂n planul (k, i) astfel ı̂ncât
(
xl , pentru l 6= k, i
(Pki x)l = r, pentru l = k (3.25)
0, pentru l = i.

Demonstraţia este imediată observând că avem


    
c s xk r
= , (3.26)
−s c xi 0

precum şi c2 + s2 = 1. ♦
Precizând (deocamdată arbitrar) semnul lui r, relaţiile (3.23) şi (3.24) conduc
la următorul algoritm de calcul al rotaţiei Pki cu proprietatea cerută.

Algoritmul 3.4 (Se dau i 6= k ∈ 1 : m şi un vector x ∈ Rm . Se


calculează o rotaţie Pki astfel ı̂ncât (Pki x)i = 0).
p
1. r = x2k + x2i
2. c = xk /r, s = xi /r
% vectorul transformat
3. xk = r; xi = 0
Numărul de operaţii necesar este Nop = 6.
Semnificaţia geometrică a rotaţiei Pki calculate de algoritmul 3.4 apare ı̂n figura
3.3, unde m = 2, k = 1, i = 2.
Implementarea algoritmului 3.4 ţine seama de următoarele considerente.
1◦ . La pasul 1 se recomandă scalarea componentelor xk şi xi , de exemplu prin
ı̂mpărţire la N = |xk | + |xi |.
2◦ . Dacă N = 0 sau r = 0, i.e. ambele componente xk şi xi sunt deja nule,
atunci se ia Pki = Im , punând c = 1, s = 0.
3◦ . Semnul lui r se alege astfel ı̂ncât r şi cel mai mare (ı̂n valoare absolută)
dintre cele două numere xk şi xi să aibă acelaşi semn.
Această convenţie, adoptată ı̂n BLAS, nu este importantă ı̂n sine, dar are avan-
tajul de a permite reconstrucţia numeric stabilă a parametrilor c, s, dintr-un singur
număr z. (Desigur, ı̂n acest fel devine posibilă memorarea rotaţiei Pki pe poziţia
elementului xi anulat prin aplicarea transformării la pasul 3). Precizările necesare
vor fi făcute mai departe.
Observaţia 3.2 Reţinem că, deşi rotaţiile sunt transformări considerabil mai
simple decât reflectorii, ele sunt ı̂n acelaşi timp şi mai puţin eficiente decât aceştia,
ı̂ntrucât o rotaţie permite anularea unei singure componente a vectorului transfor-
mat. (Tocmai de aceea rotaţiile se utilizează mai ales ı̂n probleme cu date struc-
turate, asupra cărora ele au un efect de ”rezoluţie fină” a zerourilor.)
În caz de nevoie, un efect similar cu al reflectorului Uk determinat de algoritmul
3.2 poate fi obţinut utilizând o secvenţă de rotaţii, e.g.
136 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

2
x2 6 x
>




r 



 - -
x1 P12 x 1

Fig. 3.3: Efectul aplicării unei rotaţii P12 asupra unui vector x ∈ R2

Pk = Pkm . . . Pk,k+2 Pk,k+1 , (3.27)


ı̂n care rotaţiile Pki se determină succesiv (aplicând algoritmul 3.4) pentru a anula
componentele corespunzătoare xi , i = k + 1 : m. (Scrierea algoritmului de calcul
este propusă ca exerciţiu.) Alternativ, ı̂n acelaşi scop poate fi utilizată secvenţa

Pk = Pk,k+1 Pk+1,k+2 . . . Pm−1,m , (3.28)

ı̂n care rotaţiile Pki anulează aceleaşi componente ı̂n ordine inversă, adică xi ,
i = m : −1 : k + 1.
Menţionăm că ı̂n practică se utilizează frecvent secvenţe de rotaţii disjuncte care
au proprietăţi numerice mai bune, vezi problemele 3.14 şi 3.22 8 . ♦

Proceduri de calcul cu rotaţii


În continuare dăm câteva indicaţii privind organizarea procedurală a calculelor cu
rotaţii 9 . Deoarece partea activă a unei rotaţii Pki de forma (3.22) este evident o
rotaţie plană ce acţionează asupra unui vector x ∈ R2 , ı̂n continuare vom considera
m = 2 şi vom nota P12 = P .
AA. Fie x ∈ R2 un vector dat. Generarea unei rotaţii P astfel ı̂ncât (P x)2 = 0,
adică     
c s x1 r
= , (3.29)
−s c x2 0
se face ţinând seama de indicaţiile de implementare ce ı̂nsoţesc algoritmul 3.4.

ROTG % Se dă x ∈ R2 . Se generează o rotaţie P cu proprietatea


(3.29) şi se aplică transformarea. Totodată, pe poziţia ele-
mentului anulat x2 se returnează scalarul z, pe baza căruia
este posibilă reconstrucţia numeric stabilă a parametrilor
c, s.
1. r = kxk
2. Dacă r = 0 atunci
8 Două rotaţii Pki , Plj se numesc disjuncte dacă toţi indicii sunt diferiţi.
9 Subliniem că, ı̂ntrucât operează asupra unor vectori cu două componente, procedurile de calcul
cu rotaţii sunt de tip scalar.
3.1. TRANSFORMĂRI ORTOGONALE 137

1. c = 1, s = 0
altfel
2. Dacă |x2 | ≥ |x1 | atunci
1. r ← sgn(x2 )r
altfel
2. r ← sgn(x1 )r
3. c = x1 /r, s = x2 /r
4. x1 = r
% calculul lui z
5. Dacă c = 0 atunci
1. z = 1
altfel dacă |x2 | ≥ |x1 | atunci
2. z = 1/c
altfel
3. z = s
6. x2 = z

Modul de apel al procedurii de generare este [c, s, x1 , x2 ] = ROTG(x1 , x2 ).

AA. Fie acum P o rotaţie dată, generată de ROTG, iar x ∈ R2 un vector


arbitrar. Aplicarea transformării

x ← Px (3.30)

se face direct numai dacă parametrii c, s sunt disponibili ca atare; ı̂n caz contrar, ı̂n
prealabil are loc reconstrucţia lor pe baza scalarului z, utilizând secvenţa următoare.
138 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

Transformare Funcţie Mod de apel Apel ”rapid” Obs.


a←r
Rotaţie P x = re1 [c, s, a, b] = ROTG(a, b) [c, s] = ROTG(a, b)
b←z
def
P =(c, s)
 x ← Px [a, b] = ROT(c, s, a, b) ROT(c, s, a, b)
a
x=
b x ← P T x [a, b] = ROT(c, −s, a, b) ROT(c, −s, a, b)

Tabelul 3.2: Proceduri de calcul cu rotaţii. (N.B. Semnificaţia lui z este precizată
ı̂n text)

% Reconstrucţia perechii (c, s).


1. Dacă z = 1 atunci
1. c = 0, s = 1
altfel dacă |z| >√1 atunci
2. c = 1/z, s = 1 − c2
altfel √
3. s = z, c = 1 − s2

Procedura de transformare propriu-zisă coincide ı̂n esenţă cu algoritmul 3.3.

ROT % Se aplică transformarea x ← P x.


1. t = x1
2. x1 ← ct + sx2
3. x2 ← cx2 − st

Modul de apel al procedurii este [x1 , x2 ] = ROT(c, s, x1 , x2 ).


Procedurile de calcul cu rotaţii sunt prezentate sintetic ı̂n tabelul 3.2. (Şi ı̂n
cazul rotaţiilor, ca şi al reflectorilor, mai departe vom utiliza notaţiile procedurale
prescurtate indicate ı̂n penultima coloană a tabelului.)

3.2 Transformări unitare


În această secţiune vom prezenta principalele transformări unitare utilizate ı̂n cal-
culele cu matrice complexe. Având ı̂n vedere că proprietăţile structurale ale acestor
transformări sunt aceleaşi cu proprietăţile similare ale transformărilor ortogonale
descrise ı̂n secţiunea anterioară, expunerea va fi orientată ı̂n principal asupra as-
pectelor procedurale specifice.

3.2.1 Reflectori complecşi


Considerăm spaţiul complex Cm cu produsul scalar (x, y) = y H x şi norma euclidiană

Xm
kxk = (xH x)1/2 = ( |xi |2 )1/2 .
i=1
3.2. TRANSFORMĂRI UNITARE 139

Im 6
'$Γ
9

0rr r Re-

&%
τ = β1 = 2
kuk2

Fig. 3.4: Cercul Γ ı̂n planul complex

Amintim că o matrice Q ∈ Cm×m se numeşte unitară dacă QH Q = Im .


Fie u ∈ Cm un vector Householder, u 6= 0. Considerăm matrice complexe de
forma
not uuH
U1 = QH1 = Im − , (3.31)
β
respectiv
Q1 = Im − τ uuH , (3.32)
unde β şi τ sunt doi parametri legaţi prin relaţia τ = β̄ −1 . Avem
QH H H H 2 H H
1 Q1 = (Im − τ̄ uu )(Im − τ uu ) = Im − (τ + τ̄ )uu + |τ | u(u u)u ,

deci matricea Q1 este unitară dacă şi numai dacă


2Reτ = |τ |2 kuk2 , (3.33)
i.e. scalarul τ aparţine cercului Γ din planul complex care trece prin origine şi are
raza egală cu 1/kuk2 (vezi figura 3.4). Pe de altă parte, matricea Q1 este hermitică
dacă şi numai dacă τ ∈ R. Asociind cele două proprietăţi, pentru τ = 0 obţinem
Q1 = Im , iar pentru
1 2
τ= = , (3.34)
β kuk2
din (3.31) sau (3.32) obţinem reflectorii hermitici care constituie generalizarea di-
rectă a reflectorilor reali din (3.8).
Pentru toate celelalte valori τ ∈ Γ (τ 6= 0 şi τ 6= 2/kuk2), matricele de forma
(3.32) sunt unitare şi de aceea se numesc (abuziv dar comod) reflectori complecşi.
Subliniem că, ı̂n această accepţiune mai largă, reflectorii complecşi nu sunt her-
mitici, deci necesită o manipulare relativ mai atentă decât omologii lor reali (acum
not
U1 = QH 1 6= Q1 !).
AA. Fie x ∈ Cm un vector dat. Vom determina un reflector Q1 astfel ı̂ncât
H
(Q1 x)i = 0, i = 2 : m, i.e.
QH
1 x = −σe1 , (3.35)
unde σ ∈ C este un scalar ı̂ncă nedeterminat. Deoarece matricea Q1 este unitară
trebuie să avem kQH
1 xk = kxk, deci modulul lui σ este fixat, mai precis |σ| = kxk.
Din considerente de stabilitate numerică, vom alege
x1
σ= kxk (3.36)
|x1 |
140 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

sau
σ = sgn(Rex1 )kxk. (3.37)
(Reţinem că ı̂n primul caz σ ∈ C, iar ı̂n al doilea σ ∈ R.)
În continuare scriem ca de obicei
uuH
QH
1 x = (Im − )x = x − νu, (3.38)
β

unde
uH x
ν= . (3.39)
β
Prin urmare, relaţia (3.35) are loc dacă şi numai dacă u = (x + σe1 )/ν, sau pe
componente
x1 + σ xi
u1 = ; ui = , i = 2 : m. (3.40)
ν ν
De asemenea, trebuie să avem

uH x (xH + σ̄eT1 )x kxk2 + σ̄x1


β= = = ,
ν |ν|2 |ν|2

unde, conform celor spuse mai sus, kxk2 = |σ|2 , deci


σ̄ x1 + σ
β= . (3.41)
ν̄ ν
Pentru a determina complet reflectorul U1 cu proprietatea (3.35) rămâne să
precizăm valoarea parametrului de scalare ν 6= 0 din (3.40) şi (3.41).
a) Dacă luăm ν = 1 şi alegem σ din (3.36) (sau din (3.37)), atunci obţinem
analogul complex al algoritmului 3.1.
b) Pe de altă parte, dacă dorim simplificarea relaţiei (3.41), atunci sunt posibile
două alegeri, i.e. ν = σ şi ν = x1 + σ, care conduc la
(
x1 xi
u1 = 1 + ; ui = , i = 2 : m
σ σ (3.42)
β = u1

şi respectiv 
xi
 u1 = 1;
 ui = , i=2:m
x1 + σ (3.43)
x 1
 τ = 1 + 1 , (β = ).

σ τ̄
În practica numerică actuală se ı̂ntâlnesc două versiuni de implementare a rela-
ţiilor de calcul stabilite mai sus.
• În LINPACK [XIII] se asociază relaţiile (3.36) şi (3.42). În consecinţă, para-
metrul β = u1 rezultă real, deci reflectorul obţinut este hermitic, QH 1 = Q1 . În
schimb, prima componentă a vectorului transformat

x1 ← −σ
3.2. TRANSFORMĂRI UNITARE 141

este complexă. Procedura de generare a reflectorului hermitic Q1 diferă de proce-


dura reală RFG numai prin modul de calcul al lui σ, vezi (3.36).
•• În LAPACK [XV] se asociază relaţiile (3.37) şi (3.43). Instrumentul fun-
damental de lucru este acum reflectorul complex Q1 , ı̂n care parametrul τ rezultă
complex; ı̂n schimb faptul că u1 = 1 şi σ ∈ R poate fi exploatat avantajos ı̂n multe
situaţii concrete. Procedura de generare a reflectorului Q1 este următoarea.

CRFG % Se dă x ∈ Cm . Se generează un reflector complex Q1 cu pro-


prietatea (3.35) şi se aplică transformarea. Componentele
ui , i = 2 : m, ale vectorului Householder u se memorează
pe poziţiile corespunzătoare din x. La aplicarea ulterioară
a transformării se consideră u1 = 1.
1. τ = 0
2. Dacă m > 1 atunci
1. σ = kxk
2. Dacă σ 6= 0 atunci
1. Dacă Re(x1 ) 6= 0 atunci σ ← sgn(Rex1 )σ
2. xi ← ui = xi /(x1 + σ), pentru i = 1 : m
3. τ ← (x1 + σ)/σ
4. x1 ← −σ

Comentarii. Calculul normei euclidiene la pasul 2.1 se poate face utilizând funcţia
complexă CNRM2 din BLAS 1. ♦
AA. Fie acum x ∈ Cm un vector arbitrar, iar Q1 un reflector dat. Aplicarea
transformărilor
x ← QH1 x, x ← Q1 x (3.44)
se face ţinând seama de relaţiile (3.38), (3.39) precum şi de tipul reflectorului con-
siderat.
• Dacă Q1 este un reflector hermitic, atunci cele două transformări (3.44) co-
incid, iar procedura corespunzătoare diferă de procedura reală RF numai prin uti-
lizarea produsului scalar complex la pasul 1.1, vezi (3.39).
•• Dacă Q1 este un reflector complex, generat de procedura CRFG, atunci se
ţine seama că prima componentă u1 = 1 a vectorului Householder nu este memorată
ca atare. Scrierea procedurii de transformare corespunzătoare primei relaţii (3.44),
de exemplu notată CRF, este propusă ca exerciţiu.
Procedurile de calcul cu reflectori complecşi sunt prezentate ı̂n tabelul 3.3 10 .
La fel ca ı̂n cazul real, tipic procedura CRFG se utilizează pentru a introduce
zerouri ı̂ntr-o anumită coloană a unei matrice A, iar procedura CRF se utilizează
pentru a transforma ı̂n mod corespunzător celelalte coloane.
Presupunând că tabloul A e dimensionat adecvat, ı̂n general există patru tipuri
de transformări posibile, două la stânga (QA şi QH A) şi două la dreapta (AQ şi
AQH ). În primul caz A se partiţionează pe coloane şi fiecărei coloane i se aplică
transformarea corespunzătoare. În al doilea caz A se partiţionează pe linii. 11
10 Procedurile de calcul cu reflectori complecşi modificaţi, e.g. CmRFG etc. se scriu similar cu

cazul real. Detaliile sunt lăsate ı̂n sarcina cititorului interesat.


11 Pentru a acoperi toate aceste situaţii cu o singură procedură CLARF, ı̂n LAPACK (ca şi ı̂n
142 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

Transformare Funcţie Mod de apel Apel ”rapid” Obs.


Reflector τ ∈C
QH
1 x = −σe1 [u, τ, x] = CRFG(x) τ = CRFG(x)
complex σ∈R
def
Q = (τ, u) x ← QH1 x x = CRF(u, τ, x) CRF(u, τ, x)
1
x ∈ Cm x ← Q1 x x = CRF(u, τ̄ , x) CRF(u, τ̄ , x)

Tabelul 3.3: Proceduri de calcul cu reflectori complecşi. Procedurile de calcul cu


reflectori hermitici sunt similare cu RFG şi RF

3.2.2 Rotaţii complexe


Considerăm spaţiul complex C2 cu norma euclidiană kxk = (|x1 |2 + |x2 |2 )1/2 .
O rotaţie complexă este o matrice de forma
 
c s
P = , (3.45)
−s̄ c̄

ı̂n care parametrii c, s satisfac relaţia

|c|2 + |s|2 = 1. (3.46)

Se verifică uşor că matricea P este unitară, i.e. P H P = I2 .


AA. Fie x ∈ C2 un vector dat. Vom determina o rotaţie complexă P astfel
ı̂ncât     
c s x1 r
= , (3.47)
−s̄ c̄ x2 0
unde r este un scalar astfel ı̂ncât |r| = kxk. O analiză simplă arată că aici, ca şi ı̂n
cazul reflectorilor complecşi, sunt posibile două opţiuni.
• Putem alege r complex, e.g.
x1
r= kxk, (3.48)
|x1 |

şi ı̂n acest caz obţinem


|x1 | x1 x̄2
c= , s= , (3.49)
kxk |x1 | kxk

deci parametrul c rezultă real pozitiv. Procedura de calcul este următoarea.

CROTG % Se dă x ∈ R2 . Se generează o rotaţie complexă P cu pro-


prietatea (3.47) şi se efectuează transformarea.
1. Dacă |x1 | = 0 atunci
1. c = 0, s = 1
BLAS3) se utilizează opţiunile TRANS şi SIDE, vezi secţiunea 1.11. Subliniem că urmărirea acestor
detalii, aparent pur tehnice, este esenţială pentru asigurarea corectitudinii şi optimizarea calcula-
torie a algoritmilor de calcul obţinuţi.
3.3. TRIANGULARIZAREA ORTOGONALĂ 143

Transformare Funcţie Mod de apel Apel ”rapid” Obs.


Rotaţie c∈R
P x = re1 [c, s, a, b] = CROTG(a, b) [c, s] = CROTG(a, b)
complexă r∈C
def
P =(c, s)
 x ← Px [a, b] = CROT(c, s, a, b) CROT(c, s, a, b)
a H
x= x ← P x [a, b] = CROT(c̄, −s, a, b) CROT(c̄, −s, a, b)
b

Tabelul 3.4: Proceduri de calcul cu rotaţii complexe

2. x1 ← r = x2 , x2 = 0
altfel
3. α = x1 / |x1 |
4. ρ = kxk
5. c = |x1 | / ρ, s = αx̄2 / ρ
6. x1 ← r = αρ, x2 = 0

•• Alternativ, putem alege r real, de exemplu

r = sgn(Rex1 )kxk (3.50)

şi ı̂n acest caz ambii parametri


x̄1 x̄2
c= , s= (3.51)
r r
rezultă complecşi. (Menţionăm că ı̂n practică se ı̂ntâlnesc ambele opţiuni (3.48) şi
(3.50), implementate sub diverse forme relativ sofisticate.)
AA. Fie acum P o rotaţie complexă dată, generată de CROTG, iar x ∈ C2 un
vector arbitrar. Procedura de transformare

x ← P x, (3.52)

de exemplu notată CROT, se scrie cu uşurinţă ı̂n maniera algoritmului 3.3, dar,
desigur, ţinând seama de forma actuală (3.45) a lui P .
Procedurile de calcul cu rotaţii complexe sunt prezentate sintetic ı̂n tabelul 3.4.

3.3 Triangularizarea ortogonală


În această secţiune vom descrie principalele proceduri de triangularizare a unei
matrice A ∈ Cm×n prin transformări unitare de echivalenţă la stânga. În cazul real
A ∈ Rm×n , ı̂n acelaşi scop se utilizează transformări ortogonale. Pentru concizia
expunerii vom considera ambele cazuri ı̂n paralel.
not
Teorema 3.1 Oricare ar fi A ∈ Cm×n , există o matrice unitară U = QH ∈ Cm×m
astfel ı̂ncât matricea
U A = R, respectiv QH A = R (3.53)
144 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

este superior triunghiulară.


În cazul real A ∈ Rm×n , matricea de transformare U = QT poate fi aleasă reală
şi ortogonală, deci R rezultă reală.

Pe scurt, orice matrice este unitar echivalentă (la stânga) cu o matrice superior
triunghiulară. A doua relaţie arată că A poate fi scrisă sub forma unui produs
A = QR, unde Q este unitară, iar R este superior triunghiulară. În calculul numeric,
această relaţie se numeşte factorizare QR, de aceea procedurile de calcul stabilite
pe baza relaţiei fundamentale (3.53) vor fi notate cu sigla QR. (Asupra factorizării
QR vom reveni pe larg ı̂n secţiunea următoare.)
Demonstraţia va fi constructivă, conducând la o procedură de triangularizare
ortogonală a matricei A utilizând reflectori sau rotaţii. Pentru precizare, ı̂n cele ce
urmează alegem prima posibilitate.
În cazul real, ne referim la faptele stabilite ı̂n secţiunea 3.1.1 şi pentru claritate
considerăm succesiv două situaţii cu semnificaţii structurale distincte.
În cazul m > n matricea de transformare va fi un produs de reflectori, i.e.

U = Q T = Un . . . U2 U1 ,

unde reflectorii Uk ce se determină prin metodele cunoscute pentru a introduce


zerourile necesare ı̂n coloanele corespunzătoare ak , k = 1 : n, ale matricei A.
În consecinţă, procedura de triangularizare are n etape. Notăm A1 = A, unde
A = [a1 a2 . . . an ].
Etapa 1. Dacă elementele ai1 , i = 2 : m, nu sunt toate nule, atunci conform
propoziţiei 3.1, există un reflector U1 ∈ Rm×m de ordinul m şi indice 1, astfel ı̂ncât

(U1 a1 )i = 0, i = 2 : m.

În virtutea acestui fapt, matricea transformată


 
r11 r12 . . . r1n
 (2) (2) 
 0 a22 . . . a2n 
 (2) (2) 
A2 = U1 A1 = [U1 a1 U1 a2 . . . U1 an ] =  0 a32 . . . a3n 
 
 ... 
(2) (2)
0 am2 . . . amn

are toate elementele subdiagonale ale primei coloane egale cu zero, i.e. este superior
triunghiulară ı̂n prima coloană. Dacă ai1 = 0 pentru i = 2 : m, atunci luăm
pur şi simplu U1 = Im şi trecem la etapa următoare. (Matricea unitate Im este
ortogonală !)
Etapa k, k = 2 : n. Presupunem că după desfăşurarea primelor k − 1 etape ale
procedurii am obţinut matricea

Ak = Uk−1 . . . U2 U1 A
3.3. TRIANGULARIZAREA ORTOGONALĂ 145

superior triunghiulară ı̂n primele k − 1 coloane, i.e.


 
r11 r12 . . . r1,k−1 r1k ... r1n

 r22 . . . r2,k−1 r2k ... r2n 

 .. .. .. .. 
 . . . . 
 
(k) (k)
 rk−1,k−1 rk−1,k . . . rk−1,n 
Ak = [a1 . . . ak . . . a(k)
 
n ]=  (k)
akk . . . akn
(k) .
 
 (k) (k) 
 0 ak+1,k . . . ak+1,n 
 
 .. .. 
 . . 
(k) (k)
amk . . . amn

(k)
Acum, dacă elementele aik , i = k + 1 : m, nu sunt toate nule, atunci există un
reflector Uk ∈ Rm×m de ordinul m şi indice k, astfel ı̂ncât
(k)
(Uk ak )i = 0, i = k + 1 : m.

(Altfel, luăm Uk = Im şi trecem la etapa următoare.) Tinând cont de faptul că
orice reflector de indice k nu modifică un vector ale cărui ultime m − k + 1 elemente
sunt nule (vezi (3.11), unde ν = 0), rezultă că matricea
(k) (k)
Ak+1 = Uk Ak = [Uk a1 . . . U k ak . . . Uk a(k)
n ]

are primele k − 1 coloane nemodificate, iar ı̂n coloana k elementele subdiagonale


sunt nule; prin urmare Ak+1 este superior triunghiulară ı̂n primele k coloane. De
asemenea, deoarece reflectorul este de indice k, primele k − 1 linii ale lui Ak rămân
nemodificate.
Aşadar, procedura de anulare a elementelor subdiagonale poate fi iniţializată,
ca ı̂n etapa 1, şi, o dată pornită, poate fi continuată, ca ı̂n etapa k. Astfel, când
m > n, după n etape, obţinem matricea
 ′ 
def R
R = An+1 = Un Un−1 . . . U2 U1 A = , (3.54)
0

unde R′ ∈ Rn×n este superior triunghiulară de ordin n.


În cazul m ≤ n, procedând similar, după m − 1 etape obţinem matricea superior
trapezoidală
def
R = Am = Um−1 . . . U2 U1 A = [ R′ S ], (3.55)
unde R′ ∈ Rm×m este superior triunghiulară de ordin m, iar S ∈ Rm×(n−m) este
un bloc dreptunghiular fără particularităţi de structură.
Demonstraţia teoremei ı̂n cazul real este ı̂ncheiată.
În cazul complex raţionamentul este identic, iar detaliile pot fi completate cu
uşurinţă de cititorul interesat prin referire la secţiunea 3.2.1. ♦
Observaţia 3.3 Atât enunţul cât şi demonstraţia teoremei 3.1 au un caracter
procedural, ı̂n sensul că matricea R rezultată ı̂n urma procesului de triangularizare
146 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

nu trebuie să fie neapărat superior triunghiulară. De exemplu, ı̂n cazul m = n, ma-
tricea A poate fi adusă la forma inferior triunghiulară utilizând reflectorii modificaţi
din observaţia 3.1. Această posibilitate va fi discutată ı̂n finalul secţiunii următoare.
De asemenea, transformările unitare de echivalenţă pot fi aplicate la dreapta matri-
cei A, după cum vom arăta ı̂n secţiunea 3.6. În toate cazurile, tehnica de lucru este
aceeaşi, iar alegerea procedurii de triangularizare adecvate este dictată de structura
problemei considerate. ♦

A. Proceduri de triangularizare cu reflectori


Procedura de triangularizare ortogonală degajată pe parcursul demonstraţiei de
mai sus este similară cu procedura de eliminare gaussiană, cunoscută din capitolul
anterior, şi, la fel ca aceasta, se poate desfăşura pe loc ı̂n tabloul A, astfel ı̂ncât ı̂n
final matricea R să fie memorată ı̂n triunghiul superior al lui A.
În cazul real, relaţiile (3.54) şi (3.55) conduc la următoarea schemă de calcul.

QR RF % Triangularizarea matricei A utilizând reflectori


1. Pentru k = 1 : min (m − 1, n)
1. Se determină Uk a.ı̂. (Uk A)ik = 0, i = k + 1 : m
2. A ← Uk A.

Dacă matricea A este monică, i.e. are coloane independente, atunci la fiecare
etapă elementele aik , i = k : m, ale matricei curente A nu sunt toate nule. În
consecinţă, pentru a determina reflectorul Uk (adică vectorul Householder uk şi
scalarul βk ), la pasul 1.1 se utilizează algoritmul 3.2, aplicat vectorului x = A(:, k).
(Componentele nenule ale vectorilor Householder uk vor fi notate uik , i = k : m.)
Pentru calculul transformării de la pasul 1.2 se utilizează algoritmul 3.1 aplicat
vectorilor x = A(:, j), j = k + 1 : n. Combinând ideile de mai sus, rezultă imediat

% Versiunea primară a algoritmului de triangularizare cu reflectori


1. Pentru k = 1 : min (m − 1, n)
% se determină transformarea Uk
Pm 2 1/2
1. σ = sgn(akk ) · i=k aik
2. ukk = akk + σ; uik = aik , pentru i = k + 1 : m
3. βk = σukk
% se aplică Uk
4. Pentru j P=k+1:n
1. ν = ( m i=k uik aij ) /βk
2. aij ← aij − νuik , pentru i = k : m
% coloana k
5. akk = −σ; aik = 0, pentru i = k + 1 : m

Comentarii. Algoritmul necesită aproximativ NQR = 2(mn2 − n3 /3) operaţii,


care ı̂n principal se consumă la pasul 1.4 pentru actualizarea coloanelor A(k : m, j),
j = k + 1 : n, ale matricei ”rămase”. În particular, dacă m = n, atunci
NQR = (4/3)n3 este dublu faţă de algoritmul de eliminare gaussiană. ♦
3.3. TRIANGULARIZAREA ORTOGONALĂ 147

În general, fie acum A ∈ Cm×n o matrice oarecare. Pentru uniformizarea scrierii,
def
ı̂n cazul m ≤ n completăm şirul de transformări din (3.55) cu Um = Im . De aseme-
H
nea, notăm s = min(m, n), precum şi Uk = Qk , unde Qk sunt reflectorii com-
plecşi (ı̂n particular hermitici) utilizaţi pentru anularea elementelor subdiagonale la
etapele k = 1 : s. Cu aceste notaţii, relaţiile (3.54) şi (3.55) pot fi scrise ı̂mpreună
sub forma (3.53), unde
U = QH = QH H H
s . . . Q2 Q1 , (3.56)
iar schema de triangularizare devine

QR % Schemă generală de triangularizare QR


1. Pentru k = 1 : s
1. Se generează QH H
k a.ı̂. (Qk A)ik = 0, i = k + 1 : m
H
2. A ← Qk A.

• În cazul real sau ı̂n cazul utilizării reflectorilor hermitici de forma (3.31) avem
QH k = Qk , iar implementarea schemei QR are la bază procedurile RFG şi RF din
tabelul 3.1. Componentele uik , i = k + 1 : m, ale vectorilor Householder uk se
memorează natural pe poziţiile elementelor anulate, iar scalarii βk se memorează
ı̂ntr-un vector suplimentar, ca ı̂n următoarea diagramă corespunzătoare situaţiei de
după pasul k
 
r11 r12 . . . r1k r1,k+1 . . . r1n
 u21 r22 . . . r2k r2,k+1 . . . r2n 
 
 .. . . .
. .. .. 

 . . . . . 

 uk1 uk2 . . . rkk rk,k+1 . . . rkn 
 
u (k+1) (k+1) 
 k+1,1 uk+1,2 . . . uk+1,k ak+1,k+1 . . . ak+1,n 

 .. .. .. .. .. 

 . . . . . 
(k+1) (k+1)
um1 um2 . . . umk am,k+1 . . . amn
 
β1 β2 ... βk
Algoritmul rezultat se redactează astfel.

Algoritmul 3.5 (QR – triangularizare ortogonală cu reflectori her-


mitici) (Se dă A ∈ Cm×n . Se efectuează triangularizarea ortogonală a
matricei A, i.e. QH A = R, unde QH = Qs . . . Q2 Q1 , iar Qk sunt reflec-
tori hermitici. Partea esenţială uk (k + 1 : m) a vectorilor Householder
uk se memorează pe poziţiile corespunzătoare A(k + 1 : m, k). La apli-
carea ulterioară a transformărilor se ţine seama că ukk = βk , k = 1 : s.
Elementele nenule ale matricei superior triunghiulare R suprascriu ele-
mentele corespunzătoare din triunghiul superior al matricei A.)
1. Pentru k = 1 : s
1. βk = 0
2. Dacă k < m atunci
1. σ = kA(k : m, k)k
148 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

2. Dacă σ 6= 0 atunci
akk
1. Dacă akk 6= 0 atunci σ ← σ
|akk |
2. aik ← uik = aik /σ, pentru i = k : m
3. βk ← ukk = 1 + akk
4. Pentru j = P k+1:n
1. α = − ( m i=k ūik aij ) /βk
2. aij ← aij + αuik , pentru i = k : m
% elementul diagonal
5. akk = −σ

Comentarii. În cazul real, algoritmul 3.5 necesită NQR operaţii 12 şi este numeric
stabil, după cum vom arăta ı̂n secţiunea 3.8. Modul de apel este [A, β] = QR(A),
unde β este vectorul real cu componentele βk , k = 1 : s, iar A apare ca tablou
de intrare-ieşire. Subliniem că algoritmul 3.5 nu calculează explicit reflectorii Qk
din (3.56), şi cu atât mai puţin matricea de transformare QH , ci doar memorează
(extrem de economic) toate elementele necesare pentru definirea acestora. ♦

Exemplul 3.5 În cazul matricelor cu structură specială, algoritmul general prezen-
tat mai sus se adaptează ı̂n mod corespunzător, având ı̂n vedere conservarea struc-
turii şi exploatarea acesteia
  ı̂n scopul reducerii numărului de operaţii. În acest sens
R
fie matricea A+ = , ı̂n care blocul lider R ∈ Cn×n este deja superior tri-
C
unghiular, iar C ∈ C(m−n)×n este un bloc dat cu l = m − n ≥ 1 linii. Schema de
triangularizare ortogonală este
 
H R+
Q A+ = , QH = QH H H
n . . . Q2 Q1 ,
0

ı̂n care Qk sunt reflectori definiţi de vectorii Householder

uk = [0 . . . 0 ukk 0 . . . 0 un+1,k . . . umk ]T .

La fiecare etapă, elementele βk = ukk şi uik , i = n + 1 : m, se determină ca ı̂n


algoritmul 3.5 pentru a anula elementele corespunzătoare din coloana k a blocului
C. În plus, datorită structurii suplimentare de zerouri, aplicarea transformării lasă
nemodificate liniile i = k + 1 : n ale matricei A+ , deci conservă structura supe-
rior triunghiulară a blocului lider. În consecinţă, numărul de operaţii se reduce la
2(m − n)n2 . Detaliile de implementare şi analiza unor cazuri particulare semnifica-
tive sunt propuse ı̂n problema 3.20. ♦

•• În cazul utilizării reflectorilor complecşi de forma generală (3.32),


implementarea schemei QR se face utilizând direct procedurile CRFG şi CRF
din tabelul 3.3.
12 În cazul complex, notând N = mn2 − n3 /3, algoritmul 3.5 cere N adunări complexe şi N

ı̂nmulţiri complexe. Deoarece o adunare complexă este echivalentă cu 2 adunări (reale), iar o
ı̂nmulţire complexă este echivalentă cu două adunări şi patru ı̂nmulţiri, algoritmul 3.5 cere 4N
adunări şi 4N ı̂nmulţiri, adică 8N (sau 4NQR ) operaţii reale (flopi).
3.4. FACTORIZAREA QR 149

CQR % Algoritmul de triangularizare ortogonală cu reflectori com-


plecşi, i.e. QH A = R, unde QH = QH H H
s . . . Q2 Q1 .
1. Pentru k = 1 : s
1. τk = CRFG(A(k : m, k))
2. Pentru j = k + 1 : n
1. CRF(A(k : m, k), τk , A(k : m, j))

Modul de apel este [τ, A] = CQR(A), unde τ este acum vectorul complex cu
componentele τk , k = 1 : s.

B. Proceduri de triangularizare cu rotaţii


Procesul de triangularizare definit prin relaţia (3.53) poate fi implementat alternativ
utilizând rotaţii.
De exemplu, ı̂n cazul real, pentru anularea elementelor subdiagonale se utilizează
secvenţe de rotaţii Pk de forma (3.26), ı̂n care la fiecare etapă k rotaţiile Pki se
determină utilizând algoritmul 3.4 pentru a introduce zerourile necesare ı̂n poziţiile
corespunzătoare aik , i = k + 1 : m, ale matricei curente A. Actualizarea coloanelor
următoare se face utilizând algoritmul 3.3.
Procedura de triangularizare se poate desfăşura pe loc ı̂n tabloul A, utilizând
următoarea schemă de calcul.

QR ROT % Triangularizarea matricei A utilizând rotaţii


1. Pentru k = 1 : min (m − 1, n)
1. Pentru i = k + 1 : m
1. Se determină Pki astfel ı̂ncât (Pki A)ik = 0
2. A ← Pki A

Detaliile de justificare precum şi scrierea algoritmului ı̂n forma sa implementabilă


sunt propuse ca exerciţii. Menţionăm că numărul de operaţii efectuat aici este dublu
faţă de algoritmul similar care utilizează reflectori, de aceea acesta din urmă este
ı̂n general preferabil. În cazul complex, schema de mai sus rămâne valabilă, cu
menţiunea că rotaţiile Pki se calculează ca ı̂n secţiunea 3.2.2.

3.4 Factorizarea QR
În această secţiune vom utiliza procedurile de triangularizare ortogonală stabilite
ı̂n secţiunea anterioară pentru a construi factorizarea QR a unei matrice A ∈ Cm×n
de formă generală. Notăm ca de obicei s = min(m, n).
În cazul m ≥ n din (3.53) şi (3.56) rezultă
 ′ 
R }n
A = QR, R = (3.57)
0 }m − n

unde matricea
Q = Q1 Q2 . . . Qn (3.58)
150 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

este unitară iar R este superior triunghiulară ca ı̂n (3.54). (În particular, dacă
m = n atunci R = R′ .) Partiţionând Q conform cu R, i.e.

Q = [ Q′ Q′′ ], (3.59)
|{z} |{z}
n m−n

din (3.57) deducem


A = Q′ R ′ , (3.60)
unde acum Q′ are coloanele ortogonale, pe scurt Q′H Q′ = In , iar R′ este pătrată.
Am demonstrat astfel prima parte a următorului rezultat fundamental.

Teorema 3.2 Orice matrice A ∈ Cm×n cu m ≥ n poate fi scrisă sub forma (3.60),
unde Q′ ∈ Cm×n are coloane ortogonale, iar R′ ∈ Cn×n este superior triunghiulară.
Prin definiţie, relaţia (3.60) constituie factorizarea QR a matricei A. Dacă A
este monică, atunci R′ rezultă inversabilă şi reciproc. În acest caz, factorizarea
QR este unică dacă ı̂n plus impunem condiţia ca factorul triunghiular R′ să aibă
elemente diagonale (reale şi) pozitive.

Demonstraţie. Pentru a demonstra a doua afirmaţie, să ne amintim că matricea


A este monică dacă şi numai dacă Ax 6= 0, oricare ar fi x ∈ Cn , x 6= 0, deci
xH AH Ax = kAxk2 > 0 pentru orice x 6= 0, adică matricea hermitică G = AH A
este pozitiv definită. Atunci, conform teoremei de factorizare Cholesky, există şi
este unică matricea R1 superior triunghiulară cu elemente diagonale pozitive astfel
ı̂ncât G = R1H R1 . Fie Q1 = AR1−1 . Avem
−H H −1 −H H −1
QH
1 Q1 = R1 A AR1 = R1 R1 R1 R1 = In ,

adică Q1 are coloanele ortogonale, şi ı̂n plus A = Q1 R1 . Prin urmare, unicitatea
factorizării QR rezultă din unicitatea factorizării Cholesky, i.e. dacă R′ satisface
condiţia din enunţ atunci R′ = R1 şi Q′ = Q1 . (Condiţia ca elementele diagonale
ale lui R′ să fie pozitive poate fi ı̂ntotdeauna satisfăcută, dar, de obicei, nu prezintă
interes ı̂n practică.) ♦

Observaţia 3.4 În general, matricea hermitică pozitiv semidefinită G = AH A


se numeşte gramian al (coloanelor) matricei A. Demonstraţia teoremei 3.2 arată
că dacă matricea A este monică, atunci factorul triunghiular R′ al lui A coincide
ı̂n esenţă cu factorul Cholesky R1 al lui G. În principiu, acest rezultat extrem de
important poate fi exploatat ı̂n două sensuri.
a) Factorizarea QR a matricei A poate fi determinată relativ economic efectuând
ı̂n prealabil factorizarea Cholesky a matricei G. Schema de calcul, dedusă direct
din demonstraţia teoremei amintite, este următoarea

QR Ch 1. Se formează G = AH A
2. Se calculează R1 efectuând factorizarea Cholesky G = R1H R1
3. Se calculează Q1 = AR1−1 rezolvând sistemul supe-
rior triunghiular Q1 R1 = A
3.4. FACTORIZAREA QR 151

Trebuie ı̂nsă să subliniem că această metodă, deşi conceptual extrem de simplă,
nu este recomandabilă din punct de vedere numeric deoarece matricea G, rezultată
la pasul 1 prin ”ridicarea la pătrat” a lui A, este rău condiţionată, vezi mai departe
propoziţia 3.5. În consecinţă, rezultatele calculate la paşii 2 şi 3 sunt afectate de erori
străine de problemă şi eventual catastrofale, independent de calitatea algoritmilor
utilizaţi. Ca regulă generală, formarea gramianului G = AH A trebuie sistematic
evitată ı̂n favoarea operării directe asupra matricei date A.
b) O serie de probleme de calcul, vizând de exemplu actualizarea unor factorizări
LU sau Cholesky, pot fi reformulate ı̂n termenii unei factorizări QR echivalente şi
rezolvate ı̂n consecinţă aplicând procedurile numeric stabile bazate pe utilizarea
transformărilor ortogonale. Spre deosebire de abordarea de la punctul a), această
idee, care constituie baza unei ı̂ntregi familii de metode de calcul, tradiţional numite
”de rădăcină pătrată”, este larg aplicată ı̂n practică. ♦

Exemplul 3.6 Pentru a ilustra ideea de bază a algoritmilor de rădăcină pătrată,


fie G = RH R o matrice hermitică pozitiv definită al cărei factor Cholesky supe-
rior triunghiular R ∈ Cn×n este cunoscut. Problema de actualizare a factorizării
Cholesky constă ı̂n a calcula factorul Cholesky R+ al matricei modificate

G+ = G + C H C,

ı̂n care C ∈ Cl×n este o matrice dată. În particular, dacă l = 1, i.e. C = cT este
un vector linie, atunci G+ este o modificare de rang 1 a lui G.
Această problemă poate fi rezolvată extrem de simplu, fără a forma explicit G+ ,
observând că
 
H H H H R
G+ = R R + C C = [R C ] = AH + A+ ,
C

i.e. G+ este gramianul matricei A din exemplul 3.5. În consecinţă, factorul Cholesky
căutat R+ poate fi determinat efectuând triangularizarea ortogonală a matricei A+ ,
construite direct cu elementele date R şi C.
O idee asemănătore se aplică pentru a efectua actualizarea factorizării Cholesky
ı̂n cazul unei modificări de rang 2, i.e.

G+ = G + dcH + cdH + ccH ,

unde c, d ∈ Cn sunt doi vectori (coloană) daţi. ♦


Dacă matricea A este monică, atunci factorul ortogonal Q′ al lui A are o
semnificaţie geometrică remarcabilă. Din (3.60) rezultă
not
y = Ax = Q′ (R′ x), ∀x ∈ Cn , (3.61)

unde R′ este superior triunghiulară inversabilă. Prin urmare, coloanele matricelor


not
A şi Q′ generează acelaşi subspaţiu liniar S = ImA. Mai precis, prin ipoteză A are
coloanele independente, deci constituie o bază a lui S, iar prin construcţie Q′ are
coloanele ortogonale, deci constituie o bază ortogonală a lui S. Proiectorul ortogonal
pe S este P1 = A(AH A)−1 AH sau, mai simplu, P1 = Q′ Q′H . (Prin calcul direct
152 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

S⊥
q3
6

 
 - q2 S 
  
 
q1 
 
 

Fig. 3.5: Baze ortogonale pentru ImA şi KerAH . Q = [q1 q2 | q3 ], m = 3, n = 2

se verifică uşor că P12 = P1 şi P1H = P1 , iar faptul că ImP1 = S este evident.
Echivalenţa celor două expresii ale lui P1 rezultă din (3.60).)
În mod similar, matricea Q′′ ∈ Cm×(m−n) (care, ı̂n (3.59), completează Q′ până
la o matrice unitară Q), constituie o bază ortogonală a subspaţiului complementar
S ⊥ = KerAH . Proiectorul ortogonal pe S ⊥ este P2 = Q′′ Q′′H şi, ı̂n plus, avem
P1 + P2 = Im .
Pe scurt, partiţia (3.59) a matricei unitare Q corespunde descompunerii ortogo-
nale fundamentale
Cm = ImA ⊕ KerAH , (3.62)
furnizând baze ortogonale pentru ambele subspaţii. Cazul m = 3, n = 2 este ilustrat
ı̂n figura 3.5. În consecinţă, orice vector b ∈ Cm se scrie unic sub forma b = b1 + b2 ,
unde bi = Pi b, i = 1 : 2, sunt proiecţiile ortogonale ale lui b pe S şi, respectiv, S ⊥ .
În cazul m < n, din (3.53) şi (3.56) rezultă
A = QR, R = [R′ S], (3.63)

unde Q = Q1 Q2 . . . Qm este unitară, iar R este superior trapezoidală ca ı̂n (3.55).


Utilizând partiţia conformă A = [A′ B] obţinem factorizarea

A′ = QR′ , (3.64)
unde, evident, A′ = A[m] este submatricea lider principală a matricei A.
Dacă A′ este inversabilă, atunci R′ are aceeaşi proprietate, iar din (3.64) şi
B = QS rezultă B = A′ (R′ )−1 S. Altfel spus, ı̂ntre coloanele matricei A există
relaţia B = A′ X, unde X = (R′ )−1 S este soluţia sistemului triunghiular R′ X = S,
prin urmare matricea  
−X
N=
Im−n
not
constituie o bază (neortogonală) a subspaţiului N = KerA ∈ Cn . (Se constată
imediat că A este epică şi AN = 0.)
Trebuie ı̂nsă să observăm că, ı̂n absenţa unei strategii adecvate de pivotare a
coloanelor, condiţia de inversabilitate menţionată mai sus nu este ı̂ndeplinită, astfel
3.4. FACTORIZAREA QR 153

ı̂ncât ı̂n cazul m < n, utilitatea practică a procedurii de triangularizare ortogonală


(la stânga) precum şi a factorizării QR asociate sunt limitate.
Având ı̂n vedere rezultatele teoretice stabilite mai sus, care evidenţiază clar
importanţa factorizării QR, ı̂n continuare ne vom concentra atenţia asupra as-
pectelor procedurale privind calculul şi aplicaţiile practice ale acestei factorizări.

3.4.1 Acumularea transformărilor


În cazul m ≥ n, factorizarea QR a matricei A poate fi determinată utilizând pro-
cedurile de triangularizare ortogonală stabilite ı̂n secţiunea anterioară. Într-adevăr,
ı̂n urma execuţiei acestor proceduri, factorul triunghiular R′ se obţine ca atare ı̂n
triunghiul superior al matricei A iar, ı̂n acord cu relaţiile (3.58) şi (3.59), factorul
ortogonal Q′ poate fi calculat sub forma
   
In In
Q′ = Q = Q1 Q2 . . . Qn , (3.65)
0 0

aplicând următoarea schemă caracteristică de acumulare a transformărilor.

GQR % Acumularea primelor n coloane Q′ ale matricei


Q = Q1 Q2 .. . Qn , m ≥ n.
In
1. Q′ =
0
2. Pentru k = n : −1 : 1
1. Q′ ← Qk Q′

Cu referire la algoritmul 3.5, implementarea schemei GQR este simplă. Ţinând


seama de particularităţile de structură ale matricei Q′ şi utilizând elementele defi-
nitorii ale transformărilor Qk , memorate ı̂n triunghiul inferior strict al matricei A
precum şi ı̂n vectorul β, procesul de calcul poate fi organizat astfel ı̂ncât Q′ să
rezulte pe loc ı̂n tabloul A 13 .

Algoritmul 3.6 (GQR) (Utilizând ieşirea algoritmului 3.5, se efec-


tuează acumularea pe loc ı̂n A a primelor n coloane Q′ ale matricei
Q = Q1 Q2 . . . Qs , unde Qk sunt reflectori hermitici. Se presupune
m ≥ n.)
1. Pentru j = 2 : n
1. aij = 0, pentru i = 1 : j − 1
2. Pentru k = n : −1 : 1
1. Dacă βk 6= 0 atunci
1. akk ← ukk = βk
2. Pentru j = Pk+1:n
1. α = − ( m i=k ūik aij ) /βk
2. aij ← aij + αuik , pentru i = k : m
13 În caz de nevoie, factorul triunghiular R′ sau chiar ı̂ntregul tablou A sunt ı̂n prealabil salvate.

Acest mod de lucru se justifică având ı̂n vedere că, ı̂n general, un anumit algoritm de calcul trebuie
să manevreze un număr cât mai mic de tablouri de lucru.
154 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

% coloana k
3. aik ← −aik , i = k : m
4. akk = 1 + akk
altfel
5. aik = 0, pentru i = k + 1 : m
6. akk = 1

Comentarii. În cazul real, algoritmul 3.6 necesită NQR operaţii, care (la fel ca
ı̂n algoritmul 3.5) se consumă pentru actualizarea coloanelor la pasul 2.1.2. Modul
de apel este A = GQR(A, β). Reţinem că determinarea explicită a factorizării
QR a matricei A prin apelarea succesivă a procedurilor QR şi GQR necesită ı̂n
total 2NQR operaţii, deci este relativ costisitoare. Pentru utilizare ı̂n capitolele
următoare, sintaxa unei astfel de proceduri de factorizare QR este [Q, R] = FQR(A)
(lăsăm cititorului micile detalii de implementare). ♦
În contextul procedurii de triangularizare CQR, care utilizează reflectori complecşi,
schema de acumulare GQR rămâne evident valabilă. Implementarea ei ”directă”, bazată
pe aplicarea la pasul 2 a procedurii de transformare CRF pentru actualizarea coloanelor
lui Q′ , este extrem de simplă.
GCQR % Acumularea primelor n coloane Q′ ale matricei Q = Q1 Q2 . . . Qn ,
m ≥ n, unde Qk sunt reflectori complecşi.
1. Pentru j = 1 : n
1. qij = 0, pentru i = 1 : m
2. qjj = 1
2. Pentru k = n : −1 : 1
1. Pentru j = 1 : n
1. CRF(A(k : m, k), τ̄k , Q(k : m, j))
Subliniem ı̂nsă că procedura GCQR ı̂n forma scrisă mai sus este neeficientă deoarece
nu exploatează structura specială a matricei Q′ care, pe măsura aplicării transformărilor
la pasul 2, se ”umple” progresiv, ı̂ncepând cu ultima coloană. (Un calcul simplu arată
că, ı̂n cazul m = n, algoritmul GCQR necesită Nop = 2n3 operaţii complexe, adică cu
50% mai mult decât algoritmul 3.6.) Modificările necesare pentru a corecta acest defect,
permiţând totodată formarea lui Q′ pe loc ı̂n tabloul A, pot fi aduse de către cititorul
interesat, eventual după o analiză comparativă cu algoritmul 3.6.
Matricea Q′′ , care completează Q′ până la o matrice unitară, poate fi calculată
sub forma    
′′ 0 0
Q =Q = Q1 Q2 . . . Qn , (3.66)
Im−n Im−n
utilizând o schemă de acumulare similară, dar mai puţin eficientă. (Evident, acum
tabloul A trebuie extins cu m − n coloane necesare pentru a memora Q′′ .)14
În final, subliniem că formarea matricelor Q′ , Q′′ sau Q prin acumularea trans-
formărilor este relativ costisitoare. De aceea, ı̂n contextul aplicaţiilor considerate
ı̂n acest capitol, se recomandă evitarea acestui calcul ı̂n favoarea utilizării formei
factorizate (3.58) a matricei Q, furnizată ca atare de algoritmii de triangularizare
QR.
14 În cazul m < n, cu referire la (3.64), calculul matricei Q se poate face apelând direct procedura

GQR sub forma A(:, 1 : m) = GQR(A(:, 1 : m), β). După execuţie, rezultatul dorit Q suprascrie
blocul lider A′ al matricei A.
3.4. FACTORIZAREA QR 155

3.4.2 Aplicarea transformărilor


În practică, matricea unitară QH generată sub forma (3.56) de procedurile de tri-
angularizare ortogonală aplicate matricei A, se utilizează pentru a transforma ı̂n
mod adecvat o altă matrice dată B. Ca regulă generală, cele patru tipuri de trans-
formări posibile, două la stânga (QH B şi QB) şi două la dreapta (BQ şi BQH ), se
efectuează pe loc ı̂n B fără a forma explicit matricele QH sau Q.
Aplicarea transformărilor

B ← QH B = QH H H
s . . . Q2 Q1 B (3.67)

şi
B ← QB = Q1 Q2 . . . Qs B (3.68)
se face partiţionând B pe coloane.
În cazul (3.67), schema de calcul este evident următoarea.

MQR % Aplicarea transformării B ← QH B, unde Q = Q1 Q2 . . . Qs .


1. Pentru k = 1 : s
1. B ← QH k B

Cu referire la algoritmul 3.5, implementarea schemei MQR are la bază o pro-


cedură de tip RF pentru actualizarea fiecărei coloane a matricei B. Desigur, la
pasul 1.1, transformarea se aplică efectiv numai dacă βk 6= 0, utilizând vectorul
Householder uk memorat ı̂n A(k : m, k).

Algoritmul 3.7 (MQR) (Se dă B ∈ Cm×p . Utilizând ieşirea algo-


ritmului 3.5, se aplică transformarea B ← QH B, unde Q = Q1 Q2 . . . Qs ,
iar Qk sunt reflectori hermitici.)
1. Pentru k = 1 : s
1. Dacă βk 6= 0 atunci
1. t = akk
2. akk ← ukk = βk
3. Pentru j = P 1:p
1. α = − ( m i=k ūik bij ) /βk
2. bij ← bij + αuik , pentru i = k : m
4. akk = t

Comentarii. În cazul real cu m ≥ n, algoritmul 3.7 necesită Nop = pNm operaţii,
unde am notat cu Nm = 2n(2m − n) numărul de operaţii necesar pentru a aplica
transformarea (3.67) unui vector b cu m componente. ♦
În contextul procedurii de triangularizare CQR, schema MQR se implementează astfel.

MCQR % Aplicarea transformării B ← QH B, unde Q = Q1 Q2 . . . Qs , iar


Qk sunt reflectori complecşi.
1. Pentru k = 1 : s
1. Pentru j = 1 : p
1. CRF(A(k : m, k), τk , B(k : m, j))
156 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

În cazul (3.68) se procedează analog. Dacă Qk sunt reflectori hermitici, atunci
algoritmul rezultat diferă de algoritmul 3.7 numai prin ordinea de aplicare a trans-
formărilor. Având ı̂n vedere simplificarea redactării unor proceduri ulterioare, vom
presupune că ambele transformări (3.67) şi (3.68) pot fi efectuate apelând o singură
procedură, al cărei mod de apel este B = MQR(TRANS, A, β, B), unde TRANS
este o variabilă logică cu valorile ’da’ ı̂n cazul (3.67), respectiv ’nu’ ı̂n cazul (3.68).
Scrierea acestei proceduri (din care jumătatea ’da’ coincide cu algoritmul 3.7) con-
situie un exerciţiu uşor.
Aplicarea transformărilor la dreapta B ← BQ şi B ← BQH se face partiţionând
B pe linii şi ţinând seama de precizările făcute ı̂n finalul secţiunii 3.2.1. Scrierea
procedurii corespunzătoare, de exemplu notată MQRd, este propusă ca exerciţiu.
(La nevoie, cele două proceduri MQR şi MQRd pot fi reunite ı̂ntr-una singură
introducând o variabilă suplimentară SIDE, aşa cum se procedează ı̂n LAPACK.)
În concluzia expunerii de până acum, subliniem că procedurile de triangularizare,
acumulare şi transformare, notate generic QR, GQR şi MQR, apar ı̂ntotdeauna ı̂n
triplete, orice modificare a procedurii fundamentale de triangularizare QR, ı̂n ceea
ce priveşte calculul şi memorarea transformărilor Qk , k = 1 : s, antrenând după sine
modificări corespunzătoare ı̂n procedurile asociate GQR şi MQR. Având ı̂n vedere
recomandările făcute ı̂n finalul secţiunii precedente, procedura de acumulare GQR
se utilizează numai ı̂n caz de strictă necesitate. Aproape ı̂ntotdeauna, obiectivele
urmărite prin calcul pot fi atinse utilizând procedura de transformare MQR care
operează direct cu forma factorizată a matricei Q.

3.4.3 Triangularizarea ortogonală la nivel de bloc


Ideea procedurilor bloc de triangularizare ortogonală este aceeaşi cu a procedurilor
bloc de factorizare LU, descrise ı̂n secţiunea 2.4. La fel ca acolo, utilizarea acestui
tip de proceduri este indicată pe calculatoarele cu memorie ierarhică.
Pentru precizare, ı̂n continuare ne vom referi la procedura CQR care efectuează
triangularizarea matricei A, partiţionată pe coloane, utilizând reflectori complecşi.
După cum am văzut, această procedură este bogată ı̂n operaţii vectoriale, iar efortul
principal de calcul se consumă la pasul 1.2 pentru actualizarea coloanelor următoare.
Având ı̂n vedere accelerarea acestui proces pe seama reducerii numărului de apeluri
la memoria principală, procedura bloc operează asupra matricei A partiţionate ı̂n
blocuri de coloane, cu scopul de a efectua operaţiile indicate utilizând procedurile
de ı̂nmulţire matriceală (la nivel de bloc) de tip GEMM din BLAS 3.
Considerăm A ∈ Cm×n cu m ≥ n şi n = νnb , unde nb e dimensiunea comună a
blocurilor (de coloane), iar ν este numărul total de blocuri. Procedura de triangu-
larizare la nivel de bloc are ν etape. (Pentru simplitate, ı̂n continuare indicele de
etapă va fi omis.)
La prima etapă, are loc triangularizarea primului bloc al matricei A, efectuând
transformarea A ← QH b A. În consecinţă, se consideră partiţia A = [Ab B], unde

Ab = A(1 : m, 1 : nb ), B = A(1 : m, nb + 1 : n) (3.69)

şi se procedează astfel:


3.4. FACTORIZAREA QR 157

Bl1 1. Se generează Qb a.ı̂. QH


b Ab = Rb este superior triunghiulară
2. Se formează Qb
3. Se aplică transformarea B ← QH b B

Evident, la pasul 1 se aplică procedura uzuală CQR blocului Ab . Matricea Qb


rezultată este de forma
Qb = Q1 Q2 . . . Qnb , (3.70)
unde Qi = Im − τi ui uH i sunt reflectorii complecşi determinaţi pentru a introduce
zerouri subdiagonale ı̂n coloanele i = 1 : nb ale blocului Ab . Problema constă ı̂n
găsirea unei forme de reprezentare a lui Qb la pasul 2, adecvate accelerării execuţiei
pasului 3 15 .
La o etapă ulterioară l ∈ 2 : ν, matricea curentă A este superior triunghiulară
ı̂n primele k − 1 coloane, unde k = (l − 1)nb + 1, prin urmare
 ′ 
R S
A= ,
0 Ã

unde matricea R′ este superior triunghiulară de ordin k − 1, iar à = A(k : m, k : n)


este matricea ”rămasă”. Acum are loc triangularizarea blocului următor efectuând
transformarea A ← QH b A, unde

Qb = Qk Qk+1 . . . Qk+nb −1 ,

iar fiecare reflector Qi are o structură de tip (3.10), deci


 
Ik−1 0
Qb = .
0 Q̃b

În consecinţă, se consideră partiţia à = [Ãb B̃], unde acum

Ãb = A(k : m, k : k + nb − 1), B̃ = A(k : m, k + nb : n),

şi se aplică procedura Bl1 cu noile date. Matricea Q̃b rezultată este de forma

Q̃b = Q̃1 Q̃2 . . . Q̃nb ,

iar problemele de calcul la paşii 2 şi 3 sunt aceleaşi ca mai sus.


Pentru precizare, ı̂n continuare ne vom referi la partiţia (3.69) şi vom descrie
cele două tipuri de reprezentări structurate ale matricelor Qb de tip (3.70), utilizate
15 Procedurile uzuale de tip vectorial, expuse ı̂n secţiunile anterioare, nu satisfac acest deziderat.

Aplicarea succesivă a transformărilor Qi , i = 1 : nb , ı̂n maniera MQR, este eficientă (numărul


de operaţii este 2nb (2m − nb )(n − nb )) dar nu conduce la operaţii matriceale implementabile ı̂n
BLAS 3. Pe de altă parte, formarea explicită a matricei Qb prin acumularea transformărilor
ı̂n maniera GQR este costisitoare, totodată Qb rezultă nestructurată, deci produsul matriceal
B ← QH 2
b B cere 2m (n − nb ) operaţii, unde tipic, m ≫ nb , adică cu un ordin mai mult decât
este necesar. În plus, un asemenea mod de lucru cere un spaţiu considerabil pentru memorarea
matricei Qb .
De aceea, ı̂n practică, se utilizează reprezentări speciale ale matricelor de tip Qb care poartă
numele de reflectori bloc şi care vor fi descrise ı̂n continuare.
158 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

ı̂n practică. (Indicele b va fi omis.) Aceste reprezentări se numesc reflectori bloc, iar
elementele lor definitorii se construiesc exploatând relaţia recurentă

Q = Q1 , Q ← Q+ = QQi , i = 2 : nb .

a. Reprezentarea WY este de forma QH = I − W Y H , respectiv

Q = I − Y W H, (3.71)

unde W, Y ∈ Cm×nb sunt două matrice ce urmează a fi determinate.


Iniţial avem Q = I − τ1 u1 uH
1 , deci putem lua

W = u1 , Y = τ1 u1 .

Mai departe putem scrie

Q+ = QQi = (I − Y W H )(I − τi ui uH
i )=
= I − Y W H − τi(I − Y W H H
 )ui ui =
  W H
= I − Y zi =
uHi
H
= I − Y+ W+ ,

deci
W+ = [W ui ], Y+ = [Y zi ],
H
unde zi = τi (I − Y W )ui . Matricea W , formată prin alăturarea vectorilor House-
holder ui , este produsă şi memorată ca atare de către procedura CQR pe poziţiile
subdiagonale din tabloul Ab . (Întrucât primele i − 1 componente ale vectorilor
Householder ui sunt nule, iar uii = 1, W este chiar inferior trapezoidală unitate.)
În consecinţă, reprezentarea WY este complet definită de tabloul Y , a cărui proce-
dură de formare (vezi pasul 2 al schemei Bl1 ) este următoarea.

% Formarea lui Y
1. Y (:, 1) = τ1 u1
2. Pentru i = 2 : nb
1. Y (:, i) = (τi ui ) − Y (W H (τi ui ))

La pasul 3 al procedurii Bl1 , reflectorul bloc ı̂n reprezentarea WY se aplică


matricei B conform schemei

B ← QH B = (I − W Y H )B = B − W (Y H B), (3.72)

respectiv

1. N = Y H B
2. B ← B − W N

Ambele produse se efectuează utilizând GEMM şi cer 4mnb (n − nb ) operaţii. Sin-
gurul neajuns al reprezentării WY constă ı̂n necesitatea formării tabloului de lucru
suplimentar Y de dimensiune m × nb , relativ mare.
3.4. FACTORIZAREA QR 159

b. Reprezentarea W2 T sau triunghiulară este de forma QH = I − W T H W H ,


respectiv
Q = I − WTWH (3.73)
unde, după cum vom vedea, W este acelaşi ca mai sus, iar T ∈ Cnb ×nb rezultă
superior triunghiulară.
Iniţial avem Q = I − τ1 u1 uH
1 , deci putem lua

W = u1 , T = τ1 .
Mai departe putem scrie
Q+ = QQi = (I − W T W H )(I − τi ui uH
i )=
= I − W T W H − τi ui uH
i + W(τi T W H ui )uH
i =
  T ti WH
= I − W ui =
0 τi uHi
= I − W+ T+ W+H
deci avem  
T ti
W+ = [W ui ], T+ = ,
0 τi
unde ti = −τi T (W H ui ).
Procedura de formare a tabloului triunghiular T , care defineşte complet repre-
zentarea W2 T, este următoarea.
% Formarea lui T
1. T (1, 1) = τ1
2. Pentru i = 2 : nb
1. T (1 : i − 1, i) = −τi T (W H ui )
2. T (i, i) = τi
La pasul 3 al procedurii Bl1 , reflectorul bloc ı̂n reprezentarea W2 T se aplică
matricei B conform schemei
B ← QH B = (I − W T W H )B = B − W T (W H B), (3.74)
respectiv
1. N = W H B
2. N ← T H N
3. B ← B − W N
O analiză simplă arată că ı̂n acest caz este suficient un singur tablou de lucru de
dimensiune nb × n, relativ mică. În primele nb coloane ale acestuia se formează T ,
iar ı̂n coloanele următoare se depune produsul intermediar N = W H B. (Subliniem
că blocurile T utilizate ı̂n etapele succesive ale procedurii de triangularizare nu se
memorează, ci se formează pe măsură ce sunt necesare.) Numărul de operaţii este
(4m+nb )nb (n−nb ). Creşterea numărului de operaţii este compensată de memorarea
mai compactă a reprezentării triunghiulare.
Combinând ideile de mai sus, procedura de triangularizare ortogonală la nivel
de bloc poate fi rezumată astfel.
160 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

CQR Bl % Triangularizare la nivel de bloc, utilizând reflectori complecşi.


1. Pentru k = 1 : nb : min(n, m)
1. f = min(k + nb − 1, n)
2. Ab = A(k : m, k : f )
3. τ (k : f ) = CQR(Ab )
4. A(k : m, k : f ) = Ab
5. Dacă f < n atunci
% Formarea lui T
1. T (k, k) = τk
2. Pentru i = k + 1 : f
1. T (k : i − 1, i) = −τi T (W H ui )
2. T (i, i) = τi
% aplicarea transformării
3. B = A(k : m, f + 1 : n)
4. N = W H B
5. N ← T H N
6. B ← B − W N
7. A(k : m, f + 1 : n) = B

În redactarea de mai sus, Ab este tabloul de lucru din memoria rapidă ı̂n care
se efectuează triangularizarea blocului curent, iar B şi N sunt blocurile utilizate de
GEMM ı̂n procesul de aplicare a transformării. (În caz de necesitate, blocul B poate
fi tratat sub formă partiţionată.) Amintim că tabloul W este format şi memorat
ca atare ı̂n triunghiul strict inferior al blocului Ab obţinut la pasul 1.3. Evident, ı̂n
cazul nb = 1 procedura de mai sus se reduce la CQR. Instrucţiunile 1.2, 1.4, 1.5.3
şi 1.5.7 efectuează transferul datelor ı̂ntre memoria principală şi cea rapidă.
În final, subliniem că procedurile de acumulare şi transformare GCQR şi
MCQR pot fi de asemenea reformulate la nivel de bloc, procedând ı̂n esenţă ca la
pasul 1.5 al algoritmului de mai sus.

3.4.4 Alte metode de ortogonalizare


Factorizarea QR a unei matrice monice A ∈ Cm×n poate fi calculată utilizând pro-
cedurile de ortogonalizare de tip Gram-Schmidt, care constituie analogul schemelor
compacte Crout şi Doolittle, cunoscute din secţiunea 2.4.
Considerând relaţia A = Q′ R şi partiţionând A şi Q′ pe coloane, putem scrie
 
r11 . . . r1j . . . r1n
 .. .. .. 

 . . . 
[a1 . . . aj . . . an ] = [q1 . . . qj . . . qn ] 
 rjj . . . rjn .
 . . .. 
 . . 
rnn

Egalând primele coloane avem


a1 = q1 r11 ,
3.4. FACTORIZAREA QR 161

unde vectorul q1 este normat, i.e. kq1 k = 1, deci r11 = ka1 k şi q1 = a1 /r11 . În
general avem
aj = q1 r1j + . . . + qj−1 rj−1,j + qj rjj ,

unde qk ⊥ qj , deci qkH aj = rkj , k = 1 : j − 1, iar qj este şi el normat, deci

j−1
X
rjj = kaj − qk rkj k.
k=1

Procedura de ortogonalizare Gram-Schmidt astfel obţinută este următoarea.

GS % Procedura Gram-Schmidt (schema jk)


1. Pentru j = 1 : n
1. qj = aj
2. Pentru k = 1 : j − 1
1. rkj = qkH qj
P
3. qj ← qj − j−1 k=1 qk rkj
4. rjj = kqj k
5. qj ← qj /rjj

Prin rearanjarea buclelor procedurii GS şi actualizarea coloanei curente qj ime-


diat după calculul unui coeficient rkj , se obţine procedura de ortogonalizare Gram-
Schmidt modificată.

MGS % Procedura Gram-Schmidt modificată (schema kj)


1. Pentru k = 1 : n
1. qk = ak
2. Pentru k = 1 : n
1. rkk = kqk k
2. qk ← qk /rkk
3. Pentru j = k + 1 : n
1. rkj = qkH qj
2. qj ← qj − qk rkj

Aici este important să subliniem că, deşi cele două proceduri sunt echivalente din
punct de vedere matematic, iar numărul de operaţii este acelaşi ı̂n ambele cazuri,
NGS = 2mn2 , totuşi performanţele lor numerice sunt diferite. Procedura GS este
numeric instabilă atât ca mijloc de calcul al factorizării QR cât şi ca metodă de
rezolvare a problemei CMMP. În schimb, procedura MGS furnizează o factorizare
QR satisfăcătoare (ı̂n sensul că, de regulă, vectorii calculaţi qj rezultă ortogonali
ı̂n precizia de lucru) şi constituie totodată un algoritm numeric stabil pentru re-
zolvarea problemei CMMP. De aceea, ı̂n multe situaţii, procedura MGS (imple-
mentată ı̂ngrijit) poate constitui o alternativă viabilă faţă de perechea QR, GQR,
relativ mai costisitoare.
162 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

3.4.5 Factorizarea QL
În unele aplicaţii matricea A este adusă la forma inferior triunghiulară ı̂n raport cu
diagonala secundară care ı̂ncepe din colţul dreapta-jos, i.e.
QH A = L, (3.75)
unde lij = 0, i < m − n + j, j = 1 : n, iar Q este unitară. (Pentru simplitate am
presupus m ≥ n.)
Procesul de triangularizare parcurge coloanele ı̂n ordine inversă, ı̂ncepând cu
ultima şi anulează elementele situate deasupra diagonalei secundare utilizând reflec-
tori modificaţi. Notând reflectorii cu indicele coloanei ı̂n care se păstrează vectorii
Householder corespunzători, putem scrie
QH = QH H H
1 Q2 . . . Qn , (3.76)
iar procedura de calcul poate fi rezumată astfel.
QL % Schema de triangularizare QL, cazul m ≥ n
1. Pentru k = n : −1 : 1
1. Se generează Qk a.ı̂. (QH
k A)ik = 0, i = 1 : m − n + k − 1
2. A ← QH k A
La pasul 1.1 se utilizează o procedură de tip mRFG (vezi tabelul 3.1), iar la
pasul 1.2 se modifică numai primele m − n + k elemente din coloanele j = 1 : k − 1,
utilizând procedura corespunzătoare mRF.
Aplicaţiile procedurii de triangularizare QL sunt perfect similare cu aplicaţiile
descrise mai sus ale procedurii QR (vezi problemele 3.42, 3.43).

3.5 Rezolvarea problemei CMMP


Revenim acum la problema (3.4) din secţiunea introductivă a acestui capitol şi, pen-
tru generalitate, considerăm versiunea ei complexă. Fie A ∈ Cm×n o matrice dată şi
b ∈ Cm un vector arbitrar. Problema CMMP constă ı̂n determinarea pseudosoluţiei
x∗ ∈ Cn a sistemului Ax = b astfel ı̂ncât norma euclidiană a reziduului r = b − Ax
să fie minimă, i.e.
kb − Ax∗ k = minn kb − Axk. (3.77)
x∈C

În primul rând, vom stabili condiţiile ı̂n care problema (3.77) este bine definită,
i.e. are o soluţie unică.
Teorema 3.3 Oricare ar fi vectorul b ∈ Cm , problema (3.77) are o soluţie unică
dacă şi numai dacă matricea A ∈ Cm×n este monică, i.e. m ≥ n şi rangA = n.
În acest caz, pseudosoluţia ı̂n sensul CMMP a sistemului Ax = b poate fi scrisă
ı̂n forma
x∗ = A+ b, (3.78)
ı̂n care matricea A+ ∈ Cn×m este prin definiţie pseudoinversa lui A şi are expresia

A+ = (AT A)−1 AT (3.79)


3.5. REZOLVAREA PROBLEMEI CMMP 163

Demonstraţie. Vom stabili pe rând a) existenţa şi b) unicitatea pseudosoluţiei x∗ .


a) Pentru a demonstra existenţa, nu e necesar să presupunem că matricea A
este monică. Considerăm subspaţiul S = ImA şi fie S ⊥ = KerAH complementul
său ortogonal ı̂n Cm . Vectorul b poate fi scris ı̂n mod unic sub forma b = b1 + b2 ,
unde b1 ∈ S şi b2 ∈ S ⊥ sunt proiecţiile ortogonale ale lui b pe S şi respectiv S ⊥ .
Avem
r = b − Ax = b2 + (b1 − Ax), (3.80)
unde b1 ∈ S, Ax ∈ S implică b1 − Ax ∈ S, deci b2 şi b1 − Ax sunt ortogonali,
∀x ∈ Cn , vezi figura 3.6. Aplicând teorema lui Pitagora obţinem

kb − Axk2 = kb1 − Ax + b2 k2 = kb1 − Axk2 + kb2 k2 ≥ kb2 k2 , ∀x ∈ Cn . (3.81)

Întrucât b1 ∈ S = ImA, există (cel puţin) un x∗ ∈ Cn astfel ı̂ncât

Ax∗ = b1 , (3.82)

iar din (3.81) se vede că orice astfel de x∗ are proprietatea (3.77) şi reciproc.
Existenţa pseudosoluţiei x∗ este demonstrată.
Relaţia (3.82) arată că cea mai bună aproximare b∗ = Ax∗ a lui b pe S = ImA
coincide cu proiecţia ortogonală b1 , deci b∗ = b1 există ı̂ntotdeauna şi este unic
determinată oricare ar fi A. Această afirmaţie constituie lema proiecţiei ortogonale
şi reprezintă generalizarea unui fapt binecunoscut din geometria elementară. Pe
scurt (vezi (3.77) şi figura 3.6), distanţa minimă de la un punct b la un subspaţiu
S este lungimea (euclidiană) a perpendicularei duse din b pe S.
Consideraţiile geometrice de mai sus pot fi exprimate analitic. Notând
r∗ = b − Ax∗ , din (3.80) şi (3.82) se vede că r∗ = b2 , unde b2 ∈ S ⊥ = KerAH ,
deci AH r∗ = 0. Prin urmare avem
  ∗   
Im A r b
= , (3.83)
AH 0 x∗ 0

de unde, eliminând r∗ ı̂ntre cele două ecuaţii, rezultă

AH Ax∗ = AH b. (3.84)

b) Din (3.82), pseudosoluţia x∗ e unic determinată dacă şi numai dacă


A(x − x′ ) = 0 implică x = x′ , adică KerA = {0}, sau, echivalent, A este monică.
În acest caz, gramianul G = AH A este o matrice pozitiv definită, deci inversabilă
(vezi demonstraţia teoremei 3.2), iar din (3.84) rezultă imediat (3.78) şi (3.79). ♦

Observaţia 3.5 Sistemul liniar (3.83), de ordin m + n, se numeşte sistemul extins


asociat problemei CMMP. Matricea acestui sistem este hermitică de semn nedefinit
şi are o structură particulară remarcabilă. Prin rezolvarea acestui sistem putem
calcula atât pseudosoluţia x∗ cât şi reziduul de normă minimă r∗ . Procedurile de
calcul corespunzătoare vor fi expuse mai jos 16 .
16 În principiu, sistemul extins poate fi rezolvat utilizând procedurile de factorizare cvasi-

diagonală descrise ı̂n secţiunea 2.10, dar acestea nu sunt eficiente ı̂n cazul de faţă deoarece nu
exploatează structura specială a sistemului considerat (vezi problema 3.52).
164 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

OCC
6  C
b C b − Ax
b2  C
 C
 C
 C
 b 1 1
 C
o
S
 

X S b1C − Ax
XXX
X SC
Ax XX z
XSC
S = ImA

T = S⊥

Fig. 3.6: Lema proiecţiei ortogonale

Sistemul liniar (3.84), de ordin n, se numeşte sistemul de ecuaţii normale, pe


scurt sistemul normal asociat problemei CMMP. Dacă matricea A e monică, grami-
anul G este o matrice hermitică pozitiv definită, iar pseudosoluţia x∗ coincide cu
soluţia sistemului normal. La fel ca ı̂n observaţia 3.4, această echivalenţă poate fi
exploatată ı̂n două sensuri.
a) Pseudosoluţia x∗ a sistemului Ax = b poate fi determinată prin rezolvarea
sistemului normal asociat. Schema de calcul este următoarea:

S Ch 1. Se formează c = AH b
2. Se formează G = AH A
3. Se efectuează factorizarea Cholesky G = R1H R1
4. Se calculează x∗ rezolvând succesiv sistemele
triunghiulare R1H y = c şi R1 x∗ = y.

Trebuie ı̂nsă să subliniem că, la fel ca ı̂n observaţia 3.4, această metodă (deşi
relativ economică şi extrem de compactă) nu este recomandabilă din punct de vedere
numeric, deoarece matricea G = AH A este rău condiţionată. Cu precauţie, ea poate
fi avută ı̂n vedere, ı̂n special dacă m ≫ n, iar economia de memorie realizată prin
formarea lui G constituie un obiectiv esenţial.
b) Soluţiile unor sisteme liniare cu matrice pozitiv definite având structură de
gramian pot fi determinate aplicând ideea algoritmilor de rădăcină pătrată bazaţi
pe utilizarea transformărilor unitare (vezi observaţia 3.4). Acest mod de lucru,
frecvent utilizat ı̂n practica actuală, este ilustrat prin problema 3.46. ♦

3.5.1 Calculul pseudosoluţiei


Având ı̂n vedere teorema 3.3, peste tot mai departe vom presupune că matricea
A ∈ Cm×n este monică.
3.5. REZOLVAREA PROBLEMEI CMMP 165

Rezolvarea problemei CMMP se poate face utilizând informaţia furnizată de


algoritmul de triangularizare ortogonală QR, i.e.
 ′ 
R }n
QH A = , QH = QH H H
n . . . Q2 Q1 , (3.85)
0 }m − n

unde Q este unitară, iar R′ este superior triunghiulară inversabilă. Aplicând trans-
formarea QH ambilor membri ai sistemului Ax = b şi notând
 ′ 
H d }n
Q b = d, d = , (3.86)
d′′ }m − n

obţinem sistemul unitar echivalent


 ′   ′ 
R d }n
x= . (3.87)
0 d′′ }m − n

În general, ı̂n (3.87) avem d′′ 6= 0, deci sistemul dat Ax = b este incompatibil.
Pentru a determina pseudosoluţia x∗ , considerăm reziduul r = b − Ax. Din
(3.87) rezultă  ′ 
d − R′ x
QH r = , (3.88)
d′′
unde matricea QH este unitară, deci krk = kQH rk. Prin urmare

krk2 = kQH rk2 = kd′ − R′ xk2 + kd′′ k2 ≥ kd′′ k2 , ∀x ∈ Cn . (3.89)

Efectuând minimizarea ı̂n raport cu x indicată ı̂n (3.77) obţinem

R′ x∗ = d′ , (3.90)

deci soluţia ı̂n sens CMMP a sistemului supradeterminat Ax = b coincide cu soluţia


sistemului superior triunghiular nesingular reprezentat de primele n ecuaţii din
(3.87) 17 . Pe scurt, avem
x∗ = [(R′ )−1 0]QH b (3.91)
sau echivalent
x∗ = (R′ )−1 Q′H b. (3.92)
Procedural, soluţia problemei CMMP (3.77) este determinată de relaţiile (3.86)
şi (3.90). Ţinând cont de structura lui QH din (3.85), se vede uşor că transformările
(3.86) pot fi efectuate (pe loc ı̂n b), utilizând o procedură de tip MQR. Schema de
calcul astfel obţinută este următoarea

SQR % Calculul pseudosoluţiei x = A+ b


1. Pentru k = 1 : n
1.b ← QH k b
2. Se rezolvă sistemul triunghiular R′ x = b(1 : n)
17 Raţionamentul de mai sus constituie o nouă demonstraţie, de data aceasta constructivă, a

teoremei 3.3. Relaţiile (3.80-3.82) şi (3.88-3.90) se corespund ı̂n mod evident.
166 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

Cu referire la algoritul 3.5, care utilizează reflectori hermitici, implementarea


schemei SQR are loc astfel.

Algoritmul 3.8 (SQR – problema liniară a celor mai mici pătrate)


(Se dă un vector b ∈ Cm . Utilizând ieşirea algoritmului 3.5, se calculează
ı̂n x soluţia ı̂n sens CMMP a sistemului liniar Ax = b. Se presupune că
matricea A este monică.)
% se aplică transformările vectorului b
1. Pentru k = 1 : n
1. t = akk
2. akk ← uP kk = βk
m
3. α = − ( i=k ūik bi ) /βk
4. bi ← bi + αuik , pentru i = k : m
5. akk = t
% calculul soluţiei problemei CMMP
2. Pentru k = n : −1Pn: 1
1. xk = (bk − j=k+1 akj xj )/akk

Comentarii. În cazul real, algoritmul 3.8 necesită Nop = Nm + n2 = 4mn − n2


operaţii. Modul de apel este x = SQR(A, β, b). Reţinem că determinarea pseudo-
soluţiei prin apelarea succesivă a procedurilor QR şi SQR necesită asimptotic NQR
operaţii, i.e. principalul efort de calcul se consumă pentru triangularizarea ortogo-
nală a matricei A. ♦

În cazul utilizării algoritmului CQR, implementarea schemei SQR este următoarea.

SCQR % Calculul pseudosoluţiei.


1. Pentru k = 1 : s
1. CRF(A(k : m, k), τk , b(k : m))
2. x = UTRIS(A(1 : n, :), b(1 : n))

Pe baza informaţiilor furnizate de schema SQR, putem calcula uşor şi reziduul
de normă minimă r∗ = b − Ax∗ , obţinând astfel soluţia completă a sistemului extins
(3.83). Din (3.88) şi (3.90) obţinem imediat
 
∗ 0
r =Q , (3.93)
d′′

ı̂n care d′′ are semnificaţia din (3.86). Prin urmare, având ı̂n vedere că vectorul
transformat b ← d = QH b a fost deja calculat la pasul 1, r∗ poate fi obţinut (pe loc
ı̂n b) completând schema SQR cu secvenţa

3. b(1 : n) = 0
4. Pentru k = n : −1 : 1
1. b ← Qk b
3.5. REZOLVAREA PROBLEMEI CMMP 167

În rezumat, fiind date matricea A şi vectorul b, calculul pseudosoluţiei x∗ a


sistemului Ax = b şi al reziduului de normă minimă r∗ constă ı̂n triangularizarea
ortogonală a matricei A, urmată de aplicarea schemei SQR completată aşa cum am
spus mai sus. Utilizând procedurile cunoscute QR, MQR şi UTRIS, algoritmul
de calcul se redactează concis astfel.
CMMP % Rezolvarea completă a problemei CMMP.
0. [A, β] = QR(A)
1. b = MQR(′ da′ , A, β, b)
2. x = UTRIS(A(1 : n, :), b(1 : n))
3. b(1 : n) = 0
4. b = MQR(′ nu′ , A, β, b)
Subliniem că la pasul 2 pseudosoluţia x∗ nu se calculează pe locul membrului
drept b, tocmai având ı̂n vedere utilizarea acestui spaţiu la paşii 3 şi 4 pentru
memorarea lui r∗ . Deseori ı̂n practică, pentru aprecierea gradului de incompati-
bilitate a sistemului Ax = b, este suficient calculul normei ρ = kr∗ k. Evident,
avem ρ = kb(n + 1 : m)k, unde b este vectorul transformat obţinut la pasul 1 al
procedurilor SQR sau CMMP.

3.5.2 Calculul proiecţiilor


În numeroase aplicaţii prezintă interes calculul proiecţiilor ortogonale b1 şi b2 ale
unui vector b pe subspaţiile S = ImA şi respectiv S ⊥ = KerAH .
Din demonstraţia teoremei 3.5 (vezi figura 3.6) a rezultat că proiecţia b2 a lui b pe
S ⊥ coincide cu reziduul de normă minimă r∗ , deci se calculează aplicând procedura
CMMP din care pasul 2 se omite 18 .
În mod similar proiecţia b1 a lui b pe S, care coincide cu vectorul de cea mai
bună aproximaţie b∗ = Ax∗ , are expresia
 ′ 
∗ d
b =Q , (3.94)
0
deci se calculează aplicând aceeaşi procedură CMMP ı̂n care pasul 3 se ı̂nlocuieşte
cu
3′ . b(n + 1 : m) = 0.
Subliniem că, pentru siguranţa calculului, proiecţiile b1 = b∗ şi b2 = r∗ se
determină ı̂ntotdeauna utilizând relaţiile (3.86), (3.93) şi (3.94), ı̂n care au loc numai
transformări ortogonale. În special, nu se recomandă utilizarea relaţiilor ”evidente”
b∗ = Ax∗ şi r∗ = b − Ax∗ sau b1 + b2 = b, aparent mai simple, deoarece acestea din
urmă pot conduce la erori catastrofale de anulare prin scădere. De asemenea, este
esenţial să reţinem că determinarea proiecţiilor precum şi calculul pseudosoluţiei
se efectuează operând direct asupra vectorului b, fără a forma explicit proiectorii
ortogonali P1 , P2 sau pseudoinversa A+ .
18 Tocmai ı̂n virtutea acestei semnificaţii geometrice remarcabile, reziduul r ∗ = b − Ax∗ poate fi

calculat fără a determina ı̂n prealabil pseudosoluţia x∗ . În general, toate calculele se fac utilizând
exclusiv informaţiile obţinute la paşii 0 şi 1 ai procedurii CMMP, fără nici o referire la datele
iniţiale A, b care, de altfel, au şi fost distruse.
168 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

3.5.3 Problema CMMP cu membru drept multiplu


Fie acum A ∈ Cm×n o matrice dată şi B ∈ Cm×p o matrice arbitrară cu p coloane,
unde p ≥ 1. Problema rezolvării ı̂n sensul CMMP a sistemului cu membru drept
multiplu AX = B constă ı̂n determinarea pseudosoluţiei X ∗ ∈ Cn×p astfel ı̂ncât
norma Frobenius a reziduului matriceal R = B − AX să fie minimă, pe scurt

kB − AX ∗ kF = min kB − AXkF . (3.95)


X∈Cn×p

Analiza acestei probleme este simplă. Partiţionând matricele B, X şi R pe


coloane, cu notaţii clare putem scrie rj = bj − Axj , j = 1 : p. Pe de altă parte, prin
definiţia normei Frobenius avem
p
X
kRk2F = krj k2 . (3.96)
j=1

În consecinţă, problema de minimizare (3.95) este echivalentă cu p probleme CMMP


de tip (3.77), având aceeaşi matrice A şi membri drepţi diferiţi, i.e.

kbj − Ax∗j k = minn kbj − Axk, j = 1 : p. (3.97)


x∈C

Prin urmare, dacă matricea A este monică, atunci conform teoremei 3.3 fiecare
problemă (3.97) are o soluţie unică x∗j = A+ bj , j = 1 : p, iar matricea
X ∗ = [x∗1 . . . x∗p ], rezultată prin agregarea acestora constituie soluţia unică

X ∗ = A+ B (3.98)

a problemei (3.95).
Procedural, pseudosoluţia X ∗ ∈ Cn×p se calculează simplu, efectuând o sin-
gură dată triangularizarea ortogonală a matricei A şi aplicând apoi repetat algo-
ritmul de rezolvare SQR fiecărei coloane B(:, j), j = 1 : p, a matricei B. Dacă
ı̂n plus se doreşte calculul reziduului de normă Frobenius minimă R∗ = B − AX ∗ ,
atunci se aplică procedura CMMP ı̂n care vectorul b se ı̂nlocuieşte peste tot cu ma-
tricea B. Desigur, ı̂n acest nou context pot fi aplicate avantajos (pe calculatoarele
cu memorie ierarhică) procedurile bloc de triangularizare ortogonală şi aplicare a
transformărilor, expuse ı̂n secţiunea 3.4.4.

3.5.4 Calculul pseudoinversei


Matricea pseudoinversă A+ , definită prin (3.78) are multe proprietăţi interesante
şi, ı̂n principiu, poate fi calculată ı̂n multe feluri.
În primul rând, utilizând relaţia (3.79), constatăm imediat că

1◦ A+ A = In
2◦ AA+ = (AA+ )H .

Prima relaţie afirmă că A+ este o inversă la stânga a matricei A; ı̂n particular,
rangA+ = n, deci A+ este epică. A doua relaţie, ı̂n combinaţie cu prima, arată
3.5. REZOLVAREA PROBLEMEI CMMP 169

că matricea hermitică P1 = AA+ coincide cu proiectorul ortogonal pe subspaţiul


S = ImA. Prin urmare, relaţiile 1◦ şi 2◦ determină unic matricea A+ cu expresia
(3.79). Din nefericire, (3.79) este improprie din punct de vedere numeric, deoarece
implică inversarea gramianului G = AH A.
În al doilea rând, punând B = Im din (3.98) găsim X ∗ = A+ . Prin urmare,
având ı̂n vedere (3.95), A+ este soluţia unică a problemei de minimizare

kIm − AA+ kF = min kIm − AXkF . (3.99)


X∈Cn×m

Nici această constatare, deşi teoretic extrem de interesantă, nu are ı̂nsă utilitate
calculatorie. Determinarea lui A+ prin rezolvarea sistemului AX = Im utilizând
procedura CMMP este evident neeficientă, deoarece aplicarea transformărilor de la
pasul 1 nu ţine seama de structura specială a membrului drept B = Im .
În sfârşit, din (3.78), prin identificare cu (3.91), (3.92) rezultă

A+ = [(R′ )−1 0]QH , respectiv A+ = (R′ )−1 Q′H , (3.100)

ı̂n care apar direct elementele factorizării QR a matricei A. În consecinţă, A+


poate fi calculată efectuând triangularizarea ortogonală a matricei A şi utilizând
informaţia astfel obţinută pentru a explicita oricare dintre relaţiile (3.100).
a) În primul caz se calculează inversa matricei triunghiulare R′ şi apoi se aplică
transformarea QH la dreapta inversei extinse cu zerouri, utilizând o procedură de
tip MQRd.
b) În al doilea caz se acumulează matricea Q′ utilizând procedura GQR şi apoi
se rezolvă sistemul superior triunghiular R′ A+ = Q′H 19 .
Detaliile de implementare precum şi analiza algoritmilor de calcul astfel obţinuţi
sunt propuse cititorului ca exerciţii.
Întrucât matricea A+ este rareori necesară ca atare ı̂n calcule, iar formarea sa
explicită este costisitoare, ı̂n practică se recomandă evitarea determinării lui A+ ı̂n
favoarea rezolvării ı̂n sens CMMP a unui sistem AX = B definit ı̂n mod adecvat. O
observaţie similară este valabilă relativ la proiectorii P1 şi P2 . Calculul proiecţiilor
se face direct, după cum am arătat ı̂n secţiunea 3.5.2.

3.5.5 Alte metode de rezolvare a problemei CMMP


Calculul pseudosoluţiei x∗ a sistemului Ax = b se poate face utilizând factorizarea
QR a matricei furnizată de procedura Gram-Schmidt modificată din secţiunea 3.4.4.
Pe scurt, avem A = Q′ R′ , unde ambele matrice Q′ şi R′ sunt formate explicit de
procedura MGS, iar relaţia (3.92) spune că x∗ = (R′ )−1 Q′H b. Partiţionând Q′ pe
coloane, schema de calcul este următoarea.

SMGS % Calculul pseudosoluţiei.


1. Pentru j = 1 : n
1. xj ← dj = qjH b
2. Se rezolvă sistemul triunghiular R′ x = d′
19 Amintim că procedura GQR calculează Q′ pe loc ı̂n A. Prin urmare, matricea Y = (A+ )H

poate fi obţinută tot ı̂n A, rezolvând sistemul inferior triunghiular Y (R′ )H = Q′ .


170 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

Numărul de operaţii este Nop = 2mn + n2 , prin urmare calculul pseudosoluţiei


prin apelarea succesivă a procedurilor MGS şi SMGS cere asimptotic NGS > NQR
operaţii.
Desigur, procedura de triangularizare ortogonală este mai economică deoarece
nu formează explicit matricea Q′ , totuşi simplitatea procedurii MGS este uneori
atractivă. Realmente neplăcută aici este absenţa matricei de completare Q′′ pe
care procedura MGS nu o poate calcula. În consecinţă, calculul reziduului de normă
minimă nu se poate face acum decât pe baza relaţiei r∗ = b − Ax∗ , ceea ce necesită
păstrarea unor copii ale datelor de intrare A, b. În plus, dacă sistemul Ax = b este
”aproape” compatibil, i.e. vectorii b şi b∗ = Ax∗ sunt apropiaţi, atunci calculul
lui r∗ este ameninţat de erori catastrofale şi, de aceea, trebuie efectuat lucrând ı̂n
dublă precizie (vezi secţiunea 2.7).

3.6 Sisteme liniare subdeterminate


Rezolvarea sistemelor liniare subdeterminate necesită o procedură specifică de tri-
angularizare ortogonală la dreapta, pe care o vom expune ı̂n prima parte a acestei
secţiuni. În continuare vom construi factorizarea LQ corespunzătoare, iar ı̂n final
vom prezenta procedura de rezolvare a problemelor CMMP de tip (3.5).

3.6.1 Triangularizarea ortogonală la dreapta


not
Propoziţia 3.3 Oricare ar fi A ∈ Cm×n , există o matrice unitară V H = Z ∈
Cn×n astfel ı̂ncât matricea

AV H = L, respectiv AZ = L, (3.101)

este inferior triunghiulară.


În cazul real A ∈ Rm×n , matricea de transformare V T = Z poate fi aleasă (reală
şi) ortogonală, deci L rezultă reală.

Pe scurt, orice matrice A este unitar echivalentă la dreapta cu o matrice inferior


triunghiulară. Prima relaţie arată că A poate fi scrisă sub forma unui produs
A = LV , unde V este unitară, iar L este inferior triunghiulară. În calculul numeric
o relaţie de acest tip se numeşte factorizare LQ, de aceea procedurile de calcul
stabilite pe baza relaţiei fundamentale (3.101) vor fi notate cu sigla LQ.
Demonstraţia rezultă imediat aplicând teorema 3.1 matricei B = AH .
Într-adevăr, dacă V AH = R este superior triunghiulară, atunci are loc (3.101),
unde L = RH este evident inferior triunghiulară 20 . ♦
Având ı̂n vedere că operaţia de transpunere şi conjugare este costisitoare, ı̂n
practica profesională se operează direct asupra matricei date A ∈ Cm×n . Notăm ca
de obicei s = min(m, n) şi fie Zk reflectorii utilizaţi ı̂n scopul anulării elementelor
20 Corespondenţa A → AH se numeşte dualitate, iar rezultatele şi relaţiile asociate prin această

corespondenţă se numesc duale. De exemplu, relaţiile (3.53) şi (3.101) sunt duale.
3.6. SISTEME LINIARE SUBDETERMINATE 171

situate la dreapta diagonalei principale, din liniile matricei A, la etapele k = 1 : s.


Similar cu (3.56), matricea de transformare are structura

V H = Z = Z1 Z2 . . . Zs (3.102)

iar schema de triangularizare este următoarea

LQ % Schemă generală de triangularizare LQ


1. Pentru k = 1 : s
1. Se generează Zk a.ı̂. (AZk )kj = 0, j = k + 1 : n
2. A ← AZk .

• În cazul real sau ı̂n cazul utilizării reflectorilor hermitici (Zk = ZkH ), compo-
nentele vkj , j = k + 1 : n, ale vectorilor Householder vk se memorează natural pe
poziţiile elementelor anulate. Algoritmul rezultat poate fi redactat astfel.

Algoritmul 3.9 (LQ – triangularizare ortogonală la dreapta cu re-


flectori hermitici) (Se dă A ∈ Cm×n . Se efectuează triangularizarea
ortogonală la dreapta a matricei A, i.e. AZ = L, unde Z = Z1 Z2 . . . Zs ,
iar Zk sunt reflectori hermitici. Partea esenţială vk (k+1 : n) a vectorilor
Householder vk se memorează pe poziţiile corespunzătoare A(k, k + 1 : n).
La aplicarea ulterioară a transformărilor se ţine seama că vkk = βk ,
k = 1 : s. Elementele nenule ale matricei inferior triunghiulare L
suprascriu elementele corespunzătoare din triunghiul inferior al matri-
cei A.)
1. Pentru k = 1 : s
1. βk = 0
2. Dacă k < n atunci
1. σ = kA(k, k : n)k
2. Dacă σ 6= 0 atunci
ākk
1. Dacă akk 6= 0 atunci σ ← σ
|akk |
2. akj ← vkj = ākj /σ, pentru j = k : n
3. βk ← vkk = 1 + akk
4. Pentru i =k + 1 : m 
Pn
1. α = − j=k aij vkj /βk
2. aij ← aij + αv̄kj , pentru j = k : n
% elementul diagonal
5. akk = −σ̄

Comentarii. În cazul real algoritmul 3.9 necesită NLQ = 2nm2 − m3 /3 operaţii
şi este numeric stabil, după cum vom arăta ı̂n secţiunea 3.8. Modul de apel este
[A, β] = LQ(A), unde β este vectorul real cu componentele βk , k = 1 : s, iar A
apare ca tablou de intrare-ieşire. ♦
•• În cazul utilizării reflectorilor complecşi, detaliile sunt propuse cititorului ca
exerciţiu.
172 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

3.6.2 Factorizarea LQ
În această secţiune construim factorizarea LQ a unei matrice A ∈ Cm×n de formă
generală.
În cazul m ≤ n, relaţiile (3.101) şi (3.102) pot fi scrise sub forma

L′ |{z}
A = LV, L = [|{z} 0 ], (3.103)
m n−m

unde matricea
H
V = Zm . . . Z2H Z1H (3.104)
este unitară, iar L′ este inferior triunghiulară de ordin m. Partiţionând V = Z H
conform cu L, i.e.
 ′ 
V }m
V = , Z = [|{z} Z ′′ ]
Z ′ |{z} (3.105)
V ′′ }n − m
m n−m

din (3.103) deducem


A = L′ V ′ , (3.106)
unde evident V ′ = Z ′H are liniile ortogonale, i.e. V ′ V ′H = Im .

Propoziţia 3.4 Orice matrice A ∈ Cm×n cu m ≤ n poate fi scrisă sub forma


(3.106), unde V ′ ∈ Cm×n are liniile ortogonale, iar L′ ∈ Cm×m este inferior
triunghiulară. Prin definiţie, relaţia (3.106) constituie factorizarea LQ a ma-
tricei A. Dacă A este epică, atunci L′ rezultă inversabilă şi reciproc.

Demonstraţia ultimei afirmaţii este evidentă. Mai mult, dacă A este epică,
atunci matricea hermitică G = AAH este pozitiv definită, prin urmare considerând
−1
factorizarea Cholesky G = L1 LH 1 şi definind V1 = L1 A, putem stabili cu uşurinţă
unicitatea factorizării LQ, ı̂n care factorul triunghiular L′ are elementele diagonale
pozitive. ♦
În general, matricea hermitică pozitiv semidefinită G = AAH se numeşte gramian
al (liniilor) lui A. Observaţia 3.4 se reformulează corespunzător ı̂n noul context.
Dacă matricea A este epică, atunci matricea Z ′′ din (3.105) are o semnificaţie
geometrică remarcabilă. Din (3.101) sau (3.103) rezultă AZ = [L′ 0], unde Z are
structura (3.105), deci
AZ ′′ = 0. (3.107)
Mai mult, Z ′′ ∈ Cn×(n−m) are coloanele ortogonale, deci constituie o bază ortogonală
a subspaţiului N = KerA. Proiectorul ortogonal pe N este P2 = Z ′′ Z ′′H .
În mod similar, matricea Z ′ ∈ Cn×m (care, ı̂n (3.105), completează Z ′′ până
la o matrice ortogonală) constituie o bază ortogonală a subspaţiului complementar
N ⊥ = ImAH . Proiectorul ortogonal pe S este P1 = AH (AAH )−1 A sau mai simplu
P1 = Z ′ Z ′H . Pe scurt, partiţia (3.105) corespunde descompunerii ortogonale

Cn = ImAH ⊕ KerA. (3.108)


3.6. SISTEME LINIARE SUBDETERMINATE 173

Acumularea transformărilor
În cazul m ≤ n, factorizarea LQ a matricei A poate fi determinată utilizând pro-
cedura de triangularizare ortogonală la dreapta din secţiunea anterioară. Factorul
triunghiular L′ se obţine ca atare ı̂n triunghiul inferior al matricei A, iar factorul
ortogonal V ′ poate fi calculat sub forma

V ′ = [Im 0]V = [Im 0]Zm


H
. . . Z2H Z1H , (3.109)

aplicând următoarea schemă evidentă de acumulare a transformărilor.

GLQ % Acumularea primelor n linii V ′ ale matricei V = Z H , m ≤ n.


1. V ′ = [In 0]
2. Pentru k = m : −1 : 1
1. V ′ ← V ′ ZkH

Cu referire la algoritmul 3.9, calculul poate fi organizat pe loc ı̂n tabloul A,


iar procedura poate fi scrisă cu uşurinţă de cititorul interesat. Menţionăm ı̂nsă că
formarea explicită a matricelor V ′ sau Z ′ , Z ′′ etc. este de regulă contraindicată.
Aproape ı̂ntotdeauna forma factorizată (3.102) este suficientă.

Aplicarea transformărilor
La fel ca ı̂n secţiunea 3.4, matricea unitară Z generată de algoritmul de triangu-
larizare LQ aplicat matricei A se utilizează pentru a transforma adecvat o altă
matrice dată B.
Aplicarea transformării

B ← ZB = Z1 Z2 . . . Zs B (3.110)

se face partiţionând B pe coloane:

MLQ % Aplicarea transformării B ← ZB, unde Z = Z1 Z2 . . . Zs .


1. Pentru k = s : −1 : 1
1. B ← Zk B

Procedând ı̂n acelaşi spirit, toate rezultatele din secţiunea 3.4 pot fi reformulate
ı̂n contextul factorizării LQ. Stabilirea versiunii la nivel de bloc a procedurii de
triangularizare la dreapta precum şi a procedurilor de ortogonalizare Gram-Schmidt
sunt propuse cititorului ca exerciţii.

Factorizarea RQ
În unele aplicaţii matricea A este adusă la forma superior triunghiulară ı̂n raport
cu diagonala secundară care ı̂ncepe din colţul dreapta-jos, i.e.

AZ = R, (3.111)

unde rij = 0, j < n − m + i, i = 1 : m, iar Z este unitară. (Pentru simplitate am


presupus m ≤ n.)
174 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

Procesul de triangularizare la dreapta parcurge liniile ı̂n ordine inversă, ı̂ncepând


cu ultima şi anulează elementele situate la stânga diagonalei secundare utilizând
reflectori modificaţi. Notând reflectorii cu indicele liniei ı̂n care se păstrează vectorii
Householder corespunzători, putem scrie

Z = Zm . . . Z2 Z1 , (3.112)

iar procedura de calcul poate fi rezumată astfel.

RQ % Schema de triangularizare RQ, cazul n > m


1. Pentru k = m : −1 : 1
1. Se generează Zk a.ı̂. (AZk )kj = 0, j = 1 : n − m + k − 1
2. A ← AZk

La pasul 1.1 se utilizează o procedură de tip mRFG (vezi tabelul 3.1), iar la
pasul 1.2 se modifică numai primele n − m + k elemente din liniile i = 1 : k − 1,
utilizând procedura corespunzătoare mRF.
Aplicaţiile procedurii de triangularizare RQ sunt perfect similare cu aplicaţiile
descrise mai sus ale procedurii LQ.

3.6.3 Rezolvarea sistemelor subdeterminate


Revenim acum la problema (3.5) din secţiunea introductivă a acestui capitol. Fie
A ∈ Cm×n şi b ∈ Cn . Problema constă ı̂n determinarea soluţiei normale a sistemului
Ax = b, i.e. a unui vector x∗ ∈ Cn astfel ı̂ncât

kx∗ k = min kxk. (3.113)


Ax=b

Condiţiile de existenţă şi unicitate ale soluţiei normale pot fi formulate astfel.

Teorema 3.4 Oricare ar fi b ∈ Rm , problema (3.113) are o soluţie unică dacă şi
numai dacă A este epică, i.e. m ≤ n şi rangA = m.
În acest caz, soluţia normală x∗ a sistemului Ax = b poate fi scrisă ı̂n forma

x∗ = A+ b, (3.114)

ı̂n care matricea A+ este prin definiţie (pseudo)inversa normală a lui A şi are
expresia
A+ = AT (AAT )−1 . (3.115)

Demonstraţia rezultă uşor (cel puţin ı̂n cazul real) utilizând metodele clasice de
minimizare cu restricţii (problema (3.113) este extrem de simplă). Noi vom proceda
direct, stabilind pe rând a) unicitatea şi b) existenţa globală a soluţiei x∗ .
a) Pentru a demonstra unicitatea, nu e necesar să presupunem că matricea A
este epică, ci doar că
b ∈ ImA, (3.116)
i.e. mulţimea X a soluţiilor sistemului Ax = b nu e vidă. Desigur, ı̂n limbaj
geometric, X este planul (sau varietatea liniară) de ecuaţie Ax = b. Mai precis,
3.6. SISTEME LINIARE SUBDETERMINATE 175

 N = KerA  ”planul”
 
  Ax = b
 
 
  x
 x2   :

  
  
  
  
  

  
 - 

N⊥ 0  x = x1 

 
 
 
 
 

Fig. 3.7: Forma generală a soluţiilor sistemului subdeterminat Ax = b

teorema 1.3 din capitolul 1 afirmă că X = x0 + KerA, unde x0 este o soluţie par-
ticulară. În consecinţă, conform lemei proiecţiei ortogonale, soluţia x∗ a problemei
(3.113) coincide cu piciorul perpendicularei din origine pe planul X şi ca atare este
unic determinată, vezi figura 3.7.
La fel ca ı̂n demonstraţia teoremei 3.3, aceste consideraţii geometrice pot fi
exprimate analitic. Planul X este paralel cu subspaţiul N = KerA, deci x∗ ⊥ KerA
sau x∗ ∈ N ⊥ = ImAH , i.e. există (cel puţin) un y ∗ ∈ Cm astfel ı̂ncât x∗ = AH y ∗ .
(În interpretare variaţională, y ∗ este vectorul multiplicatorilor Lagrange asociaţi
restricţiilor egalitate Ax = b din (3.113).) În definitiv avem
  ∗   
In AH x 0
= , (3.117)
A 0 −y ∗ b
de unde, eliminând x∗ rezultă
AAH y ∗ = b, x∗ = AH y ∗ . (3.118)
b) Existenţa globală a lui x∗ este asigurată, i.e. (3.116) are loc oricare ar fi
b ∈ Cm , dacă şi numai dacă A este epică. În acest caz, matricea G = AAH este
pozitiv definită deci inversabilă, iar (3.114) şi (3.115) rezultă din (3.118). ♦
Observaţia 3.6 Sistemul extins (3.117) şi sistemul normal (3.118) au o semnificaţie
similară cu cea a sistemelor (3.83) şi respectiv (3.84) din observaţia anterioară. Si
aici gramianul G = AAH este o matrice rău condiţionată, astfel ı̂ncât, ı̂n general,
calculul soluţiei normale prin rezolvarea sistemului (3.118) nu este recomandabil. ♦

Calculul soluţiei normale


Rezolvarea problemei de minimizare cu restricţii (3.113) se poate face utilizând
informaţiile furnizate de algoritmul de triangularizare ortogonală
AZ = [L′ 0], Z = Z1 Z2 . . . Zm , (3.119)
176 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

unde Z este unitară, iar L′ este inferior triunghiulară inversabilă. Notăm


 ′ 
u }m
x = Zu, u = (3.120)
u′′ }n − m

şi scriem sistemul Ax = b sub forma echivalentă


 ′ 
′ u
[L 0] = b, (3.121)
u′′

Relaţia de mai sus arată că, ı̂n procesul de minimizare din (3.113), vectorul u′ = u′∗
este fixat prin
Lu′∗ = b, (3.122)
iar u′′ este liber.
Pentru a determina soluţia normală x∗ , considerăm (3.120), unde Z este orto-
gonală, deci kZuk = kuk. Avem

kxk2 = kZuk2 = ku′∗ k2 + ku′′ k2 ≥ ku′∗ k2 . (3.123)

Efectuând minimizarea ı̂n raport cu u′′ , obţinem evident

u′′∗ = 0. (3.124)

Prin urmare soluţia normală este


 
∗ (L′ )−1 b
x =Z , (3.125)
0
sau
x∗ = Z ′ (L′ )−1 b. (3.126)
Ţinând seama de structura matricei Z din (3.119), se vede uşor că transformarea
(3.125) poate fi efectuată pe loc ı̂n x utilizând o procedură de tip MLQ. Schema de
calcul este următoarea

SLQ % Calculul soluţiei normale x = A+ b


1. Se rezolvă sistemul triunghiular L′ x(1 : m) = n
2. x(m + 1 : n) = 0
3. Pentru k = m : −1 : 1
x ← Zk x

Cu referire la algoritmul 3.9, care utilizează reflectori hermitici, implementarea


schemei de mai sus are loc astfel.

Algoritmul 3.10 (SLQ – rezolvarea sistemelor subdeterminate) (Se


dă un vector b ∈ Cm . Utilizând ieşirea algoritmului 3.9, se calculează
soluţia normală x a sistemului liniar Ax = b. Se presupune că matricea
A este epică.)
3.7. CONDIŢIONAREA PROBLEMELOR CMMP 177

% se rezolvă sistemul inferior triunghiular (3.122)


1. Pentru k = 1 : m
Pk−1
1. xk = (bk − j=1 akj xj )/akk
% calculul soluţiei normale
2. x(m + 1 : n) ← 0
3. Pentru k = m : −1 : 1
1. t = akk
2. akk = βk 
Pn
3. α ← − j=k vkj xj /βk
4. Pentru j = k : n
1. xj ← xj + αvkj
5. akk = t

Calculul proiecţiilor (pe ImAH şi KerA), rezolvarea sistemelor subdeterminate


cu membru drept multiplu precum şi calculul pseudoinversei normale A+ se fac
adaptând ı̂n mod corespunzător metodologia din secţiunea 3.5. Desigur, acum A+
este o inversă la dreapta a lui A, i.e. AA+ = I.

3.7 Condiţionarea problemelor CMMP


În această secţiune prezentăm câteva rezultate privind sensibilitatea soluţiilor pro-
blemelor de calcul abordate anterior ı̂n raport cu variaţia datelor de intrare 21 .

3.7.1 Preliminarii
Considerăm sistemul liniar
Ax = b, (3.127)
unde A ∈ Rm×n este o matrice dată, iar b ∈ Rn este un vector arbitrar. Notăm
r = rangA şi presupunem că matricea A este de rang maxim, i.e. r = s, unde
s = min(m, n) 22 . În consecinţă, conform teoremelor 3.5 şi 3.6, sistemul (3.127) are
o soluţie ı̂n sens CMMP unică
x∗ = A+ b, (3.128)
unde matricea A+ are expresii diferite după cum m ≥ n sau m ≤ n.
Având ı̂n vedere concizia expunerii, ı̂n cele ce urmează vom adopta o terminolo-
gie precum şi notaţii cât mai uniforme. Vom spune că A+ este inversa (ı̂n sens
21 Deoarece această tematică are un caracter pur matematic, i.e. nu vizează calitatea algoritmilor

de calcul, pe parcurs vom utiliza formulele cele mai convenabile pentru scopul propus.
22 O proprietate P definită pe Rm×n se numeşte tipică dacă este generică şi structural stabilă,

adică are loc ”aproape peste tot” (ı̂n afara unei varietăţi algebrice) şi se conservă oricare ar fi
micile variaţii ale (elementelor) matricei considerate.
De exemplu, ı̂n cazul m = n, proprietatea de inversabilitate este generică (are loc peste tot
ı̂n afara varietăţii definite de ecuaţia detA = 0) şi structural stabilă (dacă detA 6= 0, atunci
det(A + E) 6= 0, oricare ar fi perturbaţia E suficient de mică). Pe scurt, matricele inversabile sunt
tipice ı̂n Rn×n . Similar, matricele de rang maxim sunt tipice ı̂n Rm×n .
178 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

CMMP a) matricei A şi vom defini numărul de condiţionare (la inversare) al lui A
prin
κ(A) = kAkkA+ k, (3.129)
unde k · k = k · k2 este norma spectrală, indusă de norma (vectorială) euclidiană
kxk = (xT x)1/2 , adică
def
kAk = max kAxk. (3.130)
kxk=1

Desigur, ı̂n cazul m = n avem A+ = A−1 , deci (3.129) se reduce la definiţia cunos-
cută a lui κ(A) din secţiunea 2.7 23 .
Direct din (3.129) şi (3.130),
(i) dacă matricea A este ortogonală, atunci κ(A) = 1, i.e. matricele ortogonale
sunt perfect condiţionate la inversare.
Pe de altă parte, norma euclidiană precum şi norma spectrală sunt ortogonal
invariante, deci
(ii) transformările ortogonale nu modifică condiţionarea datelor, i.e. avem
κ(A) = κ(QT AZ), oricare ar fi matricele ortogonale Q şi Z.
Proprietăţile remarcabile (i) şi (ii) explică folosirea intensivă a matricelor or-
togonale ı̂n calculul numeric. (Aceleaşi proprietăţi de invarianţă apar şi ı̂n norma
Frobenius k · kF , care este şi ea ortogonal invariantă. Numărul de condiţionare
evaluat folosind această normă este notat κF (A).)
Revenim acum la sistemul (3.127), ı̂n care prin ipoteză matricea A este de rang
maxim şi facem următoarele precizări.
• În cazul m ≥ n matricea A este monică, iar A+ = (AT A)−1 AT este epică.
Evident, avem A+ A = In , deci A+ este o inversă la stânga a lui A, dar AA+ 6= Im ,
mai precis P1 = AA+ şi P2 = Im − P1 sunt proiectorii (ortogonali) pe subspaţiile
S = ImA şi respectiv S ⊥ = KerA. De asemenea, este adevărat că kAk2 = kAT Ak
sau, pe scurt,
kAk2 = kGk, (3.131)
unde matricea simetrică G = AT A este gramianul (coloanelor) matricei A.
•• În cazul m ≤ n matricea A este epică, iar A+ = AT (AAT )−1 este monică.
Evident, acum avem AA+ = Im , deci A+ este o inversa la dreapta a lui A, iar
P1 = A+ A şi P2 = Im − P1 sunt proiectorii pe subspaţiile N ⊥ = ImAT şi respectiv
N = KerA. De asemenea, are loc relaţia (3.131), unde matricea G = AAT este
gramianul (liniilor) matricei A.
Putem acum formula concis primele noastre rezultate.

Propoziţia 3.5 Dacă A ∈ Rm×n este de rang maxim, atunci

κ(G) = κ2 (A), (3.132)

unde G este gramianul matricei A.


23 Acolo am evaluat κ(A) utilizând normele k · k sau k · k , relativ mai simple. În acelaşi scop,
1 ∞
aici vom utiliza norma spectrală, care, după cum ştim din capitolul 1, este ortogonal invariantă.
Anticipând rezultate din capitolul 5, precizăm că ı̂n general norma spectrală kAk coincide cu
valoarea singulară maximă a matricei A, notată de obicei σ1 , iar numărul de condiţionare este
κ(A) = σ1 /σr ≥ 1, unde σr este cea mai mică valoare singulară nenulă a lui A.
3.7. CONDIŢIONAREA PROBLEMELOR CMMP 179

Demonstraţie. Notăm cu H gramianul lui A+ . În cazul m ≥ n, A+ este epică,


deci
H = A+ (A+ )T = (AT A)−1 AT A(AT A)−1 = (AT A)−1 = G−1 .
Aplicând acum (3.131) lui A+ găsim

kA+ k2 = kHk = kG−1 k, (3.133)

deci (3.132) rezultă direct, utilizând definiţia lui κ(G) precum şi relaţiile (3.131) şi
(3.133). Cazul m ≤ n este similar; desigur acum H = (A+ )T A+ . ♦

Propoziţia 3.6 Dacă A ∈ Rm×n este de rang maxim, atunci matricea  = A + E


are aceeaşi proprietate, oricare ar fi perturbaţia E astfel ı̂ncât

kEk < κ−1 (A)kAk. (3.134)

Demonstraţie. În cazul m ≥ n putem scrie  = (Im + EA+ )A, unde, conform
unui rezultat cunoscut, matricea Im + EA+ este inversabilă dacă kEA+ k < 1. Dar
ı̂ntotdeauna avem kEA+ k ≤ kEk · kA+ k. Prin urmare, dacă (3.134) are loc, atunci
A şi  sunt echivalente (la stânga), deci  rezultă monică o dată cu A. În cazul
m ≤ n scriem  = A(In + A+ E) şi raţionăm similar. ♦
Propoziţia 3.5 arată că sistemele normale (3.84) şi (3.118) 24 sunt mult mai
rău condiţionate decât sistemul dat (3.127) şi explică de ce determinarea soluţiei
x∗ prin rezolvarea acestor sisteme este ı̂ntotdeauna contraindicată din punct de
vedere numeric. Propoziţia 3.6 arată că soluţia x∗ este robustă, i.e. continuă să
fie bine definită chiar dacă matricea A a sistemului (3.127) suferă perturbaţii E
relativ importante. Conform relaţiei (3.134), aceste perturbaţii sunt strict limitate
ı̂n normă numai de κ(A). Pentru orientare, dacă κ(A) = 103 , atunci κ(G) = 106 ,
deci la rezolvarea ı̂n simplă precizie (i.e. cu t = 7 cifre zecimale semnificative) a
sistemului normal se pierd aproape toate cifrele semnificative. Pe de altă parte, dacă
kAk ≈ 1, atunci perturbaţiile admisibile ı̂n A sunt numai de ordinul kEk < 10−3 .
Concluziile obţinute mai sus subliniază importanţa deosebită a numărului de
condiţionare κ(A) pentru caracterizarea din punct de vedere numeric a problemei
(3.127). În continuare vom preciza aceste concluzii, efectuând analiza cantitativă a
sensibilităţii (locale) a soluţiei x∗ ı̂n raport cu perturbaţiile datelor. În consecinţă,
vom considera sistemul perturbat

(A + E)x = b + f, (3.135)

ı̂n care perturbaţiile E şi f sunt relativ mici ı̂n raport cu nivelul maxim admisibil,
e.g. avem
kEk ≤ ǫA kAk, kf k ≤ ǫb kbk, (3.136)
unde tipic ǫA şi ǫb sunt de acelaşi ordin de mărime şi, ı̂n orice caz, ǫA < κ−1 (A).
Notând cu x̂∗ soluţia ı̂n sens CMMP a sistemului perturbat (3.136), problema
de analiză a sensibilităţii constă pe scurt ı̂n a evalua diferenţa ∆x = x̂∗ − x∗ .
24 A căror matrice este evident G = AT A, respectiv G = AAT .
180 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

b  >

 r ∗ = b2





 b1 = Ax∗

Fig. 3.8: θ este unghiul dintre vectorul b şi subspaţiul ImA

3.7.2 Sensibilitatea pseudosoluţiei


Considerăm sistemul (3.127) ı̂n care presupunem că A ∈ Rm×n este monică, iar
AT b 6= 0.

Teorema 3.5 Sensibilitatea relativă a pseudosoluţiei x∗ 6= 0 a sistemului (3.127)


ı̂n raport cu perturbaţiile (3.136) poate fi evaluată acoperitor prin
kx̂∗ − x∗ k κ(A) b
≤ (κ2 (A)tgθ + κ(A))ǫA + ǫ , (3.137)
kx∗ k cos θ
unde θ are semnificaţia din figura 3.8.

Demonstraţie. Conform teoremei 3.5, pseudosoluţia x̂∗ = x∗ + ∆x a sistemului


perturbat (3.135) satisface relaţia
(AT + E T )(A + E)(x∗ + ∆x) = (AT + E T )(b + f ).

Desfăcând parantezele şi ţinând seama că AT Ax∗ = AT b, obţinem

(AT E + E T A)x∗ + (AT A)∆x = E T b + AT f + . . . ,


unde + . . . indică termeni neglijabili ı̂n primă aproximaţie, ca produs a două can-
tităţi mici. Prin urmare putem scrie
∆x = (AT A)−1 E T (b − Ax∗ ) − A+ Ex∗ + A+ f, (3.138)

unde evident AT A = G este gramianul lui A, iar b − Ax∗ = r∗ este reziduul de


normă minimă. Evaluând ı̂n normă ambii membri ai relaţiei (3.138), găsim
k∆xk ≤ kG−1 k · kEk · kr∗ k + kA+ k · kEk · kx∗ k + kA+ k · kf k,

de unde, ţinând seama de relaţiile (3.133) şi (3.136), rezultă imediat


 
k∆xk + 2 2 kr∗ k kbk
≤ kA k kAk + kA k · kAk ǫA + kA+ k · kAk
+
ǫb .
kx∗ k kAk · kx∗ k kAk · kx∗ k

În sfârşit, avem b1 = Ax∗ , deci kb1 k ≤ kAk · kx∗ k, iar din figura 3.8 se vede că
kr∗ k kbk 1
= tgθ, = .
kb1 k kb1 k cos θ
3.7. CONDIŢIONAREA PROBLEMELOR CMMP 181

Demonstraţia este terminată. ♦

Observaţia 3.7 Putem obţine uşor o evaluare mai fină decât (3.137), ţinând
seama că ı̂n (3.138) perturbaţiile E şi f acţionează diferenţiat. În acest scop scriem
E = E1 + E2 , unde Eα = Pα E, α = 1 : 2, sunt proiecţiile (coloanelor) lui
E pe subspaţiile S şi respectiv S ⊥ . Avem A+ E = A+ E1 (deoarece A+ P2 =
= A+ (I − AA+ ) = 0) precum şi E T r∗ = E2T r∗ (deoarece r∗ = P2 b iar P2 este
proiector ortogonal, i.e. P22 = P2 şi P2T = P2 ). În mod similar avem f = f1 + f2 ,
unde fα = Pα f , α = 1 : 2, iar A+ f = A+ f1 . Prin urmare, relaţia (3.138) poate fi
scrisă sub forma echivalentă, dar mai precisă

∆x = G−1 E2T r∗ − A+ E1 x∗ + A+ f1 , (3.139)

unde E1 , E2 şi f1 apar acum ca perturbaţii independente, iar f2 a dispărut. Prin


urmare, dacă ı̂n locul relaţiei (3.136) considerăm că pentru α = 1 : 2 avem

kPα Ek ≤ ǫA b
α kAk, kPα f k ≤ ǫα kbk, (3.140)

atunci concluzia teoremei este


 
kx̂∗ − x∗ k A ǫb1
≤ κ(A) ǫ1 + + κ2 (A) tgθ ǫA
2. (3.141)
kx∗ k cos θ
Mai departe vom utiliza relaţiile (3.137) şi (3.141) sub forma relativ mai simplă
kx̂∗ − x∗ k
≤ ǫ1 κ(A) + ǫ2 κ2 (A)tgθ, (3.142)
kx∗ k
unde, ı̂n acord cu (3.140), ǫα , α = 1 : 2, reprezintă estimări (ı̂n norma spectrală)
ale perturbaţiilor datelor A şi b la nivelul subspaţiilor S şi S ⊥ . ♦
În esenţă, relaţia (3.142) arată că, din punctul de vedere al sensibilităţii pseudo-
soluţiei x∗ , există două clase distincte de probleme CMMP, având caracteristici
numerice net diferite.
• Prima clasă conţine problemele CMMP ”aproape” compatibile, la care reziduul
r∗ este mic ı̂n normă faţă de membrul drept b, deci θ ≈ 0. În acest caz, al doilea
termen din (3.142) este neglijabil, deci practic sensibilitatea locală a pseudosoluţiei
x∗ este proporţională cu numărul de condiţionare κ(A) al lui A. În particular, dacă
m = n, atunci avem exact r∗ = 0 şi θ = 0, iar (3.142) se reduce la relaţia (2.47)
stabilită ı̂n secţiunea 2.7. Concluziile de acolo se aplică evident şi aici.
•• A doua clasă de probleme CMMP corespunde sistemelor (3.127) cu reziduu
de normă minimă r∗ mare ı̂n normă faţă de membrul drept b 25 . În acest caz al
doilea termen din (3.142) este evident dominant, deci practic sensibilitatea locală
a pseudosoluţiei x∗ este proporţională cu pătratul numărului de condiţionare κ(A).
Aceste probleme, specific de tip CMMP, sunt considerabil mai dificile din punct de
vedere numeric decât cele din prima clasă şi necesită luarea unor măsuri speciale
de precauţie (vezi secţiunea următoare).
25 Această situaţie poate fi uşor detectată ı̂n practică calculând kbk şi ρ = kr ∗ k, vezi comentariile

la algoritmul 3.8. Subliniem că ı̂n acest caz sensibilitatea pseudosoluţiei x∗ depinde nu numai de
matricea A a sistemului (3.127) ci şi de membrul drept b (prin intermediul lui θ).
182 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

În orice caz, relaţia (3.142) subliniază că elementul determinant ı̂n stabilirea
sensibilităţii pseudosoluţiei este numărul de condiţionare κ(A), de aceea ı̂n practică
se recomandă insistent evaluarea lui κ(A) ı̂n cursul procesului de calcul. Desigur,
dacă am efectuat triangularizarea ortogonală QT A = R a lui A, atunci, beneficiind
de invarianţa ortogonală a normei spectrale, avem

κ(A) = κ(R), (3.143)

deci κ(A) poate fi estimat extrem de simplu, utilizând estimatorul de condiţie pentru
matrice triunghiulare descris ı̂n secţiunea 2.7. Acelaşi rezultat poate fi obţinut
aplicând procedura de triangularizare ortogonală cu pivotarea coloanelor, descrisă
ı̂n secţiunea 3.9. În acest caz, o (sub)evaluare a lui κ(A) poate fi obţinută prin simplă
inspecţie, sub forma κ̂(A) = r11 /rnn , unde rkk , k = 1 : n, sunt elementele diagonale
ale factorului triunghiular R, dispuse pe diagonală ı̂n ordine descrescătoare.
Pe de altă parte, reexaminând formula fundamentală (3.142), este util să reţinem
că influenţa perturbaţiilor E şi f asupra pseudosoluţiei x∗ depinde de localizarea
acestora ı̂n raport cu subspaţiile S şi S ⊥ . De exemplu, dacă ImE ⊂ ImA, atunci evi-
dent E2 = P2 E = 0, deci sensibilitatea lui x∗ este dictată de κ(A) (iar nu de κ2 (A)),
chiar dacă reziduul r∗ este important. În unele aplicaţii, aceste circumstanţe pot fi
realizate printr-o ”filtrare” prealabilă adecvată a datelor de intrare, dar discutarea
acestor tehnici depăşeşte scopurile expunerii de faţă. În altă ordine de idei, este
evident că perturbaţiile inerente datorate erorilor de rotunjire acţionează ı̂n gen-
eral aleator şi ı̂n orice caz nediferenţiat ı̂n raport cu S şi S ⊥ , astfel ı̂ncât de fapt
dependenţa de κ2 (A) nu poate fi niciodată eliminată complet ı̂n situaţiile practice,
indiferent de măsurile de precauţie luate.
În rezumat, sensibilitatea pseudosoluţiei este determinată de condiţionarea ma-
tricei A precum şi de clasa θ a problemei CMMP considerate. De asemenea, ea
depinde de tipul structural al perturbaţiilor considerate.

3.7.3 Sensibilitatea soluţiei normale


Considerăm sistemul (3.127) ı̂n care presupunem că matricea A ∈ Rm×n este epică,
iar b 6= 0.

Teorema 3.6 Sensibilitatea relativă a soluţiei normale x∗ 6= 0 a sistemului (3.127)


poate fi evaluată acoperitor prin

kx̂∗ − x∗ k
≤ ǫ1 κ(A), unde ǫ1 = 2ǫA + ǫb . (3.144)
kx∗ k

Demonstraţie. Procedăm ca ı̂n demonstraţia teoremei 3.5. Conform cu teorema


3.4, soluţia normală x̂∗ = x∗ + ∆x a sistemului perturbat (3.135) satisface relaţiile

(A + E)(x∗ + ∆x) = b + f, x∗ + ∆x = (AT + E T )(y ∗ + ∆y),

unde Ax∗ = b şi x∗ = AT y ∗ . Prin urmare, ı̂n primă aproximaţie avem

A∆x + Ex∗ = f, ∆x = AT ∆y + E T y ∗ .
3.8. STABILITATEA ALGORITMILOR DE TRIANGULARIZARE 183

Eliminând ∆y ı̂ntre aceste relaţii şi notând A+ = AT (AAT )−1 , obţinem

∆x = (In − A+ A)E T y ∗ − A+ Ex∗ + A+ f, (3.145)

unde y ∗ = (AAT )−1 b = (A+ )T x∗ , iar ı̂n paranteza din membrul drept recunoaştem
proiectorul ortogonal P2 = In − A+ A pe subspaţiul N = KerA. Deoarece P2 este o
matrice simetrică cu valorile proprii 0 şi 1, avem kP2 k = 1. În consecinţă, evaluând
ı̂n normă ambii membri ai relaţiei (3.145), găsim 26

k∆xk ≤ kEk · kA+ k · kx∗ k + kA+ k · kEk · kx∗ k + kA+ k · kf k,

de unde, ţinând seama de (3.136), rezultă (3.145). ♦

Observaţia 3.8 Considerând proiecţiile Eα = EPα , α = 1 : 2, ale liniilor matricei


E pe subspaţiile N ⊥ şi N şi procedând ca ı̂n observaţia 3.7, putem şi aici scrie mai
precis
∆x = (In − A+ A)E2T y ∗ − A+ E1 x∗ + A+ f. (3.146)

Având ı̂nsă ı̂n vedere structura extrem de simplă a relaţiei (3.145), utilitatea prac-
tică a acestei precizări este aici limitată. ♦

În esenţă, relaţia (3.144) spune că sensibilitatea locală a soluţiei normale x∗ este
proporţională cu numărul de condiţionare κ(A) al matricei A.
Având ı̂n vedere că, ı̂n ipoteza teoremei 3.6, sistemele subdeterminate sunt
ı̂ntotdeauna compatibile, relaţia (3.144) poate fi considerată caz particular al relaţiei
(3.137), ı̂n care r∗ = 0, deci θ = 0. Observăm totuşi că demonstraţiile celor două
teoreme se bazează pe relaţii diferite, iar coeficientul 2 din (3.144) nu apare ı̂n
(3.137). Prin urmare, apelul la (3.137) oferă mai curând o confirmare intuitivă,
decât o justificare fermă a relaţiei (3.144). În rest, implicaţiile practice ale relaţiei
(3.144) sunt similare cu cele cunoscute din secţiunea 2.7.
În rezumat, sensibilitatea soluţiei normale este dictată numai de condiţionarea
matricei A. În acest sens, problema rezolvării sistemelor subdeterminate este relativ
simplă.

3.8 Stabilitatea numerică a algoritmilor de


triangularizare ortogonală
În această secţiune oferim câteva informaţii de bază privind stabilitatea numerică a
algoritmilor de calcul prezentaţi anterior ı̂n acest capitol. De asemenea, sprijiniţi pe
analiza sensibilităţii problemelor de calcul din secţiunea precedentă, facem câteva
consideraţii privind acurateţea soluţiilor calculate şi descriem o procedură de ra-
finare iterativă a acestor soluţii.
26 Amintim că, ı̂n norma spectrală avem ı̂ntotdeauna kAk = kAT k.
184 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

3.8.1 Stabilitatea numerică a algoritmilor fundamentali


În general, analiza stabilităţii numerice a algoritmilor de calcul din acest capitol nu
prezintă dificultăţi de esenţă, ci numai obstacole pur tehnice. În principiu, ı̂ncepând
cu algoritmii de bază 3.1-3.4, ı̂ntregul proces de calcul se reduce la o succesiune
determinată de operaţii aritmetice elementare, inclusiv extrageri de radical, pentru
care erorile de rotunjire sunt de ordinul εM ≈ 10−t , unde t este precizia de lucru,
adică numărul de cifre zecimale semnificative, vezi capitolul 0. Prin urmare, efectul
(cumulat al) acestor erori asupra rezultatelor obţinute ı̂n urma unui proces de calcul
liniar poate fi apreciat utilizând parametrul generic

γcm = cmεM , (3.147)

unde m reprezintă numărul de operaţii efectuate, iar c este o constantă de ordinul


unităţii, ı̂n general diferită de la caz la caz. Aici este esenţial să subliniem că ı̂ntreaga
tehnică de analiză inversă a erorilor constă ı̂n a converti acest efect direct al erorilor
de rotunjire asupra soluţiei calculate ı̂n perturbaţii echivalente la nivelul datelor.
În consecinţă, algoritmul analizat este (invers) numeric stabil dacă soluţia calculată
coincide cu soluţia exactă a problemei de calcul cu datele ”puţin” perturbate 27 .
Rezultatele analizei pot fi sintetizate astfel. (Pentru demonstraţii şi rezultate
adiţionale, vezi [IX].)
1◦ . Fie x ∈ Rm un vector dat. Vectorul Householder û, calculat de procedura
RFG, este apropiat de vectorul Householder exact u, i.e.

û = u + ∆u, unde k∆uk ≤ γcm . (3.148)

Subliniem că acest rezultat se datorează exclusiv alegerii judicioase a semnului


lui σ de la pasul 2.2.1.
2◦ . Fie x ∈ Rm un vector dat, U1 un reflector definit de vectorul Householder
u, iar y = U1 x. Vectorul transformat ŷ, calculat de procedura RF, utilizând un
vector Householder aproximativ û de tip (3.148) satisface relaţia

ŷ = (U1 + ∆U )x, unde k∆U kF ≤ γcm . (3.149)

În continuare, utilizând rezultatele fundamentale 1◦ şi 2◦ , se poate demonstra


afirmaţia următoare. (Vezi schema de calcul MQR din secţiunea 3.4.)
3◦ Fie A ∈ Rm×n o matrice dată, QT = Us . . . U2 U1 o secvenţă de s reflectori
definiţi de vectorii Householder uk , k = 1 : s, iar B = QT A. Matricea transformată
B̂, calculată utilizând schema de calcul
1. B = A
2. Pentru k = 1 : s
1. B ← Uk B
cu vectori Householder aproximativi ûk de tip (3.148), satisface relaţia

B̂ = QT (A + ∆A), unde k∆AkF ≤ sγcm kAkF . (3.150)


27 Peste tot mai departe noţiunea de stabilitate numerică a unui algoritm concret va fi ı̂nţeleasă

ı̂n acest sens, deci este implicit legată de o anume problemă de calcul precizată.
3.8. STABILITATEA ALGORITMILOR DE TRIANGULARIZARE 185

Pe scurt, algoritmul de aplicare a unei secvenţe de reflectori este (invers) numeric


stabil, iar perturbaţia echivalentă relativă la nivelul matricei date A este
ǫA = sγcm , (3.151)
unde s este lungimea secvenţei, m este ordinul reflectorilor iar c este o constantă de
ordinul unităţii.
Pe baza proprietăţii generale 3◦ se poate demonstra că
4◦ Algoritmul de triangularizare ortogonală QR este numeric stabil. Mai precis,
dacă R̂ este matricea superior triunghiulară calculată (ı̂n cazul m ≥ n), atunci
există o matrice ortogonală Q̂ astfel ı̂ncât
Q̂T (A + ∆A) = R̂, unde k∆AkF ≤ nγcm kAkF . (3.152)
O afirmaţie similară este valabilă relativ la algoritmul LQ de triangularizare ortog-
onală la dreapta precum şi la toţi algoritmii de calcul derivaţi (cum ar fi GQR,
MQR, SQR etc.). Subliniem că, ı̂n ultimă instanţă, toate procedurile menţionate
sunt de tip 3◦ , unde parametrii s = min(m, n) şi m iau valori adecvate. În consecinţă
5◦ Procedurile SQR (respectiv CMMP) şi SLQ, care calculează pseudosoluţia şi
respectiv soluţia normală x∗ a sistemului Ax = b, sunt numeric stabile. Perturbaţiile
echivalente relative la nivelul datelor sunt de ordinul
(SQR) ǫA,b = nγcm , (m ≥ n), (3.153)
şi respectiv
(SLQ) ǫA,b = mγcn , (m ≤ n). (3.154)
Rezultate asemănătoare sunt valabile pentru procedurile de calcul ce utilizează
reflectori bloc, respectiv rotaţii 28 .

3.8.2 Acurateţea soluţiilor calculate


Vom combina acum rezultatele privind sensibilitatea soluţiilor de tip CMMP, sta-
bilite ı̂n secţiunea 3.7, cu estimările perturbaţiilor echivalente la nivelul datelor, in-
troduse de procedurile de calcul analizate mai sus. În acest fel vom obţine evaluări a
priori ale acurateţei soluţiilor calculate, i.e. ale abaterilor relative ale acestor soluţii
faţă de soluţiile exacte.
• Considerăm problema calculului pseudosoluţiei x∗ a sistemului (3.127), ı̂n care
matricea A este monică. Dacă rezolvăm această problemă utilizând procedura
SQR, bazată pe algoritmul de triangularizare ortogonală QR, atunci ı̂n virtutea
stabilităţii numerice inverse a acestei proceduri, pseudosoluţia calculată x̂∗ coin-
cide cu soluţia exactă a problemei (3.127) cu datele perturbate ı̂n acord cu (3.153).
Aplicând teorema 3.5 (vezi relaţiile (3.137)) conchidem că
kx̂∗ − x∗ k
≤ ǫ1 κ(A) + ǫ2 κ2 (A)tgθ, (3.155)
kx∗ k
28 În cazul secvenţelor de rotaţii disjuncte, estimarea (3.151) este independentă de lungimea

secvenţei [IX].
186 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

unde (
not ǫ b
1
ǫ1 = ǫA + cos θ = nγcm (1 + cos θ ),
not A (3.156)
ǫ2 = ǫ tgθ = nγcm tgθ.
Relaţia (3.155) arată că ı̂n final acurateţea soluţiei calculate x∗ depinde atât de
condiţionarea κ(A) şi clasa θ ale problemei CMMP considerate, cât şi de nivelul
erorilor ǫα , α = 1 : 2, introduse de algoritmul folosit pentru rezolvarea ei. Conform
relaţiilor (3.155) şi (3.136), acest nivel este determinat de dimensiunile m, n ale
problemei precum şi de precizia de lucru εM conţinută implicit de parametrul generic
γcm (vezi (3.147)).
În general, evaluările de tip (3.155), (3.156) sunt extrem de acoperitoare, dar
totodată au marele merit de a sublinia că ı̂n situaţiile dificile (care, după cum am
văzut, pot fi detectate relativ uşor ı̂n practică) sunt necesare acţiuni suplimentare
(vizând e.g. lucrul ı̂n dublă precizie, rafinarea iterativă a soluţiei calculate x̂∗ etc.),
chiar dacă aceasta se obţine utilizând un algoritm numeric stabil cum este SQR.
•• Considerăm acum problema, relativ mai simplă, a calculului soluţiei normale
x∗ a sistemului (3.127), ı̂n care matricea A este epică. Conform relaţiilor (3.154) şi
(3.144), soluţia normală calculată x̂∗ satisface o relaţie de forma

kx̂∗ − x∗ k
≤ ǫ1 κ(A), (3.157)
kx∗ k

unde
not
ǫ1 = 2ǫA + ǫb = mγcm . (3.158)
Menţionăm că, ı̂n practică, acurateţea soluţiei calculate ı̂n acest mod se dovedeşte
de cele mai multe ori satisfăcătoare.

3.8.3 Scalarea problemei CMMP


Considerăm sistemul liniar (3.127), ı̂n care matricea A este monică. La fel ca ı̂n
secţiunea 2.8, scalarea acestui sistem constă ı̂n ı̂nlocuirea sa cu sistemul echivalent

D1 AD2 x̃ = D1 b, (3.159)

ı̂n care D1 şi D2 sunt matrice inversabile (ı̂n particular diagonale sau triunghiulare)
alese ı̂n mod adecvat.
Matricea D2 realizează scalarea coloanelor lui A, iar introducerea ei se reduce la
schimbarea de variabilă x = D2 x̃. Prin urmare D2 nu alterează pseudosoluţia ı̂n sens
CMMP a sistemului considerat, mai precis dacă x̃∗ este pseudosoluţia sistemului
scalat, atunci pseudosoluţia sistemului iniţial poate fi recuperată utilizând relaţia
x∗ = D2 x̃∗ .
Din contra, matricea D1 , care realizează scalarea liniilor lui A, atrage după sine
modificarea normei din Rm ı̂n raport cu care se formulează problema CMMP şi deci
a pseudosoluţiei corespunzătoare. Într-adevăr, notând cu r̃ = D1 b − D1 Ax reziduul
sistemului scalat, avem r̃ = D1 r, deci
not
kr̃k2 = rT Sr = krk2S , S = D1T D1 ,
3.8. STABILITATEA ALGORITMILOR DE TRIANGULARIZARE 187

ı̂n care k · kS este noua normă determinată de alegerea matricei D1 . Problema


CMMP ı̂n raport cu norma k · kS se numeşte problema CMMP ponderată, iar
rezolvarea ei se face aplicând sistemului scalat tehnicile de calcul expuse ante-
rior. Subliniem că pseudosoluţia x̃∗ astfel obţinută nu coincide cu pseudosoluţia
x∗ a problemei CMMP ı̂n norma standard (corespunzătoare alegerii D1 = Im ).
În consecinţă, scalarea pe linii ı̂n problemele CMMP la care se doreşte calculul
pseudosoluţiei x∗ este interzisă. Pe de altă parte, ı̂n multe probleme, alegerea lui
D1 este impusă de tipul zgomotelor de măsură asociate problemei CMMP (vezi
exemplul 3.2), iar ı̂n acest context matricea S are o semnificaţie statistică precisă.
În problemele care privesc rezolvarea ı̂n sens CMMP a sistemelor subdetermi-
nate Ax = b, ı̂n care matricea A este epică, situaţia se inversează. Matricea D1
realizează o simplă scalare (pe linii) a sistemului de restricţii Ax = b şi ca atare este
permisă ı̂ntotdeauna. Din contra, matricea D2 modifică norma din Rn considerată
la definirea soluţiei normale, mai precis
not
kx̃k2 = xT T x = kxk2T , T = D2−T D2−1 ,
de aceea scalarea pe coloane a sistemelor subdeterminate la care se doreşte calculul
soluţiei normale ı̂n raport cu norma standard este interzisă.
Din punctul de vedere al calculului numeric, alegerea matricelor de scalare D1 ,
D2 urmăreşte echilibrarea sistemului ı̂n sensul uniformizării nivelului de eroare
ı̂n elementele matricei A. În acest scop se recomandă evaluarea erorilor iniţiale
E = [ǫij ] care afectează elementele lui A precum şi determinarea matricelor D1 , D2
astfel ı̂ncât elementele matricei scalate D1 ED2 să aibă acelaşi ordin de mărime ǫ.
(Dacă matricea A este cunoscută exact, atunci se poate lua ǫij = εM aij .) Pentru
detalii vezi [XIII].

3.8.4 Rafinarea iterativă a soluţiei CMMP


Considerăm din nou problema CMMP (3.127), ı̂n care matricea A este monică.
Pentru simplitate, ı̂n continuare omitem indicele superior ∗ , notând soluţiile ı̂n sens
CMMP x∗ şi x̂∗ cu x şi respectiv x̂.
Presupunem că am obţinut soluţia aproximativă x̂, utilizând procedura CMMP,
bazată pe algoritmul de triangularizare ortogonală
 
R1
A ← QT A = , QT = Un . . . U2 U1 . (3.160)
0

În general, problema rafinării iterative a soluţiei aproximative x̂ constă ı̂n con-
strucţia recurentă a unui şir x̂k , k = 0, 1, 2, . . ., convergent (ı̂n precizia de lucru)
către soluţia exactă x a problemei de calcul considerate.
În cazul m = n, ştim din secţiunea 2.8 că un pas al procesului de rafinare se
desfăşoară conform următoarei scheme de principiu. (Pentru simplitate, omitem
indicele de iterare k.)
% Se dă x̂. Se determină aproximaţia următoare x̂+ .
1. Se calculeaza reziduul r = b − Ax̂
2. Se determină corecţia ∆x rezolvând sistemul A∆x = r
3. Se actualizează aproximaţia x̂ ← x̂+ = x̂ + ∆x
188 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

În cazul m > n, schema de mai sus este, ı̂n principiu, aplicabilă ca atare sistemu-
lui (3.127), dar ea se dovedeşte eficientă numai dacă acest sistem este aproape com-
patibil, i.e. θ ≈ 0 (vezi discuţia din secţiunea 3.7.2). În caz contrar, influenţa rezidu-
ului asupra soluţiei este determinantă (ı̂n acord cu relaţiile (3.137) şi (3.138)), deci
rafinarea iterativă trebuie să se facă corectând simultan evoluţia ambelor mărimi.
Altfel spus, ı̂n problemele specific CMMP, cu reziduu mare, schema de corecţie
prezentată mai sus trebuie aplicată nu sistemului dat (3.127), ci sistemului extins
(3.83).
În consecinţă, presupunând dată o soluţie aproximativă (x̂, r̂) a sistemului extins,
ı̂n primul rând vom calcula reziduul corespunzător
      
s b Im A r̂
= − , (3.161)
t 0 AT 0 x̂
iar apoi vom determina corecţiile ∆r şi ∆x rezolvând sistemul
    
Im A ∆r s
= . (3.162)
AT 0 ∆x t

Desigur, ı̂n acest scop vom folosi triangularizarea ortogonală (3.160) a matricei A,
deja calculată ı̂n urma aplicării procedurii CMMP, iar soluţia (∆r, ∆x) va fi obţinută
ı̂n locul membrului drept (s, t).
Pentru a vedea cum este posibil acest lucru, considerăm prima ecuaţie (3.162),
i.e. ∆r + A∆x = s, pe care o premultiplicăm cu QT , vezi (3.160). Notând
QT ∆r = z, efectuând pe loc ı̂n s transformarea

s ← QT s (3.163)

şi utilizând pentru vectorii z şi s partiţii adecvate, putem scrie


     
z1 R1 s1
+ ∆x = ,
z2 0 s2
de unde deducem imediat

R1 ∆x = s1 − z1 , z 2 = s2 . (3.164)

În continuare, pentru a determina z1 şi ∆x, considerăm a doua ecuaţie (3.148),
i.e. AT ∆r = t. Aici avem ∆r = Qz, iar din (3.160) rezultă AT Q = [R1T 0], deci

R1T z1 = t. (3.165)

Acum este clar că dezideratele formulate mai sus relativ la rezolvarea sistemului
extins (3.162) pot fi realizate procedând ı̂n ordinea (3.163), (3.165), (3.164), după
care ∆r rezultă utilizând relaţia
 
z1
∆r = Q . (3.166)
z2

În rezumat, schema de calcul pentru un pas al procesului de rafinare iterativă


aplicat sistemului extins (3.83) este următoarea.
3.9. DESCOMPUNEREA ORTOGONALĂ COMPLETĂ 189

% Se dau (r̂, x̂). Se determină aproximaţia următoare


(r̂, x̂) ← (r̂+ , x̂+ ) = (r̂, x̂) + (∆r, ∆x) .
% se calculează reziduul (3.161)
1. s = (b − Ax̂) − r̂
2. t = −AT r̂
% se rezolvă sistemul extins (3.162)
3. s ← QT s
4. z1 = R−T t
5. s1 ← s1 − z1
6. t ← ∆x = R−1 s1
7. s1 = z1
8. s ← ∆r = Qs
% se actualizează aproximaţia
9. r̂ ← r̂+ = r̂ + ∆r
10. x̂ ← x̂+ = x̂ + ∆x

Implementarea schemei se face de regulă lucrând ı̂n precizie mixtă. Reziduul


(s, t) se calculează ı̂n precizie dublă, apoi se rotunjeşte la precizia de lucru ı̂n care se
fac restul calculelor. Condiţia de oprire a algoritmului este k∆xk∞ , k∆rk∞ ≤ cεM ,
sau efectuarea unui număr maxim de iteraţii. Practic, schema e utilă atunci când
problema nu este prea rău condiţionată. Pentru amănunte consultaţi [?].

3.9 Descompunerea ortogonală completă


Procedurile de triangularizare ortogonală prezentate ı̂n secţiunile anterioare con-
stituie instrumente eficiente şi numeric stabile de rezolvare a problemelor de tip
CMMP cu matrice A ∈ Cm×n de rang maximal, r = s. (Peste tot mai departe vom
nota r = rangA, iar s va avea semnificaţia obişnuită s = min(m, n).) În aceasta
secţiune vom considera cazul general r ≤ s şi vom descrie un set de proceduri (di-
recte), capabile să determine rangul efectiv al matricei A ı̂n prezenţa erorilor de
rotunjire şi să utilizeze această informaţie.
Subliniem că, ı̂n general, determinarea rangului unei matrice A cu mijloace
de calcul numeric presupune luarea unei decizii inerent afectate de riscuri privind
structura lui A. Totodată, această decizie influenţează decisiv şi ireversibil ı̂ntregul
proces de calcul ulterior. Având ı̂n vedere reducerea riscurile menţionate, actual-
mente se consideră că cel mai sigur instrument de determinare a rangului este des-
compunerea valorilor singulare (DVS), care va fi prezentată pe larg ı̂n capitolul 5.
(Construcţia acestei descompuneri are la bază tehnici iterative de determinare a va-
lorilor proprii, care vor fi dezvoltate ı̂n capitolul următor.) Din această perspectivă,
procedura (directă) de triangularizare ortogonală completă prezentată ı̂n continuare
apare ca fiind relativ elementară şi ca atare se aplică ı̂n situaţiile ı̂n care simplitatea
primează iar deciziile de rang nu sunt critice. În esenţă, procedura se desfăşoară ı̂n
trei etape.
În prima etapă are loc triangularizarea ortogonală a matricei date A, utilizând
o strategie adecvată de pivotare (permutare) a coloanelor, cu scopul de a evidenţia
190 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

ı̂n colţul dreapta-jos al factorului triunghiular R partea neglijabilă, corespunzătoare


eventualului defect de rang.
În a doua etapă are loc determinarea rangului prin ”trunchierea” lui R, adică
prin identificarea şi eliminarea părţii sale neglijabile. Desigur, ı̂ntr-un calcul ideal cu
precizie infinită, această parte se anulează exact, dar ı̂n calculul practic acest lucru
nu se realizează niciodată datorită (i) erorilor iniţiale cu care elementele matricei A
au fost calculate sau determinate experimental şi reprezentate ı̂n calculator precum
şi (ii) erorilor de rotunjire comise pe parcursul procesului de calcul. Prin urmare,
ı̂n realitate, este ı̂ntotdeauna necesară corectarea forţată a rezultatului calculat R̂
şi tocmai acest lucru se face prin trunchierea menţionată. Desigur, ı̂n acest scop
este necesar un criteriu de decizie, care ı̂n principiu este formulat de utilizator ı̂n
funcţie de situaţia concretă precum şi de obiectivele urmărite prin calcul. Indicaţii
mai precise vor fi date la momentul potrivit.
În a treia etapă (ı̂n anumite situaţii, facultativă) matricea superior trapezoidală
rămasă după trunchierea lui R este adusă la forma superior triunghiulară printr-o
procedură de tip RQ (vezi secţiunea 3.6.2).
Trecem acum la descrierea succintă a etapelor procedurii de triangularizare com-
pletă, după care vom prezenta câteva aplicaţii ale acesteia ı̂n legătură cu problema
generală CMMP.

3.9.1 Triangularizarea ortogonală cu pivotarea coloanelor


Teorema 3.7 Fie A ∈ Cm×n . Există o matrice unitară U = QH ∈ Cm×m precum
şi o matrice de permutare Π astfel ı̂ncât matricea

QH AΠ = R (3.167)

este superior triunghiulară, iar pentru fiecare k = 1 : s sunt satisfăcute condiţiile


min(j,m)
X
|rkk |2 ≥ |rij |2 , j = k + 1 : n. (3.168)
i=k

În consecinţă, |r11 | ≥ |r22 | ≥ . . . ≥ |rss |, i.e. elementele diagonale ale matricei R
sunt ordonate descrescător.

Relaţia (3.167) afirmă că matricele A şi R sunt ortogonal echivalente, ı̂n par-
ticular au acelaşi rang. Prin urmare, dacă A este de rang r ≤ s, atunci ı̂n mod
necesar rkk = 0, k = r + 1 : s, deci ı̂n virtutea relaţiilor (3.168) ultimele m − r linii
ale lui R sunt nule. În consecinţă,

Corolar 3.1 După o permutare convenabilă Π a coloanelor sale, orice matrice


A ∈ Cm×n de rang r este echivalentă (la stânga) cu o matrice superior trapezoidală,
i.e.  
H T
Q AΠ = , (3.169)
0
unde T = R(1 : r, :), iar blocul lider T (:, 1 : r) este inversabil. În consecinţă, primele
r coloane ale matricei AΠ sunt independente.
3.9. DESCOMPUNEREA ORTOGONALĂ COMPLETĂ 191

Având ı̂n vedere că situaţia din corolar nu poate fi realizată exact, ı̂n continuare
ne vom concentra atenţia asupra condiţiilor (3.168). Problema determinării rangului
va fi discutată ulterior.
Demonstraţia teoremei 3.7. Procedura de triangularizare ortogonală cu pivotare
are s etape. Fie A1 = A. Vom determina matricea unitară

QH = QH H H
s . . . Q2 Q1 (3.170)

procedând ca ı̂n secţiunea 3.3 (vezi demonstraţia teoremei 3.1), dar acţionând la
fiecare etapă k = 1 : s asupra unei matrice Ak Πk , cu coloanele permutate ı̂n scopul
satisfacerii condiţiei (3.168).
Ţinând seama de invarianţa normei euclidiene ı̂n raport cu transformările unitare
(3.170), aceasta ı̂nseamnă că la etapa k, ı̂n poziţia pivot (adică ı̂n coloana k) trebuie
să se găsească acea coloană j ≥ k a tabloului curent Ak pentru care norma euclidiană
a vectorului Ak (k : m, j) este maximă. Pe scurt, notând
(k)
ρj = kAk (k : m, j)k, j = k : n, (3.171)

strategia de pivotare a coloanelor este


(k) (k)
1. Se determină cel mai mic jk astfel ı̂ncât ρjk = maxj=k:n ρj
2. Dacă jk 6= k
1. Ak (:, k) ↔ Ak (:, jk ).

După permutare, procedura de triangularizare continuă ca de obicei, i.e. are loc


generarea reflectorului QH
k care anulează elementele subdiagonale din coloana k şi
aplicarea sa coloanelor următoare. Astfel se obţine tabloul transformat

Ak+1 = QH
k (Ak Πk ), (3.172)

asupra căruia se va opera similar la etapa următoare. În final, matricea R = As+1
este superior triunghiulară şi satisface (3.168). ♦
Având ı̂n vedere implementarea eficientă a procedurii descrise, ţinem seama de
invarianţa normelor (3.171) ı̂n raport cu transformările (3.172) şi constatăm că
(k) (k+1) 2 (k+1) 2
(ρj )2 = (ρj ) + |akj | . (3.173)

Prin urmare, calculul repetat şi costisitor al normelor (3.171) poate fi evitat, uti-
lizând ı̂n schimb relaţiile de actualizare relativ simple 29
v
u !2
u (k+1)
(k+1) (k) u |akj |
ρj = ρj t 1− (k)
. (3.174)
ρj

Întregul proces de calcul se desfăşoară pe loc ı̂n tabloul A conform următoarei


scheme de principiu.
29 Subliniem că deşi scrierea (3.174) evită depăşirile superioare, totuşi utilizarea ei nu este lipsită
(k+1) (k)
de riscuri dacă |akj | şi ρj au valori apropiate. În acest caz, pentru siguranţă se recomandă
(k+1)
recalcularea normelor ρj , j = k + 1 : n, vezi [XIII, pag. 9.17].
192 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

QRP % Schema de triangularizare ortogonală cu pivotarea coloanelor


% iniţializarea normelor
1. Pentru j = 1 : n
1. ρj = kA(:, j)k
2. Pentru k = 1 : s
% strategia de pivotare
1. Se determină cel mai mic jk a.ı̂. ρjk = maxj=k:n ρj
2. Dacă jk 6= k
1. A(:, k) ↔ A(:, jk )
2. ρjk ↔ ρk
% procedura de triangularizare ortogonală
3. Se determină QH H
k a.ı̂. (Qk A)ik = 0, i = k + 1 : m
H
4. A ← Qk A
% actualizarea
r normelor
 2
|a |
5. ρj ← ρj 1 − ρkjj , pentru j = k + 1 : n

În ceea ce priveşte permutările de coloane, ele pot fi memorate ı̂ntr-un vector π
astfel ı̂ncât πk = jk , k = 1 : s, la fel ca ı̂n procedurile de eliminare gaussiană din
capitolul 2. Pentru a putea identifica direct poziţia ı̂n tabloul iniţial A a coloanelor
matricei (permutate) AΠ, aici vom aplica o convenţie de memorare diferită. Vec-
torul π este iniţializat cu indicii coloanelor lui A ı̂n ordinea naturală, iar conţinutul
său este actualizat după fiecare permutare de coloane efectuată. Forma finală a
procedurii de triangularizare se obţine aplicând algoritmul 3.5 la paşii 2.3, 2.4 şi
plasând instrucţiunea 2.5 la locul potrivit.

Algoritmul 3.11 (QRP) (Se dă A ∈ Cm×n . Se efectuează tri-


angularizarea ortogonală cu pivotarea coloanelor a matricei A utilizând
reflectori hermitici, i.e. QH AΠ = R, vezi algoritmul 3.5. Permutările
de coloane se memorează ı̂n vectorul π astfel ı̂ncât dacă ı̂n final πk = j,
atunci coloana k a lui AΠ a fost coloana j a lui A.)
3.9. DESCOMPUNEREA ORTOGONALĂ COMPLETĂ 193

1. Pentru j = 1 : n % iniţializarea normelor


1. ρj = kA(:, j)k
2. πj = j
2. Pentru k = 1 : s
1. Se determină cel mai mic jk a.ı̂. ρjk = maxj=k:n ρj
2. Dacă jk 6= k % pivotare
1. A(:, k) ↔ A(:, jk )
2. ρjk ↔ ρk
3. πjk ↔ πk
3. βk = 0 % triangularizare
4. Dacă k < m atunci
1. σ = kA(k : m, k)k
2. Dacă σ 6= 0
akk
1. Dacă akk 6= 0 atunci σ ← σ
|akk |
2. aik ← uik = aik /σ, pentru i = k : m
3. βk ← ukk = 1 + akk
4. Pentru j = P k+1:n
m
1. α = − ( i=k ūik aij ) /βk
2. aij ← aij + αuik , pentru i = k : m
% actualizarea
r normei
 2
|a |
3. ρj ← ρj 1 − ρkjj
5. akk = −σ
Comentarii. Pe parcursul procesului de calcul, normele ρj se memorează ı̂n βj ,
fiind suprascrise pe măsură ce nu mai sunt necesare; pentru claritate, nu am mai
indicat explicit acest lucru.
Modul de apel al procedurii este [A, β, π] = QRP(A). ♦
Dacă matricea A este monică, atunci aplicaţiile algoritmului 3.11 sunt similare cu
aplicaţiile algoritmului 3.5. În plus, după cum am menţionat ı̂n secţiunea anterioară,
ordonarea coloanelor lui A ı̂n acord cu (3.168) permite estimarea rapidă (ca ordin de
mărime) a numărului de condiţionare 30 κ̂(A) = |r11 | / |rnn |. Dacă matricea A este
epică, atunci din nou ı̂n virtutea ordonării (3.168), blocul lider R′ din (3.63) rezultă
ı̂n mod necesar inversabil, deci construcţia unor baze pentru subspaţiile N = KerA
şi N ⊥ = ImAH precum şi determinarea unei soluţii particulare a sistemului Ax = b
se poate face aproape prin inspecţie.
De aceea, mai departe ne vom concentra atenţia asupra cazului general ı̂n care
matricea A nu este de rang maxim.

3.9.2 Determinarea rangului


Aplicăm procedura QRP matricei date A şi considerăm matricea superior triun-
ghiulară calculată
QH AΠ = R̂. (3.175)
30 Tipic, această relaţie furnizează o subevaluare de 2–3 ori mai mică decât valoarea adevărată

κ(A).
194 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

În cazul m ≥ n, R̂ are structura


 
R1 R12 }r
not
R̂ =  0 R̂2  } n−r
0 0 } m−n (3.176)
|{z} |{z}
r n−r

ı̂n care elementele satisfac relaţiile (3.168), blocul lider R1 este superior triunghiular
inversabil, dar blocul R̂2 nu rezultă nul datorită erorilor de calcul inerente. Pentru a
determina rangul r al matricei A, trebuie să efectuăm corect trunchierea factorului
triunghiular R̂, punând
R̂2 = 0, (3.177)
ı̂n acord cu (3.169), ı̂n care evident matricea superior trapezoidală rămasă este

T = [R1 R12 ]. (3.178)

În cazul m < n se procedează similar.


Pe scurt, determinarea rangului r constă ı̂n a decide care este primul element
neglijabil de pe diagonala lui R̂. Strategia recomandată ı̂n LINPACK [XIII] pre-
supune scalarea prealabilă a liniilor şi coloanelor lui A astfel ı̂ncât erorile la nivel
de element să fie de acelaşi ordin de mărime ǫ (vezi secţiunea 3.8.3). În acest caz,
prin definiţie, rangul numeric (sau efectiv) al lui A este primul ı̂ntreg k ∈ 1 : s astfel
ı̂ncât
|rk+1,k+1 | ≤ ǫ|r11 |. (3.179)
Mai departe, vom presupune mereu că rangul numeric determinat ı̂n acord cu
criteriul de decizie (3.179) coincide cu rangul ”adevărat” r al lui A 31 . Subliniem
că, ı̂n urma acestei trunchieri ”corecte”, se recuperează forma superior trapezoidală
(3.169), iar numărul de condiţionare al matricei A (de rang r ≤ s) poate fi estimat
ca fiind
|r11 |
κ̂(A) = < ǫ−1 . (3.180)
|rrr |
Relaţia (3.169) are câteva aplicaţii specifice extrem de importante. Notând
Q′ = Q(:, 1 : r) primele r coloane ale matricei unitare Q = Q1 Q2 . . . Qs , din (3.169)
obţinem imediat factorizarea QR cu pivotarea coloanelor

AΠ = Q′ T. (3.181)

În virtutea structurii lui T , matricea Q′ constituie o bază ortogonală a subspa-


ţiului S = ImA, generat de primele r coloane ale matricei AΠ sau, echivalent,
de coloanele πk , k = 1 : r, ale lui A (vezi comentariile de ı̂nceput la algoritmul
3.11). Altfel spus, o dată cu determinarea rangului, ı̂n (3.181) a avut loc selecţia
31 Realizarea practică a acestei coincidenţe este condiţionată de alegerea judicioasă a toleranţei

ǫ. (Valoarea ǫ = 0 nu este interzisă, dar de obicei conduce la decizia r = s.) Pe de altă parte,
gradul de siguranţă al deciziei de rang poate fi nesatisfăcător, mai ales dacă modulele rkk scad
uniform, fără să ı̂nregistreze vreun ”salt” semnificativ. În asemenea situaţii dificile se recomandă
determinarea rangului pe baza descompunerii valorilor singulare, vezi capitolul 5.
3.9. DESCOMPUNEREA ORTOGONALĂ COMPLETĂ 195

unui set de r coloane liniar independente ale matricei iniţiale A, iar Q′ constituie
”versiunea” lor ortogonalizată. În mod corespunzător, matricea Q′′ = Q(:, r + 1 : n)
constituie o bază ortogonală a subspaţiului complementar S ⊥ = KerAH . (Vom
folosi sintaxa [Q, R, π] = FQRP(A) pentru apelul procedurii de calcul al factorizării
QR cu pivotarea coloanelor; implementarea este lăsată cititorului, cu menţiunea că
acumularea transformărilor ortogonale este identică cu aceea din algoritmul GQR.)
Pe de altă parte, considerând gramianul G = AH A şi ţinând seama de (3.181),
ı̂n care matricea Q′ are coloanele ortogonale, deducem

ΠT GΠ = T H T. (3.182)

Această relaţie se numeşte factorizare Cholesky cu pivotare şi afirmă că, după
o permutare congruentă a liniilor şi coloanelor sale, orice matrice hermitică pozitiv
semidefinită G de rang r admite o factorizare Cholesky ı̂n care factorul superior
trapezoidal T are structura (3.178) 32 .
În multe situaţii constatările de mai sus prezintă un interes intrinsec. Având ı̂n
vedere abordarea problemei generale CMMP, descriem ı̂n continuare ultima fază a
procedurii de triangularizare ortogonală completă.

3.9.3 Triangularizarea ortogonală completă


Corolar 3.2 Fie A ∈ Cm×n , de rang r ≤ s. Există două matrice unitare
U = QH ∈ Cm×m şi Z = V H ∈ Rn×n precum şi o matrice de permutare Π astfel
ı̂ncât matricea
QH AΠZ = S (3.183)
are structura  
S′ 0 }r
S =
0 0 } m−r (3.184)
|{z} |{z}
r n−r
′ r×r
ı̂n care blocul lider S ∈ C este superior triunghiular inversabil.

Demonstraţia este simplă. Considerăm matricea superior trapezoidală T din


(3.178) şi o aducem la forma triunghiulară utilizând transformări unitare la dreapta.
Această etapă se numeşte compresie şi poate fi efectuată ı̂n multe feluri. De exem-
plu, aplicând o procedură de tip RQ (vezi secţiunea 3.6.2), obţinem

T Z = [S1 0], (3.185)

ı̂n care S1 este superior triunghiulară iar

Z = Zr . . . Z2 Z1 . (3.186)

Acum relaţiile (3.183) şi (3.184) rezultă aplicând Z la dreapta ı̂n (3.169) şi ţinând
not
seama de (3.185). Evident, matricea S ′ = S1 rezultă inversabilă, transformările
32 Subliniem că această factorizare poate fi calculată direct, aplicând matricei G procedura

CHOLDC din LINPACK [XIII].


196 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

unitare Q şi Z au expresiile (3.168) şi respectiv (3.186), iar Π este permutarea
produsă de procedura QRP. ♦
Cu referire la o matrice superior trapezoidală oarecare A ∈ Cm×n cu m < n,
schema de triangularizare RQ este următoarea.

TZRQ % Schema de compresie la dreapta, cazul m < n


1. Pentru k = m : −1 : 1
1. Se determină Zk a.ı̂. (AZk )kj = 0, j = m + 1 : n
2. A ← AZk

Desigur, liniile lui A sunt parcurse ı̂n ordine inversă, ı̂ncepând cu ultima, iar
anularea elementelor are ı̂n vedere conservarea structurii preexistente de zerouri.
În consecinţă, reflectorii Zk sunt de tipul celor din exemplul 3.5, dar aici vectorii
Householder sunt notaţi vk , iar partea lor esenţială vkj , j = m+1 : n, este memorată
pe poziţiile elementelor anulate din liniile lui A, la fel ca ı̂n algoritmul 3.9. Procedura
rezultată din combinarea acestor idei se redactează astfel.

Algoritmul 3.12 (TZRQ) (Se dă A ∈ Cm×n superior trapezoidală


cu m < n. Se efectuează compresia la dreapta a matricei A utilizând o
procedură de tip RQ cu reflectori hermitici, i.e. A ← AZ = [R 0], unde
Z = Zm . . . Z2 Z1 , iar R rezultă superior triunghiulară. Partea esenţială
vkj , j = m + 1 : n, a vectorilor Householder se memorează pe poziţiile
corespunzătoare A(k, m + 1 : n) din tabloul A. La aplicarea ulterioară
a transformărilor se ţine seama că vkk = βk , k = 1 : m.)
1. Pentru k = m : −1 : 1
1. βk = 0
 Pn 1/2
1. σ = |akk |2 + j=m+1 |akj |2
2. Dacă σ 6= 0
1. Dacă akk 6= 0 atunci σ ← |aākk kk |
σ
2. akj ← vkj = ākj /σ, pentru j = k, m + 1 : n
3. βk ← vkk = 1 + akk
4. Pentru i =1 : k − 1 
Pn
1. α = − aik vkk + j=m+1 aij vkj /βk
2. aij ← aij + αv̄kj , pentru j = k, m + 1 : n
5. akk = −σ̄

Comentarii. În cazul real, algoritmul cere 2m2 (n − m) operaţii. Modul de apel
este [A, β] = TZRQ(A). ♦
În sinteza ı̂ntregii expuneri de până acum, procedura de triangularizare ortogo-
nală completă, corespunzătoare relaţiilor (3.183) şi (3.184), este următoarea.

QRX % Procedura de triangularizare ortogonală completă a matri-


cei A ∈ Cm×n ; ǫ este o toleranţă dată, utilizată la deter-
minarea rangului.
% triangularizarea ortogonală cu pivotarea coloanelor
1. [A, β, π] = QRP(A)
3.9. DESCOMPUNEREA ORTOGONALĂ COMPLETĂ 197

% trunchierea şi determinarea rangului


2. k = 1
at timp k ≤ s şi |akk | > ǫ|a11 |
3. C^
1. k ← k + 1
4. r = k − 1
% compresia la dreapta
5. [A(1 : r, :), γ] = TZRQ(A(1 : r, :))

Modul de apel este [r, A, β, π, γ] = QRX(A, ǫ). Subliniem că toată informaţia
despre transformările unitare Q şi Z, generate la paşii 1 şi 5, este memorată (extrem
de compact) ı̂n tabloul A.

3.9.4 Descompunerea ortogonală completă


Pentru a facilita expunerea, notăm X = ΠZ şi scriem relaţiile (3.183) şi (3.184) sub
forma  ′ 
S 0
A=Q XH. (3.187)
0 0
Partiţionând Q şi X conform cu S, obţinem

A = Q′ S ′ X ′H , (3.188)

unde matricele Q′ = Q(:, 1 : r) şi X ′ = X(:, 1 : r) au coloanele ortogonale, iar S ′


este superior triunghiulară inversabilă de ordin r = rangA ≤ s.
Relaţia (3.188) constituie descompunerea ortogonală completă a matricei
A ∈ Cm×n şi reprezintă, ı̂n cazul general r ≤ s = min(m, n), echivalentul fac-
torizărilor QR şi LQ (sau RQ), specifice matricelor de rang maxim. Subliniem că,
deşi descompunerea (3.188) este relativ elementară şi are un evident caracter proce-
dural, totuşi ea constituie un instrument preţios de rezolvare a numeroase probleme
de calcul, ı̂n general inabordabile prin metode ”clasice”, de tip Cholesky sau Gram-
Schmidt. În plus, performanţele numerice ale algoritmilor bazaţi pe această de-
scompunere sunt apropiate de performanţele algoritmilor similari, derivaţi pe baza
descompunerii valorilor singulare din capitolul 5.
Aplicaţiile descompunerii ortogonale complete sunt extrem de variate (vezi pro-
blemele 3.61–3.63, precum şi capitolul 5). Ne vom mulţumi aici să menţionăm că,
la fel ca ı̂n secţiunile 3.4 şi 3.6.2, matricele Q′ şi Q′′ = Q(:, r + 1 : m) constituie
baze ortogonale pentru subspaţiile descompunerii Cm = ImA ⊕ KerAH , iar ma-
tricele X ′ şi X ′′ = X(:, r + 1 : n) joacă un rol similar relativ la descompunerea
Cn = ImAH ⊕ KerA. Vom insista mai mult numai asupra problemei generale
CMMP, care constituie pentru noi un subiect inedit.

3.9.5 Problema generală CMMP


Considerăm sistemul liniar Ax = b, ı̂n care A ∈ Cm×n este o matrice dată, nu
neapărat de rang maxim, iar b ∈ Cm este un vector arbitrar. Problema generală
198 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

CMMP, pe scurt CMMPX, constă ı̂n determinarea pseudosoluţiei normale a sis-


temului Ax = b, i.e. a unui vector x∗ ∈ Cn astfel ı̂ncât

kx∗ k = min∗ kxk, (3.189)


x∈X

unde X ∗ este mulţimea pseudosoluţiilor cu proprietatea (3.77). Teorema următoare


arată că problema CMMPX este ı̂ntotdeauna bine formulată.

Teorema 3.8 Oricare ar fi vectorul b ∈ Cm , problema CMMPX are o soluţie unică


x∗ ∈ Cn . Pseudosoluţia normală a sistemului Ax = b poate fi scrisă sub forma

x∗ = A+ b, (3.190)

unde, prin definiţie, matricea A+ ∈ Cn×m este pseudoinversa normală (sau Moore-
Penrose) a lui A.

Demonstraţie. Conform părţii a) a teoremei 3.3, sistemul Ax = b are ı̂ntotdeauna


pseudosoluţii care satisfac sistemul Ax = b1 , unde b1 ∈ S = ImA, vezi (3.82).
Conform părţii a) a teoremei 3.4, acest sistem are ı̂ntotdeauna o soluţie normală
unică x∗ ∈ N ⊥ = ImAH . Altfel spus, restricţia lui A la N ⊥ , văzută ca aplicaţie
liniară A de la N ⊥ la S este inversabilă. Inversa A−1 : S → N ⊥ , prelungită cu 0
pe S ⊥ , constituie pseudoinversa A+ a lui A. ♦
Pseudosoluţia normală x∗ a sistemului Ax = b, poate fi determinată utilizând
informaţia furnizată de procedura de triangularizare ortogonală completă
 ′ 
S 0
QH AΠZ = , (3.191)
0 0

ı̂n care matricele Q şi ΠZ sunt unitare, iar S ′ este superior triunghiulară inversabilă
de ordin r = rangA. Aplicând transformarea QH ambilor membri ai sistemului şi
notând  ′   ′ 
H d u
Q b= , x = ΠZ , (3.192)
d′′ u′′
obţinem sistemul ortogonal echivalent
 ′  ′   ′ 
S 0 u d
= . (3.193)
0 0 u′′ d′′
La fel ca ı̂n secţiunea 3.5.1, pentru a determina pseudosoluţiile considerăm
reziduul  ′ 
H d − S ′ u′
Q r= , (3.194)
d′′
ı̂n care matricea Q este unitară, deci minimul normei krk = kQH rk se atinge pentru
S ′ u′∗ = d′ . În continuare, la fel ca ı̂n secţiunea 3.6.3, din (3.192), ı̂n care matricea
ΠZ este unitară, rezultă u′′∗ = 0. Prin urmare, pseudosoluţia normală a sistemului
Ax = b este unic determinată prin relaţia
 
(S ′ )−1 d′
x∗ = ΠZ , (3.195)
0
3.10. RUTINE LAPACK ŞI MATLAB 199

sau  
∗ (S ′ )−1 0
x = ΠZ QH b, (3.196)
0 0
din care expresia pseudoinversei A+ este evidentă.
Exploatând forma factorizată a transformărilor unitare QH şi Z, schema de
calcul al pseudosoluţiei normale se stabileşte imediat.

SQRX % Calculul pseudosoluţiei normale x = A+ b


1. Pentru k = 1 : s
1. b = QH k b
2. Se rezolvă sistemul triunghiular S ′ x(1 : r) = b(1 : r) % r = rangA
3. x(r + 1 : n) = 0
4. Pentru k = 1 : r
x ← Zk x
5. x ← Πx

Detalierea procedurii de permutare, necesare la pasul 5 pentru plasarea compo-


nentelor lui x pe poziţiile naturale, precum şi completarea schemei SQRX ı̂n scopul
obţinerii reziduului de normă minimă r∗ = b − Ax∗ sau a vectorului de cea mai
bună aproximaţie b∗ = Ax∗ sunt propuse cititorului ca exerciţii.

3.10 Rutine LAPACK şi MATLAB


Primele implementări profesionale şi de largă circulaţie ale procedurilor de triangu-
larizare ortogonală au fost rutinele xQRDC şi xQRSL din LINPACK, care corespund
(ca organizare şi tip de reflectori) procedurilor QRP (algoritmul 3.11) şi CMMP din
secţiunile 3.9 şi, respectiv, 3.5.
În LAPACK procedurile de calcul sunt mai diversificate.
Pentru fiecare dintre cele 4 scheme de triangularizare standard zz = (’QR’, ’QL’,
’LQ’ sau ’RQ’) 33 există câte trei rutine de calcul, care efectuează triangularizarea
propriu-zisă, acumularea şi aplicarea transformărilor; numele rutinelor se obţin
adăugând literele ’F’, ’G’ şi respectiv ’M’ la combinaţia zz. Rutinele operează cu
matrice de formă generală (GE), unitare sau ortogonale (yy = ’UN’, ’OR’).
De exemplu, rutinele din clasa QR se numesc xGEQRF, xyyGQR, xyyMQR şi cores-
pund versiunilor la nivel de bloc ale procedurilor CQR, GCQR, respectiv MCQR
din secţiunile 3.3 şi 3.4. (Amintim că ı̂n LAPACK se operează cu reflectori ı̂n scrierea
Q1 = I − τ uuH , vezi secţiunea 3.2.) Numele celorlalte rutine se formează analog.
Pentru calculul descompunerii ortogonale complete din secţiunea 3.9 se utilizează
rutinele xGEQPF şi xTZRQF, care corespund schemelor QRP, respectiv TZRQ din text.
Rezolvarea problemelor de tip CMMP de rang maxim, relativ la sistemele Ax = b
sau AH x = b se efectuează cu driverul xGELS, iar pentru rezolvarea problemei gene-
rale CMMP se utilizează driverul expert xGELSX. (Primul reuneşte versiunile bloc
ale schemelor SQR şi SLQ din secţiunile 3.5 şi 3.6, iar al doilea corespunde schemei
SQRX din secţiunea 3.9.) Un al treilea driver (xGELSS) utilizează descompunerea
valorilor singulare.
33 Pentru convenţiile de compunere a numelor rutinelor LAPACK, a se revedea secţiunea 2.12.
200 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

În MATLAB, funcţia qr realizează triangularizarea ortogonală (ı̂n diverse ver-


siuni) a matricei A. Organizarea riguroasă a spaţiului de memorie (specifică imple-
mentărilor LINPACK şi LAPACK) este de regulă sacrificată ı̂n favoarea unei ma-
nipulări mai comode de către utilizator, dar performanţele numerice sunt aceleaşi.
Apelul R = qr(A) calculează factorul superior triunghiular R returnând totodată,
ı̂n partea inferioară a aceluiaşi tablou, vectorii Householder corespunzători reflec-
torilor Q1 , . . . , Qn . Prin [Q,R] = qr(A) se acumulează ı̂n plus Q, iar comanda
[Q,R,P] = qr(A) efectuează triangularizarea ortogonală cu pivotare, formând to-
todată explicit matricele Q şi P = Π.
Rezolvarea ı̂n sens CMMP a sistemului liniar Ax = b, cu m 6= n se face utilizând
comanda x=A\b, unde \ este operatorul de ı̂mpărţire la stânga. (Dacă m > n,
atunci x este pseudosoluţia sistemului Ax = b, iar dacă m < n, atunci x este o
soluţie particulară a aceluiaşi sistem.)

3.11 Probleme
P 3.1 În planul R2 se dă vectorul x = [3 4]T şi se consideră reflectorul elementar
U = I − 2uuT , unde kuk = 1.
a. Fie u = e1 . Să se construiască vectorul transformat y = U x şi să se reprezinte grafic
transformarea. Ce modificări apar dacă u = e2 ?
b. Să se determine vectorul Householder normat u astfel ı̂ncât U x = ρe1 . Câte soluţii
există ? Cât rezultă ρ ?
c. Explicaţi de ce ı̂n calcule este mai bine să presupunem că vectorul u nu este neapărat
normat, introducând scalarul β ca ı̂n (3.8). Rezolvaţi din nou punctul b aplicând algoritmul
3.2 şi observând că ρ = −σ. Justificaţi alegerea semnului lui σ recomandată ı̂n text. Ce
se ı̂ntâmplă dacă x = [3 10−5 ] ?
d. Aplicaţi ı̂n acest caz simplu indicaţiile de implementare ce ı̂nsoţesc algoritmul
3.2. Arătaţi cum se face scalarea vectorului Householder u = [u1 u2 ]T astfel ı̂ncât să
obţinem u1 = β, respectiv u1 = 1. Verificaţi că ı̂n fiecare caz are loc transformarea dorită
U x = −σe1 .
e. Ilustraţi grafic diversele situaţii semnificative ı̂ntâlnite la punctele b–d.
P 3.2 Rezolvaţi problema anterioară ı̂n R3 , considerând de exemplu vectorii x = [3 4 0]T
sau x = [3 4 5]T .
P 3.3 Fie x, y ∈ Rm doi vectori daţi. În ce condiţii există un scalar ρ şi un reflector U
astfel ı̂ncât U x = ρy ? Ce restricţii apar dacă impunem condiţia suplimentară ρ = 1 ?
Scrieţi algoritmii de generare a reflectorului U ı̂n cele două situaţii.
P 3.4 Fie x ∈ Rm un vector dat, x 6= 0.
a. Să se determine un reflector U astfel ı̂ncât prima coloană U e1 a lui U să fie un
multiplu scalar de x, i.e. U e1 = ρx. Cât trebuie să fie ρ ? Câte soluţii există ?
b. Ce semnificaţie geometrică au celelalte coloane U ej , j = 2 : m, ale lui U ?
c. Scrieţi algoritmul de calcul al unei baze ortogonale B = [b1 b2 . . . bm ] a lui Rm ,
unde b1 = x este un vector dat, kxk = 1.
d. Reformulaţi ı̂n mod avantajos punctele a–c de mai sus ı̂n cazul ı̂n care vectorul
dat x are primele k − 1 componente nule, i.e. xi = 0, i = 1 : k − 1. Precizaţi structura
lui U precum şi structura bazei ortogonale B astfel obţinute. Ilustraţi grafic construcţia,
considerând m = 3, k = 2.
e. Reveniţi la punctul a şi ı̂ncercaţi să determinaţi U astfel ı̂ncât U em = ρx. Ce se
schimbă la punctele b–d ?
3.11. PROBLEME 201

P 3.5 Fie x ∈ Rm un vector dat, x 6= 0.


a. Să se construiască m − 1 vectori liniar independenţi yj astfel ı̂ncât xT yj = 0,
j = 2 : m.
b. Cum se construiesc vectorii de la punctul a dacă ı̂n plus ei trebuie să fie ortogonali
doi câte doi, i.e. yiT yj = 0, i 6= j ? (Indicaţie. Asimilând xT cu o matrice cu o singură
linie, problema constă ı̂n a construi o bază ortogonală a subspaţiului N = KerxT , i.e. o
matrice Y ∈ Rm×(m−1) cu coloane ortogonale astfel ı̂ncât xT Y = 0. Se ţine seama de
punctul b al problemei anterioare.)
c. Utilizând rezultatele de la punctele a şi b, descrieţi mulţimea tuturor soluţiilor
ecuaţiei xT y = 1. Ilustraţi grafic situaţia ı̂n cazul m = 2, considerând de exemplu x = e1
şi x = [3 4]T .
d. Determinaţi soluţia normală y ∗ a ecuaţiei xT y = 1. Arătaţi că y ∗ este de forma
αx şi precizaţi interpretarea geometrică
Pm a lui y ∗ . (Indicaţie. Orice vector y ∈ Rm poate fi
scris unic sub forma y = αx + i=2 βi yi , unde yi , i = 2 : m, sunt vectorii de la punctele
a sau b.)
e. Scrieţi algoritmii de calcul ce rezolvă punctele b şi d. Ce simplificări apar dacă
kxk = 1 ?

P 3.6 Se dau doi vectori x, y ∈ Rm , x 6= 0.


a. Determinaţi pseudosoluţia α∗ a sistemului αx = y, astfel ı̂ncât norma euclidiană a
not
reziduului ρ(α) = ky − αxk să fie minimă. Evaluaţi r ∗ = y − α∗ x şi ρ(α∗ ) = kr ∗ k.
b. Scrieţi algoritmul de calcul corespunzător şi găsiţi interpretarea geometrică a vec-
torilor y ∗ = α∗ x şi r ∗ .
c. Reluaţi punctul a presupunând că xi = 0, i = 2 : m. Ce simplificări apar ? Puteţi
realiza această condiţie aplicând o transformare adecvată T ambilor vectori daţi x şi y ?
Cum trebuie să fie T pentru ca funcţia ρ(α) să rămână neschimbată (”invariantă”) ?

P 3.7 Consideraţi un reflector U = I − 2uuT , kuk = 1.


a. Calculaţi detU .
b. Determinaţi valorile şi vectorii proprii ai lui U .
c. Determinaţi n vectori vi , i = 1 : n, astfel ı̂ncât U vi = ei şi U ei = vi , i = 1 : n.
Observaţie. În general, se numeşte reflector elementar (nu neapărat ortogonal) orice
matrice U ∈ Rm×m de forma U = Im − 2uv T , ı̂n care u, v ∈ Rm sunt doi vectori astfel
ı̂ncât v T u = 1. Multe dintre proprietăţile reflectorilor (ortogonali) considerate mai sus se
păstrează (sau se reformulează adecvat) ı̂n acest cadru mai general.

P 3.8 Arătaţi că orice matrice de permutare elementară este un reflector.

P 3.9 Fie S ∈ Rm×m o matrice simetrică pozitiv definită, arbitrară dar fixată. Se
consideră spaţiul vectorial Rm cu produsul scalar (x, y)S = y T Sx şi norma euclidiană
kxk2S = (x, x)S . Doi vectori x, y ∈ Rm se numesc S-ortogonali dacă (x, y)S = 0. Matricea
A se numeşte S-simetrică dacă (y, Ax)S = (Ay, x)S , ∀x, y ∈ Rm , adică SA = AT S sau
A = S −1 AT S. Matricea U ∈ Rm×m se numeşte S-ortogonală dacă păstrează produsul
scalar (·, ·)S , i.e. (U x, U y)S = (x, y)S , ∀x, y ∈ Rm , adică U T SU = S.
a. Să se arate că orice matrice S-ortogonală este asemenea cu o matrice ortogo-
nală. Să se deducă de aici că, ı̂n general, după o transformare de coordonate convenabilă,
proprietăţile geometrice ale spaţiului Rm dotat cu produsul scalar (·, ·)S se reduc la pro-
prietăţile euclidiene ”uzuale”.
b. Să se definească noţiunea de S-reflector elementar şi să se studieze principalele
proprietăţi ale acestui tip de transformări. Cum se implementează avantajos algoritmii de
generare şi aplicare a reflectorilor S-ortogonali ?
202 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

P 3.10 Păstrăm aceeaşi terminologie ca ı̂n problema anterioară chiar dacă matricea si-
metrică (inversabilă) S este de semn nedefinit. În particular, fie S = J, unde
» –
Ip 0
J= , p + q = m. (3.197)
0 −Iq

Observaţie. Spaţiul Rm cu produsul scalar ”nedefinit” (·, ·)J se numeşte spaţiu pseu-
doeuclidian (sau spaţiu hiperbolic) de signatură (p, q). Mulţimea vectorilor din Rm cu
proprietatea
p m
X X
kxk2J = 0 ⇔ x2i − x2i = 0 (3.198)
i=1 i=p+1

se numeşte con izotrop 34 .


a. Fie x ∈ Rm un vector dat, iar U un J-reflector de forma

uuT J 1
U = Im − , β= kuk2J . (3.199)
β 2
Să se scrie algoritmul de aplicare a transformării x ← y = U x şi să se verifice prin calcul
direct că kU xkJ = kxkJ .
b. Fie x ∈ Rm un vector dat. Să se stabilească ı̂n ce condiţii există un J-reflector de
forma (3.199) astfel ı̂ncât
U x = −σe1 , σ ∈ R − {0} (3.200)
şi să se scrie algoritmul de generare a lui U . Discuţie.
c. Fie S o matrice simetrică inversabilă. Să se stabilească ı̂n ce condiţii S admite
factorizări de forma S = RT JR sau S = LT JL, ı̂n care R şi L sunt matrice superior,
respectiv inferior triunghiulare. Să se scrie algoritmii de factorizare Cholesky ”cu semn”,
corespunzători celor două relaţii de mai sus.
d. Arătaţi că dacă există două matrice pătrate A şi B (nu neapărat triunghiulare)
astfel ı̂ncât S = AT JA = B T JB, atunci există o matrice J-ortogonală Q astfel ı̂ncât
B = QA. Altfel spus, oricare doi factori ”cu semn” ai lui S sunt J-ortogonal echivalenţi.
P 3.11 În planul R2 se dă vectorul x = [3 4]T şi se consideră rotaţia plană P = P12 cu
parametrii c, s. √
a. Fie c = 3/2, s = 1/2. Să se calculeze vectorul transformat y = P x şi să se
reprezinte grafic transformarea.
b. Să se determine c, s astfel ı̂ncât P x = re1 . Câte soluţii există ? Cât rezultă r ?
P 3.12 Fie x, y ∈ Rm doi vectori daţi. În ce condiţii există un scalar ρ şi o rotaţie Pki
astfel ı̂ncât Pki x = ρy ?
P 3.13 Fie P o rotaţie plană. Calculaţi detP şi determinaţi valorile şi vectorii proprii ai
matricei P .
P 3.14 Fie x ∈ Rm un vector dat.
a. Scrieţi algoritmii de generare a unei secvenţe de rotaţii P astfel ı̂ncât P x = re1 .
Analizaţi diversele variante posibile.
b. Acelaşi enunţ, utilizând o grupare convenabilă a rotaţiilor ı̂n secvenţe de rotaţii
disjuncte (vezi observaţia 3.2).
P 3.15 Se dă o matrice A ∈ Rm×m . Să se scrie algoritmii de aplicare a transformărilor
A ← P A şi A ← AP T , unde P sunt secvenţele de rotaţii generate ı̂n problema 3.14.
34 Cel mai simplu exemplu este planul Lobacevski R2 cu p = 1, q = 1. Spaţiul Minkovsky din

teoria relativităţii este R4 cu p = 1, q = 3. În acest caz (3.198) se numeşte con de lumină, iar
transformările J-ortogonale formează grupul Poincaré al lui R4 .
3.11. PROBLEME 203

P 3.16 O matrice P de forma


» –
c −s
P = , c2 − s2 = 1
−s c

se numeşte rotaţie hiperbolică (plană) 35 .


a. Arătaţi că P este o transformare J-ortogonală, i.e. P T JP = J. Cât este J ?
b. Fie x ∈ R2 un vector dat. În ce condiţii există o rotaţie hiperbolică astfel ı̂ncât
P x = re1 , respectiv P x = re2 ? Scrieţi algoritmul de generare a lui P şi discutaţi
aplicabilitatea lui practică 36 .
P 3.17 În planul C2 se dă vectorul x = [1 + i 2 + i]T .
a. Să se determine un reflector complex Q astfel ı̂ncât Qx = −σe1 .
b. Să se determine o rotaţie complexă P astfel ı̂ncât P x = re1 .
P 3.18 Formulaţi şi rezolvaţi versiunile complexe ale problemelor anterioare 3.3–3.10 şi
3.12–3.14, semnalând ı̂n fiecare caz modificările de notaţie şi de terminologie introduse.
P 3.19 Demonstraţi că orice matrice ortogonală se poate exprima ca produs de reflectori
elementari.
» –
R
P 3.20 Scrieţi algoritmul de triangularizare ortogonală a matricei A+ = , ı̂n care
C
(m−n)×n
blocul R este superior triunghiular de ordin n, iar C ∈ R este un bloc oarecare.
Evaluaţi numărul de operaţii. Precizaţi ce simplificări apar ı̂n următoarele cazuri
a. m − n = 1, i.e. C = cT este un vector linie;
b. R este superior bidiagonală, respectiv superior Hessenberg;
c. C este superior triunghiulară.
P 3.21 Cum procedaţi dacă blocul lider R al matricei A+ din problema precedentă este
inferior triunghiular ? Scrieţi algoritmul corespunzător.
P 3.22 Scrieţi algoritmul de triangularizare cu rotaţii a unei matrice A ∈ Rm×n , utilizând
diverse strategii de anulare a elementelor subdiagonale (vezi problema 3.14).
P 3.23 Scrieţi algoritmul de triangularizare cu rotaţii a unei matrice A ∈ Rn×n a) superior
Hessenberg, b) tridiagonale.
În al doilea caz, presupuneţi că A este memorată ı̂mpachetat (prin trei vectori). Ce
dificultăţi apar ı̂n ceea ce priveşte memorarea informaţiei generate de algoritm ?
P 3.24 Fie R ∈ Rn×n o matrice superior triunghiulară, iar b, c ∈ Rn doi vectori. Scrieţi
un algoritm eficient de triangularizare a matricei A+ = R + bcT , i.e. QT A+ = R+ , unde
R+ este superior triunghiulară.
Fie k ∈ 1 : n − 1. Cum procedaţi dacă ultimele n − k elemente ale vectorului b sunt
nule ?
P 3.25 Cum procedaţi ı̂n problema precedentă dacă A+ = R + BC T , unde B, C ∈ Rn×p ,
cu p > 1 ?
P 3.26 Se consideră relaţia P+ = AT P A + C T C, unde A ∈ Rn×n şi C ∈ Rl×n sunt două
matrice date, iar P = RT R este o matrice pozitiv definită al cărei factor Cholesky superior
triunghiular R este cunoscut. Scrieţi o procedură (de tip rădăcină pătrată) care calculează
factorul Cholesky R+ al matricei P+ , fără a forma explicit P+ .
35 Denumirea se justifică observând că putem ı̂ntotdeauna considera c = chξ, s = −shξ.
36 Observaţi că rotaţia hiperbolică este o transformare simetrică.
204 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

P 3.27 Ce simplificări apar ı̂n problema precedentă dacă A este superior Hessenberg, iar
C = cT este un vector linie având numai ultima componentă nenulă ?
P 3.28 Fie A ∈ Rm×n monică, cu m > n. Utilizând informaţia furnizată de algoritmul de
triangularizare cu reflectori Un . . . U2 U1 A = R, scrieţi algoritmul de acumulare a primelor
p coloane ale matricei Q = U1 U2 . . . Un , unde p ∈ 1 : m este un ı̂ntreg dat. Calculaţi
numărul de operaţii ı̂n funcţie de p. Cum memoraţi rezultatul ? Discutaţi cazul ı̂n care
matricea A nu este neapărat monică.
P 3.29 Aceeaşi problemă ca mai sus, utilizând algoritmul de triangularizare ortogonală
cu rotaţii.
P 3.30 Fie Q matricea din problema 3.28. Precizaţi care dintre schemele următoare
realizează mai eficient acumularea lui Q şi de ce.

1. Q = Im 1. Q = Im
2. Pentru k = 1 : n 2. Pentru k = n : −1 : 1
1. Q ← QUk 1. Q ← Uk Q

P 3.31 a. Construiţi reprezentările WY şi W2 T ale reflectorilor bloc Q = U1 U2 . . . Unb ,


considerând relaţia de recurenţă
1. Q = Unb
2. Pentru k = nb − 1 : −1 : 1
1. Q ← Uk Q

Ce diferenţe apar faţă de soluţia adoptată ı̂n secţiunea 3.4.3 ?


b. Scrieţi reprezentarea W2 T sub forma Q = I − W S −1 W T , unde S −1 = T . Precizaţi
structura şi scrieţi procedura de construcţie a matricei S. Care dintre cele două forme de
reprezentare este preferabilă şi de ce ?
P 3.32 Fie A ∈ Rm×n (m > n) o matrice superior Hessenberg. Prezentaţi algoritmi
pentru:
a. calculul factorizării QR a matricei A;
b. rezolvarea sistemului liniar supradeterminat Ax = b, cu b ∈ Rm dat.
c. Cum procedaţi dacă A este bandă de lăţime inferioară p > 1 ?
Utilizaţi reflectori şi rotaţii. Comparaţi cele două versiuni.
P 3.33 Aceeaşi problemă, când A ∈ Rm×n este inferior Hessenberg, repectiv bandă de
lăţime inferioară p.
P 3.34 Fie A ∈ Rm×n , m > n, o matrice de rang n a cărei factorizare QR este cunoscută,
i.e. A = QR, Q ∈ Rm×m , R ∈ Rm×n . Fie A+ = [A y], cu y ∈ Rm . Prezentaţi algoritmi
pentru
a. calculul factorizării QR a matricei A+ ;
b. rezolvarea sistemului A+ x+ = b, cu b ∈ Rm dat.
c. Stabiliţi o relaţie ı̂ntre pseudosoluţiile x∗+ şi x∗ ale sistemelor A+ x+ = b, respectiv
Ax = b.
d. Consideraţi cazul general A+ = [A Y ], cu Y ∈ Rm×p .
P 3.35 Fie » AT∈ –Rm×n , m ≥ n, o matrice de rang n a cărei factorizare QR este cunoscută.
z
Fie A+ = , cu z ∈ Rn dat. Arătaţi că coloanele lui A+ sunt liniar independente.
A
Prezentaţi algoritmi pentru
a. calculul factorizării QR a matricei A+ .
3.11. PROBLEME 205

» –
δ
b. rezolvarea sistemului A+ x+ = b+ , unde b+ = , cu b ∈ Rm şi δ ∈ R daţi.
b
c. Stabiliţi o relaţie ı̂ntre pseudosoluţiile x∗+ şi x∗ ale sistemelor A+ x+ = b+ , respectiv
Ax = b. » –
Z
d. Consideraţi cazul general A+ = , cu Z ∈ Rp×n .
A

P 3.36 Scrieţi algoritmi eficienţi de aplicare a transformărilor B ← QT B şi B ← QB,


unde Q este matricea din problema 3.28 iar B ∈ Rm×p este superior sau inferior triun-
ghiulară. Evaluaţi numărul de operaţii ı̂n cele patru situaţii.

P 3.37 Aceeaşi problemă ca mai sus, pentru transformările la dreapta, B ← BQ şi


B ← BQT .

P 3.38 Fie B ∈ Rm×p o matrice dată, iar Q = Q1 Q2 . . . Qn matricea din problema 3.28.
Scrieţi algoritmul de aplicare a transformărilor B ← QT B şi B ← QB la nivel de bloc.

P 3.39 Aceeaşi problemă ca mai sus, pentru transformările la dreapta, B ← BQ şi


B ← BQT .

P 3.40 În condiţiile problemei 3.28, scrieţi un algoritm pentru calculul vectorului y = Ax,
cu x ∈ Rn dat. (N.B. Matricea A a fost distrusă ı̂n urma execuţiei algoritmului de
triangularizare.)

P 3.41 În condiţiile problemei 3.28, scrieţi algoritmi pentru


a. rezolvarea sistemului AT Ax = c, cu c ∈ Rn dat;
b. calculul inversei H = (AT A)−1 ;
c. calculul scalarului α = cT (AT A)−1 c, c ∈ Rn .

P 3.42 Scrieţi procedurile GQL şi MQL de acumulare şi aplicare a transformărilor gene-
rate de algoritmul de triangularizare QL.

P 3.43 Scrieţi algoritmul de triangularizare ortogonală QL la nivel de bloc.

P 3.44 Fie A ∈ Rm×n o matrice monică. Scrieţi procedurile de ortogonalizare GS şi


MGS care calculează factorizarea A = Q′′ L′′ , unde Q′′ are coloanele ortogonale, iar L′′
este inferior triunghiulară.

P 3.45 Rezolvaţi problemele 3.24-3.26 ı̂nlocuind peste tot matricele superior triunghiulare
R şi R+ cu matrice inferior triunghiulare. Reformulaţi ı̂n acelaşi spirit problema 3.27.

P 3.46 a. Să se scrie un algoritm eficient de rezolvare a sistemului

(G + C T C)x+ = c + C T y,

ı̂n care G = RT R este o matrice simetrică pozitiv definită al cărei factor Cholesky superior
triunghiular R este cunoscut, iar matricea C ∈ Rl×n precum şi vectorii c ∈ Rn , y ∈ Rl
sunt daţi. Stabiliţi o relaţie ı̂ntre x+ şi soluţia x a sistemului Gx = c.
b. Aceeaşi problemă ca mai sus, pentru sistemul A+ x+ = d, unde A+ este matricea
din problemele 3.24, 3.25 iar d ∈ Rn un vector dat.

P 3.47 Fie A ∈ Rm×n monică. Scrieţi algoritmul de calcul al pseudosoluţiei sistemului


Ax = b cu b ∈ Rm dat, utilizând informaţia furnizată de algoritmul de triangularizare
ortogonală QL.
206 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

P 3.48 Scrieţi algoritmul de triangularizare ortogonală la dreapta a matricei A+ = [L B],


ı̂n care blocul L este inferior triunghiular de ordin m iar B ∈ Rm×(n−m) este o matrice
oarecare. Precizaţi ce modificări apar dacă
a. n − m = 1, i.e. B = b este un vector;
b. L este inferior bidiagonală, respectiv inferior Hessenberg;
c. B este inferior triunghiulară.
Observaţie. Evident, această problemă reprezintă o simplă formulare ”prin dualitate” a
problemei 3.20. Propunem cititorului ca, procedând ı̂n mod similar, să obţină şi să rezolve
dualele problemelor 3.21–3.47 (sau ale celor mai interesante dintre acestea), comentând ı̂n
fiecare caz paralelismele observate.
P 3.49 Fie A ∈ Rm×n o matrice de rang maxim.
a. Discutaţi existenţa şi unicitatea inverselor la stânga (dreapta) ale matricei A. Puteţi
descrie printr-o formulă mulţimea acestor inverse ?
b. Evaluaţi expresiile kIm − AA+ kF şi kIn − A+ AkF . Ce se schimbă dacă mai sus
ı̂nlocuim norma Frobenius cu norma spectrală ?
P 3.50 a. Fie A ∈ Rm×n o matrice monică, iar b ∈ Rm , c ∈ Rn doi vectori daţi.
Utilizând informaţia furnizată de algoritmul de triangularizare ortogonală QT A = R,
scrieţi o procedură care rezolvă (ı̂n sensul CMMP) ambele sisteme Ax = b şi AT x = c.
b. Aceeaşi problemă ca mai sus, dacă A este epică, utilizând algoritmul de triangu-
larizare la dreapta AZ = L.
c. Aceleaşi probleme ca mai sus, relativ la sistemele cu membru drept multiplu
AX = B şi AT Y = C, ı̂n care B şi C sunt două matrice date, dimensionate corespunzător.

P 3.51 Fie A ∈ Rm×n cu m 6= n. Scrieţi algoritmii de triangularizare prin eliminare


gaussiană M A = U , respectiv AN = L şi indicaţi câteva aplicaţii. Ce strategii de pivotare
recomandaţi ı̂n fiecare caz ?
» – » ′ –
Im A R
P 3.52 Fie H = , cu A = Q monică (Q ∈ Cm×m , R′ ∈ Rn×n ).
AH 0 0
a. Arătaţi că factorizarea cvasi-diagonală a matricei H este de forma T HT H = J,
unde
J1
2 3
6 .. 7 »
1 1

J =6
6 . 7,
7
Jk = , k = 1 : n.
4 Jn 5 1 0
Im−n
b. Arătaţi că H este inversabilă şi
P2 (A+ )H
» –
−1
H = ,
A+ −G−1

unde G = AH A, A+ = (AH A)−1 AH , P2 = I − AA +


» . CâtH este
– detH ?
In A
c. Formulaţi rezultatele a şi b pentru H = , cu A epică.
A 0
n
P 3.53 Consideraţi funcţia pătratică F : R → R definită prin
1 T
F (x) = x Gx − xT c,
2
unde G ∈ Rn×n este o matrice simetrică pozitiv definită, iar c ∈ Rn .
a. Scrieţi condiţiile necesare de minim şi arătaţi că F are un punct de minim unic
x∗ ∈ Rn care satisface sistemul Gx∗ = c. (Indicaţie: ∂x ∂F
i
= 0, i = 1 : n.)
not
b. Scrieţi un algoritm care calculează x∗ şi ρ = F (x∗ ).
3.11. PROBLEME 207

P 3.54 Fie A ∈ Rm×n , b ∈ Rm . De asemenea, fie S ∈ Rm×m şi T ∈ Rn×n două matrice
pozitiv definite. Consideraţi funcţia pătratică
F (x) = kb − Axk2S + kxk2T ,
unde notaţiile sunt cele din problema 3.9.
a. Arătaţi că F are un punct de minim unic x∗ şi scrieţi un algoritm care calculează
x şi ρ = F (x∗ ).

b. Analizaţi separat problema CMMP ponderată, ı̂n care F (x) = kb − Axk2S . (Aici S
se numeşte tradiţional matrice pondere.)
P 3.55 Consideraţi problema de minimizare cu restricţii liniare
F (x∗ ) = min F (x),
Ax=b

unde F este funcţia pătratică din problema 3.53, matricea A ∈ Rm×n este epică, iar
b ∈ Rm .
a. Scrieţi condiţiile necesare de minim utilizând metoda multiplicatorilor Lagrange.
Puteţi arăta că problema considerată are soluţie unică ? Analizaţi cazul general ı̂n care
matricea G nu este neapărat pozitiv definită.
b. Scrieţi un algoritm care calculează x∗ şi ρ = F (x∗ ).
P 3.56 Fie A ∈ Rm×n monică, B ∈ Rm×p epică şi b ∈ Rm . Rezolvaţi problema CMMP
generalizată
ky ∗ k2 = min kyk2 .
Ax+By=b
not
Observaţie. Dacă p = m şi B = Im , atunci evident y = r = b − Ax, deci se obţine
problema CMMP din secţiunea 3.5.
P 3.57 Fie A ∈ Rm×n monică, C ∈ Rl×n epică şi b ∈ Rm , d ∈ Rl . Rezolvaţi problema
CMMP cu restricţii liniare
kb − Ax∗ k = min kb − Axk.
Cx=d

P 3.58 Consideraţi vectorul de permutări π produs de algoritmul 3.11 şi fie x ∈ Rn .


Scrieţi procedurile de permutare pe loc x ← Πx şi x ← ΠT x.
P 3.59 Se dau doi vectori b ∈ Rm şi c ∈ Rn . Scrieţi algoritmi de determinare a proiecţiilor
ortogonale ale acestor vectori pe subspaţiile descompunerilor ortogonale
Rm = ImA ⊕ KerAT şi respectiv Rn = ImAT ⊕ KerA, utilizând informaţia furnizată
de procedura de triangularizare ortogonală QRX.
P 3.60 a. Cu notaţiile din secţiunea 3.9.5, arătaţi că matricea
(S ′ )−1 0
» –
not
X = A+ = ΠZ QH
0 0

satisface condiţiile (Moore-Penrose) 1◦ AXA = X, 2◦ XAX = X, 3◦ AX = (AX)H ,


4◦ XA = (XA)H .
b. Precizaţi ce formă iau aceste condiţii dacă A este monică (epică).
c. Demonstraţi că 5◦ (A+ )H = (AH )+ , 6◦ (A+ )+ A = A, 7◦ A+ = (AH A)+ AH ,
8 A+ = AH (AAH )+ .

d. Puteţi indica o metodă de calcul al pseudoinversei unei matrice hermitice (vezi


proprietăţile 7◦ şi 8◦ ) fără a utiliza triangularizarea ortogonală completă ?
e. Ţinând seama de forma factorizată a matricelor Q şi Z, scrieţi un algoritm pentru
calculul pseudoinversei A+ .
208 CAPITOLUL 3. PROBLEMA CELOR MAI MICI PĂTRATE

P 3.61 a. Arătaţi că orice matrice A ∈ Cm×n poate fi scrisă sub oricare din formele
(i) A = Q′ C, (ii) A = BV ′ , unde Q′ are coloanele ortogonale, C este epică, respectiv B
este monică, iar V ′ are liniile ortogonale.
b. Scrieţi algoritmi pentru determinarea factorizărilor (i) şi (ii).
c. Arătaţi că A+ = C + (Q′ )H , respectiv A+ = (V ′ )H B + .
d. Scrieţi algoritmi pentru calculul pseudoinversei normale a sistemului Ax = b, cu
b ∈ Rm dat, utilizând factorizările (i) şi (ii).
P 3.62 O matrice A ∈ Cm×n se numeşte (ad-hoc) pseudounitară (sau parţial izometrică)
dacă există două matrice cu coloane ortogonale U ∈ Cm×r şi V ∈ Cn×r astfel ı̂ncât
A = UV H.
a. Ce structură au gramienii G1 = AH A şi G2 = AAH ? Interpretare geometrică.
b. Arătaţi că A+ = V U H .
c. Arătaţi că o matrice A ∈ Cm×n este pseudounitară dacă şi numai dacă A+ = AH .
d. Cum se poate testa faptul că o anumită matrice dată A ∈ Cm×n este 1) monică,
2) epică, 3) pseudounitară, 4) proiector ortogonal ?
P 3.63 Fie A ∈ Cm×n .
a. Scrieţi un algoritm de triangularizare ortogonală la dreapta cu pivotarea liniilor, i.e.
ΠAZ = L, unde L rezultă inferior triunghiulară. Precizaţi strategia de pivotare utilizată.
b. Indicaţi câteva aplicaţii posibile ale acestui algoritm şi explicaţi de ce ı̂n practică
algoritmul QRP din secţiunea 3.9 este ı̂ntotdeauna suficient.
P 3.64 Fie A ∈ Rm×n , B ∈ Rm×p monice.
a. Explicaţi de ce ı̂n general matricea M = [A B] nu este monică. Arătaţi că
ImM = ImA + ImB.
b. Efectuaţi
» ′ –triangularizarea ortogonală completă a matricei M , i.e.
H S 0
Q M ΠZ = , unde S este inversabilă de ordin r = rangM . Ce semnificaţie
0 0
geometrică au r şi Q ?
c. Notăm S = ImA, T =TImB. Utilizând rezultatele de la punctul b, precizaţi cum
poate fi verificată condiţia S T = ∅.
d. Idem, indicaţi o bază ortogonală pentru subspaţiul (S + T )⊥ .
e. Cum se schimbă concluziile de la punctele b–d dacă matricele iniţiale nu sunt
neapărat monice ? 2 3 2 3
1 1 1
Pentru exemplificare, fie A = 4 0 5, B = 4 0 1 5. Cine sunt S, T şi S + T ?
0 0 0

P 3.65 Fie A ∈ Rm×n , C ∈ Rl×n epice. » –


A
a. Explicaţi de ce ı̂n general matricea N = nu este epică. Arătaţi că
T C
KerN = KerA KerC.
b. Formulaţi ”prin dualitate” şi rezolvaţi punctele b–d din problema precedentă.
c. Fie x ∈ Rn . Scrieţi algoritmul T de calcul al proiecţiilor ortogonale ale lui x pe
subspaţiile N şi N ⊥ , unde N = KerA KerC. » –
1 0 0
Pentru exemplificare, fie A = [1 0 0], C = . Cine sunt KerA, KerC şi
T 1 1 0
KerA KerC ?