Sunteți pe pagina 1din 140

Seminar 1

Calcul matriceal elementar


Acest seminar este prima prezentare a calculului matriceal. Calculele matriceale elementare
nu sunt prezente n curs dar sunt intens utilizate. Fara o ntelegere profunda a acestor
notiuni introductive veti avea mari probleme la examinare si nu veti ntelege calculul stiintific
modern.

1.1
1.1.1

Preliminarii
Notatii pentru scalari, vectori si matrice

Structurile de date folosite la cursul de metode numerice si, n special, n cazul calculului
matriceal sunt matrici de numere reale sau complexe. O matrice este o structura de date
bidimensionala (dreptunghiulara) n nodurile careia se afla numere reale sau complexe. Un
vector este o structura de date unidimensionala (linie sau coloana) n nodurile careia se afla
numere reale sau complexe.
Numerele reale sau complexe se numesc scalari reali, respectiv complecsi. Un scalar
complex este o pereche ordonata de scalari reali. Astfel, calculul cu matrice cu elemente
complexe se poate reduce la calcul matriceal cu matrice cu elemente reale. Ca urmare, n
continuare ne vom referi numai la scalari, vectori si matrice reale. Multimea numerelor reale
va fi notata cu IR, multimea vectorilor cu n elemente va fi notata cu IRn iar IRmn este
multimea matricelor cu elemente reale cu m linii si n coloane. Vom considera un vector ca
fiind implicit de tipul coloan
a. Un vector linie va fi vazut ca un vector (coloana) transpus.
O matrice de tipul 1 1 este un scalar, o matrice de tipul 1 n este un vector (linie) si o
matrice te tipul m 1 este un vector (coloana). Pentru comoditate vom folosi conceptul de
matrice vida, care este o matrice fara elemente, notata [ ].
Vom considera ntotdeauna ca numerele reale sunt reprezentate n memoria calculatorului
ntr-un format specific, numit format virgula mobila (FVM) si ca toate operatiile aritmetice
de baza (cum ar fi adunarea, scaderea, mmultirea, mpartirea, extragerea radicalului etc.)
pentru numerele n virgula mobila sunt implementate n calculator.
Pe parcursul cursului se va utiliza un set de notatii pe care va sfatuim sa l folositi si
voi. Fiecare scalar, vector sau matrice va fi notat cu un simbol care va fi interpretat ca un

SEMINAR 1. CALCUL MATRICEAL ELEMENTAR

nume de identificare. Pentru fiecare scalar, vector sau matrice reala se aloca n memoria
calculatorului o structura de date n virgula mobila. Notatiile standard sunt:
Litere grecesti mici: , , . . ., pentru scalari (izolati);
Litere latine mici: a, b, c, . . ., x, y, z pentru vectori (coloane);
Litere latine mari: A, B, C, . . ., X, Y , Z pentru matrice.
Fie A IRmn o matrice si b IRm un vector. Elementul aflat pe linia i si coloana j a
matricei A va fi notat cu A(i, j) sau aij . Elementul i al vectorului b va fi notat cu b(i) sau
bi .
Vom folosi intens notatia MATLAB : pentru a crea un vector linie. Expresia
a=::
creaza un vector linie a cu primul element , al doilea element +, al treilea element +2
s.a.m.d., nsa ultimul element nu poate fi mai mare decat . Valoarea implicita pentru pasul
este = 1. Asadar, daca n = 5, atunci i = 1 : n creaza vectorul linie i = [ 1 2 3 4 5 ] dar
j = n : 1 creaza un vector vid; vectorul k = n : 1 : 1 este [ 5 4 3 2 1 ].
Pentru a crea o matrice cu elementele unei alte matrice putem indica elementele matricei
noi cu coordonatele matricei vechi. Spre exemplu, fie r = [ r1 r2 . . . ] si c = [ c1 c2 . . . ]
coordonatele liniilor, respectiv, ale coloanelor matricei vechi. Atunci expresia
B = A(r, c)
creaza matricea

A(r1 , c1 ) A(r1 , c2 )
A(r2 , c1 ) A(r2 , c2 )
B=
..
..
.
.


.
..
.

Utilizand notatia : putem crea o mare varietate de matrice cu elementele unei matrice
date. Spre exemplu, fie A IRmn o matrice data si k min(m, n). Atunci
B = A(1 : k, 1 : k) este coltul din stanga sus de ordin k al lui A, numit submatrice
lider principal
a a lui A;
R = A(i, 1 : n) este linia i a luiA;
C = A(1 : m, j) este coloana j a lui A.
In acest context, notatia : fara parametri nseamna toate. Astfel, linia i si, respectiv,
coloana j a lui A pot fi extrase prin R = A(i, :), respectiv C = A(:, j).

1.1.2

Matrice structurate

Matricele folosite n calculul matriceal pot avea multe elemente nule. Numarul si pozitia lor
fac sa existe mai multe tipuri de matrice pe care le definim n cele ce urmeaza.
In primul rand, o matrice care are un numar mare (sa zicem, mai mare de 90%) de
elemente nule se numeste matrice rar
a. O matrice care nu este rara se numeste dens
a.

1.1. PRELIMINARII

In cazul calculului matriceal cu matrice rare, calculatorul foloseste metode speciale pentru
memorare si procesare (de exemplu, sunt memorate doar elementele nenule mpreuna cu
coordonatele lor). In continuare ne vom referi numai la calcul matriceal cu matrice dense.
Astfel, toate matricele folosite (chiar si matricea zero) vor fi vazute ca matrice dense.
Matricele dense pot avea un numar semnificativ de elemente nule. Matricele n care elementele nule sunt pozitionate ntr-o forma regulata vor fi numite matrice (dense) structurate.
Matricele structurate joaca un rol important n calculul matriceal. Cele mai importante matrice structurate sunt definite mai jos.
1. Matrice triunghiulare. O matrice L IRmn se numeste inferior triunghiular
a daca
L(i, j) = 0, oricare ar fi i < j iar L se numeste inferior triunghiular
a unitate daca n
plus L(i, i) = 1 oricare ar fi i 1 : min(m, n). O matrice U IRmn se numeste
superior triunghiular
a daca U (i, j) = 0, oricare ar fi j < i iar U se numeste superior
triunghiular
a unitate daca n plus U (i, i) = 1 oricare ar fi i 1 : min(m, n). Remarcati
ca elementele nule ale unei matrice inferior triunghiulare cu m > n si elementele nule
ale unei matrice superior triunghiulare cu m < n formeaza o structura trapezoidala.
2. Matrice diagonale. O matrice D IRmn se numeste diagonal
a daca D(i, j) = 0,
oricare ar fi i 6= j, adica este n acelasi timp si inferior triunghiulara si superior
triuunghiulara.
3. Matrice Hessenberg. O matrice patratica G IRnn se numeste inferior Hessenberg
daca G(i, j) = 0, oricare ar fi j > i + 1. O matrice patratica H IRnn se numeste
superior Hessenberg daca H(i, j) = 0, oricare ar fi i > j + 1.
4. Matrice tridiagonale. O matrice patratica T IRnn se numeste tridiagonal
a daca
T (i, j) = 0, oricare ar fi i, j care satisfac |i j| > 1, adica este n acelasi timp superior
si inferior Hessenberg.
5. Matrice band
a. O matrice B IRmn se numeste matrice band
a de latime (p,q)
daca B(i, j) = 0, oricare ar fi i < j + p si j < i + q. O matrice tridiagonala este o
matrice banda cu p = q = 1.
Observatie: Desi limbajele de programare de nivel nalt nu permit astfel de structuri de
date cum sunt matricele triunghiulare, putem sa evitam memorarea elementelor nule si sa
obtinem o memorare economica folosind o singura matrice patratica pentru memorarea unei
matrice inferior triunghiulare si a uneia superior tringhiulare. Astfel de strategii de stocare
vor fi folosite spre exemplu de algoritmii de factorizare LU si QR.
Unele matrice pot sa nu aiba (multe) elemente nule dar sa necesite o procesare speciala.
Cateva din aceste matrice sunt:
1. Matrice simetrice. O matrice patratica S IRnn se numeste simetric
a daca
S(i, j) = S(j, i), oricare ar fi i, j. In mod normal, o matrice simetrica este stocata
numai prin partea sa inferior sau superior triunghiulara.
2. Matrice pozitiv definite. O matrice patratica simetrica P IRnn se numeste
pozitiv definit
a daca toti scalarii xT P x, unde x IRn este un vector (coloana) nenul
arbitrar ales, sunt strict pozitivi. Daca xT P x 0, x IRn , atunci P se numeste
pozitiv semi-definit
a. O matrice pozitiv definita are toti elementii de pe diagonala

SEMINAR 1. CALCUL MATRICEAL ELEMENTAR


pozitivi (demonstrati) dar elementele care nu se afla pe diagonala nu sunt obligatoriu
pozitive. O matrice simetrica N IRnn se numeste negativ (semi)-definit
a daca N
este pozitiv (semi)-definita.
3. Matrice ortogonale. Doi vectori (coloana) x, y IRn se numesc ortogonali daca
y T x = 0 si ortonormati daca, n plus, kxk2 = kyk2 = 1. O matrice patratica Q IRnn
se numeste ortogonal
a daca toate coloanele ei formeaza perechi ortonormate, adica
QT Q = In , unde In este matricea unitate. Matricele ortogonale joaca un rol decisiv
n rezolvarea problemei liniare a celor mai mici patrate.

1.1.3

Probleme de calcul numeric, algoritmi secventiali


si performantele lor

Metodele numerice au rolul sa rezolve probleme matematice care folosesc date numerice. O
problema matematica cu date initiale numerice si cu un rezultat numeric trebuie sa aiba
o solutie unica. In general, exista multe metode de rezolvare a unei probleme de calcul
numeric data. O expunere detaliata a unei metode numerice se numeste algoritm. Asadar,
un algoritm este o lista de operatii aritmetice si logice care duc datele numerice initiale la
solutia numerica finala. Aceste rezultate finale sunt interpretate ca solutia calculat
a a unei
probleme date. Cand algoritmul este facut pentru a fi executat pe un calculator cu un singur
procesor, adica exista o ordine stricta a executiei instructiunilor (doua instructiuni nu pot
fi executate n acelasi timp!) atunci algoritmul se numeste secvential. Altfel algoritmul se
numeste paralel.
Principalele performante ale algoritmilor seventiali sunt stabilitatea si eficienta. Stabilitatea este un obiectiv esential nsa foarte greu de masurat si de asigurat. Vezi cursul pentru
mai multe detalii. Eficienta algoritmilor secventiali poate fi masurata de doi parametri:
numarul de operatii n virgula mobila N (flops) si volumul de memorie necesar M (exprimat
prin numarul de locatii FVM). Numarul N determina timpul de executie al algoritmului.
Toti algoritmii pe care i vom studia vor avea o complexitate polinomiala, astfel N si
M sunt polinoame de dimensiunea problemei, exprimate n functie de numarul initial si cel
final de date, spre exemplu n functie de ordinul n al matricelor folosite. Daca
N = 1 np + 2 np1 + . . . + p n + p+1 ,

M = 1 nq + 2 nq1 + . . . + q n + q+1

ne vor interesa numai evaluarile asimptotice


1 np ,
N
(evident limn

N
N

= limn

M
M

1 nq
M

= 1).

Pentru a mbunatati eficienta algoritmilor sunt utile urmatoarele recomandari:


nu executati operatii cu rezultatul cunoscut, de exemplu evitati adunari si scaderi cu
zero, nmultiri cu 1 sau 0, mpartiri la 1 etc;
nu repetati aceleasi calcule; n cazul n care calculatorul functioneaza corect veti obtine
acelasi rezultat;
evitati executia operatiilor inutile;

1.2. CONVENT
II PENTRU PSEUDO-COD

evitati memorarea informatiilor care nu trebuiesc neaparat memorate; de exemplu nu


memorati niciodata matricea zero sau matricea unitate: le puteti folosi fara sa le aveti
n memoria calculatorului;
nu memorati aceeasi informatie de mai multe ori;
folositi metode eficiente de memorare a matricelor structurate, de exemplu matricele
diagonale pot fi memorate numai prin memorarea elementelor diagonale etc;
folositi suprascrierea; ex: daca vreti sa calculati vectorul z = x + y si nu mai aveti
nevoie de x sau y pentru calculele urmatoare atunci calculati x x + y sau y
x + y.
Observatie. Nu neglijati recomandarile de mai sus. B.Francis si N.Koublanovskaia au
devenit celebri descoperind cum sa evite calculele excesive dintr-un algoritm. Si tu poti
deveni un cercetator cunoscut reducand valoarea parametrilor p si/sau q n cazul problemelor
numerice standard. Nu se cunoaste nca valoarea minima a parametrului p pentru o problema
simpla cum este nmultirea matricelor!

1.2

Conventii pentru pseudo-cod

Vom adopta cateva conventii pentru scrierea algoritmilor. Aceste conventii ne vor permite
sa scriem algoritmii de calcul ntr-o forma concisa, clara, usor de nteles si de implementat
ntr-un limbaj de programare de nivel nalt. Instructiunile de baza ale pseudo-cod-ului sunt
prezentate mai jos. Ele pot fi completate cu orice alta instructiune neambigua si usor de
nteles.

1.2.1

Instructiuni de atribuire

Formele generale ale unei instructiuni de atribuire sunt:


v = expresie

sau

v expresie

unde v este numele unei variabile si expresie este orice expresie aritmetica sau logica valida.
O expresie aritmetica este valida daca:
toate variabilele folosite au o valoare valida (adica au fost initializate sau calculate
anterior);
toate operatiile sunt bine definite si expresia are o valoare bine definita; astfel nu sunt
permise: mpartirea la zero, operatiile nedeterminate cum ar fi 0 , 0/0, / etc.
O expresie logica este valida daca:
toate variabilele logice folosite au o valoare logica valida (adevarat sau fals);
sunt folositi numai operatori logici binecunoscuti: SI, SAU, NU, NICI etc.

SEMINAR 1. CALCUL MATRICEAL ELEMENTAR


expresia ia o valoare logica clara (adevarat sau fals).

Executia unei instructiuni de atribuire implica:


evaluarea expresiei;
memorarea valorii expresiei n memoria calculatorului ntr-o zona identificata cu numele variabilei v; vechea valoare a lui v se pierde.
Uneori vom folosim o forma speciala
uv
pentru interschimbarea valorilor dintre variabilele u si v. Aceasta instructiune este echivalenta cu urmatoarele trei instructiuni de atribuire
1. aux = u
2. u = v
3. v = aux,
unde aux este o variabila auxiliara.

1.2.2

Instructiunea Dac
a

Utilizarea conditionata a unui set de instructiuni poate fi realizata folosind instructiunea


daca a carei sintaxa este:
1. dac
a expresie logica
1. instructiuni 1
altfel
1. instructiuni 2
Executia instructiunii daca implica

1. evaluarea expresie logica; rezultatul are valoarea logica ADEVARAT


sau FALS;

2. daca rezultatul are valoarea logica ADEVARAT


atunci se executa primul grup de
instructiuni (instructiuni 1);
3. daca rezultatul are valoarea logica FALS atunci se executa al doilea grup de instructiuni
(instructiuni 2).
Partea altfel a unei instructiuni daca poate lipsi.
Expresia logica poate fi scrisa explicit, dar trebuie sa aiba o valoare logica clara la
momentul executiei. Spre exemplu
1. dac
a este duminica
1. stai acasa
altfel
1. mergi la scoala.
are sens numai daca cel care executa algoritmul stie n ce zi a saptamanii se afla.
De asemenea, se recomanda sa se evite situatiile n care expresia logica este o constanta
evidenta deoarece n acest caz instructiunea daca nu mai este necesara. De exemplu

1.2. CONVENT
II PENTRU PSEUDO-COD

1. dac
a 1 > 2
1. a = 3.14
altfel
1. a = 2.73
se poate nlocui imediat cu a = 2.73.

1.2.3

Cicluri

Cand avem un grup de instructiuni care trebuie executate n mod repetat avem la dispozitie
doua tipuri de instructiuni ciclice.
a) instructiunea pentru are urmatoarea sintaxa:
1. pentru k = expresie
1. instructiuni
Executia unei instructiuni pentru implica
1. evaluarea expresiei; rezultatul trebuie sa fie un vector linie;
2. se atribuie variabilei k primul element al vectorului linie calculat si se executa
instructiunile din corpul ciclului;
3. se atribuie variabilei k cel de-al doilea element al vectorului linie calculat si se
executa instructiunile;
4. si asa mai departe pana la atribuirea lui k a ultimului element al vectorului linie.
Obsevatie: Valoarea curenta a lui k poate fi folosita n instructiuni dar nu recomandam
modificarea acesteia. In MATLAB rezultatul evaluarii expreseiei poate fi o matrice n
care caz lui k i se atribuie succesiv, n ordinea naturala, cate o coloana a matricei si
pentru fiecare atribuire se executa instructiunile din corpul ciclului.
Exemplu: fiind dat un scalar real si un numar natural n 1 urmatorul ciclu caln
culeaza = 2 .
1. =
2. pentru k = 1 : n
1. =
b) instructiunea c
at timp are urmatoarea sintaxa:
1. c
at timp expresie logica
1. instructiuni
Executia unei instructiuni c
at timp implica:

1. evaluarea expresie logica; rezultatul trebuie sa fie ADEVARAT


sau FALS;
2. daca rezultatul este ADEVARAT se executa instructiunile; altfel ciclul cat timp
este terminat;
3. mergi la 1.

SEMINAR 1. CALCUL MATRICEAL ELEMENTAR


Observatie: Daca rezultatul primei evaluari este FALS instructiunile din corpul ciclului
nu sunt executate niciodata. Daca rezultatul primei evaluari este adevarat si valoarea
expresiei logice nu se schimba pe parcursul executarii instructiunilor, atunci ciclul
c
at timp nu se termina niciodata; avem un ciclu infinit. Daca nu aveti nevoie
de un ciclu infinit aveti grija sa schimbati valoarea expresiei pe parcursul executarii
instructiunilor.
Exemplu: fiind dat un scalar real si un numar natural n 1 urmatorul ciclu caln
culeaza = 2 .
1. =
2. k = 1
3. c
at timp k n
1. =
2. k = k + 1

1.2.4

Structura algoritmilor

Orice algoritm va avea doua parti:


1. prima parte contine informatii privitoare la problema rezolvata si metoda folosita
pentru rezolvarea ei:
datele de intrare (initiale);
datele calculate (rezultate);
metoda folosita;
Optional, prima parte poate contine
numele autorului
data elaborarii algoritmului
versiunea etc.
2. a doua parte este o lista de instructiuni numerotate scrise n pseudo-cod care arata
cum sunt folosite datele initiale pentru a ajunge la rezultatul final.

1.3

BLAS

Cele mai importante operatii cu matrice tratate n acest seminar sunt implementate ntr-un
pachet software numit Basic Linear Algebra Soubrutines (BLAS). Exista versiuni speciale
a BLAS concepute pentru calculatoare cu organizare ierarhica a memoriei care sunt optimizate pentru a exploata toate atributele calculatorului tinta. BLAS este organizat pe trei
nivele. Lista subnivelelor BLAS este data n Anexa.

1.3. BLAS

1.3.1

Nivelul 1. Operatii de baz


a cu vectori

Nivelul 1 contine operatii de complexitate O(n). Cateva dintre acestea sunt:


1. SAXPY (acronim pentru Scalar Alpha X Plus Y)
y x + y
unde x si y sunt vectori dati de dimensiune n (coloana sau linie) si este un scalar dat.
Evident daca y are initial toate elementele nule, atunci SAXPY calculeaza y = x. (Atentie:
daca vreti sa calculati y = x folosind SAXPY, nu uitati sa initializati y cu 0).
2. DOT calculeaza produsul scalar a doi vectori (coloana) x, y IRn care este, prin
definitie,
n
X
= yT x =
xi yi
i=1

3. Norme vectoriale. Ne marginim sa prezentam aici norma vectoriala euclidiana n IRn


definita de
v
u n

uX
T
= x x=t
x2i .
i=1

1.3.2

Nivelul 2. Operatii de baz


a matrice-vector

Nivelul 2 al BLAS contine operatii de complexitate O(n2 ). Cateva dintre acestea sunt:
1. GAXPY (acronim pentru General A X Plus Y)
y Ax + y
unde x si y sunt vectori (coloana) de dimensiune n si A este o matrice n n data. Evident,
daca initial toate elementele lui y sunt nule, atunci GAXPY calculeaza produsul matricevector y = Ax. (Atentie: daca vreti sa calculati y = Ax folosind GAXPY, nu uitati sa
initializati y cu zero). In acest context vom folosi si operatia cu vectori linie y T xT A+y T .
2. OUT produsul extern a doi vectori (coloana) x, y IRn este definit ca o matrice n n
A = xy T ,

i.e. A(i, j) = xi yj , i, j = 1 : n

Nivelul 2 contine totodata algoritmi de rezolvare a sistemelor triunghiulare liniare (vezi


seminarul 2).

1.3.3

Nivelul 3. Operatii de baz


a matrice-matrice

Nivelul 3 al BLAS contine operatii de complexitate O(n3 ). Cele mai importante dintre
acestea sunt:
1. Inmultirea matricelor: fiind dati scalarii reali si si matricele reale A IRmn ,
B IRnp , C IRmp , procedura de nmultire a matricelor BLAS calculeaza
C A B + C.

10

SEMINAR 1. CALCUL MATRICEAL ELEMENTAR

Luand = = 1 si matricea initiala C zero, procedura de mai sus calculeaza produsul C =


A B. BLAS acopera toate cazurile particulare ale nmultirii matrice-matrice. Pentru cazul
n care macar una dintre matrice este simetrica exista o procedura speciala. De asemenea,
exista proceduri speciale pentru cazul n care matricele implicate sunt triunghiulare.
2. Actualizarea de rang k a unei matrice simetrice: fiind dati scalarii reali si , o
matrice simetrica C IRmn si o matrice AIRnk , se calculeaza matricea
C A AT + C.
Daca k < n si A are coloanele liniar independente, atunci rangAAT = k. Acest lucru da
numele procedurii.
3. Actualizarea de rang 2k a unei matrici simetrice: fiind dati scalari reali si , o
matrice simetrica C IRmn si doua matrice n k A si B, procedura calculeaza:
C A B T + B AT + C.
Nivelul 3 contine si algoritmi de rezolvare a sistemelor liniare triunghiulare cu membrul
drept multiplu (vezi seminar 2) care au o complexitate O(n3 ) .

1.4

Probleme rezolvate

Vom ncepe cu probleme simple, cum sunt cele rezolvate de BLAS, dar care sunt des ntalnite
n probleme mai complexe. Programele MATLAB de implementare a algoritmilor elaborati
sunt prezentate n Anexa B.
Problema 1. Fiind
sa
Pndate numerele reale 1 , 2 , . . . , n , scrieti un algoritmQcare
n
calculeze suma lor = i=1 i si un alt algoritm care sa calculeze produsul lor = i=1 i .
Solutie. Amintiti-va ca o suma este ntotdeauna initializata cu 0 si un produs cu 1.
Algoritmi posibili pentru a calcula si sunt:
Pn
Algoritmul 1.1 (Date i , i = 1 : n, algoritmul calculeaza = i=1 i )
1. = 0
2. pentru i = 1 : n
1. = + i
Algoritmul 1.2 (Date i , i = 1 : n, algoritmul calculeaza =

Pn
i=1

i )

1. = 0
2. pentru i = n : 1 : 1
1. = + i
Observati ca cei doi algoritmi pentru calcularea sumei sunt diferiti. Datorita erorilor de
rotunjire, care apar la efectuarea fiecarei adunari, rezultatele executarii celor doi algoritmi
pot fi diferite. Adunarea n virgula mobila nu este o operatie asociativa. Este foarte greu
de gasit ordinea optima de nsumare astfel ncat eroarea sa fie minima.
Algoritmul 1.3 (Date i , i = 1 : n, algoritmul calculeaza =

Qn
i=1

i )

1.4. PROBLEME REZOLVATE

11

1. = 1
2. pentru i = 1 : n
1. = i
Evident, observatiile de mai sus raman valabile.
Problema 2. Fiind data o matrice superior triunghiulara U IRnn , scrieti un algoritm
eficient care sa calculeze
1. urma matricei U , i.e. = tr U ;
2. determinantul = det U
3. normele Frobenius, 1 si infinit ale matricei U definite n felul urmator:
v
uX
n
u n X
F = t
u2ij
(normaFrobenius),
i=1 j=1

1 = max

j1:n

si
= max

i1:n

n
X

|uij |

(norma1)

i=1

n
X

|uij |

(norma ).

j=1

Pn
Solut
sor de demonstrat ca
i=1 U (i, i). De asemenea, este u
Qn ie. Prin definitie =
= i=1 U (i, i). Astfel puteti folosi algoritmii de calcul a sumei, respectiv a produsului a
n numere reale de la problemele precedente. Pentru a putea calcula eficient norma matricei
vom exploata structura superior triunghiulara a matricei U evitand efectuarea unor operatii
inutile. Astfel avem
v
uX
j
n
n
X
X
u n X
2
t
|uij |.
F =
|uij |,
= max
uij ,
1 = max
i=1 j=i

Prin urmare, algoritmul este:


Algoritmul 1.4
1. 1 = 0
2. pentru j = 1 : n
1. = 0
2. pentru i = 1 : j
1. = + |uij |
3. dac
a 1 <
1. 1 =
3. = 0
4. pentru i = 1 : n
1. = 0

j1:n

i=1

i1:n

j=i

12

SEMINAR 1. CALCUL MATRICEAL ELEMENTAR


1. pentru j = i : n
2. = + |uij |
2. dac
a <
1. =
5. F = 0
6. pentru i = 1 : n
1. pentru j = i : n
1. = F + u2ij
F
7. F = F

Problema 3. a) Fie doi vectori necoliniari dati b1 , b2 IRn . Calculati un vector q IRn
aflat n subspatiul generat de b1 si b2 , ortogonal la b1 . b) Fie p vectori liniar independenti
bj IRn , j = 1 : p. Calculati un set de p vectori qj , j = 1 : p din subspatiul generat de
vectorii bj , ortogonali doi cate doi, i.e. astfel ncat qiT qj = 0, i 6= j, qj IRn , j = 1 : p.
Solutie. a) Orice vector din subspatiul generat de vectorii b1 si b2 este o combinatie
liniara a acestor doi vectori. Fie q o astfel de combinatie liniara a lui b1 si b2 , i.e. q = b1 +b2 .
Pentru a determina avem conditia de ortogonalitate bT1 q = bT1 b1 + bT1 b2 = 0. Vectorul b1
bT b2
fiind nenul, rezulta = 1T . Algoritmul este:
b1 b1
1. = 0
2. = 0
3. pentru i = 1 : n
1. = + b1 (i) b2 (i)
2. = + b1 (i) b1 (i)
4. = /
5. pentru i = 1 : n
1. q(i) = b1 (i) + b2 (i)
b) Binecunoscuta procedura de ortogonalizare Gram-Schmidt utilizeaza si generalizeaza
rezultatul de la punctul a); vectorii ortogonali qj genereaza acelasi subspatiu al lui IRn ca
si setul de vectori bj . Ideea algoritmului Gram-Schmidt consta n a impune q1 = b1 si a
exprima un vector qj+1 ca o combinatie liniara a vectorilor qk deja calculati si bj+1 , conform
schemei de calcul la nivel vectorial:
1. q1 = b1
2. pentru j = 1 : p 1
Pj
1. qj+1 = i=1 ij qi + bj+1
unde scalarii ij , i = 1 : j trebuie sa asigure ortogonalitatea vectorului qj+1 la qk , k = 1 : j.
Pj
bT b2
La fel ca mai sus, 11 = T1 . Mai general, avand n vedere ca qkT qj+1 = i=1 ij qkT qi +
b1 b1
qkT bj+1 = 0 si ca qkT qi = 0 pentru k 6= i avem
ij =

qiT bj+1
,
qiT qi

Astfel algoritmul Gram-Schmidt detaliat este:

i=1:j

1.4. PROBLEME REZOLVATE

13

Algoritmul 1.5 (Gram-Schmidt) Fiind dati vectorii liniar independenti bj , j =


1 : p, algoritmul calculeaza un set de p vectori ortogonali qj , j = 1 : p care
formeaza o baza ortogonala a subspatiului generat de vectorii bj , j = 1 : p.
1. pentru k = 1 : n
1. q1 (k) = b1 (k)
2. pentru j = 1 : p 1
1. j = 0
2. pentru k = 1 : n
1. j = j + qj (k) qj (k)
2. qj+1 (k) = bj+1 (k)
3. pentru i = 1 : j
1. ij = 0
2. pentru k = 1 : n
1. ij = ij + qi (k) bj+1 (k)
3. ij = ij /i
4. pentru k = 1 : n
1. qj+1 (k) = qj+1 (k) + ij qi (k)
Observati ca algoritmul Gram-Schmidt contine multe operatii vector-vector cum sunt
produsele SAXPY si DOT, implementate profesional la nivelul 1 BLAS.
La curs vom prezenta un algortitm mai bun pentru rezovarea aceleiasi probleme.
Problema 4. Fie o matrice A IRmn , un vector b IRn si un vector c IRm , toate
date. Scrieti un algoritm eficient care sa calculeze c c + A b. (Daca initial c = 0, atunci
aceasta este o problema de nmultire matrice-vector c = A b).
Solutie. Vom da doi algoritmi: primul bazat pe algoritmul DOT de calcul al produsului
scalar a doi vectori (un algortim orientat pe linii) si un al doilea bazat pe SAXPY (un
algoritm orientat pe coloane). Pentru primul algoritm vom partitiona matricea A pe linii si
vom folosi formula
c(i) c(i) + A(i, :) b = c(i) +

n
X

aij bj ,

i = 1 : m.

j=1

Algoritmul, numit versiunea (i, j) a lui GAXPY, este:


Algoritmul 1.6 GAXPY pe linii: Fiind data o matrice A IRmn si vectorii
b IRn si c IRm , algoritmul calculeaza c c + A b
1. pentru i = 1 : m
1. pentru j = 1 : n
1. ci = ci + aij bj
Pentru al doilea algoritm vom partitiona matricea A pe coloane si vom folosi formula
cc+

n
X

A:,j bj .

j=1

Algoritmul, numit versiunea (j, i) a lui GAXPY, este:

14

SEMINAR 1. CALCUL MATRICEAL ELEMENTAR


Algoritmul 1.7 GAXPY pe coloane: Fiind data o matrice A IRmn si vectorii
b IRn si c IRm , algoritmul calculeaza c c + A b
1. pentru j = 1 : n
1. pentru i = 1 : m
1. ci = ci + aij bj

Complexitatea celor doi algoritmi este aceeasi Nop 2mn dar exista diferente ntre ei:
primul este recomandat cand matrica A este memorata pe linii si al doilea cand matricea A
este memorata pe coloane.
Problema 5. Fie trei matrice A IRmn , B IRnp si C IRmp date, scrieti un
algoritm eficient care sa calculeze C C + A B. (Daca initial C = 0, atunci aceasta este
o problema de nmultire matrice-matrice C = A B).
Solutia. Solutia standard se bazeaza pe formula binecunoscuta
cij cij +

n
X

aik bkj ,

i = 1 : m,

j = 1 : p.

k=1

Avand trei indici (i, j, k) putem scrie 3! = 6 algoritmi esential diferiti. Complexitatea acestor
algoritmi este aceeasi Nop 2mnp. Prezentam trei dintre acestia cu scurte comentarii.
a) Versiunea (i, j, k) se bazeaza pe partitionarea lui A pe linii si a lui B pe coloane.
Ultimul ciclu intern calculeaza un produs DOT si ultimele doua cicluri calculeaza o operatie
GAXPY-linie, i.e. C(i, j) C(i, j) + A(i, :) B(:, j) respectiv C(i, :) C(i, :) + A(i, :) B.
Algoritmul 1.8 Versiunea (i, j, k) a nmultirii matrice-matrice. Date A
IRmn , B IRnp si C IRmp algoritmul calculeaza C C + A B.
1. pentru i = 1 : m
1. pentru j = 1 : p
1. pentru k = 1 : n
1. cij = cij + aik bkj
b) Versiunea (j, k, i) se bazeaza pe partitionarea lui A si a lui B pe coloane. Ultimul ciclu
intern calculeaza o SAXPY-coloana si ultimele doua cicluri calculeaza o GAXPY-coloana,
i.e. C(:, j) C(:, j) + A(:, k) B(k, j), respectiv C(:, j) C(:, j) + A B(:, j).
Algoritmul 1.9 Versiunea (j, k, i) a nmultirii matrice-matrice.
1. pentru j = 1 : p
1. pentru k = 1 : n
1. pentru i = 1 : m
1. cij = cij + aik bkj
c) Versiunea (k, i, j) se bazeaza pe partitionarea lui A pe coloane si a lui B pe linii.
Ultimul ciclu calculeaza un produs SAXPY-linie si ultimele doua cicluri calculeaza produsul
OUT a doi vectori, concret C(i, :) C(i, :)+A(i, k)B(k, :), respectiv C C +A(:, k)B(k, :
).

1.4. PROBLEME REZOLVATE

15

Algoritmul 1.10 Versiunea (k, i, j) a nmultirii matrice-matrice.


1. pentru k = 1 : m
1. pentru i = 1 : p
1. pentru j = 1 : n
1. cij = cij + aik bkj

Problema 6. Fie L IRnn o matrice inferior triunghiulara si U IRnn o matrice


superior triunghiulara, ambele date. Scrieti un algoritm eficient care sa calculeze A = L U .
(Problema inversa: fiind data A, calculati L si U , este cunoscuta ca problema factorizarii
LU si va fi tratata la curs).
Solutia. Pentru a obtine un algoritm eficient trebuie sa evitam calculele inutile cum
sunt nmultirile si adunarile cu zero. Astfel, avem
A(i, j) =

n
X

min(i,j)

L(i, k) U (k, j) =

k=1

L(i, k) U (k, j),

k=1

si ca sa evitam comparatia dintre i si j vom mparti calculul n calcularea partii inferior


triunghiulare si a celei superior triunghiulare a lui A. Algoritmul este:
Algoritmul 1.11
1. pentru i = 1 : n
1. pentru j = 1 : i
1. aij = 0
2. pentru k = 1 : j
1. aij = aij + lik ukj
2. pentru j = i + 1 : n
1. aij = 0
2. pentru k = 1 : i
1. aij = aij + lik ukj

Numarul de operatii necesare pentru algoritmul de mai sus este


Nop =

n X
i
n
X
X
2
(
2j +
2i) n3 ,
3
i=1 j=1
j=i+1

de trei ori mai mic decat nmultirea matrice-matrice standard.


Problema 7. a. Fie matricele U, V IRnn date. Propuneti un algoritm eficient pentru
a calcula matricea:
X = (In + U (:, 1) V (1, :)) (In + U (:, 2) V (2, :)) (In + U (:, n) V (n, :)).
b Scrieti un algoritm eficient care sa calculeze determinantul matricei X calculate la punctul
a).

16

SEMINAR 1. CALCUL MATRICEAL ELEMENTAR

Solutia a) Scriem mai ntai un algoritm eficient pentru calcularea produsului X


X (In + uv T ), unde X este o matrice data iar u, v IRn sunt vectori coloana dati. Evident
Y = X (In + uv T ) = X + X u v T , astfel ca YP(i, j) = X(i, j) + X(i, :) u v(j) =
n
X(i, j) + v(j) unde scalarul = X(i, :) u = k=1 X(i, k)u(k) depinde de i dar nu
depinde de j. Avem astfel urmatorul algoritm eficient:
Algoritmul 1.12. Fiind data matricea X IRnn si vectorii coloana u, v IRn ,
acest algoritm calculeaza X X (In + uv T ).
1. pentru i = 1 : n
1. = 0
2. pentru k = 1 : n
1. = + xik uk
3. pentru j = 1 : n
1. xij = xij + vj
Acum, introducand numele Xuv pentru procedura de mai sus si apeland secventa de
instructiuni de mai sus prin
X = Xuv(X, u, v)
putem rezolva problema folosind urmatoarea procedura:
Algoritmul 1.13
1. X = In
2. pentru k = 1 : n
1. X = Xuv(X, U (:, k), V (k, :))
Observati ca algoritmul 1.12 necesita O(n2 ) operatii, deci am rezolvat problema nmultirii
a n matrice cu o complexitate de numai O(n3 ) flopi.
b) Metoda eficienta de a calcula determinantul se bazeaza pe faptul ca daca u, v IRn
sunt vectori coloana, atunci det(In + uv T ) = 1 + v T u (demonstrati, spre exemplu folosind
inductia matematica). Asadar,
det X =

n
Y

(1 + V (k, :) U (:, k)) =

k=1

si algoritmul este
Algoritmul 1.14
1. = 1
2. pentru k = 1 : n
1. = 1
2. pentru k = 1 : n
1. = + vki uik
3. =

n
Y

(1 +

k=1

n
X
i=1

V (k, i) U (i, k))

1.5. PROBLEME PROPUSE

1.5

17

Probleme propuse

Problema 1.1 Fie doua matrice A, B Rmnn . Produsul


dintre A si B este definit
Pm Pscalar
n
de =< A, B >= trace(B T A). Demonstrati ca = i=1 j=1 aij bij si scrieti un algoritm
care sa calculeze .
Problema 1.2 Fie u, v Rn doi vectori nenuli si fie A = In + uv T . Gasiti un algoritm
eficient care sa calculeze norma Frobenius a lui A.
Problema 1.3 Fie A, B, C IRnn trei matrice date si d IRn un vector dat. Scrieti un
algoritm eficient care sa calculeze vectorul x = A B C d.
Problema 1.4 Fie A, B IRnn doua matrice date. Scrieti algoritmi eficienti pentru
calcularea A A B, si a B A B folosind cat mai putin spatiu de memorie. Repetati
problema cand A si B sunt amandoua inferior triunghiulare (superior triunghiulare).
Problema 1.5 Se considera date matricele: H IRnn superior Hessenberg, R Rnn
superior triunghiulara si vectorul b IRn .
a. Demonstrati ca matricele X = H R si Y = R H sunt ambele superior Hessenberg.
b. Scrieti algoritmi eficienti pentru calculul matricelor X si Y ; studiati posibilitatea de
a suprascrie H cu X (cu Y ).
c. Scrieti algoritmi eficienti pentru a calcula vectorii x = HRb si y = RHb.
Problema 1.6 Fie C IRnn , o matrice simetrica data si A Rnp o matrice oarecare.
Scrieti un algoritm eficient care sa calculeze actualizarea de rang p a lui C, adica C
C + A AT . Demonstrati ca daca initial C este zero, atunci matricea C calculata este
simetrica si pozitiv semi-definita.
Problema 1.7 Fie C IRnn o matrice simetrica si matricele A, B Rnp . Scrieti un
algoritm eficient care sa calculeze actualizarea de rang 2p a lui C, adica C C + A B T +
B AT .
Problema 1.8 Fie Rnn o matrice inferior triunghiulara nesingulara. Scrieti un algoritm
eficient care sa calculeze T = LLT si demonstrati ca T este o matrice simetrica pozitivdefinita.

1.6

Bibliografie

1. B. Jora, B. Dumitrescu, C. Oara, Numerical Methods, UPB, Bucuresti, 1995.


2. G.W. Stewart, Introduction to matrix computation, Academic Press, 1973.
3. G. Golub, Ch. Van Loan, Matrix Computations, a treia editie, John Hopkins
University Press, 1998.
4. G.W. Stewart, Matrix Algorithms, vol.1: Basic Decompositions, SIAM, 1999.
5. G.W. Stewart, Matrix Algorithms, vol.2: Eigensystems, SIAM, 2001.
6. B. Dumitrescu, C. Popeea, B. Jora, Metode de calcul numeric matriceal. Algoritmi fundamentali, ALL, Bucuresti, 1998.

18

1.7
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:

1:
2:

SEMINAR 1. CALCUL MATRICEAL ELEMENTAR

Anexa B
function [ sigma ] = suma1(alfa)
%------------------------------------------------------------------------% Algoritmul 1.1
% Functia calculeaza suma a n numere reale stocate in vectorul alfa
% numerele sunt insumate in ordine normala de la alfa(1) pana la alfa(n)
% Apelul: [ sigma ] = suma1(alfa)
%
% Buta Valentin, aprilie, 2006
%------------------------------------------------------------------------n=length(alfa);
m=min(size(alfa));
if m=1
error(Datele de intrare nu sunt corecte)
end
sigma=0;
for i=1:n
sigma=sigma+alfa(i);
end

function [ sigma ] = suma2(alfa)


%------------------------------------------------------------------------% Algoritmul 1.2
% Functia calculeaza suma a n numere reale stocate in vectorul alfa
% numerele sunt insumate in ordine inversa de la alfa(n) pana la alfa(1)
% Apelul: [ sigma ] = suma2(alfa)
%
% Buta Valentin, aprilie, 2006
%------------------------------------------------------------------------n=length(alfa);
m=min(size(alfa));
if m=1
error(Datele de intrare nu sunt corecte)
end
sigma=0;
for i=n:-1:1
sigma=sigma+alfa(i);
end

function [ p ] = produs(alfa)

1.7. ANEXA B
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:

%------------------------------------------------------------------------% Algoritmul 1.3


% Functia calculeaza produsul a n numere reale stocate in vectorul alfa
% numerele sunt inmultite in ordine normala de la alfa(1) pana la alfa(n)
% Apelul: [ p ] = produs(alfa)
%
% Buta Valentin, aprilie, 2006
%-------------------------------------------------------------------------

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:

function [ v1,vi,vF ]=norme(U)


%------------------------------------------------------------------------% Algoritmul 1.4
% Functia calculeaza norma unu, norma infinit si norma Frobenius a unei
% matrice superior triunghiulara U. Norma unu este notata cu v1, norma
% infinit cu vi iar norma Frobenius cu vF.
% Apelul: [ v1,vi,vF ] = norme(U)
%
% Buta Valentin, aprilie, 2006
%------------------------------------------------------------------------[ n,m ]=size(U);
if n=m
error(Matricea nu este patratica!);
end
for i=2:n-1
for j=1:i-1
if U(i,j)=0
error (Matricea nu este superior triunghiulara);
end
end
end
v1=0;
for j=1:n
sigma=0;
for i=1:j
sigma =sigma + abs(U(i,j));
end
if v1<sigma
v1=sigma;
end
end

n=length(alfa);
m=min(size(alfa));
if m=1
error(Datele de intrare nu sunt corecte)
end
p=1;
for i=1:n
p=p*alfa(i);
end

19

20

SEMINAR 1. CALCUL MATRICEAL ELEMENTAR

32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:

vi=0;
for i=1:n
sigma=0;
for j=i:n
sigma =sigma + abs(U(i,j));
end
if vi < sigma
vi = sigma;
end
end
vF=0;
for i=1:n
for j=i:n
vF=vF + U(i,j)*U(i,j);
end
end
vF=sqrt(vF);

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:

function [ Q ]=gramschmidt(B)
%------------------------------------------------------------------------% Algoritmul 1.5
% Functia calculeaza p vectori ortogonali care genereaza acelasi subspatiu
% ca p vectori liniar independenti dati.
% Vectorii dati sunt memorati in coloanele matricei B, iar vectorii
% calculati sunt memorati in coloanele matricei Q.
% Algoritmul este cunoscut sub numele de Algoritmul Gram-Schmidt
% Apelul: [ Q ]=gramschmidt(B)
%
% Buta Valentin, aprilie, 2006
%------------------------------------------------------------------------[ n,p ]=size(B);
for k=1:n
Q(k,1)=B(k,1);
end
for j=1:p-1
beta(j)=0;
for k=1:n
beta(j)=beta(j)+Q(k,j)*Q(k,j);
Q(k,j+1)=B(k,j+1);
end
for i=1:j
alfa(i,j)=0;
for k=1:n
alfa(i,j)=alfa(i,j)+Q(k,i)*B(k,j+1);
end
alfa(i,j)=-alfa(i,j)/beta(i);
for k=1:n
Q(k,j+1)=Q(k,j+1)+alfa(i,j)*Q(k,i);

1.7. ANEXA B
33:
34:
35:

end
end
end

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:

function [ c ]=GAXPY1(A,b,c)

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:

function [ c ]=GAXPY2(A,b,c)

%------------------------------------------------------------------------% Algoritmul 1.6


% Functia actualizeaza vectorul (coloana) c cu produsul unei matrice
% A cu un vector (coloana) b. Algoritmul este cunoscut sub numele de GAXPY
% pe linii.
% Apelul: [ c ]=GAXPY1(A,b)
%
% Buta Valentin, aprilie, 2006
%------------------------------------------------------------------------[ m,n ]=size(A);
[ mb,nc ]=size(b);
if mb=1
error(b nu este vector coloana);
end
if nc=n
error(A si b nu pot fi inmultite);
end
[ mc,nc ]=size(c);
if mc=1
error(c nu este vector coloana);
end
for i=1:m
for j=1:n
c(i)=c(i)+A(i,j)*b(j);
end
end

%------------------------------------------------------------------------% Algoritmul 1.7


% Functia actualizeaza vectorul (coloana) c cu produsul unei matrice
% A cu un vector (coloana) b. Algoritmul este cunoscut sub numele de GAXPY
% pe coloane.
% Apelul: [ c ]=GAXPY2(A,b)
%
% Buta Valentin, aprilie, 2006
%------------------------------------------------------------------------[ m,n ]=size(A);
[ mb,nc ]=size(b);

21

22

SEMINAR 1. CALCUL MATRICEAL ELEMENTAR

15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:

if mb=1
error(b nu este vector coloana);
end
if nc=n
error(A si b nu pot fi inmultite);
end
[ mc,nc ]=size(c);
if mc=1
error(c nu este vector coloana);
end
for j=1:n
for i=1:m
c(i)=c(i)+A(i,j)*b(j);
end
end
end

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:

function [ C ]=MxMijk(A,B)
%------------------------------------------------------------------------% Algoritmul 1.8
% Functia calculeaza matricea C definita ca produsul a doua
% matrice A si B. Algoritmul se bazeaza pe partitionarea lui A pe linii,
% si a lui B pe coloane.
% Apelul: [ C ]=MxMijk(A,B)
%
% Buta Valentin, aprilie, 2006
%------------------------------------------------------------------------[ m,n ]=size(A);
[ x,p ]=size(B);
if n=x
error(Matricele nu pot fi inmultite!)
end
for i=1:m
for j=1:p
C(i,j)=0;
end
end
for i=1:m
for j=1:p
for k=1:n
C(i,j)=C(i,j)+A(i,k)*B(k,j);
end
end
end
end

1.7. ANEXA B
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:

function [ C ]=MxMjki(A,B)

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:

function [ C ]=MxMkij(A,B)

%------------------------------------------------------------------------% Algoritmul 1.9


% Functia calculeaza matricea C definita ca produsul a doua
% matrice A si B. Algoritmul se bazeaza pe partitionarea lui A si B pe
% coloane.
% Apelul: [ C ]=MxMjki(A,B)
%
% Buta Valentin, aprilie, 2006
%------------------------------------------------------------------------[ m,n ]=size(A);
[ x,p ]=size(B);
if n=x
error(Matricele nu pot fi inmultite!)
end
for i=1:m
for j=1:p
C(i,j)=0;
end
end
for j=1:p
for k=1:n
for i=1:m
C(i,j)=C(i,j)+A(i,k)*B(k,j);
end
end
end

%------------------------------------------------------------------------% Algoritmul 1.10


% Functia calculeaza matricea C definita ca produsul a doua
% matrice A si B. Algoritmul se bazeaza pe partitionarea lui A pe coloane
% si a lui B pe linii.
% Apelul: [ C ]=MxMkij(A,B)
%
% Buta Valentin, aprilie, 2006
%------------------------------------------------------------------------[ m,n ]=size(A);
[ x,p ]=size(B);
if n=x
error(Matricele nu pot fi inmultite!)
end
for i=1:m
for j=1:p
C(i,j)=0;

23

24

SEMINAR 1. CALCUL MATRICEAL ELEMENTAR

21:
22:
23:
24:
25:
26:
27:
28:
29:

end
end
for k=1:n
for i=1:m
for j=1:p
C(i,j)=C(i,j)+A(i,k)*B(k,j);
end
end
end

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:

function [ A ]=inmultire LU(L,U)


%------------------------------------------------------------------------% Algoritmul 1.11
% Functia calculeaza eficient produsul a doua matrice patratice L si U,
% prima fiind inferior triunghiulara in timp ce a doua este superior
% triunghiulara. Rezultatul este memorat in matricea A.
% Apelul: [ A ]=inmultire LU(L,U)
%
% Buta Valentin, aprilie, 2006
%------------------------------------------------------------------------[ n,x ]=size(L);
[ m,y ]=size(U);
if n=x
error(Matricea L nu este patratica);
end
if m=y
error(Matricea U nu este patratica);
end
if n=m
error(Matricele nu pot fi inmultite!)
end
for i=1:n
for j=1:i
A(i,j)=0;
for k=1:j
A(i,j)=A(i,j)+L(i,k)*U(k,j);
end
end
for j=i+1:n
A(i,j)=0;
for k=1:i
A(i,j)=A(i,j)+L(i,k)*U(k,j);
end
end
end

1.7. ANEXA B
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:

function [ X ]=Xuv(X,u,v)

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:

function [ X ]=prodUV(U,V)

%------------------------------------------------------------------------% Algoritmul 1.12


% Algoritmul calculeaza eficient produsul a doua matrice patratice una
% oarecate (X) in timp ce cea de a doua are o forma particulara (In+u*v)
% unde u si v sunt doi vectori (primul de tip coloana iar al doilea de tip
% linie). Algoritmul suprascrie rezultatul in matricea X.
% Apelul: [ X ]=Xuv(X,u,v)
%
% Buta Valentin, aprilie, 2006
%------------------------------------------------------------------------[ n,m ]=size(X);
if n=m
error(Matricea X nu este patratica);
end
for i=1:n
sigma=0;
for k=1:n
sigma=sigma+X(i,k)*u(k);
end
for j=1:n
X(i,j)=X(i,j)+sigma*v(j);
end
end

%------------------------------------------------------------------------% Algoritmul 1.13


% Algoritmul calculeaza eficient produsul a n matrice de forma
% (In+U(:,i)*V(i,:)), unde i=1:n, folosind procedura XUV
% Apelul: [ X ]=doi(U,V)
%
% Buta Valentin, aprilie, 2006
%------------------------------------------------------------------------[ n,x ]=size(U);
if n=x
error(Matricea U nu este patratica);
end
[ m,y ]=size(V);
if m=y
error(Matricea V nu este patratica);
end
for i=1:n
for j=1:n
X(i,j)=0
end

25

26

SEMINAR 1. CALCUL MATRICEAL ELEMENTAR

24:
25:
26:
27:
28:

X(i,i)=1;
end
for k=1:n
X=Xuv(X,U(:,k),V(k,:));
end

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:

function [ detX ]=determinant(U,V)


%------------------------------------------------------------------------% Algoritmul 1.14
% Functia calculeaza determinantul matricei X egala cu produsul a n elementi
% de tipul In+U(:,k)V(k,:). Algoritmul se bazeaza pe faptul ca datorita formei
% matricei X determinantul putea fi calculat ca produsul a n factori de
% tipul 1+V(k,:)*U(:,k) unde k=1:n.%
% Apelul: [ detX ]=determinant(V,U)
%
% Buta Valentin, aprilie, 2006
%------------------------------------------------------------------------[ n,x ]=size(U);
[ m,y ]=size(V);
if n=x
error(Matricea U nu este patratica);
end
if m=y
error(Matricea V nu este patratica);
end
detX=1;
for k=1:n
nu=1;
for i=1:n
nu=nu+V(k,i)*U(i,k);
end
detX=detX*nu;
end

Seminar 2

Rezolvarea sistemelor liniare


determinate
Acest seminar este dedicat metodelor numerice de rezolvare a sistemelor liniare determinate,
i.e. al sistemelor liniare cu num
arul de ecuatii egal cu numarul necunoscutelor. Aceasta
problem
a apare frecvent n probleme mai complexe iar o rezolvare eficienta si precisa a
sistemelor liniare determinate contribuie esential la eficienta si stabilitatea unor algoritmi
mai complecsi.

2.1

Preliminarii

Fie un sistem liniar de n ecuatii cu n necunoscute. Un astfel de sistem poate fi scris concis
n forma:
Ax = b,
A IRnn , b IRn , x IRn .
Problema este de a calcula vectorul x al necunoscutelor atunci cand A si b sunt date. Problema are o solutie unic
a doar dac
a matricea A este nesingulara, i.e. are o inversa A1 . In
acest caz:
x = A1 b.
Pentru detalii despre teoria sistemelor liniare vezi cursul si bibliografia recomandata. Aici
ne vom concentra asupra unor sfaturi referitoare la metodele numerice pentru rezolvarea
problemei de mai sus. De asemenea, vom arata cum se rezolva cu ajutorul calculatorului
probleme nrudite, cum ar fi calculul determinantului sau al inversei unei matrice.
1. Nu folositi metode binecunoscute cum ar fi Cramer sau formula x = A1 b. Exista
metode mai bune, i.e. metode numerice mai precise si mai eficiente.
2. Cea mai bun
a metod
a de rezolvare a unui sistem liniar triunghiular este substitutia
numeric
a. Dac
a A este o matrice inferior triunghiulara nesingulara, atunci vom folosi
metoda substitutiei nainte. Daca A este o matrice superior triunghiulara nesingulara,
atunci vom folosi metoda substitutiei napoi.

SEMINAR 2. REZOLVAREA SISTEMELOR LINIARE DETERMINATE

3. Cea mai bun


a metod
a de rezolvare a unui sistem general liniar determinat este metoda
reducerii si substitutiei, i.e. n prima faza sistemul este redus la unul sau doua sisteme triunghiulare iar n a dou
a faz
a sistemul(le) triunghiular(e) este(sunt) rezolvat(e)
prin substitutie.
4. Cea mai popular
a schem
a de reducere este eliminarea gaussian
a cu pivotare partial
a
(algoritmul GPP). Cea mai bun
a este eliminarea gaussian
a cu pivotare complet
a (algoritmul GPC). Nu uitati c
a o strategie de pivotare este necesara totdeauna. Fara
pivotare este posibil ca eliminarea gaussiana sa nu poata reduce o matrice data la o
forma triunghiular
a.
5. Eliminarea gaussian
a este echivalenta cu metoda factorizarii LU. Metoda factorizarii
LU trebuie s
a fie utilizat
a mpreun
a cu o strategie de pivotare adecvata.
6. Asa numita metod
a Gauss-Jordan, care reduce un sistem dat la unul diagonal este cu
aproximativ 30% mai putin eficient
a decat eliminarea gaussiana. Asadar eliminarea
gaussian
a este mai bun
a.
7. Cea mai bun
a metod
a de rezolvare a unui sistem liniar simetric pozitiv definit este
folosirea factoriz
arii Cholesky.
8. Nu calculati determinanti si inversele matricelor fara o cerinta explicita. Asemenea
expresii ca = cT A1 b pot fi calculate fara calculul lui A1 .

2.2
2.2.1

Probleme rezolvate
Sisteme triunghiulare si probleme nrudite

Problema 2.1 Fie dou


a matrice nesingulare superior bidiagonalale B, C Rnn (bij =
cij = 0 pentru i > j sau i < j 1), un vector d Rn si matricea A = BC. Dati solutii
eficiente pentru:
a. rezolvarea sistemului liniar Ax = d;
b. calculul determinantului = det A;
c. calculul inversei X = A1 .
Solutie a.Vom analiza dou
a scheme de calcul. a1) Prima este:
1. Se calculeaz
a A = BC
2. Se rezolv
a Ax = d.
Pentru a fi eficient
a acest
a schem
a trebuie sa exploateze faptul ca matricea A are o structura
de matrice superior triunghiular
a band
a de latime 3, i.e. aij = 0 pentu i > j si j > i + 2
(demonstrati!), n calcularea lui A ca si n adaptarea metodei substitutiei napoi pentru
rezolvarea sistemului superior triunghiular Ax = d. Algoritmul este:
1. pentru i = 1 : n
1. pentru j = 1 : n
1. ai,j = 0

2.2. PROBLEME REZOLVATE

2. ai,i = bi,i ci,i


3. dac
ai<n
1. ai,i+1 = bi,i ci,i+1 + bi,i+1 ci+1,i+1
4. dac
a i<n1
1. ai,i+2 = bi,i+1 ci+1,i+2
n
2. xn adn,n
(d

x )

n1,n n
3. xn1 n1
an1,n1
4. pentru i = n 2 : 1 : 1
(d a
x
ai,i+2 xi+2 )
1. xi i i,i+1 i+1
ai,i

Efortul de calcul este de Nf l 10n flopi.


a2) Schema a doua evit
a calcularea explicita a matricei A:
1. Se rezolv
a sistemul superior bidiagonal By = d
2. Se rezolv
a sistemul superior bidiagonal Cx = y.
Adapt
and metoda substitutiei napoi pentru rezolvarea sistemelor superior bidiagonale
rezult
a algoritmul:
n
1. yn bdn,n
2. pentru i = n 1 : 1 : 1
(d b
yi+1 )
1. yi i i,i+1
bi,i
yn
3. xn cnn
4. pentru i = n 1 : 1 : 1
(y c
xi+1 )
1. xi i i,i+1
ci,i

Efortul de calclul in acest caz este de Nop 6n flopi, asadar al doilea algoritm este aproape
de dou
a ori mai eficient dec
at primul.
b. Avem = det A = det B C = det B det C = ni=1 bii cii . Asadar algoritmul este:
1. = 1
2. pentru i = 1 : n
1. = bi,i ci,i
c. Vom prezenta doi algoritmi alternativi.
c1. Primul algoritm se bazeaz
a pe relatia X = A1 = C 1 B 1 si are urmatoarea schema
de calcul:
1. Se calculeaz
a Y = B 1
2. Se calculeaz
a Z = C 1
3. Se calculeaz
a X = ZY .
Asadar, trebuie s
a stim s
a calculam inversa unei matrice superior bidiagonale. Pentru
calcularea ei, vom proceda ca si n cazul superior triunghiular (vezi cursul), i.e. vom rezolva
ecuatia matriceal
a BY = In , care, partitionata pe coloane, devine Byj = ej , j = 1 : n,
aici yj = Y (:, j). Binenteles, Y este o matrice superior triunghiulara si, n concluzie,

SEMINAR 2. REZOLVAREA SISTEMELOR LINIARE DETERMINATE

yj (j + 1 : n) = 0. Este usor de v
azut ca primele j elemente ale lui yj pot fi calculate,
bi,i+1 yi+1,j
n ordine invers
a, cu ajutorul relatiilor yjj = b1jj , yij =
, i = j 1 : 1 : 1.
bii
Daca coloanele lui Y sunt calculate n ordine inversa, atunci Y poate suprascrie B n timpul
calculului. In concluzie, algoritmul este:
1. pentru j = n : 1 : 1
1
1. bj,j yj,j = bj,j
2. pentru i = j 1 : 1 : 1
b
yi+1,j
1. bij yij = i,i+1
bii
Pn
Numarul flopilor necesari pentru a inversa o matrice bidiagonala este: Nf l = j=1 (1 +
2(j 1)) n2 .
Pentru a multiplica
a matrice superior triunghiulare Z and Y vom folosi formula
Pj cele dou
economica xij = k=i zik ykj si faptul c
a produsul este o matrice superior triunghiulara.
Introducand o sintax
a de forma B Y = UBINV(B) pentru calculul inversei unei
maricte superior bidiagonale cu suprascriere, primul algoritm de inversare devine:
1. B Y = UBINV(B)
2. C Z = UBINV(C)
3. pentru i = 1 : n
1. pentru j = 1 : n
1. xij = 0
2. pentru j = i : n
1. pentru k = i : j
2. xij = xij + cik bkj
(1)

Efortul de calcul este de Nf l 2n2 + n3 /6 n3 /6 flopi.


c2. Al doilea algoritm se bazeaz
a pe rezolvarea ecuatiei matriceale BCX = In folosind
schema de calcul:
1. Se rezolv
a ecuatia matriceal
a BY = In
2. Se rezolv
a ecuatia matriceal
a CX = Y
Prima instructiune este echivalent
a cu inversarea lui B si are nevoie de n2 flopi. A
doua instructiune va fi efectuat
a pe coloanele, i.e. vom rezolva sistemele CX(:, j) = Y (:, j),
si tinand cont c
a Y (j + 1 : n, j) = 0 vom avea X(j + 1 : n, j) = 0 (i.e. se stie faptul
ca X este superior triunghiular
a), asadar trebuie sa rezolvam doar sistemele bidiagonale
C(1 : j, 1 : j)X(1 : j, j) = Y (1 : j, j), j = 1 : n. Al doilea algoritm este:
1. B Y = UBINV(B)
2. pentru j = n : 1 : 1
1. pentru i = j + 1 : n
1. xij = 0
b
2. xjj = cjj
jj
3. pentru i = j 1 : 1 : 1
(b c
xi+1,j )
1. xij = ij i,i+1
cii

2.2. PROBLEME REZOLVATE

(2)

Al doilea algoritm necesit


a N f l n2 +

3n2
2

5n2
2

flopi. In concluzie, al doilea algoritm


(1)

este net mai bun dec


at primul: de exemplu, daca n = 3000 atunci Nf l 4.5 109 flopi si
(2)

Nf l 22.5 106 flopi; asadar, n acest caz, primul algoritm necesita un timp de executie de
200 de ori mai mare dec
at al doilea.
Observatie. Compararea celor doi algoritmi precedenti arata ca este mai avantajoasa
rezolvarea sistemelor liniare dec
at calcularea inversei unei matrice. Aceasta recomandare
este valabil
a totdeauna, dup
a cum vom vedea n probleme viitoare.
Problema 2.2 Presupunem c
a matricea nesingulara A Rnn are o factorizare LU si ca
L, U sunt cunoscute. Scrieti un algoritm care sa calculeze elementul (i, j) al matricei A1
in aproximativ (n j)2 + (n i)2 flopi.
Solutie. Matricea A fiind nesingulara, asa vor fi si matricele L, U si
A1 = (LU )1 = U 1 L1 .
In concluzie
A1 (i, j) = eTi A1 ej = eTi U 1 L1 ej = xT y,
aici xT = eTi U 1 = U 1 (i, :) si y = L1 ej = L1 (: .j). Deoarece matricele L1 si U 1 sunt
inferior si, respectiv, superior truiunghiulare, avem x(1 : i1) = 0 si y(1 : j 1) = 0. Pentru
a calcula vectorul x
= x(i : n) si y = y(j : n) este suficient sa rezolvam sistemele liniare:
T
x (i : n)U (i : n, i : n) =[ 1 0 . . . 0 ]

0

L(j : n, j : n)y(j : n) = .

..

0
P
n
Deci, A1 (i, j) = xT y = k=max(i,j) xk yk . Primul sistem liniar poate fi scris n urmatoarea
form
a:

1
0

U T (i : n, i : n)x(i : n) = . ,
..
0
asadar trebuie s
a rezolv
am dou
a sisteme inferior tiunghiulare de grad n i si n j, respectiv
un produs scalar a doi vectori. Prin urmare numarul de flopi necesari sunt: Nf l = (n i)2 +
(n j)2 + 2(n max(i, j)) (n i)2 + (n j)2 .

2.2.2

Eliminarea gaussian
a si probleme nrudite

Problema 2.3 Fie H Rnn o matrice superior Hessenberg nesingulara (hij = 0, pentru
i > j + 1).
a. Dac
a toate submatricele lider principale ale lui H sunt nesingulare, adaptati algoritmul de eliminare gaussian
a pentru rezolvarea sistemului liniar Hx = b, unde b Rn este un
vector; calculati num
arul de operatii.
b. Adaptati algoritmii GP P si LSS GP P pentru aceeasi problema.
c. Adaptati algoritmul Crout pentru calculul factorizarii LU al matricei H.

SEMINAR 2. REZOLVAREA SISTEMELOR LINIARE DETERMINATE

Solutie. Matricele Hessenberg apar n probleme mai complexe cum ar fi calcularea


valorilor proprii si a vectorilor proprii.
a. Este evident c
a multiplicatorii ij vor fi zero pentru i > j + 1. Atunci, eliminarea
gaussiana pentru o matrice Hessenberg va avea forma:
a o matrice superioara Hessenberg H Rnn cu
Algoritmul G HESS. Dat
H(1 : k, 1 : k) nesingulare pentru k = 1 : n 1, algoritmul efectueaza eliminarea
gaussian
a far
a pivotare. Multiplicatorii gaussieni si matricea superior triunghiulara rezultat
a vor suprascrie matricea H.
1. pentru k = 1 : n 1
h
1. hk+1,k k+1,k = k+1,k
hkk
2. pentru j = k + 1 : n
1. hk+1,j hk+1,j k+1,k hkj
Pn1
Acest algoritm necesit
a Nf l = k=1 (1 + 2(n k)) n2 flopi. Vectorul b va fi modificat
n functie de valorile particulare ale multiplicatorilor:
1. pentu k = 1 : n 1
1. bk+1 bk+1 hk+1,k bk
executand 2n flopi. Atunci, un sistem superior triunghiular trebuie rezolvat (cu un plus
de n2 flopi).
b. Pivotarea partial
a nu alterneaz
a structura superioar Hessenberg a matricei (dar
pivotarea complet
a da). La fiecare pas k, pentru a determina pivotul trebuie sa comparam
doar |hkk | si |hk+1,k |. Algoritmul de triunghiularizare prin eliminare gaussiana cu pivotare
partiala a unei matrice superior Hessenberg este:
a o matrice superior Hessenberg H Rnn , alAlgoritmul GP P HESS. Dat
goritmul efectueaz
a eliminarea gaussiana cu pivotare partiala. Multiplicatorii
gaussieni si matricea superior triunghiulara rezultata vor suprascrie matricea H.
Permut
arile sunt stocate n vectorul p.
1. pentru k = 1 : n 1
1. p(k) = k
2. dac
a |hk+1,k | > |hkk |
1. p(k) = k + 1
2. pentru j = k : n
1. hkj hk+1,j
h
3. hk+1,k k+1,k = k+1,k
hkk
4. pentru j = k + 1 : n
1. hk+1,j hk+1,j k+1,k hkj
Introducand sintaxa [H, p] GP P HESS(H) pentru apelul algoritmului de mai sus csi
folosind functiile MATLAB T RIU pentru a extrage partea superior triunghiulara dintr-o
matrice, algoritmul pentru rezolvarea unui sistem liniar Hessenberg devine:

2.2. PROBLEME REZOLVATE

Algoritmul LSS GP P HESS. Fiind data o matrice superior Hessenberg nesingular


a H Rnn si un vector b Rn , algoritmul calculeaza solutia x Rn a
sistemului Hx = b folosind eliminarea gaussiana cu pivotare partiala.
1. [H, p] GP P HESS(H)
2. pentru k = 1 : n 1
1. dac
a p(k) = k + 1
1. bk bk+1
2. bk+1 bk+1 hk+1,k bk
3. x = U T RIS(T RIU (H), b)
Acest algoritm necesit
a Nf l 2n2 flopi (n comparatie cu
fundamental LSS GP P ).

2n3
3

flopi necesari algoritmului

c. Presupunem c
a toate submatricele lider principale ale lui H sunt nesingulare. Algoritmul G HESS calculeaz
a factorizarea LU Doolittle a matricei H. Observam ca L este
inferior bidiagonal
a. Desigur, n factorizarea Crout LU matricea L va fi deasemeni inferior
bidiagonal
a. T
in
and cont de acest lucru si de faptul ca termenii diagonali ai lui U sunt egali
cu 1, din identitatea H = LU va rezulta:
h1j
, j = 2 : n.
pasul 1. l11 = h11 , l21 = h21 si din h1j = l11 u1j avem u1j =
l11
pasul k. Presupun
and ca am calculat primele k 1 coloane ale lui L si primele k 1 linii
ale lui U , din hkk = lk,k1 uk1,k + lkk si hk+1,k = lk+1,k avem lkk = hk,k lk,k1 uk1,k si
lk+1,k = hk+1,k . Deasemeni, din egalitatea hkj = lk,k1 uk1,j + lkk ukj vom obtine ukj =
hkj lk,k1 uk1,j
, j = k + 1 : n.
lkk
In concluzie algoritmul Crout pentru o matrice superior Hessenberg este:
Algoritmul CROU T HESS. Data o matrice superior Hessenberg H Rnn cu
H(1 : k, 1 : k) nesingulare pentru k = 1 : n 1, algoritmul calculeaza o matrice
inferior bidiagonal
a L si o matrice superior triunghiulara unitate U astfel ncat
H = LU . Matricea L suprascrie triunghiul inferioar a lui H iar partea strict
superioar
a a lui U suprascrie triunghiul strict superioar a lui H.
1. pentru j = 2 : n 1
h1j
1. h1j u1j =
h11
2. pentru k = 2 : n
1. hkk lkk = hk,k hk,k1 hk1,k
2. dac
ak=n
1. RETURN
3. pentru j = k + 1 : n
hkj hk,k1 hk1,j
1. hkj ukj =
hkk
Problema 2.4 Elaborati un algoritm pentru rezolvarea ecuatiei matriceale AX = B, unde
A Rnn este nesingular
a si B Rnp .

SEMINAR 2. REZOLVAREA SISTEMELOR LINIARE DETERMINATE

Solutie. Ecuatia matriceal


a AX = B este formata din p sisteme liniare: Axj = bj ,
pentru j = 1 : p, unde xj si bj sunt notatii pentru coloana j din X respectiv B, i.e.
xj = X(:, j), bj = B(:, j). Folosirea algoritmului:
1. pentru j = 1 : p
1. Se rezolv
a Axj = bj folosind LSS GPP
3

nu este o idee bun


a, ntruc
at num
arul de operatii ar fi 2pn
3 . In schimb, GP P poate fi folosit
doar o data pentru a triunghiulariza A, ca n urmatorul algoritm:

1. [M, U, p] = GP P (A)
2. pentru j = 1 : p
1. pentru k = 1 : n 1
1. bkj bp(k),j
2. pentru i = k + 1 : n
1. bij bij uik bkj
2. xj = U T RIS(U, bj )
Numarul operatiilor este

2n3
3

+ O(pn2 ) flopi.

Problema 2.5 Propuneti un algoritm care sa rezolve sistemul liniar Ax = f , unde A


Cnn este nesingular
a si f Cn , folosind numai aritmetica reala.
Solutie. Dac
a not
am A = B + iC, f = g + ih, x = y + iz, aici B, C Rnn si
n
g, h, y, z R , sistemul Ax = f poate fi scris sub forma:

By Cz = g,
Cy + Bz = h,
sau

Du = e,

cu D =

B
C

C
B

R2n2n ,


e=

g
h

R2n ,


u=

y
z

R2n .

In concluzie trebuie s
a rezolv
am un sistem liniar de 2n ecuatii de 2n necunoscute, e.g.
3
3
= 8n3 flopi.
folosind algoritmul GPP care necesit
a (2n)
3
Problema 2.6 Descrieti o variant
a de eliminare gaussiana care introduce zerouri deasupra
diagonalei principale, n ordinea n : 1 : 2, si care produce factorizarea A = U L, unde U
este superior triunghiular
a unitate si L este inferior triunghiulara.
Solutie. Definim o matrice superior triunghiulara elementara (STE) de ordin n si indice
k astfel:

1k

..

k1,k
T

Nk = In nk ek , nk =
.
0

..

.
0

2.2. PROBLEME REZOLVATE

Aceast
a tip de a matrice poate fi folosit pentru a introduce zerouri pe primele k 1 pozitii
ale unui vector dat x cu xk 6= 0. Intradevar, (Nk x)(i) = x(i) ik xk , i = 1 : k 1 si, deci,
daca ik = xi /xk , atunci (Nk x)(i) = 0, i = 1 : k 1. Binenteles (Nk x)(i) = xi , i = k : n.
Daca xk = 0, atunci Nk x = x pentru orice matrice STE Nk .
Este usor de v
azut c
a dac
a A(k : n, k : n) este nesingulara pentru toti k = n : 1 : 1,
atunci exist
a matricele superior triunghiulare elementare Nk astfel ncat matricea
L = N2 N3 Nn1 Nn A
este inferior triunghiular
a. Schema de calcul este,
1. pentru k = n : 1 : 2
1. Se calculeaz
a matricea STE Nk astfel ncat (Nk A)(1 : k 1, k) = 0
2. A Nk A
Ordinea invers
a de aplicare a transformarilor elementare este esentiala pentru a nu modifica zerourile create la pasii anteriori. Algoritmul este:
Algoritmul G0 . (O versiune a eliminarii gaussiene). Data o matrice A Rnn cu
A(k : n, k : n) nesingulare pentru k = n : 1 : 2, algoritmul calculeaza matricea
inferior triunghiular
a L = N2 N3 Nn1 Nn A. Matricea L suprascrie partea
inferioar triunghiular
a a lui A si multiplicatorii gaussieni ik suprascriu partea
strict superior triunghiular
a a matricei A.
1. pentru k = n : 1 : 2
1. pentru i = 1 : k 1
ik
1. aik ik = aakk
2. pentru j = 1 : k 1
1. pentru i = 1 : k 1
1. aij aij ik akj
Algoritmul G0 ofer
a o factorizare UL, i.e. furnizeaza o matrice unitate superior triunghiulara U si una inferior triunghiulara L astfel ncat A = U L. Intradevar, din L =
1
1
N2 N3 Nn1 Nn A rezult
a A = Nn1 Nn1
N21 L = U L, unde U = Nn1 Nn1
N21
este superior triunghiular
a ca un produs de matrice superior triunghiulare. Mai mult,
Nk1 = In + nk eTk si

U=

1
Nn1 Nn1

N21

= In +

n
X
k=2

nk eTk

1 12
0 1
..
..
.
.
0 0
0 0

1,n1
2,n1
..
..
.
.

1n
2n
..
.
n1,n
1

(demonstrati). In concluzie, algoritmul G0 calculeaza factorizarea UL. Efortul de calcul este


3
Nf l 2n3 flops.

10

SEMINAR 2. REZOLVAREA SISTEMELOR LINIARE DETERMINATE

Problema 2.7 Fie u, v Rn doi vectori nenuli si A = In + uv T .


a. Daca A este nesingular
a si b Rn , scrieti un algoritm eficient pentru rezolvarea
sistemului liniar Ax = b.
b. Daca A este nesingular
a, scrieti un algoritm eficient care calculeaza X = A1 .
Solutie. Desigur, putem calcula A aplicand metode cunoscute precum eliminarea gaussiana sau factorizarea LU. Dar probleme speciale necesita deseori solutii speciale. In acest
caz obtinem algoritmi mai eficienti dac
a procedam astfel:
a. Determinantul lui A = In + uv T is 1 + v T u (vezi seminarul 1). Sa multiplicam
Ax = b la stanga cu v T . Vom avea v T x + v T uv T x = v T b. Deoarece A este nesingulara, i.e.
vT b
1 + v T u 6= 0 rezult
a = vT x =
. In concluzie, x = b u. Un algoritm foarte
1 + vT u
eficient care necesit
a doar Nf l 4n flopi, este:
vT b
1 + vT u
2. pentru i = 1 : n
1. xi = bi ui
1. =

b. Daca A este nesingular


a, un algoritm eficient pentru a calcula X = A1 este
urmatoarea schem
a:
1. pentru j = 1 : n
1. Rezolv
a AX(:, j) = ej folosind algoritmul de la punctul a.

Pn
and seama de faptul c
Tin
a v T ej si not
and = 1 + v T u = 1 + i=1 ui vi forma sa detaliata
este:
1. = 1
2. pentru i=1:n
1. = + ui vi
3. pentru j = 1 : n
vj
1. =

2. pentru i = 1 : n
1. X(i, j) = ui
3. X(j, j) = 1 X(j, j)
Algoritmul necesit
a doar Nf l n2 flopi.

2.2.3

Sisteme simetrice pozitiv definite. Factorizarea Cholesky

Problema 2.8 Fie T Rnn o matrice simetrica, tridiagonala, pozitiv definita. Scrieti un
algoritm eficient care calculeaz
a factorizarea Cholesky T = LLT a lui T ;

2.2. PROBLEME REZOLVATE

11

Solutie. Vom proceda ca n cazul general (vezi cursul).


2
Pasul 1. Din egalitatea T = LLT avem: t11 = l11
, t21 = l21 l11 si 0 = li1 l11 , i = 3 : n; n
concluzie

t21
l11 = t11 , l21 =
, li1 = 0, i = 3 : n,
l11
i.e. matricea L este bidiagonal
a n prima sa coloana.
Pasul k. Presupunem c
a am calculat primele k1 coloane ale lui L si ca L este bidiagonala
2
2
n primele k 1 coloane. Din egalitatea T = LLT avem: tkk = lk,k1
+lkk
, tk+1,k = lk+1,k lkk
si 0 = lik lkk , i = k + 2 : n; n concluzie
q
tk+1,k
2
, lk+1,k =
lkk = tkk lk,k1
, lik = 0, i = k + 1 : n,
lkk
i.e. matricea L este bidiagonal
a si n coloana k; prin inductie, L este o matrice inferior
bidiagonal
a.
Algoritmul este:
Algoritm CHOL T RID. Data o matrice simetrica, tridiagonala, pozitiv definita
T Rnn , acest algoritm suprascrie partea inferior triunghiulara cu matricea L
din factorizarea Cholesky T = LLT .

1. t11 l11 = t11


21
2. t21 l21 = tl11
4. pentru k = 2 : nq
1. tkk lkk =

2
tkk lk,k1

2. dac
a k = n atunci stop
t
3. tk+1,k lk+1,k = k+1,k
lkk
Problema 2.9 Dac
a A Rnn este simetrica si pozitiv definita, propuneti un algoritm
pentru calculu factoriz
arii A = U U T , unde U este superior triunghiulara si are toate elementele diagonale pozitive.
Solutie. Este usor de v
azut c
a trebuie nceput cu calculul elementului (n, n) al matricei
superior triunghiulare U si c
a putem calcula U pe coloane n ordine inversa. Vom numerota
pasii de calcul cu num
arul coloanei calculate a matricei U . Pasul n. Din egalitatea A = U U T
2
avem: ann = unn si ain = uin unn , i = 1 : n 1; n concluzie
unn =

ann ,

uin =

ain
, i = 1 : n 1.
unn

Pasul k. Presupunem c
a am
Pncalculat ultimele k + 1 : n coloane
Pn ale lui U . Din egalitatea
A = U U T avem: akk = u2kk + j=k+1 u2kj si aik = uik ukk + j=k+1 uij ukj , i = 1 : k 1; n
concluzie
v
Pn
u
n
X
a

u
ik
j=k+1 uij ukj
ukk = takk
u2kj , uik =
, i = 1 : k.
ukk
j=k+1

Matricea A fiind pozitiv definit


a, argumentele radacinilor patrate sunt pozitive (demonstrati).
Algoritmul este:

12

SEMINAR 2. REZOLVAREA SISTEMELOR LINIARE DETERMINATE


Algoritmul U U T . Dat
a o matrice simetrica A Rnn , acest algoritm stabileste
daca matricea este pozitiv definit
a, n caz afirmativ, suprascrie partea superioara
cu matricea U din factorizarea A = U U T .)
1. dac
a ann 0 atunci
1. Imprim
a (A nu este pozitiv definita)
2. stop

2. ann unn = ann


3. pentru i = 1 : n 1
in
1. ain uin = uann
4. pentru k = n P1 : 1 : 1
n
1. akk j=k+1 u2kj
2. dac
a 0 atunci
1. Imprim
a (A este pozitiv definita)
2. stop

3. akk ukk =
4. dac
a k = 1 atunci stop
5. pentru i = 1 : k 1 P

1. aik uik =

aik

j=k+1

uij ukj

ukk
3

Algoritmul U U T necesit
a aproximativ Nf l = n3 flopi si n plus n extrageri de radacini
2
patrate. Memoria necesar
a este de Mf l = n2 (o matrice simetrica este de obicei stocata n
una din partile sale triunghiulare).

2.3

Probleme propuse

Problema 2.10 Consider


am date matricele H Rnn , nesingulara superior triunghiulara
nn
si R R
, superior triunghiular
a unitate. Propuneti algoritmi eficienti pentru:
a. Rezolvarea sistemului liniar HRx = b, cu b Rn .
b. Cand toate submatricele lider principale ale lui H sunt nesingulare, factorizarea Crout
a lui A = HR poate fi obtinut
a folosind urmatoarele doua scheme:
Schema 1.
1. Se calculeaz
a A = HR.
2. Se calculeaz
a factorizarea Crout a lui A: A = LU .
.
Schema 2.
1. Se calculeaz
a factorizarea Crout a lui H: H = LU

2. Se calculeaz
a U = U R.
Care este mai eficient
a?
Problema 2.11 Propuneti un algoritm eficient pentru a rezolva sistemul liniar Ak x = b,
unde A Rnn este nesingular
a, b Rn si k N, k > 1.


A 0
Problema 2.12 Fie B =
, cu A, R Rnn , nesingulare, R superior triunghiuR A
lara. Factorizarea LU a lui A exist
a si e cunoscuta ca (A = LU ).
U
.
a. Propuneti un algoritm pentru calcularea factorizarii LU a lui B, B = L

2.4. BIBLIOGRAFIE

13

b. Propuneti un algoritm pentru a rezolva sistemul liniar Bx = d, unde d R2n este un


vector dat.
Calculati num
arul de operatii pentru amandoi algoritmi.
2n2n
Problema 2.13 Fie A
o matrice nesingulara cu toate submatricele lider prin R
A1 A2
cipale nesingulare, A =
, cu A1 , A2 , A3 , A4 Rnn and A3 este superior triA3 A4
unghiular
a.
a. Scrieti un algoritm pentru rezolvarea sistemului liniar Ax = b, unde b R2n este un
vector dat.
b. Acelasi lucru, p
astr
and numai ipoteza ca A este nesingulara.

Problema 2.14 Fie A Rnn o matrice nesingulara tridiagonala (aij = 0, pentru i > j +1
or i < j 1).
a. Adaptati algoritmul de eliminare gaussiana pentru acest tip de matrice.
b. Propuneti algoritmul care rezolva Ax = b, cu b Rn .
Problema 2.15 Dac
a A, B Rnn este o matrice nesingulara, propuneti un algoritm care
rezolv
a sistemul liniar (AB)k x = c, unde c Rn .
Problema 2.16 Propuneti o varianta a algoritmului LSS GP P pentru rezolvarea sistemului liniar Ax = b folosind eliminarea gaussiana cu pivotare partiala, far
a a retine multiplicatorii.
Problema 2.17 Dac
a A Rnn este simetrica, propuneti un algoritm pentru a testa daca
matricea A este pozitiv definit
a sau nu.
Problema 2.18 Fie T Rnn o matrice simetrica, tridiagonala, pozitiv definita si matricea T = AAT . Propuneti un algoitm eficient pentru:
a. a rezolva sistemul liniar T x = b, unde b Rn ;
b. calcularea det(T );
c. calcularea inversei lui T .

2.4

Bibliografie

1. B. Jora, B. Dumitrescu, C. Oara, Numerical Methods, UPB, Bucharest, 1995


2. G.W. Stewart, Introduction to Matrix Computations, Academic Press, 1973.
3. G. Golub, Ch. Van Loan, Matrix Computations, 3-rd edition, John Hopkins University Press, 1998.
4. G.W. Stewart, Matrix Algorithms, vol.1: Basic Decompositions, SIAM, 2000.
5. G.W. Stewart, Matrix Algorithms, vol.2: Eigensystems, SIAM, 2002.
6. B. Dumitrescu, C. Popeea, B. Jora, Metode de calcul numeric matriceal. Algoritmi fundamentali, ALL, Bucuresti, 1998.

14

2.5

SEMINAR 2. REZOLVAREA SISTEMELOR LINIARE DETERMINATE

Programe MATLAB

In aceasta sectiune sunt date programele MATLAB pentru implementarea algoritmilor


prezentati n acest seminar. Programele au fost testate si pot fi obtinute de la autorul
lor mentionat n comentariile atasate.

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:

function [ delta ]=determinant(B,C)


%
% Problema calculeaza determinanul unei matrice superior tridiagonala A(nxn).
% (A fiind rezultatul unei inmultiri a doua matrice superior bidiagonale
% B(nxn) si C(nxn)).Ca date de intrare avem cele doua matrice B respectiv C
% care inmultite dau A, iar ca date de iesire avem determinanul notat cu delta.
% Apelul: delta=determinant(B,C)
%
% Dumitru Iulia, aprilie 2006.
%
[ n,m ]=size(B);
%analizam daca matricea e patratica
if n=m
error(Matricea nu e patratica);
end
%analizam daca matricele B si C sunt superior bidiagonale
for i=1:n
for j=i+2:n
if B(i,j)=0
error(Matricea B nu e superior bidiagonala);
end
if C(i,j)=0
error(Matricea C nu e superior bidiagonala);
end
end
for j=1:i-1
if B(i,j)=0
error(Matricea B nu e superior bidiagonala);
end
if C(i,j)=0
error(Matricea C nu e superior bidiagonala);
end
end
end
delta =1;
for i=1:n

2.5. PROGRAME MATLAB

41:
42:

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:

1:
2:
3:
4:

delta = delta *B(i,i)*C(i,i);


end

function [ B ]=UBINV(B);
%
% Algoritmul calculeaza inversa unei matrice patratica
% B(nxn) superior bidiagonala. Inversa suprascrie
% triunghiul superior al matricei B.
% Apelul: B=UBINV(B)
%
%
% Dumitru Iulia, aprilie 2006.
%
[ n,m ]=size(B);
%analizam daca matricea e patratica
if n=m
error(Matricea nu e patratica);
end
for i=1:n
for j=i+2:n
if B(i,j)=0
error(Matricea B nu e superior bidiagonala);
end
end
for j=1:i-1
if B(i,j)=0
error(Matricea B nu e superior bidiagonala);
end
end
end
for j=n:-1:1
B(j,j)=1/B(j,j);
for i=j-1:-1:1
B(i,j)=-B(i,i+1)*Y(i+1,j)/ B(i,i);
end
end

function [ x ]=UBSM1(B,C,d)
%
% Programul calculeaza solutia sistemului liniar Ax=d, unde A=B*C. Ca date
% de intrare avem vectorul d si matricele nesingulare superior bidiagonale

15

16

5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:

SEMINAR 2. REZOLVAREA SISTEMELOR LINIARE DETERMINATE

% B(nxn) respectiv C(nxn) care inmultite dau matricea A(nxn). Pasi de


% rezolvare: intai se calculeaza matricea A superior tridiagonala cu formula
% A=B*C apoi se rezolva sistemul liniar Ax=d.
% Nota: folosim numele de UBSM pentru upper bidiagonal matrix solver
% Apelul: x=UBSM1(B,C,d)
%
% Dumitru Iulia, aprilie 2006.
%
[ n,m ]=size(B);
%analizam daca matricea e patratica
if n=m
error(Matricea nu e patratica);
end
%analizam daca matricele B si C sunt superior bidiagonale
for i=1:n
for j=i+2:n
if B(i,j)=0
error(Matricea B nu e superior bidiagonala);
end
if C(i,j)=0
error(Matricea C nu e superior bidiagonala);
end
end
for j=1:i-1
if B(i,j)=0
error(Matricea B nu e superior bidiagonala);
end
if C(i,j)=0
error(Matricea C nu e superior bidiagonala);
end
end
end
for i=1:n
for j=1:m
A(i,j)=0;
end
A(i,i)=B(i,i)*C(i,i);
if i<n
A(i,i+1)=B(i,i)*C(i,i+1)+B(i,i+1)*C(i+1,i+1);
end
if i<n-1
A(i,i+2)=B(i,i+1)*C(i+1,i+2);
end

2.5. PROGRAME MATLAB

52:
53:
54:
55:
56:
57:

end
x(n)=d(n)/A(n,m);
x(n-1)=(d(n-1)-A(n-1,m)*x(n)) / A(n-1,m-1);
for i=n-2:-1:1
x(i)=(d(i) - A(i,i+1)*x(i+1)- A(i,i+2)*x(i+2))/ A(i,i);
end

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:

function [ x ]=UBSM2(B,C,d)
%
% Problema calculeaza sistemul liniar Ax=d. Ca date de intrare avem
% vectorul d si matricele nesingulare superior bidiagonale B(nxn)
% respectiv C(nxn) care inmultite dau matricea A(nxn). Pasi de rezolvare:
% se inlocuieste A cu B*C in sistem, rezultand B*C*x=d. Notand y=C*x avem
% B*y=d. Algoritmul urmator calculeaza intai y apoi x.
% Apelul: x=UBSM2(B,C,d)
%
% Dumitru Iulia, aprilie 2006.
%
[ n,m ]=size(B);
%analizam daca matricea e patratica
if n=m
error(Matricea nu e patratica);
end
%analizam daca matricele B si C sunt superior bidiagonale
for i=1:n
for j=i+2:n
if B(i,j)=0
error(Matricea B nu e superior bidiagonala);
end
if C(i,j)=0
error(Matricea C nu e superior bidiagonala);
end
end
for j=1:i-1
if B(i,j)=0
error(Matricea B nu e superior bidiagonala);
end
if C(i,j)=0
error(Matricea C nu e superior bidiagonala);
end
end
end

17

18

SEMINAR 2. REZOLVAREA SISTEMELOR LINIARE DETERMINATE

40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:

y(n)=d(n)/B(n,m);
for i=n-1:-1:1
y(i)=(d(i)-B(i,i+1)*y(i+1))/B(i,i);
if B(i,i)==0
error(Matricea nu este nesingulara)
end
end
x(n)=y(n)/C(n,m);
for i=n-1:-1:1
x(i)=(y(i)-C(i,i+1)*x(i+1))/C(i,i);
if C(i,i)==0
error(Matricea nu este nesingulara)
end
end

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:

function [ X ]=UTRIINVa(B,C)
%
% Algoritmul calculeaza inversa unei matrice superior tridiagonale
% patratice A(nxn).Ca date de intrare avem doar matricele superior
% bidiagonale B(nxn) si C(nxn). Matricea A este rezultatul inmultirii
% celor doua matrice. Pasii de calculare ai inversei sunt urmatorii:
% se calculeaza inversa matricei B care se suprascrie in B si inversa
% matricei C care se suprascrie in C. Inversa matricei A este rezultatul
% inmultirii celor doua matrice.
% Apelul: X=UTRIINVa(B,C)
%
% Dumitru Iulia, aprilie 2006.
%[ n,m ]=size(B);
%analizam daca matricea e patratica
if n=m
error(Matricea nu e patratica);
end
%analizam daca matricele B si C sunt superior bidiagonale
for i=1:n
for j=i+2:n
if B(i,j)=0
error(Matricea B nu e superior bidiagonala);
end
if C(i,j)=0
error(Matricea C nu e superior bidiagonala);
end
end

2.5. PROGRAME MATLAB

32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:

for j=1:i-1
if B(i,j)=0
error(Matricea B nu e superior bidiagonala);
end
if C(i,j)=0
error(Matricea C nu e superior bidiagonala);
end
end
end
Y=UBINV(B); %calculeaza inversa matricei B
B=Y;
Z=UBINV(C); %calculeaza inversa matricei C
C=Z;
for i=1:n %efectueaza inmultirea noilor matrice B si C
for j=1:n
X(i,j)=0;
end
for j=i:n
for k=i:j
X(i,j)=X(i,j)+C(i,k)*B(k,j);
end
end
end

function [ X ]=UTINVb(C,B)
%
% Algoritmul calculeaza inversa unei matice superior tridiagonala
% patratica A(nxn).Ca date de intrare avem doar matricele superior
% bidiagonale B(nxn) si C(nxn). Matricea A este rezultatul inmultirii
% celor doua matrice. Pasii de calculare ai inversei sunt urmatorii:
% se rezolva ecuatia maticeala BY=In (se calculeaza practic inversa
% matricei B) apoi ecuatia CX=Y (X reprezinta inversa maticei A).
% In algoritm se foloseste o problema rezolvata anterior: inversa unei
% matrice superior bidiagonala patratica, cu suprascriere (algoritmul UBINV)
% Apelul: X=UTRIINVb(B,C)
%
% Dumitru Iulia, aprilie 2006.
%[ n,m ]=size(B);
%analizam daca matricea e patratica
if n=m
error(Matricea nu e patratica);
end

19

20

22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:

SEMINAR 2. REZOLVAREA SISTEMELOR LINIARE DETERMINATE

%analizam daca matricele B si C sunt superior bidiagonale


for i=1:n
for j=i+2:n
if B(i,j)=0
error(Matricea B nu e superior bidiagonala);
end
if C(i,j)=0
error(Matricea C nu e superior bidiagonala);
end
end
for j=1:i-1
if B(i,j)=0
error(Matricea B nu e superior bidiagonala);
end
if C(i,j)=0
error(Matricea C nu e superior bidiagonala);
end
end
end
Y=UBINV(B);
B=Y;
for j=n:-1:1
for i=j+1:n
X(i,j)=0;
end
X(j,j)=B(j,j)/C(j,j);
if C(j,j)==0
error(Matricea nu este nesingulara)
end
for i=j-1:-1:1
X(i,j)=(B(i,j)-C(i,i+1)*X(i+1,j))/C(i,i);
if C(i,i)==0
error(Matricea nu este nesingulara)
end
end
end

2.5. PROGRAME MATLAB

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:

function [ x ]=UTRIS(U,b)
%
% Fiind data o matrice superior triunghiulara patratica A (nxn) si un
% vector b, algoritmul calculeaza sistemul liniar Ax=b.
% UTRIS=upper triunghiular solver.
% Apelul: x=UTRIS(U,b)
%
% Dumitru Iulia, aprilie 2006.
%[ m,n ] = size(U);
if m=n
% in caz ca nu este o matrice patratica
x = [ ];%x devine o matrice nula
return;
end
if m=length(b)
error(Nu exista solutie pentru);
end
for i=n:-1:1
s = b(i);
if i<n
for k=i+1:n
s = s - U(i,k)*x(k);
end
end
x(i) = s/U(i,i);
if U(i,i)==0
error(Matricea nu este nesingulara)
end
end

function [ H,b,miu ]=G HESS(H,b)


%
% Fiind data o matrice superior Hessenberg nesingulara, patratica (nxnx)
% cu toate submaticele lider principale nesingulare, se cere rezolvarea
% sistemului liniar Hx=b. Algoritmul reprezinta o adaptare a algoritmului
% de eliminare gaussiana fara pivotare. Algoritmul G HESS calculeaza
% factorizarea LU Doolittle a matricei H.
% Apelul: H,b,miu=G HESS(H,b)
%
% Dumitru Iulia, aprilie 2006.
%

21

22

12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:

SEMINAR 2. REZOLVAREA SISTEMELOR LINIARE DETERMINATE

[ n,m ]=size(H);
%analizam daca matricea e patratica
if n=m
error(Matricea nu e patratica);
end
%analizam daca matricea este superior Hessenberg
for i=3:n
for j=1:i-2
if H(i,j)=0
error(Matricea H nu e superior Hessenberg)
end
end
end
for k=1:n-1 %Multiplicatorii gaussieni si matricea
miu(k+1,k)=H(k+1,k)/H(k,k); %superior triunghiulara rezultata vor
if H(k,k)==0 %suprascrie matricea H.
error(Matricea nu este nesingulara)
end
H(k+1,k)=miu(k+1,k);
for j=k+1:n
H(k+1,j)=H(k+1,j)-miu(k+1,k)*H(k,j);
end
b(k+1)=b(k+1)-H(k+1,k)*b(k);
end

function [ H ]=CROUT HESS(H)


%% Data o matrice superior Hessenberg H nesingulara patratica (nxn)
% algoritmul calculeaza o matrice inferior bidiagonala L si o matrice
% superior unitate triunghiulara U astfel incat H=L*U. Matricea L este
% suprascrisa partii inferior triunghiulare a matricei A(inclusiv diagonala)
% iar matricea U este suprascrisa partii superior triunghiulare a
% matricei A(fara diagonala).
% Apelul: H=CROUT HESS(H)
%
% Dumitru Iulia, aprilie 2006.
%[ n,m ]=size(H);
%analizam daca matricea e patratica
if n=m

2.5. PROGRAME MATLAB

18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:

error(Matricea nu e patratica);
end
%analizam daca matricea este superior Hessenberg
for i=3:n
for j=1:i-2
if H(i,j)=0
error(Matricea H nu e superior Hessenberg)
end
end
end
for i=1:n
U(i,i)=1;
end
for j=2:n-1
U(1,j)=H(1,j)/H(1,1);
H(1,j)=U(1,j);
end
for k=2:n
L(k,k)=H(k,k)-H(k,k-1)*H(k-1,k);
H(k,k)=L(k,k);
if k=n
for j=k+1:n
U(k,j)=(H(k,j)-H(k,k-1)*H(k-1,j))/H(k,k);
if H(k,k)==0
error(Matricea nu este nesingulara)
end
H(k,j)=U(k,j)
end
end
end

function [ H,p ]=GPP HESS(H)


%
% Data o matrice superior Hassenberg H patratica(de ordin n), algoritmul
% efectueaza eliminarea gaussiana cu pivotare partiala. Multiplicatorii
% gaussieni si matricea superior triunghiulara rezultata vor suprascrie
% matricea H.
% Apelul: H,p=GPP HESS(H)
%
% Dumitru Iulia, aprilie 2006.
%-

23

24

12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:

1:
2:
3:
4:
5:
6:
7:

SEMINAR 2. REZOLVAREA SISTEMELOR LINIARE DETERMINATE

[ n,m ]=size(H);
%analizam daca matricea e patratica
if n=m
error(Matricea nu e patratica);
end
%analizam daca matricea este superior Hessenberg
for i=3:n
for j=1:i-2
if H(i,j)=0
error(Matricea H nu e superior Hessenberg)
end
end
end
for k=1:n-1
p(k)=k;
max = abs( H(k,k) );
if abs( H(k+1,k) ) >max
max = abs( H(k+1,k) );
end
p(k)=k+1;
for j=k:n
temp = H(k,j);
H(k,j) = H(k+1,j);
H(k+1,j) = temp;
end
miu(k+1,k) = H(k+1,k)/H(k,k);
if H(k,k)==0
error(Matricea nu este nesingulara)
end
H(k+1,k)=miu(k+1,k);
for j = k+1:n
H(k+1,j)=H(k+1,j)-miu(k+1,k)*H(k,j);
end
end

function [ x ]=LSS GPP HESS(H,b)


%% Fiind data o matrice superior Hassenberg nesingulara H patratica (de
% ordin n) si un vector b, algoritmul calculeaza solutia x a sistemului
% Hx=b folosind eliminarea gaussiana cu pivotare partiala.
% Apelul: x=LSS GPP HESS(H,b)
%

2.5. PROGRAME MATLAB

8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:

1:
2:
3:
4:
5:
6:
7:
8:

% Dumitru Iulia, aprilie 2006.


%[ n,m ]=size(H);
%analizam daca matricea e patratica
if n=m
error(Matricea nu e patratica);
end
%analizam daca matricea este superior Hessenberg
for i=3:n
for j=1:i-2
if H(i,j)=0
error(Matricea H nu e superior Hessenberg)
end
end
end
%conditionam ca numarul liniilor vectorului b sa fie egal cu numarul coloanelor
%matricei H
if m=length(b)
error(Nu exista solutie pentru);
end
[ H,p ]=GPP HESS(H);
for k=1:n-1
if p(k)==k+1
temp=b(k);
b(k)=b(k+1);
b(k+1)=temp;
end
b(k+1)=b(k+1)-H(k+1,k)*b(k);
end
x=UTRIS(triu(H),b)

function [ A,miu,p ]=GPP(A)


%
% Data o matrice patratica A(nxn), algoritmul suprascrie triunghiul
% superior al lui A cu matricea superior triunchiulara U. Triunghiul
% strict inferior al lui A este suprascris de multiplicatorii gaussieni
% miu. In vectorul p se memoreaza intregii i(k), care definesc permutarile
% de linii.
% Apelul: A,miu,p=GPP(A)

25

26

9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:

SEMINAR 2. REZOLVAREA SISTEMELOR LINIARE DETERMINATE

%
% Dumitru Iulia, aprilie 2006.
%

[ n,m ] = size(A);
%analizam daca matricea e patratica
if n=m
error(Matricea nu e patratica);
end
for k=1:n-1
ik = k;
max = abs( A(k,k) );
for i=k:n
if abs( A(i,k) ) >max
ik = i;
max = abs( A(i,k) );
end
end
p(k)=ik;
for j=k:n
temp = A(k,j);
A(k,j) = A(ik,j);
A(ik,j) = temp;
end
for i=k+1:n
miu(i,k) = A(i,k)/A(k,k);
if A(k,k)==0
error(Matricea nu este nesingulara)
end
A(i,k)=miu(i,k);
end
for i=k+1:n
for j = k+1:n
A(i,j)=A(i,j)-miu(i,k)*A(k,j);
end
end
end

2.5. PROGRAME MATLAB

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:

function [ X ]=MMS(A,B)
%% Fiind date doua matrice: A (nxn) si B (nxp) se cere sa se rezolve ecuatia
% matriceala A*X=B.
% Apelul: X=MMS(A,B)
%
% Dumitru Iulia, aprilie 2003.
%[ n,m ]=size(A);
%analizam daca matricea e patratica
if n=m
error(Matricea A nu e patratica);
end
[ n,p ]=size(B);
[ M,U,p ]=GPP(A);
for j=1:p
for k=1:n-1
B(k,j)=B(p(k),j);
for i=k+1:n
B(i,j)=B(i,j)-U(i,k)*B(k,j);
end
X(j)=UTRIS(U,B(j));
end
end

function [ A ]=G prim(A)


%% Data fiind matricea patratica A(nxn) algoritmul calculeaza matricea
% L pe care o suprascrie partii inferioare triunghiulare a lui A si
% multiplicatorii miu pe care ii suprascriu partii superior triunghiulare
% a lui A. Practic alogritmul ofera o factorizare UL (furnizeaza o
% matrice unitate superior triunghiulara U si una inferior triunghiulara
% L astefl incat A=U*L)
% Apelul: A=G prim(A)
%
% Dumitru Iulia, aprilie 2006.
%[ n,m ]=size(A);

27

28

15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:

SEMINAR 2. REZOLVAREA SISTEMELOR LINIARE DETERMINATE

%analizam daca matricea e patratica


if n=m
error(Matricea nu e patratica);
end
for k=n:-1:2
for i=1:k-1
miu(i,k)=A(i,k)/A(k,k);
if H(k,k)==0
error(Matricea nu este nesingulara)
end
A(i,k)=miu(i,k);
end
for j=1:k-1
for i=1:k-1
A(i,j)=A(i,j)-miu(i,k)*A(k,j);
end
end
end

function [ T ]=CHOL TRID(T)


%
% Fiind data o matrice T patratica (de ordin n), tridiagonala, simetrica
% pozitiv definita, nesingulara care satisface relatia: T=L*L transpus
% algoritmul suprascrie partea inferior triunghiulara a matricei T cu
% matricea L. Obs: matricea L rezulta prin identificare a fi inferior
% bidiagonala.
% Apelul: T=CHOL TRID(T)
%
% Dumitru Iulia, aprilie 2006.
%
[ n,m ]=size(T);
%analizam daca matricea e patratica
if n=m
error(Matricea nu e patratica);
end
for i=1:n-2
for j=i+2:n
if T(i,j)=0
error(Matricea nu e tridiagonala)
end
end

2.5. PROGRAME MATLAB

26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:

end

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:

function [ A ]=UUT(A)
%
% Fiind data o matrice simetrica si pozitiv definita, propuneti un algoritm
% pentru factorizarea A=U*U transpus. Aici U este superior triunghiulara si
% are elemente pozitive pe diagonala. Practic, algoritmul stabileste daca
% matricea A este pozitiv definita, in caz afirmativ, suprascrie partea
% superioara cu matricea U.
% Apelul: A=UUT(A)
%
% Dumitru Iulia, aprilie 2006.
%

for i=3:n
for j=1:i-2
if T(i,j)=0
error(Matricea nu e tridiagonala)
end
end
end
for i=1:n-1
if T(i,i+1)=T(i+1,i)
error(Matricea nu este simetrica)
end
end
L(1,1)=sqrt(T(1,1));
T(1,1)=L(1,1);
L(2,1)=T(2,1)/L(1,1);
T(2,1)=L(2,1);
for k=2:n
L(k,k)=sqrt(T(k,k)-L(k,k-1)*L(k,k-1));
T(k,k)=L(k,k);
if k=n
L(k+1,k)=T(k+1,k)/L(k,k);
if L(k,k)==0
error(Matricea nu este nesingulara)
end
T(k+1,k)=L(k+1,k);
end
end

[ n,m ]=size(A);

29

30

15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:

SEMINAR 2. REZOLVAREA SISTEMELOR LINIARE DETERMINATE

%analizam daca matricea e patratica


if n=m
error(Matricea nu e patratica);
end
for i=1:n
for j=n:-1:i+1
if A(i,j)=A(j,i)
error(Matricea nu este simetrica)
end
end
end
if A(n,n)<=0,
error(A nu este pozitiv definita);
end
U(n,n)=sqrt(A(n,n));
A(n,n)=U(n,n);
for i=1:n-1
U(i,n)=A(i,n)/U(n,n);
A(i,n)=U(i,n);
end
for k=n-1:-1:1
s=0;
for j=k+1:n
s=s+U(k,j)*U(k,j);
end
alpha=A(k,k)-s;
if alpha <= 0
error(A nu este pozitiv definita);
end
U(k,k)=sqrt(alpha);
A(k,k)=U(k,k);
if k1
for i=1:k-1
suma=0;
for j=k+1:n
suma=suma+U(i,j)*U(k,j);
end
U(i,k)=(A(i,k)-suma)/U(k,k);
if U(k,k)==0
error(Matricea nu este nesingulara)
end
A(i,k)=U(i,k);
end
end
end

2.5. PROGRAME MATLAB

62:
63:

31

Seminar 3

Problema celor mai mici p


atrate
Acest seminar este dedicat metodelor numerice pentru rezolvarea unei probleme numerice
foarte importante nt
alnit
a n multe aplicatii, asa numita problema a celor mai mici patrate.
Problema celor mai mici p
atrate consta, n mare, n minimizarea normei euclidiene a unui
vector n functie de unele variabile. Cand tipul dependentei este unul liniar avem de-a face
cu problema liniar
a a celor mai mici patrate.

3.1

Preliminarii

Fie un sistem de m ecuatii liniare cu n necunoscute si m > n. Un astfel de sistem poate fi


scris ntr-o form
a concis
a:
Ax = b,

A IRmn ,

b IRm ,

x IRn .

In general acest sistem nu are solutie. Problema celor mai mici patrate (CMMP) consta
n gasirea vectorului x Rn astfel ncat kb Axk sa fie minim, unde A Rmn si b
Rm sunt date si k k este norma euclidiana. Daca un astfel de vector exista, atunci el
este numit (pseudo-)solutia sistemului supradeterminat Ax = b. In geometria euclidiana a
spatiului liniar IRm problema CMMP este strans legata de conceptul de ortogonalitate. Intradev
ar, dac
a x este solutia CMMP, atunci kb Ax k este distanta minima ntre punctul
definit de c
atre vectorul b si punctele subspatiului ImA si aceasta distanta este definita pe
perpendiculara la ImA, vezi fig. 3.1.
Dac
a A are coloane independente atunci solutia CMMP este
x = A# b = (AT A)1 AT b,
unde A# = (AT A)1 AT este o invers
a la st
anga numita pseudo-inversa Moore-Penrose a lui
A. Ca si n cazul determinat, aceasta formula nu este recomandata pentru calculul lui x. Cea
mai bun
a metod
a se bazeaz
a pe transformarile ortogonale care sunt singurele transformari
ce conserv
a ortogonalitatea si norma euclidiana. Asemenea transformari pot reduce problema CMMP la rezolvarea unui sistem liniar superior triunghiular. Pentru detalii referitoare
la problema CMMP a se vedea cursul si bibliografia. Aici vom insista asupra unor recomand
ari privitoare la metodele numerice pentru rezolvarea problemei mai sus mentionate.
De asemenea, vom ar
ata cum se pot rezolva pe calculator niste probleme nrudite, cum ar
fi calculul bazelor ortogonale pentru subspatii liniare ale spatiului vectorial Rm .


SEMINAR 3. PROBLEMA CELOR MAI MICI PATRATE

COC
6
 C
b
C b Ax
C

C

bAx
C

C


1

 Ax
o C
S

S C
X
X
XXX S C
Ax XX
z
X
SC
6

S = ImA

T = S
Figure 3.1: Ilustrarea geometrica a problemei celor mai mici patrate.

1. Nu folositi formula de mai sus x = (AT A)1 AT b pentru a calcula pseudo-solutia


sistemelor liniare supradeterminate. De asemenea, nu folositi rezolvarea asa numitului
sistem normal de ecuatii AT Ax = AT b; exista metode mai bune, i.e. metode numerice
mai eficiente si mai precise pentru rezolvarea problemei CMMP.
2. Cea mai bun
a metod
a pentru rezolvarea unui sistem liniar supradeterminat este reducerea sa la un sistem triunghiular prin folosirea transformarilor; transformarile ortogonale p
astreaz
a norma euclidian
a si, astfel, si solutia CMMP.
3. In mod normal, transform
arile ortogonale sunt construite ca o secventa de transformari
ortogonale elementare; exist
a dou
a tipuri de transformari ortogonale elementare: reflectori (transform
ari Householder) si rotatii (transformari Givens).
4. Procedura principal
a folosit
a pentru rezolvarea problemei CMMP este triangularizarea
ortogonal
a (vezi algoritmul ORTHT) a matricei coeficientilor A.
5. Triangularizarea ortogonal
a a unei matrice A duce imediat la asa numita factorizare
QR a lui A, i.e. A = Q R unde Q este ortogonala iar R este superior triunghiulara.
6. Fie a1 , a2 , , an o baz
a a subspatiului liniar S IRm si definim matricea A =
a1 a2 an
IRmn . Daca A = Q R este factorizarea QR a matricei A, atunci coloanele lui Q(:, 1 : n) formeaza o baza ortonormala a subspatiului
S = ImA. De asemenea, coloanele matricei Q(:, n + 1 : m) formeaza o baza ortonormala a subspatiului T = KerAT , complementul ortonormal al lui S n IRm (vezi
problema rezolvat
a 3.9).
7. Nu calculati pseudo-inversele matricelor fara o cerinta explicita de a face acest lucru.
Astfel de expresii precum = cT A# b pot fi calculate fara calculul lui A# .
8. Cand un sistem liniar are mai multe necunoscute decat ecuatii (m < n) se numeste
sistem liniar subdeterminat. In general, un sistem liniar subdeterminat Ax = b are un
numar infinit de solutii. A rezolva un astfel de sistem n sensul CMMP nseamna a

3.2. PROBLEME REZOLVATE

x
3



v6







6


Q

w-

Q
Q
Q
Q
Q

v ?

x
3



v6

Q
s
Q
y = Ux



u6



w
Q
Q
Q
Q
Q
Q
v ?
Q
s
Q
y = Ux
b)

a)

Figure 3.2: Interpretarea geometrica a unei reflectii ortogonale n IR2 (a) si IR3 (b).

calcula solutia normal


a, care este solutia de norma euclidiana minima, i.e. x astfel
nc
at
kx k =

min kxk.
Ax = b

Dac
a A are linii independente atunci solutia normala este unica si este data de
x = AT (A AT )1 b,
unde A+ = AT (A AT )1 este o invers
a la dreapta numita pseudo-inversa normal
a a lui A. Desigur, aceasta formula nu este o metoda numerica buna pentru a
calcula solutia normal
a. Metodele recomandate se bazeaza pe transformari ortogonale
si reducerea sistemului la unul inferior triunghiular (vezi cursul pentru detalii).

3.2
3.2.1

Probleme rezolvate
Transform
ari ortogonale

Problema 3.1 Fie un reflector elementar U = Im 2uuT , kuk = 1. Fie x IRm un vector
dat si x = v + w o descompunere a lui x, unde v este coliniar cu u (i.e. v = u) si w este
ortogonal fat
a de u (i.e. uT w = 0). Aratati ca U x = v +w si dati o interpretare geometrica
numelui reflector pentru matricea U .
Rezolvare. Avem U x = x 2uuT x = v + w 2uuT (v + w) = v 2uuT v + w 2uuT w =
v 2uuT v + w. Dac
a = 0, i.e. v = 0, atunci U x = w = v + w. Daca 6= 0, atunci
uT v = uT u = and 2uuT v = 2 v = 2v si, astfel, U x = v + w. Interpretarea geometrica
este aceea c
a vectorul y = U x este imagine (i.e. o reflectie) a lui x ntr-o (hiper)oglinda
(definit
a de subspatiul liniar perpendicular pe vectorul u). Vezi fig. 3.2 pentru m = 2 si
m = 3.


SEMINAR 3. PROBLEMA CELOR MAI MICI PATRATE

Problema 3.2 a. Ar
atati c
a orice matrice ortogonala triunghiulara este diagonala.
b. Aratati c
a orice matrice ortogonal
a poate fi scrisa ca un produs de reflectori elementari.
Rezolvare. a. Dac
a o matrice ortogonala Q IRmm este superior triunghiulara, atunci
T
inversa sa este Q si este superior triunghiulara. Deci, Q este n acelasi timp superior si
inferior triunghiular
a, deci Q este diagonala. Cazul n care Q este inferior triunghiulara
se trateaza similar. In mod evident o matrice diagonala ortogonala are elementele diagonale egale cu 1 sau cu 1. b. Fie Q o matrice ortogonala si sa-i aplicam algoritmul de
triunghiularizare ortogonal
a ORTHT. Vom avea
Um1 U2 U1 Q = R
unde Uk este un reflector elementar sau Uk = Im . Evident, putem alege reflectori elementari
folositi astfel nc
at toti R(k, k) s
a fie pozitivi. Dar matricea superior triunghiulara R este
ortogonala ca un produs de matrice ortogonale. Conform punctului a) R este diagonala si
are elemente diagonale pozitive, i.e. R = Im . Astfel,
1
Q = U11 U21 Um1
R = U1 U2 Um1 ,

i.e. Q este un produs de reflectori elementari. In concluzie, orice transformare ortogonala


poate fi exprimat
a ca o secvent
a de reflectori elementari, i.e. o secventa de transformari
Householder.
Problema 3.3 a. Se consider
a vectorul x Rn cu norma euclidiana egala cu 1. Gasiti
n(n1)
o matrice Y R
cu coloane ortogonale (i.e. care sa satisfaca Y T Y = In1 ), astfel
T
ncat x Y = 0 (i.e. matricea [ x Y ] s
a fie ortogonala).
b. Se consider
a doi vectori ortogonali dati x1 , x2 Rn de norma euclidiana unitate.
Gasiti o matrice Y Rn(n2) cu coloane ortogonale (i.e. care sa satisfaca Y T Y = In2 )
astfel ncat xT1 Y = 0 si xT2 Y = 0(i.e. matricea [ x1 x2 Y ] sa fie ortogonala).
c. Generalizati cele dou
a proceduri de mai sus prin calcului unei matrice de completare
Y Rn(nk) cu coloane ortogonale la o matrice data cu coloane ortogonale X IRnk ,
i.e. astfel nc
at matricea [ X Y ] s
a fie ortogonala.
Rezolvare. a. Vom construi o matrice ortogonala Q avand x1 ca prima sa coloana.
Astfel, solutia va fi Y = Q(:, 2 : n). Fie U1 = In uuT / reflectorul care introduce zerouri
pe pozitiile 2 : n ale lui x, i.e. pentru care (U1 x)(2 : n) = 0. Dupa cum este cunoscut (vezi
cursul) un astfel de reflector poate fi definit de catre vectorul u cu u1 = P
x1 kxk = x1 1,
n
u(2 : n) = x(2 : n) si = kuk2 /2. Vom avea uT x = (x1 1)x1 + i=2 x2i = 1 x1

Pn
1
1
(x1 1)2 + i=2 x2i = 1 x1 . Prin urmare U1 x = x uuT x =
si = uT u/2 =
2

1
T

x
(1 x1 )u = e1 si deci x = U1 e1 = U1 e1 . In concluzie, matricea Q este reflectorul
1 x1
U1 mai sus definit si matricea Y = Q(:, 2 : n) poate fi calculata dupa cum urmeaza:
1. u1 = x1 1
2. = 1 x1
3. pentru i = 2 : n

3.2. PROBLEME REZOLVATE

1. ui = xi
4. pentru i = 1 : n
1. pentru j = 1 : n 1
1. Y (i, j) = ui uj+1 /
5. pentru i = 2 : n
1. Y (i, i 1) = 1 + Y (i, i 1)
b. Dup
a cum am procedat mai sus, vom construi o matrice ortogonala Q avand x1
si x2 ca primele sale coloane. Deci solutia va fi Y = Q(:, 3 : n). Definim matricea
R0
X = [ x1 x2 ] si fie X = QR factorizarea QR a lui X, unde R =
cu R0 IR22 este
0
superior triunghiular
a. Dar RT R = R0T R0 = X T QQT X = I2 . Astfel R0 va fi atat superior
triunghiular
a c
at si ortogonal
a, i.e. diagonala (vezi problema 2) cu elementele diagonale 1.
Prin urmare R = [ e1 e2 ]. In mod evident, toate coloanele lui Y = Q( : , 3 : n) sunt
ortogonale cu x1 si x2 iar Y poate fi calculata dupa cum urmeaza:
1. Se calculeaza factorizarea QR a matricei X, i.e. X = [ x1 x2 ] = QR
2. Y = Q( : , 3 : n)
c. Schema de calcul de mai sus poate fi aplicata oricarei matrice X IRnk cu coloanele
ortogonale. Dac
a X = QR este factorizarea QR a lui X, atunci R = [ e1 e2 ek ].
Prin urmare Y = Q( : , k + 1 : n).
Problema 3.4 Fie x, y Rn doi vectori cu norme euclidiene egale, kxk = kyk = .
Construiti algoritmi pentru:
a. calculul unei matrice ortogonale Q Rnn astfel ncat Qx = y. b. calculul unei
matrice ortogonale W Rnn astfel ncat W xy.
Rezolvare. a. Fie U1 si V1 doi reflectori astfel ncat U1 x = sign(x1 )e1 si V1 y =
sign(y1 )e1 . Prin urmare, sign(x1 )U1 x = sign(y1 )V1 y = e1 si sign(y1 )sign(x1 )V1 U1 x =
y, unde Q = sign(y1 )sign(x1 )V1 U1 este n mod evident o matrice ortogonala. Pentru calculul
V1 U1 fie U1 = In uuT / si V1 = In vv T /. Vom avea, V1 U1 = (In vv T /)(In uuT /) =
In uuT / vv T / + uv T , where = v T u/(). Un algoritm pentru calculul lui Q este:
pPn
2
1. =
i=1 xi
2. = sign(x1 )
3. u1 = x1 +
4. = u1
5. pentru i = 2 : n
1. ui = xi
6. = sign(y1 )
7. v1 = y1 +
8. = v1
9. pentru i = 2 : n
1. vi P
= yi
n
10. = ( i=1 vi ui )/()
11. pentru i = 1 : n
1. pentru j = 1 : n


SEMINAR 3. PROBLEMA CELOR MAI MICI PATRATE

1. Q(i, j) = ui uj / vi vj / + vi uj
2. Q(i, i) = 1 + Q(i, i)
b. Prima coloan
a a lui V1 are aceeasi directie cu y (V1 e1 = y/). Consideram o alta
coloana w a matricei V1 si fie vectorul z = w; este evident ca zy si kxk = kzk = . Atunci,
folosim algoritmul de la punctul a pentru calculul unei matrice ortogonale W astfel ncat
W x = z; prin urmare W xy.

3.2.2

Triangularizarea ortogonal
a. Factorizarea QR.

Problema 3.5 Fie H R(n+1)n o matrice superior Hessenberg (hij = 0 pentru i >
j + 1). Construiti un algoritm eficient pentru triangularizarea ortogonala a lui H. Folositi
transformarile Householder si Givens si comparati cele doua versiuni. Calculati factorizarea
QR a unei matrice superior Hessenberg.
Rezolvare. Adaptarea algoritmului ORT HT pentru triangularizarea ortogonala a lui
H cu reflectori Householder Uk = I (uk uTk )/k ia n considerare faptul ca la fiecare pas
trebuie sa transform
am n zero un singur element subdiagonal. Prin urmare, vectorul uk ce
l defineste pe Uk va avea forma uTk = [0 . . . ukk uk+1,k 0 . . . 0]. Algoritmul este:
1. pentru k = 1 : n q
1. sign(hkk ) h2kk + h2k+1,k
2.
3.
4.
5.
6.

ukk hkk +
uk+1,k hk+1,k
k ukk
hkk rkk =
pentru j = k + 1 : n
1. (ukk hkj + uk+1,k hk+1,j )/k
2. hkj hkj ukk
2. hk+1,j hk+1,j uk+1,k

Numarul de flopi necesar pentru acest algoritm este de Nf l 4n2 si este nevoie si de
n extrageri de radical. Algoritmul de mai sus calculeaza matricea superior triunghiulara
R = Un U2 U1 ZH. Prin urmare factorizarea QR a lui H va fi H = U1 U2 Un R = QR,
unde Q = U1 U2 Un . Pentru calculul lui Q putem folosi una dintre urmatoarele doua
scheme de calcul:
1. Q = In+1
2. pentru k = 1 : n
1. Q QUk
sau
1. Q = In+1
2. pentru k = n : 1 : 1
1. Q Uk Q

3.2. PROBLEME REZOLVATE

care trebuie s
a exploateze structura superioara Hessenberg a lui Q (de demonstrat).
Folosind sintaxa [U, beta] = ORT HT H(H) pentru algoritmul de triangularizare a unei
matrice superior Hessenberg si prima schema de calcul, factorizarea QR a lui H poate fi
calculat
a prin urm
atorul algoritm.
1. [U, beta] = ORT HT H(H)
2. pentru i = 1 : n + 1
1. pentru j = 1 : n + 1
1. qij = 0
2. qii = 1
2. pentru k = 1 : n
1. pentru i = 1 : k + 1
1. = (qik ukk + qi,k+1 uk+1,k )/k
2. qik qik ukk
3. qi,k+1 qi,k+1 uk,k+1
Num
arul suplimentar necesar de flopi este de Nf l 4n2 .
Desigur, problema poate fi rezolvata si prin folosirea rotatiilor Givens. In mod evident
la fiecare pas va fi folosit
a o singura rotatie pentru a elimina unicul element subdiagonal
nenul. Prin urmare, urm
atorul algoritm va calcula matricea superior triunghiulara: R =
Pn,n+1 P23 P12 H.
1. for k = 1q
:n
1. h2kk + h2k+1,k
2.
3.
4.
5.

ck hkk /
sk hk+1,k /
hkk rkk =
hk+1,k6.=pentru
0
j =k+1:n
1. ck hkj + sk hk+1,j
2. hk+1,j sk hkj + ck hk+1,j
3. hkj

Num
arul de flopi necesar acestui al doilea algoritm este de Nf l 3n2 si n extrageri de
radical. Asadar, a doua variant
a este mai buna (situatia inversa se ntalneste n cazul
matricelor generale).
Factorizarea QR a lui H bazata pe algoritmul de mai sus va calcula n plus matricea
T T
T
P23 Pn,n+1
. Folosind sintaxa [c, s, R] = ORT HT H ROT (H) pentru algoritmul
Q = P12
de triangularizare a unei matrice superior Hessenberg cu rotatii si schema de calcul
1. Q = In+1
2. pentru k = 1 : n
T
1. Q QPk,k+1
factorizarea QR a lui H poate fi calculata cu ajutorul urmatorului algoritm:
1. [c, s, R] = ORT HT H ROT (H)
2. pentru i = 1 : n + 1


SEMINAR 3. PROBLEMA CELOR MAI MICI PATRATE

1. pentru j = 1 : n + 1
1. qij = 0
2. qii = 1
2. pentru k = 1 : n
1. pentru i = 1 : k + 1
1. = qik ck + qi,k+1 sk
2. qi,k+1 qik sk + qi,k+1 ck
3. qi,k
Numarul suplimentar necesar de flopi este de Nf l 3n2 .
Problema 3.6 Fie A n Rmn , m > n, o matrice de rang n a carei factorizare QR este
cunoscuta (A = QR, unde matricele Q Rmm si R Rmn sunt cunoscute).
a. Fie A = [A z], cu z Rm un vector dat. Construiti un algoritm eficient pentru

calculul factoriz
arii QR a lui A.
 T 
w
b. Fie A =
, cu w Rn un vector dat. Aratati ca toate coloanele lui A sunt
A

liniar independente si construiti un algoritm pentru calculul factorizarii QR a lui A.


Rezolvare. a. Fie B = QT A = [QT A QT z] = [R y] Rm(n+1) . B este deja
superior triunghiular
a n primele sale n coloane, i.e. n afara ultimei sale coloane y = QT z.
mm
Fie Un R
reflectorul Householder pentru care (Un y)i = 0, pentru i > n. Atunci,
este superior triunghiulara; Un QT A = R
implica faptul ca A = QUn R

Un B = [R Un y ] = R

si, prin urmare, Q = QUn . Astfel putem calcula Q cu ajutorul urmatoarei scheme
1.
2.
3.

y = QT z
Se calculeaz
a reflectorul Un Rmm astfel ncat (Un y)(n + 1 : m) = 0

Q = QUn

Detaliile sunt l
asate studentului.
b. Daca matricea A nu ar avea
independente atunci ar exista un vector
 coloanele
 T liniar

wT
w x

nenul x astfel nc
at Ax =
x=
= 0, i.e. Ax = 0, i.e. rangul lui A este mai
A
Ax


1 0
. Atunci,
mic decat n. Contradictie. S
a definim acum matricea ortogonala Z =
0 QT
matricea

 T   T 
1 0
w
w
H = Z A =
=
0 QT
QR
R

va fi superior Hessenberg. Factorizarea QR H


 = QR a acestei matrice poate fi calculat
 a ca
1
0
1
0
T
R
=Q
R,
unde Q
=
si
n problema 3.5. Prin urmare, A = Z H =
Q
Q
0 Q
0 Q
=R
definesc factorizarea QR a lui A.
Detaliile si scrierea algoritmului formal sunt lasate
R
n sarcina studentului.
Problema 3.7 Fie A IRmn o matrice data. Scrieti un algoritm eficient pentru calculul
unei matrice ortogonale V astfel nc
at V A = L sa fie inferior triunghiulara (trapezoidala)

3.2. PROBLEME REZOLVATE

@
@
0

@
@

k+mn

@
k+mn

@
@

@
@

@
@
@

@
@

@
@

@
k

@
k
a)

b)

Figure 3.3: Matricea inferior triunghiulara (trapezoidala) mn, relativ la diagonala sud-est,
cu m > n (a) and m < n (b).

relativ la diagonala care se sf


arseste n coltul din dreapta-jos al matricei A (i.e. elementele
acestei diagonale sunt A(i, j) cu i j = m n) care va fi numita n continuare diagonala
sud-est, vezi fig.3.3. In acest context calculati asa numita factorizare QL a lui A, i.e. o
matrice ortogonal
a Q si o matrice inferior triunghiulara (trapezoidala) (relativ la diagonala
sud-est) L astfel nc
at A = Q L.
Rezolvare. Pentru a rezolva aceasta problema avem nevoie de asa numitii reflectori
modificati care pot s
a introduc
a zerouri pe primele pozitii ale unui vector dat. Un reflector
modificat de ordin m si indice k este definit prin

v1k
..
.

vkk
mm
T

IRm , k = kvk k2 /2.


Vk = Im vk vk /k IR
, vk =

0
.
..
0
Se observ
a usor c
a dac
a x IRm este un vector dat cu = kx(1 : k)k =
6 0 si
vkk = xk ,

vik = xi , i = k 1 : 1 : 1,

atunci k = vkk si
y = Vk x are

y(1 : k 1) = 0, yk = (), y(k + 1 : m) = x(k + 1 : m).

Semnul lui este ales astfel nc


at n calculul lui vkk operatia sa fie o adunare nu o scadere.
Acum putem introduce zerouri n A deasupra diagonalei sud-est. Pentru a pastra zerourile introduse n coloanele anterioare trebuie sa desfasuram procesul de calcul n ordinea
invers
a a coloanelor, i.e. calcul
and
A L = Vs Vs+1 Vm A
unde s = max(1, n m + 2) + m n, precum n urmatoarea schema de calcul:


SEMINAR 3. PROBLEMA CELOR MAI MICI PATRATE

10

1. p = max(1, n m + 2)
2. pentru k = n : 1 : p
1. Se calculeaz
a reflectorul modificat Vk+mn Rmm astfel ncat
(Vk+mn A)(1 : k + m n 1) = 0
2. A Vk+mn A.
La pasul curent k din schema de mai sus, instructiunea 2.2
lasa coloanele > k neschimbate,
coloana k este transformat
a n zerouri deasupra diagonalei sud-est si elementul k +
m n, k al diagonalei sud-est devine = kA(1 : k + m n)k,
coloanele j < k devin
T
A(: .j) Vk+mn A(:, j) = (Im vk+mn vk+mn
/k+mn )A(:, j) = A(:, j) vk+mn ,

unde
=

T
vk+mn
A(:

j)/k+mn =

k+mn
X

!
vi,k+mn aij

/k+mn ;

i=1

fiind modificate doar primele k m + n elemente ale coloanei k.


Prin urmare, putem detalia schema de calcul de mai sus pentru a obtine urmatorul algoritm
pentru triangularizarea inferioar
a a unei matrici date A de dimensiune m n. Matricea
inferior triunghiular
a L suprascrie matricea A. Pentru claritate, vectorii v vor fi stocati
ntr-o matrice V si scalarii ntr-un vector b.
1. p = max(1, n m + 2)
2. pentru k = n : 1 : p
1. q = k + m np
Pq
2
2. = sign(aqk )
i=1 aik
3. vqk = aqk +
4. pentru i = 1 : q 1
1. vik = aik
5. bq q = vqk
6. aqk =
7. pentru i = q 1 : 1 : 1
1. aik = 0
8. pentru j P
=1:k1
q
1. = ( i=1 viq aij ) /q
2. pentru i = 1 : q
1. aij aij viq
Efortul de calcul necesar algoritmului de mai sus este de Nf l 2mn2 2n3 /3 si n
extrageri de radical c
and m > n si de Nf l si m 1 extrageri de radical atunci cand
n < m. Daca m = n efortul de calcul este acelasi cu cel al algoritmului ORT HT .
Pentru calculul factoriz
arii QL este nevoie de acumularea transformarilor. Din L =
Vs Vs+1 Vm A avem
A = Vm Vm1 Vs L = QL, unde Q = Vm Vm1 Vs .

3.2. PROBLEME REZOLVATE

11

Introducem sintaxa [V, b, L] = ORT HT L(A) pentru algoritmul de mai sus si calculam
matricea ortogonal
a Q cu ajutorul schemei:
1. Q = Im
2. pentru k = s : m
1. Q Vk Q
Factorizarea QL este calculat
a cu ajutorul urmatorului algoritm:
1. [V, b, L] = ORT HT L(A)
2. pentru i = 1 : m
1. pentru j = 1 : m
1. qij = 0
2. qii = 1
3. s = max(1, n m + 2) + m n
4. for k = s : m
1. pentru j = 1 : k

Pk
1. =
v
q
/k
ik
ij
i=1
2. pentru i = 1 : k
1. qij qij vik
Calculul matricei Q necesit
a suplimentar Nf l 43 (m3 s3 ) flopi.
Observatie. Reducerea ortogonala de mai sus la o forma inferior triunghiulara (relativa la
diagonala sud-est) si factorizarea QL corespunzatoare pot rezolva toate problemele CMMP,
fiind o alternativ
a de aproximativ acelasi cost la metodele prezentate n curs (vezi problema
3.20).
Problema 3.8 Fie A IRmn o matrice monica si A = Q R factorizarea sa QR.
Demonstrati c
a: coloanele matricei Q0 = Q(:, 1 : n) Rmn formeaza o baza ortogonala pentru ImA si coloanele matricei Q00 = Q(:, n + 1 : m) Rm(mn) formeaza o baza
ortogonal
a pentru subspatiul KerAT .
Rezolvare. Prin definitie ImA = {y IRm | x IRn a.i. y = Ax}. Pentru a demonstra
ca coloanele lui Q0 = Q(:, 1 : n) Rmn formeaza o baza ortogonala pentru ImA vom arata
ca ImA =ImQ0 demonstr
and c
a ImA ImQ0 si ImQ0 ImA. Intr-adevar, factorizarea QR
poate fi scris
a:
 0 


R
A = Q R = Q0 Q00
= Q0 R0
0
unde matricea superior triunghiulara R0 IRnn este nesingulara datorita faptului ca A
este monic
a. Pentru toti y ImA avem y = Ax = Q0 R0 x = Q0 z, i.e. y ImQ0 . Prin urmare
ImA ImQ0 . Invers, pentru toti y ImQ0 avem y = Q0 x = Q0 R0 (R0 )1 x = A(R0 )1 x = Az,
i.e. y ImA. Astfel ImQ0 ImA.
Prin definitie KerAT = {y IRm | AT y = 0 }. Pentru a demonstra ca coloanele lui
00
Q = Q(:, n + 1 : m) Rm(mn) formeaza o baza ortogonala pentru KerAT vom arata ca
00
00
KerAT =ImQ0 ar
at
and c
a KerAT ImQ
KerAT . Pentru toti y KerAT avem
 0Tsi ImQ



Q
y = R0T Q0T y = 0. Dar R0 este nesingulara
AT y = 0, i.e. RT QT y = R0T 0
Q00T

12

SEMINAR 3. PROBLEMA CELOR MAI MICI PATRATE

si, deci, Q0T y = 0, i.e. y KerQ0T = ImQ00 . Prin urmare KerAT ImQ00 . Altfel, daca
y ImQ00 , atunci y KerQ0T , i.e. Q0T y = 0. Deci, R0T Q0T y = RT QT y = AT y = 0, i.e.
y KerAT . Astfel ImQ00 KerAT . Demonstratia este completa.

3.2.3

Rezolvarea sistemelor liniare supradeterminate

Problema 3.9 Fie un sistem cu m ecuatii si o necunoscuta a = b, unde a, b IRm sunt


date. Rezolvati acest sistem folosind a) reflectori, b) rotatii, c) pseudo-inversa. Dati o
interpretare geometric
a pentru cazul n care m = 2.
Rezolvare. a) Este suficient un singur reflector elementar U1 astfel ncat U1 a = e1 .
Atunci solutia CMMP va fi = (U1 b)(1)/. Algoritmul este:
pPm
2
1. sign(a1 )
i=1 ai
2. u1 = a1 +
3. = u1
4. pentru i = 2 : m
1. ui = ai
5. =
Pm
u i bi
b1 u1 i=1

6. =

Numarul de flopi necesar pentru algoritmul de mai sus este de Nf l 4m si o singura


extragere de radical.
b) Pentru a triangulariza matricea a avem nevoie de o secventa de m 1 rotatii,
P1,m P13 P12 a = e1 .
Dupa aceea trebuie s
a aplic
am aceste rotatii vectorului b si n final solutia CMMP va fi
= b1 /. Algoritmul este:
1. pentru kp= 2 : m
1. a21 + a2k
2. c a1 /
3. s ak /
4. a1
5. ak 0
6. b1
7. b1 cb1 + sbk
8. bk s + cbk
2. = b1 /
Acest al doilea algoritm are nevoie de Nf l 11m flopi si m 1 extrageri de radical, mult
mai mult dec
at primul.

c) In acest caz particular formula


Pm
ai bi
aT b
= (aT a)1 aT b = T = Pi=1
m
2
a a
i=1 ai

3.2. PROBLEME REZOLVATE

13

6
}
 AKZ
Z
b A Z
A Z ba


Im a
Z
A



Z
 ba A
Z
*

A



A
a


*








 a
 a 


*










Figure 3.4: Interpretarea geometrica a problemei CMMP pentru m = 2 si n = 1.

poate fi aplicat
a cu succes, av
and nevoie doar de Nf l 4m flopi.
Interpretarea geometric
a este data n figura 3.4 si exprima faptul cunoscut ca solutia
CMMP A minimizeaz
a lungimea euclidiana a vectorului b a, i.e.
||b a A || = minIR ||b a||
.
Problema 3.10 Fie H R(n+1)n o matrice monica superior Hessenberg data (hij = 0
for i > j + 1) si b Rn+1 un vector dat. Construiti un algoritm eficient pentru rezolvarea
sistemului liniar supradeterminat Hx = b.
Rezolvare. Vom folosi algoritmul ORT H H ROT (vezi problema rezolvata 3.5) pentru
reducerea rezolv
arii sistemului supradeterminat Hx = b la rezolvarea unui sistem determinat superior triunghiular. Detali
and transformarile ortogonale ale vectorului b si folosind
U T RIS pentru rezolvarea unui sistem superior triunghiular, algoritmul va fi:
1. [ c, s, R] = ORT H H ROT (H)
2. pentru k = 1 : n
1. bk
2. bk ck bk + sk bk+1
3. bk+1 sk + ck bk+1
3. x = U T RIS(R(1 : n, :), b(1 : n))
Efortul de calcul este de Nf l 4n2 flopi si n extrageri de radical.

3.2.4

Rezolvarea sistemelor liniare subdeterminate

Problema 3.11 Fie o ecuatie liniara cu n > 1 necunoscute


a1 x1 + a2 x2 + . . . + an xn = ,


SEMINAR 3. PROBLEMA CELOR MAI MICI PATRATE

14

sau, intr-o form


a concis
a, aT x = , unde a IRn si IR sunt date. Rezolvati aceasta
ecuatie in sensul CMMP folosind: a) reflectori, b) rotatii, c) pseudo-inversa. Dati o interpretare geometric
a pentru m = 2.
Rezolvare. a) Este suficient un singur reflector elementar U1 astfel incat U1 a = e1
(vezi problema 3.9 pentru algoritm), i.e. aT U1 = eT1 . Ecuatia aT x = poate fi scrisa ca
aT U1 U1 x = si devine eT1 y = , unde y = U1 x. Solutia normala, i.e. solutia de norma

euclidiana minim
a, a acestei ultime ecuatii este, evident, y = e1 . Atunci solutia de norma

euclidiana minim
a a ecuatiei initiale este
x = U1 y =

uuT

uu1
U1 e1 = (In
)e1 = (e1
).

u1
,=
si = algoritmul va fi:

pPn
2
sign(a1 )
i=1 ai
u1 = a1 +
= u1
for i = 2 : n
1. ui = ai
=
u1
=

=
x1 = (1 u1 )
pentru i = 2 : n
1. xi = ui

Definind scalarii =
1.
2.
3.
4.
5.
6.
7.
8.
9.

Numarul de flopi necesari acestui algoritm este de Nf l 3n si de o extragere de radical.


b) Precum n problema 3.9, vom folosi secventa P12 , P13 , . . . P1,n de n 1 rotatii plane,
T T
T
astfel ncat P1,n P13 P12 a = e1 or aT P12
P13 P1,n
= eT1 . Ca n cazul anterior, ecuatia
T
a x = poate fi scris
a
T T
T
aT P12
P13 P1,n
P1,n P13 P12 x =

si devine eT1 y = , unde y = P1,n P13 P12 x. Solutia de norma euclidiana minima a acestei

ultime ecuatii este, n mod evident, y = e1 . Solutia de norma euclidiana minima pentru

prima ecuatie va fi
T T
T T
T
T
x = P12
P13 P1,n
y = P12
P13 P1,n
e1 .

Algoritmul este:
1. pentru kp= 2 : n
1. a21 + a2k
2. ck a1 /
3. sk ak /

3.2. PROBLEME REZOLVATE

15




T
 x + Kera







 


 KeraT
 x




 AK



 xA



A



A 
A

 A


A

A a
AU

Figure 3.5: Interpretarea geometrica a solutiei normale pentru m = 1 si n = 2.

4. a1
5. ak 0

2. x1 =

3. pentru i = 2 : n
1. xi = 0
4. pentru k = n : 1 : 2
1. = x1
2. x1 = ck ck x1 sk xk
3. xk sk + ck xk
Acest al doilea algoritm necesita Nf l 11n flopi si n 1 extrageri de radical, mult mai
mult dec
at primul. Prin urmare nu este recomandat.

c) In acest caz particular, formula


x = a# = a(aT a)1 ,

i.e.

xi =

ai
,
aT a

i=1:n

poate fi aplicat
a cu succes prin algoritmul:

1. = Pn
2
i=1 ai
2. pentru i = 1 : n
1. xi = ai
avand nevoie de numai Nf l 3n flopi.
Interpretarea geometric
a a solutiei normale pentru cazul n care n = este data n fig.
3.5, unde x IR2 este o solutie arbitrara, x + Ker aT este setul complet de solutii iar x este
solutia normal
a.
Problema CMMP pentru rezolvarea sistemelor liniare supradeterminate Ax = b consta
n minimizarea functiei g(x) = kAx bk2 iar problema CMMP pentru rezolvarea sistemelor


SEMINAR 3. PROBLEMA CELOR MAI MICI PATRATE

16

liniare nedeterminate Ax = b const


a in minimizarea functiei h(x) = kxk2 cu restrictiile
Ax = b. Sa combin
am cele dou
a functii n problema urmatoare.
Problema 3.12 Fie A IRmn si b IRm date si sa consideram functia patratica
f : IRn IR+ ,

f (x) = kAx bk2 + kxk2 .

Aratati ca f are un minim unic n x si construiti un algoritm pentru calculul sau si al lui
= f (x ).
Rezolvare. Functia

2
m
n
X
X

f (x) = kb Axk2 + kxk2 =


aij xj bi + x2i

i=1

j=1

este continua si diferentiabil


a. Punctele de extrem trebuie sa satisfaca relatia
f (x)
= 0,
xk

k = 1 : n.

Dar

n
n
n
X
f (x) X f (x) X
=
2
aij xj bi
aij xj bi + 2xk =
xk
x
k
i=1
j=1
j=1

n
X
i=1

2aik

n
X

aij xj bi + 2xk

k = 1 : n,

j=1

i.e. punctele de extrem x trebuie s


a satisfaca sistemul liniar
(AT A + I)x = AT b.
Matricea AT A + I fiind pozitiv definit
a (de demonstrat) este nesingulara, astfel posibilul
punct de extrem este unic. Prin calculul celei de-a doua diferentiale se poate observa usor ca
solutia x = (AT A + In )1 AT b a sistemului liniar de mai sus este ntr-adevar unicul punct
de minim al lui f . Valoarea minim
a a lui f este
= f (x ) = kAx bk2 + kx k2 = kA(AT A + In )1 AT b bk2 + k(AT A + In )1 AT bk2
Pentru calculul lui x o metod
a direct
a este:
1. B = AT A + I
2. d = AT b
3. Se calculeaz
a factorizarea Cholesky B = LLT
a lui4.B y = LT RIS(L, d)
5. x = U T RIS(LT , y).

3.3. PROBLEME PROPUSE

17

O metod
a mai bun
a const
a n a observa ca





 A
A
B = AT A + I = AT In
= C T C,
C=
IR(m+n)n ,
In
In
 
 

 b
b
AT b = AT In
= C T d,
d=
IRm+n ,
0
0
unde matricea C este n mod evident una monica. Deci x este unica (pseudo-)solutie
CMMP a sistemului liniar supra determinat Cx = d care poate fi rezolvat prin metode
standard (desigur, exploatarea formei specifice a matricei C este insistent recomandata).
Detaliile sunt l
asate n sarcina studentilor.

3.3

Probleme propuse


x1
x2

Problema 3.13 Fie un vector dat x =


n planul IR2 .


uuT
u1
definit
a. Pentru un vector dat u =
IR2 calculati reflectorul U = I2 2
u2
kuk
de catre ele si vectorul y = U x. Apoi, calculati un vector u astfel ncat y2 = 0 si desenati
vectorii x, u si y. Dati o interpretare geometrica celor doua desene.



c s
b. Pentru un num
ar real c < 1 dat fie s = 1 c2 si consideram rotatia P =

 s c
5
si vectorul y = P x. Calculati c astfel ncat y2 = 0. Pentru vectorul x =
cu c = 1/2
12
desenati vectorii x si y. Dati o interpretare geometrica celor doua desene.
Problema 3.14 Rezolvati n sens CMMP urmatoarele doua sisteme liniare supradeterminate de 3 ecuatii si o necunoscut
a

3 = 7
6 = 14
4 = 7 ,
4 = 7 .

12 = 10
12 = 10
Explicati de ce cele dou
a (pseudo-)solutii sunt diferite.
Problema 3.15 Fie A IRmm o matrice data si u IRm un vector dat. Considerand
uuT
construiti un algoritm eficient pentru calculul matricei A
reflectorul U = Im 2
kuk2
B = U AU .
Problema 3.16
a.

 Adaptati algoritmul original de triangularizare ORT HT pentru maA1
tricea A =
, unde A1 Rnn este superior triunghiulara si A2 R(mn)n . b.
A2
Aceeasi problem
a n cazul n care si A2 este superior triunghiulara.
Problema 3.17 Fie A IRmn o matrice cu m < n. Calculati o triangularizare ortogonala
la dreapta, i.e. o matrice ortogonala V IRnn astfel ncat matricea L = AV sa fie inferior
triunghiular
a. Folosind acest rezultat, calculati factorizarea LQ a lui A, i.e. calculati o
matrice inferior triunghiular
a L si o matrice ortogonala Q astfel ncat A = LQ.


SEMINAR 3. PROBLEMA CELOR MAI MICI PATRATE

18

Problema 3.18 Fie a, b Rn doi vectori necoliniari. Construiti un algoritm pentru calculul proiectiei lui b pe directia lui a.
Problema 3.19 Fie dat
a matricea A Rmn de rang maximal. a. Construiti algoritmi
eficienti pentru calculul bazei ortogonale pentru subspatiile liniare ImA IRm , KerAT
IRm , ImAT IRn si KerA IRn .
b. Daca, n plus, sunt dati si vectorii b IRm si c IRn , construiti algoritmi eficienti
pentru calculul proiectiilor ortogonale ale lui b pe ImA , KerAT si pentru proiectiile lui c pe
ImAT , KerA.
Problema 3.20 Fie A Rmn o matrice data si b IRm un vector dat. Construiti algoritmi eficienti pentru rezolvarea problemei CMMP folosind factorizarea QL (vezi problema
rezolvata 3.7).

3.4

Bibliografie

1. B. Jora, B. Dumitrescu, C. Oar


a, Numerical Methods, UPB, Bucharest, 1995.
2. G.W. Stewart, Introduction to Matrix Computations, Academic Press, 1973.
3. G. Golub, Ch. Van Loan, Matrix Computations, 3-rd edition, John Hopkins University Press, 1998.
4. G.W. Stewart, Matrix Algorithms, vol.1: Basic Decompositions, SIAM, 1999.
5. G.W. Stewart, Matrix Algorithms, vol.2: Eigensystems, SIAM, 2001.
6. B. Dumitrescu, C. Popeea, B. Jora, Metode de calcul numeric matriceal. Algoritmi fundamentali, ALL, Bucuresti, 1998.

3.5. PROGRAME MATLAB

3.5

19

Programe MATLAB

In aceast
a sectiune sunt date programele MATLAB pentru implementarea algoritmilor
prezentati n acest seminar. Programele au fost testate si pot fi obtinute de la autorul
lor mentionat n comentariile atasate.

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:

Problema 3.4
function [ Q ]=p34(x,y)
%%Acesta este un algoritm pentru calculul matricei Q
%din problema 3.4.
%Primeste ca date de intrare vectorii x si y cu norme euclidiene
%egale.
%Qx=y
%Apelul:
% [ Q ]=p34(x,y)
%Stamatescu Grigore Mai 2006
%if norm(x)=norm(y),
error(Cei doi vectori au norme euclidiene distincte!);
end
ro=0; gamma=0; beta=0; sigma=0; tau=0; s=0;
n=length(x);
for i=1:n
ro=ro+x(i)2;
end
ro=sqrt(ro);
sigma=sign(x(1))*ro;
u(1)=x(1)+sigma;
beta=u(1)*sigma;
for i=2:n
u(i)=x(i);
end
sigma=sign(y(1))*ro;
v(1)=y(1)+sigma;
gamma=v(1)*sigma;
for i=2:n
v(i)=y(i);
end
for i=1:n
s=s+v(i)*u(i);
end
tau=s/(beta*gamma);
for i=1:n
for j=1:n


SEMINAR 3. PROBLEMA CELOR MAI MICI PATRATE

20

40:
41:
42:
43:

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:

Q(i,j)=-u(i)*u(j)/beta - v(i)*v(j)/gamma + tau*v(i)*u(j);


end
Q(i,i)=1+Q(i,i);
end

function [ U,beta,R ]= ORTHT H(H)


%%Algoritmul calculeaza matricea R a factorizarii QR a matricei
%superior Hessenberg H folosind transformarile Householder.
%Apelul:
% [ U,beta,R ]=ORTHT H(H)
%Stamatescu Grigore, Mai 2006
%[ m,n ]=size(H);
if m=n+1,
error(Matricea trebuie sa fie de dimensiune (n+1)x n!);
end
for i=1:m
for j=1:n
if i>j+1,
if H(i,j)=0,
error(Matricea nu este superior Hessenberg);
end
end
end
end
for k=1:n
sigma= sign(H(k,k))*sqrt( H(k,k)H(k,k) + H(k+1,k)*H(k+1,k) );
U(k,k)=H(k,k) + sigma;
U(k+1,k)=H(k+1,k);
beta(k)=U(k,k)*sigma;
R(k,k)=-sigma;
H(k,k)=R(k,k);
H(k+1,k)=0;
R(k+1,k)=0;
for j=k+1:n
tau=(U(k,k)*H(k,j) + U(k+1,k)*H(k+1,j))/beta(k);
H(k,j)=H(k,j)-tau*U(k,k);
R(k,j)=H(k,j);
H(k+1,j)=H(k+1,j)-tau*U(k+1,k);
R(k+1,j)=H(k+1,j);
end
end

3.5. PROGRAME MATLAB

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:

function [ Q ]=QR1(H)
%%Calculam matricea Q a factorizarii QR pentru matricea
%superioara Hessenberg H.
%Se folosesc transformarile Householder.
%Apel:
% [ Q ]=QR1(H)
%Stamatescu Grigore, Mai 2006
%
tau=0;
[ U,beta,R ]=ORTHT H(H);
[ m,n ]=size(H);
for i=1:n+1
for j=1:n+1
Q(i,j)=0;
end
Q(i,i)=1;
end
for k=1:n
for i=1:k+1
tau = (Q(i,k)*U(k,k) + Q(i,k+1)*U(k+1,k))/beta(k);
Q(i,k)=Q(i,k)-tau * U(k,k);
Q(i,k+1)=Q(i,k+1)-tau * U(k+1,k);
end
end

function [ c,s,R ]= ORTHT H ROT(H)


%
%Alogritmul calculeaza matricea superior triunghiulara R
%a factorizarii QR a mtricei H cu ajutorul rotatiilor
%Givens.
%Apelul:
% [ c,s,R ]= ORTHT H ROT(H)
%Stamatescu Grigore, Mai 2006
%[ m,n ]=size(H);
if m=n+1,
error(Matricea trebuie sa fie de dimensiune (n+1)x n!);
end
for i=1:m
for j=1:n
if i>j+1,
if H(i,j)=0,

21


SEMINAR 3. PROBLEMA CELOR MAI MICI PATRATE

22

19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:

error(Matricea nu este superior Hessenberg);


end
end
end
end
for k=1:n
ro=sqrt(H(k,k)*H(k,k)+H(k+1,k)*H(k+1,k));
c(k)=H(k,k)/ro;
s(k)=H(k+1,k)/ro;
R(k,k)=ro;
H(k,k)=R(k,k);
H(k+1,k)=0;
R(k+1,k)=0;
for j=k+1:n
tau=c(k)*H(k,j)+s(k)*H(k+1,j);
H(k+1,j)=-s(k)*H(k,j)+c(k)*H(k+1,j);
R(k+1,j)=H(k+1,j);
H(k,j)=tau;
R(k,j)=tau;
end
end

function [ Q ]= QR2(H)
%
%Alogritmul calculeaza factorizarea QR a matricei
%H superior Hessenberg folosind algoritmul de
%triangularizare cu rotatii.
%Apelul:
% Q= QR2(H)
%Stamatescu Grigore, Mai 2006
%
[ m,n ]=size(H);
if m=n+1,
error(Matricea trebuie sa fie de dimensiune (n+1)x n!);
end
for i=1:m
for j=1:n
if i>j+1,
if H(i,j)=0,
error(Matricea nu este superior Hessenberg);
end
end
end
end

3.5. PROGRAME MATLAB

24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:

[ c,s,R ]=ORTHT H ROT(H);


for i=1:n+1
for j=1:n+1
Q(i,j)=0;
end
Q(i,i)=1;
end
for k=1:n
for i=1:k+1
tau=Q(i,k)*c(k)+Q(i,k+1)*s(k);
Q(i,k+1)=-Q(i,k)*s(k)+Q(i,k+1)*c(k);
Q(i,k)=tau;
end
end

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:

function [ V,b,A ]= ORTHT L(A)


%
%Algoritmul realizeaza triangularizarea inferioara a unei
%matrice. Matricea inferior triunghiulara va suprascrie
%matricea A.
%Apelul:
% [ V,b,A ]=ORTHT L(A)
%Stamatescu Grigore, Mai 2006
%
[ m,n ]=size(A);
p=1;
if n-m+2>1,
p=n-m+2;
end
for k=n:-1:p
q=k+m-n;
suma=0;
for i=1:q
suma=suma+A(i,k)*A(i,k);
end
sigma=sign(A(q,k))*sqrt(suma);
V(q,k)=A(q,k)+sigma;
for i=1:q-1
V(i,k)=A(i,k);
end
beta(q)=V(q,k)*sigma;
b(q)=beta(q);
A(q,k)=sigma;
for i=q-1:-1:1
A(i,k)=0;
end

23


SEMINAR 3. PROBLEMA CELOR MAI MICI PATRATE

24

32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:

for j=1:k-1
s=0;
for i=1:q
s=s+V(i,j)*A(i,j);
end
tau=s/beta(q);
for i=1:q
A(i,j)=A(i,j)-tau*V(i,j);
end
end
end

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:

function [ x ]= p310(H,b)
%
%Algoritmul calculeaza solutia sistemului liniar supradeterminat
%Hx=b.
%(Rezolvarea problemei 3.10)
%Apelul:
% x= p310(H,b)
%Stamatescu Grigore, Mai 2006
%
[ m,n ]=size(H);
if m=n+1,
error(Matricea trebuie sa fie de dimensiune (n+1)x n!);
end
t=length(b);
if m=n+1,
error(Vectorul b trebuie sa fie de lungime n+1!);
end
for i=1:m
for j=1:n
if i>j+1,
if H(i,j)=0,
error(Matricea nu este superior Hessenberg);
end
end
end
end
[ c,s,R ]=ORTHT H ROT(H);
for k=1:n
tau=b(k);
b(k)=c(k)*b(k)+s(k)*b(k+1);
b(k+1)=-s(k)*tau+c(k)*b(k+1);
end
x=UTRIS(R(1:n,:),b(1:n));

3.5. PROGRAME MATLAB

Problema 3.9 a
function [ xi ]=p39a(a,b)
%
%Acest algoritm calculeaza folosind reflectori
%solutia xi a sistemului a*xi=b de m ecuatii si
%o necunoscuta. (Problema 3.9. subpunctul a)
%a,b sunt dati.
%Apelul:
% [ xi ]=p39a(a,b)
%Stamatescu Grigore, Mai 2006
%
m=length(a); n=length(b);

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:

sigma=0; beta=0; ro=0; s=0;


for i=1:m
s=s+a(i)2;
end
sigma=sign(a(1))*sqrt(s);
u(1)=a(1)+sigma;
beta=u(1)*sigma;
for i=2:m
u(i)=a(i);
end
ro=-sigma;
s=0;
for i=1:n
s=s+u(i)*b(i);
end
xi=[ b(1)-u(1)*s/beta ]/ro;

1:
2:
3:
4:
5:
6:
7:
8:
9:

Problema 3.9 b
function [ xi ]=p39b(a,b)
%
%Acest algoritm calculeaza folosind rotatii
%solutia xi a sistemului a*xi=b de m ecuatii si
%o necunoscuta. (Problema 3.9. subpunctul b)
%a,b sunt dati.
%Apelul:
% [ xi ]=p39b(a,b)
%Stamatescu Grigore, Mai 2006

%analizam daca vectorii au aceeasi dimensiune


if n=m
error(Vectorii trebuie sa aiba aceeasi dimensiune!);
end

25

26

10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:

SEMINAR 3. PROBLEMA CELOR MAI MICI PATRATE

%
m=length(a); n=length(b);
%analizam daca vectorii au aceeasi dimensiune
if n=m
error(Vectorii trebuie sa aiba aceeasi dimensiune!);
end
ro=0;tau=0;
for k=2:m
ro=sqrt(a(1)2 + a(k)2);
c=a(1)/ro;
s=a(k)/ro;
a(1)=ro;
a(k)=0;
tau=b(1);
b(1)=c*b(1)+s*b(k);
b(k)=-s*tau+c*b(k);
end
xi=b(1)/ro;

Problema 3.11 a
function [ x ]=p311a(a,y)
%
%Acest algoritm calculeaza folosind reflectori
%solutia x a ecuatiei liniare cu n>1 necunoscute
%(Problema 3.11. subpunctul a)
%Primeste ca date de intrare vectorul a si scalarul y.
%Apelul:
% [ x ]=p311a(a,y)
%Stamatescu Grigore, Mai 2006
%
n=length(a);
suma=0;
for i=1:n
suma= suma+a(i)2;
end
sigma=sign(a(1))*sqrt(suma);
u(1)=a(1)+sigma;
beta=u(1)*sigma;
for i=2:n
u(i)=a(i);
end
ro=-sigma;
tau=y/ro;

3.5. PROGRAME MATLAB

25:
26:
27:
28:
29:
30:

miu=u(1)/beta;
niu=tau*miu;
x(1)=tau*(1-u(1)*miu);
for i=2:n
x(i)=-niu*u(i);
end

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:

Problema 3.11 b
function [ x ]=p311b(a,y)
%
%Acest algoritm calculeaza folosind rotatii
%solutia x a ecuatiei liniare cu n>1 necunoscute
%(Problema 3.11. subpunctul b)
%Primeste ca date de intrare vectorul a si scalarul y.
%Apelul:
% [ x ]=p311b(a,y)
%Stamatescu Grigore, Mai 2006
%
n=length(a);
ro=0;
for k=2:n
ro=sqrt(a(1)2 + a(k)2);
c(k)=a(1)/ro;
s(k)=a(k)/ro;
a(1)=ro;
a(k)=0;
end
x(1)=y/ro;
for i=2:n
x(i)=0;
end
for k=n:-1:2
tau=x(1);
c(k)=c(k)*x(1)-s(k)*x(k);
x(1)=c(k);
x(k)=s(k)*tau+c(k)*x(k);
end

1:
2:
3:
4:
5:

Problema 3.11 c
function [ x ]=p311c(a,y)
%
%Acest algoritm calculeaza folosind pseudo-inversa
%solutia x a ecuatiei liniare cu n>1 necunoscute
%(Problema 3.11. subpunctul c)

27

28

6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:

SEMINAR 3. PROBLEMA CELOR MAI MICI PATRATE

%Primeste ca date de intrare vectorul a si scalarul y.


%Apelul:
% [ x ]=p311c(a,y)
%Stamatescu Grigore, Mai 2006
%
n=length(a);
suma=0;
for i=1:n
suma=suma+a(i)2;
end
tau=y/suma;
for i=1:n
x(i)=a(i)*tau;
end

Seminar 4

Calculul valorilor si vectorilor


proprii
Valorile proprii ale unei matrice joaca un rol important n multe domenii cum ar fi teoria
stabilitatii. De asemenea, ele sunt legate ndeaproape de problema rezolvarii ecuatiilor algebrice. Prin urmare, un calcul corect al valorilor si vectorilor proprii este de mare importanta.
Din cauza faptului ca valorile proprii sunt radacinile ecuatiei polinomiale caracteristice, calculul lor pentru o matrice de ordin mai mare decat patru nu poate fi facut exact printr-o
secventa finita de operatii aritmetice si este nevoie de un proces infinit care trebuie sa fie
trunchiat astfel ncat sa se obtina o aproximare acceptabila. Cel mai bun proces de acest
tip este algoritmul QR care calculeaza o forma Schur aproximativa a matricei date. Acest
seminar este dedicat diferitelor aspecte numerice ale calculului valorilor proprii si ale implementarilor algoritmului QR.

4.1

Preliminarii

Fie A IRnn . Un vector x C


I n este un vector propriu al lui A si C
I este valoarea
proprie asociata daca sunt satisfacute urmatoarele conditii
a) x 6= 0
b) Ax = x.
Astfel, numarul C este o valoare proprie a lui A daca si numai daca matricea I A
este singulara, i.e. valorile proprii sunt zerourile polinomului caracteristic
p() = det(In A),
si matricea A are exact n valori proprii, incluzand multiplicitatile. In mod evident, valorile
proprii complexe ale unei matrice reale apar sub forma unor perechi conjugate. Multimea
valorilor proprii ale unei matrice A se noteaza cu (A) si se numeste spectrul (valorilor
proprii) ale lui A.
Daca x este un vector propriu al lui A, vectorul y = x este de asemenea un vector
propriu al lui A, asociat aceleiasi valori proprii pentru orice scalar diferit de zero. Deci
vectorii proprii sunt determinati doar prin directia lor.

SEMINAR 4. DESCOMPUNEREA VALORILOR PROPRII


Valorile proprii sunt conservate de asa numitele transform
ari de asem
anare definite prin
B = T AT 1 ,

unde T este o matrice nesingulara. Daca T este o matrice ortogonala atunci A si B se numesc
ortogonal asemenea. Daca A, B sunt asemenea atunci ele au acelasi spectru de valori proprii
(A) = (B) iar vectorii proprii corespunzatori sunt legati prin relatia xB = T xA .
Cea mai simpla forma care poate fi obtinuta printr-o transformare de asemanare este
asa numita form
a canonic
a Jordan. Daca o matrice n n are n vectori proprii liniari
independenti, atunci forma sa canonica Jordan este diagonala si matricea se numeste simpla
sau diagonalizabila. Din pacate, forma canonica Jordan este foarte sensibila la perturbari
numerice. De aceea, n calculul numeric este preferata o forma mai robusta si anume forma
Schur (reala) (FSR) care poate fi obtinuta printr-o transformarea ortogonal
a de asemanare:

S11 S12 S1q

0 S22 S2q

S = QT AQ =
,
0
0 . . . Sqq
unde Sii R11 or Sii R22 si toate blocurile diagonale 2 2 au valori proprii complexe.
Valorile reale ale unei matrice FSR pot fi determinate printr-o simpla inspectie a diagonalei
principale iar cele complexe pot fi calculate prin rezolvarea ecuatiilor algebrice de gradul doi
corespunz
atoare det(I Sii ) = 0.
Fie o pereche (valoare proprie, vector propriu)=(, x), (un sistem propriu) al unei matrice
A. Daca unul dintre cele doua elemente este cunoscut celalalt poate fi calculat cu usurinta
(vezi problema rezolvata 4.1). Daca nici valoarea proprie nici vectorul propriu nu sunt
cunoscute, problema calculului lor devine una foarte dificila. Motivul sta n imposibilitatea
rezolvarii ecuatiilor algebrice de grad mai mare decat patru prin secvente finite de operatii
elementare.
Cele mai folosite metode pentru calculul iterativ al vectorilor proprii (fara a se cunoaste
valoarea proprie asociata) sunt metoda puterii si metoda puterii inverse. Aceste metode sunt
implementate n mod profesional ntr-o faimoasa procedura iterativa numita algoritmul QR.
Algoritmul QR construieste iterativ o secventa de matrice ortogonal asemenea, convergenta
catre o forma Schur a matricei originale. Proprietatile excelente de convergenta se datoreza
folosirii unor deplasari optimale si unei serii de subtilitati tehnice cum ar fi utilizarea exclusiva a formei Hessenberg si monitorizarea structurala. Toate variantele algoritmului QR
sunt organizate n doua etape:
1. Reducerea la forma superior Hessenberg printr-o transformare ortogonala de asemanare
H = U T AU calculata ntr-un numar finit de flopi (O( 35 n3 )) (algoritmul HQ).
2. Reducerea iterativa la forma Schur, i.e. construirea iterativa a unui sir de matrice
H1 = H, H2 , . . . , Hk , . . ., convergent catre o forma Schur a lui A. Pentru o matrice cu
un spectru real, fiecare iteratie QR este definita prin:
1. [ Qk , Rk ] = qr(Hk k In ) % Factorizarea QR a lui Hk k In
2. Hk+1 Rk Qk + k In ,
unde k = Hk (n, n) este deplasarea Rayleigh. Daca matricea A are valori proprii
complexe, atunci se foloseste o varianta mai complicata cu pasi dubli si deplasari
implicite (vezi cursul).

4.2. PROBLEME REZOLVATE

4.2

Probleme rezolvate

4.2.1

Aspecte teoretice

Problema 4.1 Fie A, B IRnn doua matrice asemenea, i.e. exista o matrice nesingulara
T IRnn astfel ncat B = T 1 AT . Demonstrati ca
a.

det A = det B,

b.

trA = trB,

Pn
unde trA = i=1 aii este, prin definitie, urma lui A. Ca aplicatie, demonstrati ca daca
(A) = {i , i , . . . , i } este spectrul valorilor proprii ale lui A, atunci
c. detA =

n
Y

i ,

d.

n
X

trA =

i=1

i .

i=1

Rezolvare. Este bine-cunoscut ca det(GH) = det G det H pentru toate matricele


patrate G si H. Evident, acest lucru implica faptul ca pentru toate matricele nesingulare G
1
1
. a. Din B = T 1 AT rezulta ca det B =
det A det T = det A.
avem det G1 =
det G
det T
b. Sa notam X = T 1 . Atunci XT = T X = In , i.e. X(i, :)T (:, j) = T (i, :)X(:, j) = ij ,
unde scalarul ij = 0 pentru toti i 6= j si ij = 1 daca i = j. Prin urmare
trB =

n
X

B(k, k) =

k=1

n
X

X(k, :)AT (:, k) =

i=1 j=1

X(k, i)A(i, j)T (j, k) =

k=1 i=1 j=1

k=1
n X
n
X

n X
n X
n
X

A(i, j)

n
X

T (j, k)X(k, i) =

A(i, j)T (j, :)X(:, i) =

i=1 i=1

k=1

n X
n
X

n X
n
X

A(i, j)ij =

i=1 j=1

n
X

A(i, i) = trA.

i=1

Qp
c. Fie S = QT AQ forma Schur reala pentru A. Atunci det A = det S = i=1 det Sii .
Daca Sii este un bloc scalar det Sii = Sii ; daca Sii este un bloc 2 Q
2, atunci det Sii =
p
i
j (Sii ) =
Sii (1, 1)Sii (2, 2) Sii (1, 2)Sii (2, 1) = 1 (Sii )2 (Sii ). Astfel, det A = i=1 nj=1
Qn

(A).
i
i=1
Pp
d. Fie din nou S = QT AQ forma Schur reala pentru A. Atunci trA = trS = i=1 trSii .
Daca Sii este un bloc scalar trSii = Sii ; dac
a Sii este
trSii = Sii (1, 1) +
P
Pniun bloc 2 2,Patunci
p
n
Sii (2, 2) = 1 (Sii ) + 2 (Sii ). Astfel, trA = i=1 j=1
j (Sii ) = i=1 i (A).
Problema 4.2 Fie A IRnn si (A) = {1 , 2 , . . . , n } spectrul valorilor sale proprii. a.
Demonstrati ca valorile proprii sunt situate n urmatorul domeniu al planului complex
D=

n
[
i=1

Di ,

SEMINAR 4. DESCOMPUNEREA VALORILOR PROPRII

unde Di sunt discurile


Di = {z C
I | |z aii |

n
X

|aij |},

i = 1 : n,

j=1

j6=i

numite discurile lui Gershgorin.


def

b. Numarul (A) = maxi=1:n (|i |) se numeste raza spectral


a a lui A. Demonstrati
inegalitatea
(A) kAk,
unde k k este o familie oarecare de norme matriceale consistente.
c. Demonstrati urmatoarele inegalitati

n
!
n
n
n
X
Y
X
Y

c1 . |detA|
|aij | ,
c2 . |detA|
|aij | .
i=1

j=1

j=1

i=1

Rezolvare. a. Fie x un vector propriu asociat valorii proprii (A). Atunci linia i
a egalitatii vectoriale Ax = x poate fi scrisa sub forma
( aii )xi =

n
X

aij xj .

j=1

j6=i

Prin urmare, este evident ca | aii ||xi |


|xi | = maxk=1:n (|xk |) 6= 0, i.e.

Pn
j=1

j6=i

|aij ||xj |. Alegand acum linia i astfel ncat

|xj |
1 pentru toti j, avem
|xi |

| aii |

n
X
j=1

j6=i

|aij |

|xj | X

|aij |,
|xi |
j=1
j6=i

i.e. Di .
b. Datorita consistentei familiei de norme matriceale, pentru toate (A) si toti
vectorii proprii asociati x cu kxk = 1, avem || = kxk = kAxk kAkkxk = kAk. Prin
urmare inegalitatea este adevarata.
c. Sa demonstram mai ntai inegalitatea c1 . Daca A are (cel put
Pnin) o linie zero, atunci
inegalitatea devine egalitate. Daca nu este cazul, sa definim i = j=1 |aij | > 0, i = 1 : n,
1
si D = diag(
Qn 1 , 2 , . . . , n ). Matricea B = D A are (B) kBk 1. Prin urmare,
|detB| = i=1 |i (B)| 1. Inegalitatea dorita se obtine din |detA| = |detD| |detB|
|detD|. Pentru a demonstra c2 aplicam inegalitatea din cazul c1 matricei AT .
Problema 4.3 Fie A IRmn , B IRnm cu m > n. Demonstrati ca (AB) = (BA)
{0, 0, . . . , 0}, i.e. ca, n particular, matricele AB si BA au aceleasi valori proprii nenule.

AB 0
0
0
Rezolvare. Matricele (m + n) (m + n) C =
si D =
sunt
B 0
B BA

Im A
Im A
1
1
asemenea deoarece D = T CT
cu T =
avand ca inversa T =
0 In
0
In

4.2. PROBLEME REZOLVATE

(verificati!). Prin urmare (C) = (D). Dar C si D sunt matrice bloc inferior triunghiulare.
Astfel, (C) = (AB) {0, 0, . . . , 0} si (D) = {0, 0, . . . , 0} (BA). Atunci, deoarece
m > n, (AB) = (BA) {0, 0, . . . , 0}. Evident, daca m = n atunci (AB) = (BA).
Problema 4.4 a. Fie 1 , 2 doua valori proprii diferite ale matricei A IRnn si x1
un vector propriu al lui A asociat lui 1 si y2 un vector propriu al lui AT asociat lui 2 .
Demonstrati ca cei doi vectori sunt ortogonali i.e. y2T x1 = 0.
b. Daca (A) este o valoare proprie distincta a lui A si x, respectiv y, sunt vectori
proprii la dreapta, respectiv la stanga, asociati lui , atunci y T x 6= 0. Dati un exemplu n
care aceasta proprietate nu este satisfacuta daca nu este o valoare proprie distincta.
Rezolvare. a. Avem Ax1 = 1 x1 si AT y2 = 2 y2 sau y2T A = 2 y2T . Prin urmare
1 y2T x1 = 2 y2T x1 sau (1 2 )y2T x1 = 0 care implica y2T x1 = 0 din cauza ca (1 2 ) 6= 0.
b. Fara sa pierdem caracterul general, putem presupune ca kxk2 = 1. Conform cu
T

lema
de deflat
ie ortogonala, daca matricea [ x X ] este ortogonala, atunci B = X AX =

T
b
. Acum, daca vectorul y este un vector propriu la stanga al lui A (i.e. y T A = y T ,
0 C
sau y T A = y T ; astfel, un vector propriu la stanga al lui A este un vector propriu al lui
AT ), atunci y T XB = y T XX T AX = y T AX = y T X, deci z T B = z T unde z = X T y. Prin
urmare z este un vector propriu la stanga al lui B. Dar este o valoare proprie distincta,
n1 C T )1 bz1 , cu
deci matricea In1 C este nesingulara. Rezulta ca z(2 : n) = (I
T
z1 = x y. Daca z1 = 0, atunci z(2 : n) = 0 si, prin urmare, z = 0. Dar un vector propriu nu
poate sa fie zero. Astfel z1 = xT y 6= 0. Drept exemplu pentru situat
ia candvaloarea proprie
0 1
nu este distincta si conditia nu este satisfacuta, fie matricea A =
ai carei vectori
0 0

0
proprii (la dreapta) au forma x =
si cei la stanga au forma y =
, , IR,
0

6= 0, 6= 0; astfel y T x = 0.

4.2.2

Aspecte calculatorii

Problema 4.5 Fie A IRmn o matrice data.


a. Presupunand ca vectorul propriu x IRn al lui A este cunoscut, scrieti un algoritm
pentru calculul valorii proprii asociate .
b. Presupunand ca valoarea proprie (A) este cunoscuta, scrieti un algoritm pentru
calculul unui vector propriu asociat.
Rezolvare. a. Avem x = Ax, deci xT x = xT Ax si, din cauza ca x 6= 0, xT x =
kxk2 6= 0. Prin urmare
Pn Pn
aij xi xj
xT Ax
i=1
Pnj=1 2
= T
=
x x
i=1 xi
si algoritmul este
1. = 0
2. = 0

SEMINAR 4. DESCOMPUNEREA VALORILOR PROPRII


3. pentru i = 1 : n
1. yi = 0
2. pentru j = 1 : n
1. yi = yi + aij xj
3. = + xi yi
4. = + x2i
2. = /

b. Daca o valoare proprie (A) este cunoscuta, atunci un vector propriu asociat
poate fi calculat prin calculul unei solutii nenule a sistemului liniar omogen (I A)x =
0. Pentru aceasta vom aplica eliminarea gaussiana cu pivotare partiala (algoritmul GPP)
matricei I A
Mn1 Pn1 M2 P2 M1 P1 (I A) = U
unde U este superior triunghiulara. Evident, solutiile sistemului U x = 0 sunt solutii ale
sistemului (I A)x = 0. Matricea superior triunghiulara U este singulara deoarece matricea
I A este singulara. Astfel, matricea U are cel putin un element diagonal nul. Fie ukk = 0
primul element diagonal nul a lui U . Sistemul U x = 0 poate fi scris sub forma

0
U11 U12 U13
x
0
0
0
U23 xk = 0 ,
0
0
U33
x000
0
unde U11 = U (1 : k 1, 1 : k 1) este un bloc superior triunghiular nesingular, U12 = U (1 :
k 1, k), U23 = U (k, k + 1 : n), U33 = U (k + 1 : n, k + 1 : n). O solutie nenula poate fi
obtinuta alegand
1
x000 = 0,
xk = 6= 0,
x0 = U11
U12
unde este un scalar arbitrar nenul.
Prin urmare, un algoritm pentru calculul unui vector propriu, atunci cand valoarea
proprie asociata este cunoscuta, este
, p, U ] =GPP(I A)
1. [M
2. k = 1
3. c
at timp ukk 6= 0
1. k k + 1
4. pentru i = k + 1 : n
1. xi = 0
5. xk = 1
6. dac
ak>1
1. x(1 : k 1) =UTRIS(U (1 : k 1, 1 : k 1), U (1 : k 1, k))
In algoritmul de mai sus scalarul a fost considerat egal cu 1.

Problema 4.6 a. Calculati forma Schur reala a matricei A =

1 1
b. Calculati forma Schur reala a matricei A =
.
1 1

1
2

2
3

4.2. PROBLEME REZOLVATE

c. Presupunand ca o matrice data A are un spectru real (i.e. (A) IR) si ca dispunem
de o procedura cu sintaxa
x = eigenvector(A)
pentru calculul unui vector propriu al matricei A (fara a se cunoasste valoarea proprie
asociata), scrieti un algoritm pentru calculul unei forme Schur a lui A.
Rezolvare. a. Polinomul caracteristic al lui A este p() = det(I2 A) = ( 1)( +
3) + 4 = ( 1)2 , deci valorile proprii ale lui A sunt ambele egale cu 1. Sistemul Ax= x

1
conduce la x1 = x2 , astfel ca toti vectorii proprii ai lui A sunt de forma x =
,
1
6= 0. Pentru a aplica
lema
de deflatie ortogonala, fie vectorul propriu de norma euclidiana

1
unitate x = (1/ 2)
. Considerand matricea ortogonala Q = [x y], unde e.g. y =
1

1
1 4
T
(1/ 2)
(avand, evident, kyk = 1), rezulta S = Q AQ =
, care este o
1
0 1
forma Schur a lui A. Observati ca forma Schur poate fi obtinuta pe cale indicata chiar daca
A este defectiva (i.e. nu este simpla).
b. Polinomul caracteristic al lui A este p() = det(I2 A) = ( 1)2 + 1, deci valorile
proprii ale lui A nu sunt reale. Astfel o forma Schur reala (FSR) a lui A este chiar A.
c. Vom aplica n mod sistematic lema de deflatie ortogonala. Dupa cum se demonstreaza
la curs, daca x este un vector propriu de norma euclidiana unitate al lui A si Q = [ x Y ]
este o matrice ortogonala atunci matricea

bT
T
B = Q AQ =
0 C
este n forma Schur n prima coloana. Pentru a continua, putem aplica aceeasi procedura
blocului C, etc. Algoritmul dorit se poate baza pe urmatoarea schema de calcul:
1. pentru k = 1 : n 1
1. x
k = eigenvector(A(k : n, k : n))
x
k
2. x
k =
k
xk k
k astfel ncat Q
k e1 = x
3. Se calculeaza o matrice ortogonala Q
k
T

4. A(k : n, k : n) = Qk A(k : n, k : n)
k.
5. A( : , k : n) = A( : , k : n)Q
In final, matricea A va fi suprascrisa cu forma sa Schur.
k din instructiunea
Pentru a detalia schema de mai sus, remarcati faptul ca matricea Q
T
1.3 poate fi un reflector U = I uu / astfel ncat (U x
k )(2 : n k + 1) = 0. Folosind
procedurile cunoscute pentru calculul vectorului u si al scalarului ce defineste reflectorul si
pentru nmultirea la stanga si la dreapta a unei matrice cu un reflector si folosind un vector
generic x pentru x
k , algoritmul detaliat devine:
1. pentru k = 1 : n 1
1. x = eigenvector(A(k
: n, k : n))
qP
nk+1 2
xi
2. =
i=1

SEMINAR 4. DESCOMPUNEREA VALORILOR PROPRII


3. pentru i = 1 : n k + 1
1. xi xi /
4. u1 = x1 1,
% = 1
5. pentru i = 2 : n k + 1
1. ui = xi
6. = u1 ,
% = 1
7. pentru j P
=k:n
n
1. = ( i=k uik+1 aij ) /
2. pentru i = k : n
1. aij aij uik+1
8. pentru i= 1 : n

Pn
1. =
a
u
/
ij
jk+1
j=k
2. pentru j = k : n
1. aij aij ujk+1 .


Problema 4.7 a. Fie A =
R22 o matrice simetrica. Dati un algoritmu

pentru calculul valorilor si vectorilor proprii ai lui A. Retineti faptul ca valorile proprii sunt
reale si vectorii proprii sunt ortogonali.
b. Aratati ca o matrice simetrica reala are spectrul real si vectori proprii ortogonali
doi cate doi. Ce simplificari ale calculului apar n algoritmul QR simetric fata de cazul
nesimetric?
Rezolvare. a. Polinomul caracteristic al lui A este det(I2 A) = ()() 2 =
( + ) + 2 si discriminantul sau este = ( + )2 4( 2 ) = (
)2 +
++
4 2 0. Prin urmare valorile proprii sunt ambele reale si egale cu 1 =
si
2

+
2 =
. Vectorii proprii pot fi calculati prin rezolvarea sistemelor liniare singulare
2
omogene Ax1 = 1 x1 and Ax2 = 1 x2 . Sistemul Ax1 = 1 x1 poate fi scris

(1 )x11 x21 = 0
x11 + (1 )x21 = 0
2

Daca = 0, atunci 1 = si o solutie nenula a sistemului de mai sus este x1 =


cu
0
6= 0 arbitrar. Daca 6= 0, atunci considerand x11 = 6= 0, o solutie nenula a sistemului

de mai sus este x1 = (1 ) . Sistemul Ax2 = 1 x2 poate fi scris similar

(2 )x21 x22 = 0
x21 + (2 )x22 = 0

0
cu

==
6 0, o solutie nenula a sistemului

Daca = 0, atunci 2 = si o solutie nenula a sistemului de mai sus este x2 =


6= 0 arbitrar. Daca 6= 0, atunci considerand x22

4.2. PROBLEME REZOLVATE

(2 )
. Daca = 0, cei doi vectori proprii sunt evident
de mai sus este x2 =

ortogonali. Daca 6= 0, atunci

(1 )
(2 )
(2 )
+
=
xT2 x1 =
(1 ) =

(1 + 2 ) = 0.

Deci, cei doi vectori proprii sunt ortogonali.


b. Daca A IRnn este simetrica, i.e. AT = A, fie S = QT AQ forma sa Schur reala,
care este o structura cvasi-triunghiulara. Avem S T = QT AT Q = QT AQ = S, deci matricea
S este simetrica si, prin urmare, are o structura cvasi-diagonala S = diag(S11 , S22 , . . . , Spp )
cu blocurile diagonale 2 2 avand valori proprii complex conjugate. Dar blocurile diagonale
sunt de asemenea simetrice si am vazut mai sus ca o matrice 2 2 simetrica are valori
proprii reale. Astfel ca toate blocurile diagonale ale unei forme Schur reale a unei matrice
simetrice sunt 1 1, i.e. forma Schur reala a unei matrice simetrice este diagonala (n acest
caz forma canonica Jordan si forma Schur sunt identice), toate valorile proprii sunt reale
si din S = QT AQ = = diag(1 , 2 , . . . , n ) avem AQ = Q, i.e. AQ(:, j) = Q(:, j) =
j Qej = j Q(:, j), j = 1 : n. Prin urmare, xj = Q(:, j) sunt vectori proprii ai matricei
simetrice A, asociati valorilor proprii j si, fiind coloane ale unei matrice ortogonale, sunt
toti ortogonali doi cate doi. Aceste proprietati utile aduc simplificari importante algoritmului
QR simetric. Astfel matricea superior Hessenberg obtinuta n prima etapa a algoritmului
QR este simetrica si prin urmare tridiagonal
a. De asemenea, toate matricele din secventa
QR sunt tridiagonale si convergenta la forma diagonala este foarte rapida. Pentru mai multe
detalii consultati cursul si bibliografia.
Problema 4.8 Elaborati un algoritm pentru reducerea unei matrice A Rnn la forma superior Hessenberg H = T AT 1 , unde T este un produs de transformari gaussiene elementare
stabilizate Mk Pk (de tipul celor ntalnite n algoritmul GPP).
Rezolvare. Ideea este aceeasi ca si n cazul algoritmului de reducere ortogonala HQ si
se bazeaza pe faptul ca matricele de permutare Pk = P
kik , ik k si matricele elementare
Ik1 0
T
inferior triunghiulare Mk = In mk ek au structura
la fel cu a matricelor
0
X
Mk Pk , Pk1 = PkT , Mk1 = In + mk eTk si Pk1 Mk1 . Prin urmare, forma Hessenberg poate fi
obtinuta prin urmatoarele transformari de asemanare
A H = T AT 1 = Mn1 Pn1 M3 P3 M2 P2 A(M2 P2 )1 (M3 P3 )1 (Mn1 Pn1 )1 =
1
= Mn1 Pn1 M3 P3 M2 P2 AP2 M21 P3 M31 Pn1 Mn1
.

Luand n calcul faptul ca o matrice de permutare Pkik este definita complet de cei doi ntregi
(k, ik ) putem scrie urmatoarea schema de calcul
1. pentru k = 1 : n 2

10

SEMINAR 4. DESCOMPUNEREA VALORILOR PROPRII


1. Se determina ik+1 astfel ncat |aik+1 k | = maxi=k+1:n (|aik |)
2. A(ik+1 , k : n) A(k + 1, k : n)
3. Se determina matricea elementara inferior triunghiulara
Mk+1 astfel ncat (Mk+1 A)(k + 2 : n, k) = 0
4. A = Mk+1 A
5. A( : , k + 1) A( : , ik+1 )
1
6. A = AMk+1
.

Folosind cunostintele de utilizare a transformarilor gaussiene, schema de calcul de mai


sus este detaliata n urmatorul algoritm.
1. pentru k = 1 : n 2
1. ik+1 = k + 1
2. = |ak+1,k |
3. pentru i = k + 2 : n
1. dac
a |aik | >
1. ik+1 = i
2. = |aik |
4. pentru j = k : n
1. aik+1 ,j ak+1,j
5. pentru i = k + 2 : n
1. i,k+1 = aik /ak+1,k
2. aik = 0
6. pentru j = k + 1 : n
1. pentru i = k + 2 : n
1. aij aij i,k+1 ak+1,j
7. pentru i = 1 : n
1. aik+1 ,k+1 ai,k+1
8. pentru j = k + 1 : n
1. pentru i = k + 2 : n
1. aij aij i,k+1 ak+1,j
Solutia este de doua ori mai eficienta decat algoritmul HQ, dar acesta din urma este preferat
datorita avantajelor transformarilor ortogonale.
Problema 4.9 Fie H Rnn o matrice superior Hessenberg. Descrieti detaliile unui pas
QR simplu cu deplasare explicita folosind valoarea optima = hnn a deplasarii.
Rezolvare. Fiind data matricea H curenta din sirul QR, calculul H H 0 al succesoarei
ei reprezint
a un pas simplu QR. Versiunea cu deplasare explicita este definitaa prin

[ Q, R ] = qr(H In )
%factorizareaQR
H H 0 = RQ + In
Matricea H I este superior Hessenberg; factorizarea sa QR poate fi calculata folosind
o secventa de rotatii Givens pentru triangularizarea ortogonala a matricei H I, i.e.
T T
T
Pn1,n P23 P12 (H I) = R; atunci Q = P12
P23 Pn1,n
. Inmultirea matricelor RQ se
T T
T
poate face far
a calculul explicit al lui Q, folosind expresia RQ = RP12
P23 . . . Pn1,n
. Toate
calculele pot fi facute prin suprascrierea matricei H. Schema de calcul pentru pasul QR
simplu cu deplasare explicita este:

4.2. PROBLEME REZOLVATE

11

1. hnn
2. H H I
3. pentru k = 1 : n 1
1. Se calculeaza rotatia Givens Pk,k+1 astfel ncat (Pk,k+1 H)(k + 1, k) = 0
2. H Pk,k+1 H
3. pentru k = 1 : n 1
T
2. H HPk,k+1
5. H H + I
Notand cu (ck , sk ) scalarii definitorii pentru rotatia Pk,k+1 , schema de mai sus poate fi
detaliata n urmatorul algoritm.
1. hnn
2. pentru i = 1 : n
1. hii hii
3. pentru kq= 1 : n 1
1. =

h2kk + h2k+1,k

2.
3.
4.
5.
6.

ck = hk,k /
sk = hk+1,k /
hk,k =
hk+1,k = 0
pentru j = k + 1 : n
1. = hkj
2. hkj ck + sk hk+1,j
3. hk+1,j sk + ck hk+1,j
4. pentru k = 1 : n 1
1. pentru i = 1 : k + 1
1. = hik
2. hik ck + hi,k+1 sk
3. hi,k+1 sk + hi,k+1 ck
5. pentru i = 1 : n
1. hii hii +

Problema 4.10 Elaborati un algoritm pentru calculul valorilor proprii ale matricei A =
In + uv T , unde u, v Rn .
Rezolvare. Daca Q = QT este reflectorul Householder pentru care Qu = kuke1 , atunci
matricea
A0 = QT AQ = I + kuke1 v T QT = I + e1 wT ,
unde w = kukQv, este ortogonal asemenea cu A si superior triunghiulara. Prin urmare
valorile proprii ale lui A sunt elementele diagonale ale lui A0 . Avem a011 = 1 + w1 =
1 + kukv T q1 , unde q1 = Qe1 este prima coloana a lui Q si a0ii = 1 pentru i 2. Dar
q1 = u/kuk, prin urmare a011 = 1 + v T u. Astfel, 1 = 1 + v T u si i = 1, i = 2 : n este o
valoare proprie cu ordinul de multiplicitate n 1.

12

SEMINAR 4. DESCOMPUNEREA VALORILOR PROPRII

Problema 4.11 a. Fiind dat un vector x IRn nenul, scrieti un algoritm pentru calculul
unui vector v IRn astfel ncat v T x = 1.
b. Presupunem ca matricea A C
I nn are valorile proprii reale i , i = 1 : n, si ca
xi , i = 1 : n, sunt vectori proprii asociati. Fie v IRn un vector astfel ncat v T x1 = 1 si
consideram matricea B = (In x1 v T )A. Aratati ca (B) = { 0, 2 , . . . , n }, si ca vectorii
T
B
xB
1 = x1 , xi = xi (v1 xi )x1 sunt vectori proprii ai matricei B.
Rezolvare. a. Fie U1 = In uuT / un reflector Householder astfel ncat U1 x = e1 ,
6= 0. Atunci
1
1
v = U1 e1 = (e1 u )

1
unde = u1 /, este vectorul pe care l cautam. Intr-adevar, v T x = eT1 U1 x = 1. Vectorul

v poate fi calculat dupa cum urmeaza:


pPn
2
1. =
i=1 xi
2. u1 = + x1
3. pentru i = 2 : n
1. ui = xi
4. = u1
5. = u1
6. v1 = (1 u1 )/
6. pentru i = 2 : n
1. vi = ui /
b. Avem Bx1 = (In x1 v T )Ax1 = 1 (In x1 v T )x1 = 0; deci x1 este un vector propriu al lui
T
T
B asociat unei valori proprii nule a lui B. De asemenea BxB
i = (In x1 v )A(xi (v1 xi )x1 ) =
B
T
T
(In x1 v )(i xi 1 x1 (v1 xi )) = i xi , i = 2 : n.
Problema 4.12 Scrieti un algoritm pentru calculul polinomului caracteristic al unei matrice patrate A IRnn date.
Rezolvare. Cea mai buna metoda numerica actuala consta n Q
calculul initial al valorilor
n
proprii i , folosind algoritmul QR, iar apoi n calculul p() = i=1 ( i ). Pentru a
determina coeficientii lui p(), folosim schema de calcul
1. p() = 1
2. for i = 1 : n
1. p() = p()( i )
Daca, la nceputul pasului i avem
(i1) i2

p() = p(i1) () = i1 + p2

(i1)

(i1)

+ . . . + pi1 + pi

procesarea la pasul i duce la


(i1)

p() = p(i) () = i + (p2

(i)

(i1)

1 i )i1 + . . . + (pi1 pi

(i1)

i ) + (0 pi

i ) =

4.3. PROBLEME PROPUSE

13
(i)

(i)

(i)

= i1 + p2 i2 + . . . + pi + pi+1 .
(i)

(i1)

(i)

(i1)

(i1)

Prin urmare, p1 = p1
= 1 si pj = pj
pj+1 i pentru j 2. Calculand coeficientii
n ordinea inversa putem suprascrie coeficientii de la pasul anterior precum n urmatorul
algoritm. Astfel, cel mai bun algoritm pentru calculul coeficientilor polinomului caracteristic
este:
1. Folosind algoritmul QR, calculati i , i = 1 : n
2. p1 = 1
3. pentru i = 2 : n + 1
1. pi = 0
4. pentru i = 1 : n
1. pentru j = i + 1 : 1 : 2
1. pj pj i pj1 .
Evident, efortul principal de calcul consta n determinarea valorilor proprii.

4.3

Probleme propuse

Problema 4.13 Fie date matricele

3 3
2
5 2 ,
A = 1
1
3
0

4
B = 8
4

0 8
3 9 .
1 9

Folosind definitiile valorilor si vectorilor proprii calculati valorile si vectorii proprii pentru
A si B. Dupa aceea calculati-le si formele Schur.
Problema 4.14 a. O matrice patrata se numeste nilpotent
a daca exista un numar ntreg
k 0 astfel ncat Ak = 0. Demonstrati ca toate valorile proprii ale unei matrice nilpotente
sunt nule. Dati un exemplu de matrice 2 2 nilpotenta.
b. O matrice patrata se numeste idempotent
a daca A2 = A. Demonstrati ca toate
valorile proprii ale unei matrice idempotente sunt 0 sau 1. Dati un exemplu de matrice 2 2
idempotenta care sa nu fie I2 .
Problema 4.15 a. Calculati valorile proprii si un set de vectori proprii pentru un reflector
Householder Uk . b. Calculati valorile proprii si un set de vectori proprii pentru o rotatie
plana Pij .
Problema 4.16 Care va fi rezultatul aplicarii metodei puterii matricelor:

5 8 1
1 1

A= 0 1 2 ,
B=
,
1 3
0 0 2
cu aproximarile initiale de rigoare? Ce nseamna de rigoare n aceste cazuri?

14

SEMINAR 4. DESCOMPUNEREA VALORILOR PROPRII

Problema 4.17 Presupunem ca avem date matricea A IRnn si vectorul z IRn . Scrieti
un algoritm pentru calculul unei matrice ortogonale Q astfel ncat QT AQ sa fie superior
Hessenberg si QT z coliniara cu vectorul e1 .
Problema 4.18 Fie data o pereche (valoare proprie, vector propriu)= (, x) a unei matrice
superior Hessenberg H IRnn . Scrieti un algoritm pentru calculul
ortogonale

uneiT matrice

f
Q astfel ncat matricea QT HQ sa aiba structura QT HQ =
, unde matricea
0 G
G IR(n1)(n1) este superior Hessenberg.
Problema 4.19 Fie H IRnn o matrice superior Hessenberg data si urmatoarea procedura pentru calculul matricei succesoare H H 0 ntr-un algoritm iterativ:
1. Se aplica algoritmul GPP Mn1 Pn1 . . . M1 P1 H = R pentru a obtine matricea superior triunghiulara R.
1
2. H H 0 = RP1 M11 . . . Pn1 1Mn1
,

Demonstrati ca:
a. matricea succesoare H 0 este superior Hessenberg si ca,
b. matricea succesoare H 0 este asemenea cu H.


Problema 4.20 a. Consideram matricea H IR
cu spectru real si fie Hk =

matricea curenta din sirul QR pentru matricea H. Folosind deplasarea k = calculati
matricea succesoare Hk+1 . Examinati elementul Hk+1 (2, 1) si deduceti unele proprietati de
convergenta ale sirului QR.


not
b. Consideram matricea simetrica T IR22 si fie Tk =
matricea curenta

a sirului QR pentru matricea T . Folosind deplasarea k = calculati matricea succesoare Tk+1 . Examinati elementele extradiagonale Tk+1 (1, 2) = Tk+1 (2, 1) si deduceti unele
proprietati de convergenta ale sirului QR simetric .
22

4.4

not

Bibliografie

1. B. Jora, B. Dumitrescu, C. Oara, Numerical Methods, UPB, Bucharest, 1995.


2. G.W. Stewart, Introduction to Matrix Computations, Academic Press, 1973.
3. G. Golub, Ch. Van Loan, Matrix Computations, 3-rd edition, John Hopkins University Press, 1998.
4. G.W. Stewart, Matrix Algorithms, vol.1: Basic Decompositions, SIAM, 1999.
5. G.W. Stewart, Matrix Algorithms, vol.2: Eigensystems, SIAM, 2001.
6. B. Dumitrescu, C. Popeea, B. Jora, Metode de calcul numeric matriceal. Algoritmi fundamentali, ALL, Bucuresti, 1998.

4.5. PROGRAME MATLAB

4.5

Programe MATLAB

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:

Problema 4.5 a
function [ lambda ]= p45a(A,x)
%
% Rezolvarea problemei 4.5 subpunctul a).
% Algoritmul calculeaza catul Rayleigh definit de perechea (A,x).
% Daca x este un vector propriu al matricei patratice A, atunci
% lambda este valoarea proprie asociata vectorului propriu x.
% Apel:
%
lambda=p45a(A,x);
% Stamatescu Grigore, mai 2006.
%
[ m,n ]=size(A);
% verificam daca matricea A este patratica
if m=n,
error(Matricea A nu este patratica);
end
sigma=0;
tau=0;
for i=1:n
y(i)=0;
for j=1:n
y(i)=y(i)+A(i,j)*x(j);
end
sigma=sigma+x(i)*y(i);
tau=tau+x(i)*x(i);
end
lambda=sigma/tau;

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:

function [ x ]= eigenvector(A)
%
% Rezolvarea problemei 4.5 subpunctul a).
% Algoritmul calculeaza un vector propriu al matricei patratice A, folosind
% functia MATLAB eig, necesar pentru testarea programului precedent.
% Stamatescu Grigore, mai 2006.
%
[ m,n ]=size(A);
% verificam daca A este patratica
if m=n,
error(Matricea A nu este patratica);
end
[ V,D ]=eig(A);
x=V(1:n);

15

16

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:

SEMINAR 4. DESCOMPUNEREA VALORILOR PROPRII

Problema 4.5 b
function [ x ]= p45b(A,lambda)
%% Algoritmul calculeaza vectorul propriu x al unei matrice A atunci
% cand valoarea proprie lambda corespunzatoare este cunoscuta.
% Apelul:
%
x=p45b(A,lambda)
% Stamatescu Grigore, mai 2006.
%[ m,n ]=size(A);
% verificam daca matricea A este patratica
if m=n,
error(Matricea A nu este patratica);
end
T=lambda*eye(size(A))-A;
[ T,M,p ]=GPP(T);
k=1;
for i=1:n-1
if A(i,i)=0,
k=k+1;
end
end
for i=k+1:n
x(i)=0;
end
x(k)=1;
if k>1,
for i=1:k-1
x(i)=UTRIS(T(i,i),-T(i,k));
end
end

Problema 4.6
function [ A ]= Schr(A)
%% Algoritmul calculeaza o forma Schur a matricei patratice A cu spectru real
% folosind o procedura de calcul a unui vector propriu.
% Apel:
%
A=Schr(A);
% Stamatescu Grigore, mai 2006.
%[ m,n ]=size(A);
if m=n,

4.5. PROGRAME MATLAB


11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:

error(Matricea A nu este patratica);


end
[ V,D ]=eig(A); % ineficient!
for t=1:n
if isreal(D(t,t))=1,
error(Matricea A nu are spectrul valorilor proprii real!);
end
end
for k=1:n-1
x=eigenvector(A(k:n,k:n));
suma=0;
for i=1:n-k+1
suma=suma+x(i)*x(i);
end
alfa=sqrt(suma);
for i=1:n-k+1
x(i)=x(i)/alfa;
end
u(1)=x(1)-1;
for i=2:n-k+1
u(i)=x(i);
end
beta=-u(1);
for j=k:n
suma1=0;
for i=k:n
suma1=suma1+u(i-k+1)*A(i,j);
end
tau=suma1/beta;
for i=k:n
A(i,j)=A(i,j)-tau*u(i-k+1);
end
end
for i=1:n
suma2=0;
for j=k:n
suma2=suma2+A(i,j)*u(j-k+1);
end
tau=suma2/beta;
for j=k:n
A(i,j)=A(i,j)-tau*u(j-k+1);
end
end
end

17

18

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:

SEMINAR 4. DESCOMPUNEREA VALORILOR PROPRII


Problema 4.8
function [ A ]= Hessenberg(A)
%
% Algoritmul reduce matricea A patratica la forma Hessenberg.
% Apel:
%
A=Hessenberg(A)
% Stamatescu Grigore mai 2006
%
[ m,n ]=size(A);
% verificam daca A este patratica
if m=n,
error(Matricea A nu este patratica);
end
for k=1:n-2
z(k+1)=k+1;
niu=abs(A(k+1,k));
for i=k+2:n
if abs(A(i,k))>niu,
z(k+1)=i;
niu=abs(A(i,k));
end
end
for j=k:n
A(z(k+1),j)=A(k+1,j);
end
for i=k+2:n
miu(i,k+1)=A(i,k)/A(k+1,k);
A(i,k)=0;
end
for j=k+1:n
for i=k+2:n
A(i,j)=A(i,j)-miu(i,k+1)*A(k+1,j);
end
end
for i=1:n
A(z(k+1),k+1)=A(i,k+1);
end
for j=k+1:n
for i=k+2:n
A(i,j)=A(i,j)-miu(i,k+1)*A(k+1,j);
end
end
end

Problema 4.9

4.5. PROGRAME MATLAB


1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:

function [ H ]= pasQR(H)
%
% Fiind data o matrice H superior Hessenberg algoritmul implementeaza
% un pas QR cu deplasare explicita folosind deplasarea miu=H(n,n)
% Apel:
%
H=pasQR(H)
% Stamatescu Grigore, mai 2006.
%
[ m,n ]=size(H);
% verificam daca H este patratica
if m=n,
error(Matricea H nu este patratica);
end
% analizam daca matricea este superior Hessenberg
for i=3:n
for j=1:i-2
if H(i,j)=0
error(Matricea H nu e superior Hessenberg)
end
end
end
miu=H(n,n);
for i=1:n
H(i,i)=H(i,i)-miu;
end
for k=1:n-1
ro=sqrt(H(k,k)*H(k,k)+H(k+1,k)*H(k+1,k));
c(k)=H(k,k)/ro;
s(k)=H(k+1,k)/ro;
H(k,k)=ro;
H(k+1,k)=0;
for j=k+1:n
tau=H(k,j);
H(k,j)=c(k)*tau+s(k)*H(k+1,j);
H(k+1,j)=-s(k)*tau + c(k)*H(k+1,j);
end
end
for k=1:n-1
for i=1:k+1
tau=H(i,k);
H(i,k)=tau*c(k)+H(i,k+1)*s(k);
H(i,k+1)=-tau*s(k)+H(i,k+1)*c(k);
end
end
for i=1:n
H(i,i)=H(i,i)+miu;
end

19

20

SEMINAR 4. DESCOMPUNEREA VALORILOR PROPRII

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:

Problema 4.11
function [ v ]= vtx1(x)
%
% Fiind dat un vector x nenul de dimensiune n, algoritmul calculeaza
% un vector v (dimensiune n) astfel incat vT*x=1
% Apel:
%
v=vtx1(x)
% Stamatescu Grigore, mai 2006.
%
n=length(x);f=0;
% verificam daca x este nenul
for i=1:n
if x(i)==0,
f=f+1;
end
end
if f==n,
error(Vectorul x este nul!);
end
s=0;
for i=1:n
s=s+x(i)*x(i);
end
ro=-sqrt(s);
u(1)=ro+x(1);
for i=2:n
u(i)=x(i);
end
beta=u(1)*ro;
tau=u(1)*beta;
v(1)=(1-u(1)*tau)/ro;
for i=2:n
v(i)=-u(i)*tau/ro;
end

1:
2:
3:
4:
5:
6:
7:

Problema 4.12
function [ p ]= polinom(A)
%
% Algoritmul calculeaza polinomul caracteristic p al matricei patratice
% date A (nxn).
% Apel:
%
p=polinom(A)
% Stamatescu Grigore, mai 2006.

4.5. PROGRAME MATLAB


8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:

%
[ n,m ]=size(A);
% analizam daca matricea e patratica
if n=m
error(Matricea nu e patratica);
end
[ V,D ]=eig(A);
for i=1:n
lambda(i)=D(i,i);
end
p(1)=1;
for i=2:n+1
p(i)=0;
end
for i=1:n
for j=i+1:-1:2
p(j)=p(j)-lambda(i)*p(j-1);
end
end

21

Seminar 5

Descompunerea valorilor
singulare si aplicatiile sale
Descompunerea valorilor singulare (DVS) este una dintre cele mai puternice metode n algebra liniar
a. Probleme importante precum calculul rangului unei matrice, determinarea
bazelor ortogonale pentru subspatii liniare, calculul proiectiilor ortogonale pe subspatii
liniare, problema celor mai mici patrate sunt rezolvate cel mai bine folosind DVS. Acest
seminar este dedicat metodelor numerice de descompunere a valorilor singulare si aplicatiilor
lor.

5.1

Preliminarii

Descompunerea valorilor singulare a unei matrice A IRmn este definita astfel: exista
doua matrice ortogonale U IRmm si V IRnn astfel ncat


1 0
U T AV = =
,
0 0
unde
1 = diag(1 , 2 , ..., r ) IRrr ,
cu
1 2 ... r > 0.
Numerele reale pozitive i , i = 1 : r si i = 0, i = r + 1 : min(m, n) sunt numite valori
singulare ale lui A si sunt totdeauna ordonate descrescator.
Se poate ar
ata (vezi cursul) c
a valorile singulare nenule sunt radacinile patrate ale valoT
rilor proprii nenule ale matricelor simetrice si pozitiv semi-definite B
= AAT , i.e.
p= A A si C p
T
daca valorile proprii sunt ordonate descrescator atunci, i (A) = i (A A) = i (AAT ),
i = 1 : r.
In concluzie, calculul DVS este un proces infinit care poate fi trunchiat cand aproximarea
este considerat
a acceptabil
a. Pentru detalii asupra algoritmului DVS vezi cursul.
Cele mai importante aplicatii ale DVS ale unei matrice date A IRmn sunt:

SEMINAR 5. DESCOMPUNEREA VALORILOR SINGULARE


Rangul lui A este num
arul r al valorilor sale singulare nenule. Pentru conceptul de
rang numeric consult
a cursul.
Cea mai mare valoare singular
a a lui A este norma spectrala a lui A, i.e. 1 = kAk2 =
maxkAxk2 = kxk = 1. Alte norme matriceale, conservate de catre transformarile
ortogonale (cum este norma Frobenius), pot fi exprimate cu ajutorul valorilor singulare.
Daca r =rangA si not
am U1 = U (:, 1 : r), U2 = U (:, r + 1 : m), V1 = V (:, 1 : r) si
V2 = V (:, r + 1 : n) atunci
- coloanele lui U1 formeaz
a o baz
a ortogonala pentru subspatiul liniar ImA IRm ;
- coloanele lui U2 formeaz
a o baza ortogonala pentru subspatiul liniar KerAT
m
IR ;
- coloanele lui V1 formeaz
a o baz
a ortogonala pentru subspatiul liniar ImAT IRn ;
- coloanele lui V2 formeaz
a o baz
a ortogonala pentru subspatiul liniar KerA IRn .
Cum este cunoscut, dac
a coloanele unei matrice W formeaza o baza ortogonala pentru
un subspatiu liniar S, atunci P = W W T este o matrice proiectie ortogonala pe S.
In concluzie, folosind DVS putem construi proiectii ortogonale pe subspatiile liniare
ImA, KerAT IRm , ImAT , KerA IRn .
Rezolvarea problemei generale a celor mai mici patrate, i.e. aflarea pseudosolutiei de
norma eucidian
a minim
a a sistemului Ax = b
kx k =

min
kxk
min kb Axk

pentru un vector dat b IRm . Calculul solutiei sistemului problemei generale celor
mai mici p
atrate este
x = A# b = V # U T b =

r
X
vk uT b
k

k=1

unde uk , vk sunt coloanele corespunzatoare ale lui U si V .


Rezolvarea altor probleme de optimizare (vezi [3], [6]).
Calculul pseudoinversei Moore-Penrose a lui A:
A# = V # U T =

r
X
vk uT
k

k=1

Observatie. Valorile singulare ale unei matrice sunt perfect conditionate numeric. Poate
fi atatat (vezi [3],[5],[6]) c
a
|k (A + E) k (A)| 1 (E) = kEk2
unde matricea E este o perturbatie a lui A, i.e. valorile singulare sunt modificate cat norma
spectrala a perturbatiei E. Deci, dac
a perturbatia este mica, variatia valorilor singulare va
fi mica. Acesta este motivarea afirmatiei ca DVS este cea mai bun
a metod
a de a rezolva
toate probleme numerice mentionate mai sus.

5.2. PROBLEME REZOLVATE

5.2
5.2.1

Probleme rezolvate
Propriet
atile DVS

Problema 5.1 Fie A IRmn o matrice data si P IRmn , Q IRmm doua matrice
ortogonale.
a. Demonstrati c
a matricele B = AT si C = P AQ au aceleasi valori singulare cu
matricea A. Dac
a A = U V T este DVS al lui A scrieti DVS ale matricelor B si C.
b. Demonstrati c
a matricea D = A, unde IR, are valorile singulare i (D) =
||i (A) si scrieti DVS ale lui D.
Solutie. a. Transpusa lui A = U V T este B = AT = V T U T , ntrucat DVS lui B este
B = UB B VBT , unde UB = V , VB = U sunt ortogonale si B = T este diagonala. Dar B
si au acceeasi diagonal
a, deci (B) = (A). Similar, C = P AQ = P U V T Q = UC VCT ,
T
unde UC = P U , Vc = Q V , sunt ortogonale, este DVS lui C. Binenteles, (C) = (A).
b. Dac
a = 0, atunci D = 0 are toate valorile singulare egale cu zero si DVS lui D

U || V T =
este e.g. D (lu
and UD = Im si VD = In ). Daca 6= 0, atunci D = A = ||

UD D VDT , unde UD = || U si VD = V sunt ortogonale (verifica!) si D = || este


diagonal
a cu termeni diagonali pozitivi descrescatori i (D) = ||i (A).
Problema 5.2 a. Demonstrati ca norma matriceala Frobenius k kF , definita pentru toate
matricele A IRmn de
v
uX
n
q
q
um X
a2ij
kAkF = tr(AT A) = tr(AAT ) = t
i=1 j=1

si norma matriceal
a spectral
a k k2 , definita de
kAk2 =

max kAxk2 ,
kxk2 = 1

sunt invariante la transform


ari ortogonale, i.e.
kU T AkF = kAV kF = kAkF

kU T Ak2 = kAV k2 = kAk2 ,

unde U IRmm si V IRnn sunt ortogonale, si exprimati-le n functie de valorile singulare


ale lui A.
b. Demonstrati c
a
p
kAk2 kAkF rang(A)kAk2 .
c. Dac
a matricea A este p
atratica si nesingulara, exprimati numerele de conditionare
F = kAkF kA1 kF si 2 = kAk2 kA1 k2 n functie de valorile singulare A.
Solutie. a. Incepem prin a demonstra ca norma matriceala Frobenius este invariabila la
transform
ari ortogonale. Avem kU T Ak2F = tr(AT U U T A) = tr(AT A) = kAk2F si kAV k2F =
T T
tr(AV V A ) = tr(AAT ) = kAk2F . Daca A = U V T este DVS a lui A, atunci
q
kAkF = kkF = 12 + 12 + + r2 ,

SEMINAR 5. DESCOMPUNEREA VALORILOR SINGULARE

unde r este num


arul valorilor singulare nenule ale lui A.
Deoarece norma vectral
a euclidian
a este invarianta la transformarile ortogonale, i.e.
kQxk2 = kxk2 pentru toate matricele ortogonale Q si toti vectorii x, avem pentru norma
spectrala
kU T Ak2 = max kU T Axk2 = max kAxk2 = kAk2
kxk2 = 1
kxk2 = 1
si
kAV k2 =

max kAV xk2 = max kAwk2 = kAk2 ,


kxk2 = 1
kwk2 = 1

unde w = V x. Pentru a exprima kAk2 n functie de valorile singulare ale lui A avem:
kAk2 =

max kAxk2 = max kU V T xk2 = max kwk2 =


kxk2 = 1
kxk2 = 1
kwk2 = 1
q
12 w12 + 22 w22 + + n2 wn2 =
= max
kwk2 = 1
q
= max
12 (1 w22 wn2 ) + 22 w22 + + n2 wn2 =
kwk2 = 1
q
= max
12 + (22 12 )w22 + + (n2 12 )wn2 .
kwk2 = 1

Dar 1 i pentru toti i = 2 : n, deci i2 12 0 pentru toti i = 2 : n si maximul este


obtinut pentru wi = 0 pentru toti i = 2 : n. In concluzie
kAk2 = 1 ,
i.e. norma spectral
a a lui A este cea mai mare valoare singulara a lui A.
b. Rangul r = rang(A) al P
matricei A este numarul valorilor singulare nenule ale lui
r
2
2
A. Binenteles, kAk22 = 12
kAkF . Deoarece valorile
i=1 i = kAkF . Deci kAk2 P
r
singulare sunttotdeauna ordonate descrescator, avem kAk2F = i=1 i2 r12 = rkAk22 .
Deci kAkF rkAk2 .
Observatie. Dou
a norme matriceale si sunt numite echivalente daca exista doua
numere pozitive 1 si 2 astfel nc
at 1 (A) (A) 2 (A) pentru toate matricele A. In
concluzie k k2 si k kF sunt dou
a norme matriceale echivalente.
c. Daca matricea A este p
atratic
a (m = n) si nesingulara, atunci rangA = n, i.e. toate
valorile sale singulare sunt nenule. Deci, daca A = U V T este DVS lui A, atunci este
nesingulata si A1 = V 1 U T . Astfel, daca (A) = { 1 , 2 , . . . , n }, atunci valorile singulare ale lui A1 sunt (A1 ) = { 1/n , 1/n1 , . . . , 1/1 } (valorile singulare sunt totdeauna
ordonate descresc
ator!). Asadar avem
s
1
1
1
1
1
kA kF =
+ 2 + + 2 si kA1 k2 =
.
2
n
n1
1
n
In concluzie
F = kAkF kA1 kF =

s
12 + 22 + + n2

1
1
1
+ 2 + + 2
n2
n1
1

5.2. PROBLEME REZOLVATE


si
2 = kAk2 kA1 k2 =

1
.
n

Problema 5.3 Fie A IRnn o matrice simetrica, i.e. satisface conditia AT = A si


fie (A) = { 1 , 2 , . . . , n }, cu |1 | |2 | . . . |n | multimea valorilor sale proprii.
Demonstrati c
a valorile singulare ale lui A sunt i = |i |, i = 1 : n.
Solutie. Int
ai, matricele simetrice au spectre proprii reale si forma lor Schur este diagonala
(vezi problema rezolvat
a 4.7, seminar 4). Acum, fie S = QT AQ = = diag(1 , 2 , . . . , n )
T T
T T
T
cu Q ortogonal si |1 | |2 | . . . |
pn |. Rezulta Q
p A AQ =pQ A QQ AQ = =
2
2
2
2
T
2

diag(1 , 2 , . . . , n ). In concluzie, i = i (A A) = i (A ) = i = |i |, i = 1 : n.
Problema 5.4 Demonstrati c
a o matrice patratica are (cel putin) o valoare singulara zero
doar dac
a are o valoare proprie zero.
Q
Solutie.pFie A IRnn . In seminarul 4 am demonstrat ca detA = i . T
inand cont ca
i (A) = 2i (AT A) avem 0 (A) detA = 0 detAT A = 0 0 (A).
Problema 5.5 Fie Q IRmn o matrice cu coloanele ortogonale, i.e. QT Q = In .
a. C
at este kQk2 ?
b. Fie R IRpn , p m n + 1 o matrice obtinuta din Q prin eliminarea a cel mult
n 1 linii. Demonstrati c
a kRk2 = kQk2 .
Solutie. a. Deoarece QT Q = In , toate valorile singulare ale lui Q sunt egale cu 1. Rezulta
kQk2 = 1 = 1.
b. Pentru a ar
ata c
a kRk2 = 1, se observa ntai ca permutarea liniilor matricei este o
transformare ortogonal
a si c
a o transformare ortogonala nu schimba valorile singulare (vezi
problema rezolvat
a 4.1). Asadar, permutarile liniilor nu schimba norma spectrala. Deci, nu
pierdem din generalitate dac
a presupunem ca randurile

 k = m p n 1 eliminate din
R
matricea Q sunt ultimele, i.e. putem scrie Q =
. Fie R = U CV T DVS a matricei
T
R, unde C = diag(c1 , c2 , . . . cn ), si c1 c2 . . . cn 0 sunt valorile singulare ale lui R.
Dar QT Q = RT R + T T T = In . RezultapRT R = In V C 2 V T = V (In C 2 )V T = V S 2 V T ,
unde S = diag(s1 , s2 , . . . sn ), cu si = 1 c2i valorile singulare ale matricei R n ordine
cresc
atoare. Deoarece matricea T are cel mult n 1 linii, are cel mult n 1 valori singulare
nenule. In concluzie, s1 = 0, i.e. c1 = kRk2 = 1. Aparent, acesta este un rezultat uimitor:
eliminarea unui num
ar de elementele posibile nenule ai unei matrice nu schimba norma sa
spectral
a. Explicatia const
a n faptul ca o asemenea eliminare nu modifica cea mai mare
valoare singular
a care este norma spectrala.
Problema 5.6 Demonstrati c
a orice matrice m n reala este limita unei multimi de rang
maxim m n real matriceal. Interpretati importanta acestui rezultat pentru practica numeric
a.
Solutie. Fie A = U V T DVS matricei A, unde = diag(1 , 2 , . . . , p ), cu p = min(m, n).
(k)
(k)
(k)
Binenteles, exist
a multimea de numere reale (i )kIN ca limk i = i si i 6= 0

SEMINAR 5. DESCOMPUNEREA VALORILOR SINGULARE

def

(k)

(k)

(k)

def

pentru toti i si k. Dac


a definim matricele k = diag(1 , 2 , . . . , p ), si Ak = U k V T ,
atunci toate matricele Ak au rang maxim si limk Ak = A. Asta nseamna ca la apropierea
de oricare matrice mn (inclusiv matricea mn nula) exista matrice de rang maxim. Astfel,
ntr-un mediu de calcul aproximativ rangul matematic al unei matrice nu are releventa
deoarece erorile de rotunjire pot schimba rangul unei matrice date n rangul maxim. Aceasta
observatie subliniaz
a importanta conceptului de rang numeric.

5.2.2

Calculul DVS

Problema 5.7 Fie u IRm , v IRn doi vectori dati.


a. Care este DVS lui A = uv T ? C
at este rangul lui A ?
b. Demonstrati c
a orice matrice de rang 1 A IRmn poate fi scrisa sub forma A = bcT ,
m
n
unde b IR , c IR .
c. Daca m = n, propuneti un algoritm care sa calculeze DVS a lui A = In + uv T . Cat
este rangul lui A ?
Solutie. a. Dac
a U1 IRmm , V1 IRnn sunt reflectori Householder astfel luati ncat
m
U1 u = kuke1 IR si V1 v = kvke1 IRn , atunci


kukkvk 0
U1T AV1 =
IRmn
0
0
este DVS a lui A. Valorile singulare sunt 1 = kukkvk si i = 0 pentru i > 1. Binenteles,
rank(A) = 1 dac
a u 6= 0, v =
6 0, si zero altfel.
b. Daca matricea A IRmn are rangul 1, atunci valorile sale singulare sunt 1 6= 0
si i = 0 pentru i > 1. In concluzie, din DVS a lui A, i.e U T AV = = diag(1 , 0, . . . , 0),
avem
A = U V T = U (:, 1)1 (V (:, 1))T = bcT ,
unde e.g. b = 1 U (:, 1) IRm , c = V (:, 1) IRn .
c. Daca u = 0 si/sau v = 0, atunci A = In si luand U = V = In matricea A este
propriul sau DVS cu toate valorile proprii egale cu 1. Presupunand acum ca u 6= 0, v 6= 0
v
u
si v =
. Acum putem construi o matrice ortogonala W Rnn
si rezulta u
=
kuk
kvk
astfel ncat W u

v (vezi problema rezolvata 3.4 din seminarul 3). Fie w = W u


IRn cu,
binenteles, kwk = 1. Proced
and la fel ca n problema rezolvata 3.3 (vezi seminarul 3) putem
acum calcula o matrice Y IRn(n2) cu coloane ortogonale (i.e. Y T Y = In2 ) la fel cum
matricea U = [
v w Y ] s
a fie ortonolal
a. Desigur, matricea V = [w v Y ] este de asemenea
ortogonala. Atunci
T
v
U T AV = U T (I + uv T )V = wT (I + uv T )[w v Y ] =
YT
vT (I + uv T )w

= wT (I + uv T )w
Y T (I + uv T )w

vT (I + uv T )
v vT (I + uv T )Y
wT (I + uv T )
v wT (I + uv T )Y .
T
T
Y (I + uv )
v
Y TY

5.2. PROBLEME REZOLVATE

Dar, v T Y = 0, vT Y = 0, v T w = 0, Y T w = 0, Y T Y = In2 si wT w = 1, vT v = 1. In
concluzie, = 1 + vT uv T v = 1 + v T u si = wT uv T v obtinem

0 1 + vT uv T v
0
0
0
0
wT uv T v
0 = 1
U T AV = 1
0 0 In2
0
0
In2
si problema a fost redus
a la cazul 2 2. Intradevar, fie matricea 2 2 B =
are DVS UBT BVB = B . Atunci
 T


VB
UB
0
T
T

U AV =
U AV
0
0 In2

0
In2


=

B
0

0
1


care

In2

este diagonal
a si dac
a 1 (B) 2 (B) 1 este DVS lui A. In orice caz, valorile singulare
ale matricei A sunt (A) = (B) (In2 ), i.e. n 2 valori singulare sunt egale cu 1 si
celelalte dou
a sunt cele ale lui B.
Observatie. Cu toate c
a n cazul general valorile singulare ale unei matrice A IRmn cu
min(m, n) > 4 nu pot fi calculate ntr-un numar finit de operatii aritmetice, n unele cazuri
speciale, ca cel de mai sus, este posibil.
Problema 5.8 Consider
am o matrice superior bidiagonala J IRnn definita de vectorul
n
f IR ,al elementelor diagonale si de vectorul g IRn1 format din elementele primei
supradiagonale diagonalei, i.e.

f1 g1

f2 . .
.
J =

..

. gn1
fn
Aratati c
a dac
a matricea J are doua valori singulare egale i = i+1 , atunci f si/sau g are
un element nul.
Solutie. Matricea T = J T J este tridiagonala, simetrica si pozitiv semidefinita. Deoarece
i (T ) = i2 (J), matricea T are (cel putin) doua valori proprii egale. Vom arata ca n aceste
conditii matricea T este reductibil
a, i.e exista i astfel ncat T (i+1, i) = gi fi = 0. In concluzie,
gi = 0 si/sau fi = 0. Fie (T ) valoarea proprie dubla a lui T . Atunci exista doi vectori
proprii ortogonali x si y, asociati valorilor proprii , i.e. T x = x si T y = y, cu y T x = 0.
Presupunem c
a matricea T este ireductibila, i.e. T (i + 1, i) 6= 0 pentru
 toti i = 1 : n 1.
S11 S12
Consider
am matricea S = T In si partitionand-o sub forma S =
, unde
S21 S22
S11 = S(1 : n 1, 1) IR(n1)1 si S12 = S(1 : n 1, 2 : n) IR(n1)(n1) deoarece T este
1
ireductibil
a, blocul S12 este nesingular. Atunci x(2 : n) = S12
S11 x(1). Deoarece x 6= 0,
1
avem x(1) 6= 0. Similar y(2 : n) = S12 S11 y(1) cu y(1) 6= 0. Rezulta ca vectorii x si y sunt
coliniari, ceea ce reprezint
a o contradictie cu faptul ca sunt ortogonali. In concluzie T nu
poate fi ireductibil. Demonstratia este completa.

SEMINAR 5. DESCOMPUNEREA VALORILOR SINGULARE

Problema 5.9 Adaptati algoritmul JQ pentru o reducere eficienta a unei matrice superior
triunghiulare A IRnn la forma superior bidiagonala folosind transformari ortogonale de
echivalenta.
Solutie. Sa introducem asa numitele rotatii modificate Pij , i < j, care fac sa se anuleze
elementul xi pentru un vector dat x IRn , i.e. (PijT x)(i) = 0 (n loc sa se anuleze elementul
xj ca pentru rotatiile obisnuite). Este usor de vazut ca scalarii definitori c, s si x PijT x
pot fi calculati n acest caz dup
a cum urmeaza:
q
1. = x2i + x2j
xj
2. c =

xi
3. s =

4. xi 0
5. xj .
Pentru a exploata structura superior triunghiulara a lui A, vom folosi o secventa de rotatii
plane modificate ca n urm
atoare schem
a de calcul:
1. pentru k = n : 1 : 3
1. pentru i = 1 : k 2
1. Se calculeaz
a rotatia plana modificata Pi,i+1 astfel
T
ca (Pi,i+1
A)(i, k) = 0.
T
2. A Pi,i+1
A % structura este modificata n pozitia (i + 1, i).
3. Se calculeaz
a rotatia plana modificata Qi,i+1 astfel
ca (AQi,i+1 )(i + 1, i) = 0.
4. A AQi,i+1 .
Cand n = 4, primul pas al ciclului extern pentru este exemplificat mai jos:

T
, A AQ12 =
A P12
A=

0
0

0
T
, A AQ23 =
A P23 A =

unde + reprezint
a zerourile modificate, reprezinta ultimele zerouri introduse si 0 reprezinta
zerourile introduse la pasii anteriori.
Acum este usor s
a transform
am schema de calcul ntr-un algoritm detaliat.
1. pentru k = n : 1 : 3
1. pentru iq
=1:k2
1. =

a2ik + a2i+1,k

5.2. PROBLEME REZOLVATE

ai+1,k

ai,k
s=

aik 0
ai+1,k
ai+1,i = saii
pentru j = i + 1 : k 1
1. = aij
2. aij = caij sai+1,j
3. q
ai+1,i = s + cai+1,j

2. c =
3.
4.
5.
6.
7.

a2ik + a2i+1,k
ai+1,i
9. c =

ai+1,i+1
10. s =

11. ai+1,i 0
12. ai+1,i+1
13. pentru l = 1 : i
1. = al,i
2. ali = ali c + al,i+1 s
3. al,i+1 = s + al,i+1 s.

8. =

Num
arul de flopi necesari algoritmului (care nu cumuleaza si transformarile) este Nf l 2n3 ,
n comparatie cu Nf l 8n3 /3 flopi necesari algoritmului JQ.
Problema 5.10 Adaptati algoritmul JQ pentru o reducere eficienta a unei matrice tridiagonale T IRnn la o form
a superior bidiagonala folosind transformari ortogonale de
echivalent
a.
Solutie. S
a aplic
am nt
ai o secventa rotatii plane pentru a reduce matricea tridiagonala
la forma superior triunghiular
a (cu numai doua supradiagonale nenule), ca n urmatoarea
schem
a de calcul:
1. pentru k = 1 : n 1
1. calculeaz
a rotatia plana Pk,k+1
T
ca (Pk,k+1
T )(k + 1, k) = 0.
T
2. T Pk,k+1
T.
Acum, putem adapta solutia baz
andu-ne pe solutia problemei rezolvate anterior:
1. p = n
2. pentru k = n : 1 : 3
1. p = max{1, p 2}
2. pentru i = p : k 2
1. Se calculeaz
a rotatia plana modificata Pi,i+1 astfel
T
ca (Pi,i+1
A)(i, k) = 0.
T
2. A Pi,i+1
A % structura este modificata n pozitia (i + 1, i).

10

SEMINAR 5. DESCOMPUNEREA VALORILOR SINGULARE

3. Se calculeaz
a rotatia plana modificata Qi,i+1 astfel
ca (AQi,i+1 )(i + 1, i) = 0.
4. A AQi,i+1 .
Observam ca pentru k = n trebuie s
a eliminam doar un element doua elemente tn3,n1
si tn4,n1 deoarece termenul zero tn4,n1 a fost modificat prin nmultire la dreapta cu
Qn1,n etc. Pentru a ne descurca cu aceasta modificare structurala am introdus variabila
ntreaga p. Algoritmul detaliat este:
1. pentru kq= 1 : n 1
1. = t2kk + t2k+1,k
tk,k
2. c =

tk+1,k
3. s =

4. tkk
5. tk+1,k 0
6. = tk,k+1
7. tk,k+1 = ctk,k+1 stk+1,k+1
8. tk+1,k+1 = s + ctk+1,k+1
9. dac
a k <n1
1. tk,k+2 = stk+1,k+2
2. tk+1,k+2 = ctk+1,k+2
2. p = n
3. pentru k = n : 1 : 3
1. p = max{1, p 2}
2. pentru iq
=p:k2
1. =

t2ik + t2i+1,k

ti+1,k

ti,k
s=

tik 0
ti+1,k
ti+1,i = stii
tii = ctii
pentru j = i + 1 : k 1
1. = tij
2. tij = ctij sti+1,j
3. q
ti+1,i = s + cti+1,j

2. c =
3.
4.
5.
6.
7.
8.

9. =

ti+1,i+1

ti+1,i
s=

ti+1,i 0
ti+1,i+1
q = max{1, p 2}

10. c =
11.
12.
13.
14.

t2i+1,i + t2i+1,i+1

5.2. PROBLEME REZOLVATE

11

15. pentru l = q : i
1. = tli
2. tli = tli c tl,i+1 s
3. tl,i+1 = s + tl,i+1 c.
Problema 5.11 Fie A IRmn , cu m < n, o matrice data. Scrieti un algoritm
 eficient
pentru calculul matricelor ortogonale U IRmm , V IRnn astfel ca U T AV = B 0
cu B IRmm superior bidiagonala.
Solutie. Aplic
am algoritmul JQ pentru a reduce matricea A la o forma superior bidiagonala
obtinem:

0 0 0
0 0 0




T
A U AV = B C ,
C = ... ... ...

0 0 0
x 0 0
Pentru ca termenii nenuli s
a dispara (m, n+1) aplicam n partea dreapta o secventa de rotatii
plane A APm,m+1 Pm1,m+1 . . . P1,m+1 care muta termenii nenuli n sus pe coloana m + 1
pana c
and sunt eliminati, ca n exemplul urmator cu m = 3, n = 5:



, A AP34 =
+ ,

A=

+

, A AP34 =
.


A AP24 =

Schema de calcul este:


1. A B = JQ(A)
2. pentru k = m : 1 : 1
1. Se calculeaz
a rotatia plana Pi,m+1 astfel
ca (APi,m+1 )(i, m + 1) = 0.
2. A APi,m+1
si algoritmul detaliat:
1. A B = JQ(A)
2. pentru kq= m : 1 : 1
1. =

2.
3.
4.
5.
6.

ai i2 + a2i,m=1

c = aii /
s = ai,m+1 /
aii =
ai,m+1 = 0
dac
ai>1
1. ai1,m+1 = ai1,i s
2. ai1,i = ai1,i c.

Efortul de calcul cel mai mare este n executarea procedurii JQ.

12

5.2.3

SEMINAR 5. DESCOMPUNEREA VALORILOR SINGULARE

Aplicatiile SVD

Problema 5.12 Consider


am matricele A IRmm , B IRnn , C, D IRmn si sistemul
matriceal:

AX Y B = C
XB T AT Y = D
a. Aratati c
a sistemul matriceal de mai sus are o solutie unica (X, Y ) IRmn IRmn
daca si numai dac
a (A) (B) = .
b. Presupun
and conditia de mai sus satisfacuta, scrieti un algoritm care sa calculeze
solutia (X, Y ).
Solutie. a. Fie descompunerea valorilor singulare ale lui A si B: unde A = UA A VAT ,
B = UB B VBT . Folosindu-le sistemul matriceal devine:
(
UA A VAT X Y UB B VBT = C
,
XVB TB UBT VA TA UAT Y = D
sau

Y B = C
A X
,
T T Y = D

X
B
A

unde
= VAT XVB ,
X

Y = UAT Y UB ,

C = UAT XVB ,

= VAT XUB .
D

Binenteles sistemul matriceal initial are o solutie unica daca si numai daca sistemul transformat are o solutie unic
a. Dar sistemul matriceal transformat poate fi scris ca un set de
mn sisteme liniare de dou
a ecuatii cu dou
a necunoscute, luand ecuatiile scalare (ij) din cele
doua ecuati matricele:


 

(A)
(B)
i
j
cij
ij
x

=
,
(B)
(A)
yij
dij
j
i
(A)

(B)

unde i , i = 1 : m sunt valorile singulare ale lui A si j , j = 1 : n sunt valorile singulare


ale lui B. Fiecare dintre aceste sisteme are o solutie unica (xij , yij ) daca si numai daca
(A)

(B)

este nesingulara, i.e. i(A) 6= j(B) (deoarece valorile singulare


(B)
(A)
j
i
sunt numere reale pozitive). Toate i si j aceste conditii sunt echivalente cu (A) (B) = .
b. Pentru a rezolva sistemul matriceal putem proceda ca mai sus. Daca dvs este metoda
pentru a calcula DVS unei matrice date, atunci putem folosi urmatoarea schema de calcul:
matricea

1.
2.
3.
4.
5.

[ UA , A , VA ] = svd(A)
[ UB , B , VB ] = svd(B)
C = UAT XVB
= V T XUB
D
A
pentru i = 1 : m
1. pentru j = 1 : n

5.2. PROBLEME REZOLVATE

13

1. rezolv
a sistemul liniar

(A)

(B)

(B)

(A)

j
i

x
ij
yij


=

cij
dij


.

T
6. X = VA XV
B
7. Y = UA Y UBT .
Detaliile sunt l
asate pentru studenti.
Problema 5.13 Consider
am matricea A IRmn si vectorul b IRm .
a. Ar
atati c
a pentru > 0 problema de minimizare


minn kb Axk2 + kxk2
xIR
admite o solutie unic
a x .
b. Acest lucru se nt
ampl
a si pentru & 0 ?
c. Scrieti un algoritm eficient pentru a calcula solutia x .
d. Ar
atati c
a sistemul liniar
(AT A + In )(AT A + In )y = ( )AT b
not

este satisf
acut de y = x x .
Solutie. a. Folosind DVS A = U V T si tinand cont ca norma euclidiana este invarianta la transform
arile ortogonale, problema devine echivalenta cu urmatoarea problema de
minimizare:




minn kb Axk2 + kxk2 = minn kb U V T xk2 + kV T xk2 =
xIR
xIR
= minn {kd yk2 + kyk2 },
yIR
unde d = U T b si y = V T x. Binenteles aceasta problema este simpla si poate fi rezolvata
usor. Pentru aceasta, fie r rangul lui A. Avem
kd yk2 + kyk2 =

n
X


(di i yi )2 + yi2 =

i=1

r
X

n
X

d2i 2di i yi + (i2 + )yi2 +

i=1
n
X


d2i + yi2 =

i=r+1

2
di
=
i2 +
i=1

di i

i2 +

!2
n
X
i2 + yi +
i=r+1

In concluzie minimul este atins pentru y unic dat de


yi =

di i
, i = 1 : r,
i2 +

yi = 0, i = r + 1 : n


d2i + yi2 .

14

SEMINAR 5. DESCOMPUNEREA VALORILOR SINGULARE

si valoarea sa este
minn {kd yk2 + kyk2 } =
yIR

r
n
X
X
d2i
+
d2i .
2+

i
i=1
i=r+1

Pentru problema initial


a de minimizare solutia este unica si data de x = V y = V1 y(1 :
r), unde V1 = V (:, 1 : r). Observ
am c
a pentru 0 diagonala matricei 21 + Ir este
2
nesingulara. Avem y(1 : r) = (1 + Ir )1 1 d(1 : r). Dar d(1 : r) = (U T b)(1 : r) = U1T b,
unde U1 = U (:, 1 : r). In concluzie, solutia problemei initiale de minimizare poate fi scrisa
sub forma
x = V1 (21 + Ir )1 1 U1T b.
b. Cand & 0 obtinem
T
#
x0 = V1 (21 )1 1 U1T b = V1 1
1 U1 b = A b,

unde A# este pseudoinversa lui A, i.e. x0 este solutia problemei celor mai mici patrate
pentru sistemul liniar Ax = b.
c. Algoritmul pentru calcularea vectorului x :
1. [ U, , V ] = dvs(A)
2. d = (U (:, 1 : r))T b
3. pentru i = 1 : r
di i
1. di = 2
i +
4. x = V (:, 1 : r)d.
Detaliile sunt l
asate pentru studenti.
d. Pentru a ar
ata c
a
(AT A + In )(AT A + In )(x x ) = ( )AT b
observam nt
ai c
a, cu notati uzuale, AT A = V1 21 V1T si, n concluzie
(AT A + In )x = (V1 21 V1T + In )V1 (21 + Ir )1 1 U1T b =
= V1 (21 + In )(21 + Ir )1 1 U1T b = V1 1 U1T b = AT b
pentru {, }, deoarece V1T V1 = Ir . Dar matricele AT A + In si AT A + In comuta.
Atunci, avem
(AT A + In )(AT A + In )x = (AT A + In )(AT A + In )x =
= (AT A + In )AT b = AT AAT b + AT b.
Scazand,
(AT A + In )(AT A + In )x = AT AAT b + AT b.
Inlocuind ultimele dou
a relatii obtinem rezultatul dorit.

5.3. PROBLEME PROPUSE

5.3

15

Probleme propuse

Problema 5.14 Care sunt valorile singulare ale matricelor:



A=

1 1 2
1
0 1


,

1
B= 2
0

2
1 ?
1

6
3 1
3 3 este normala, i.e. AAT = AT A,
Problema 5.15 Ar
atati c
a matricea A = 1
3 1 3
si calculati valorile sale proprii si valorile sale singulare. Verificati ca i = |i |, i = 1 : 3.
Problema
5.16

 a. Dati formule explicite pentru a calcula valorile singulare ale matricei


1 2
A =
. Aplicati-le pentru a calcula valorile singulare pentru A =
si
3 4
 
1 3
B=
.
2 4
b. Aceeasi problem
a pentru cazul
i.e. dati formule explicite pentru a calcula
 simetric,


valorile singulare ale matricei A =
. Aplicati-le pentru a calcula valorile singulare




1 2
1 1
pentru A =
si B =
.
2 1
1 1
Indicatie: a.
s 

q
1
2
2
2
2
2
2
2
2
2
2
2
2
+ + + + ( ) + ( ) + 2( + ) + 2( + )
,
1 =
2
etc.
Problema 5.17 Ar
atati c
a dac
a A IRmn are rangul n, atunci kA(AT A)1 AT k2 = 1.
Problema 5.18 Calculati valorile singulare pentru o matrice ortogonala Q IRnn .
Problema 5.19 Fie V IRmk o matrice cu coloanele ortogonale. Matricea P = V V T
este numit
a matrice de proiectie ortogonal
a pe subspatiul liniar ImV .
a. Ar
atati c
a matricea Q = I 2P este ortogonala.
b. Calculati valorile singulare ale unei matrice de proiectie ortogonala.
Problema 5.20 Fie A, B IRnn doua matrice patratice. Am demonstrat ca AB si BA au
aceeleasi valori proprii. Acest lucru este adevarat si pentru valorile singulare ale matricelor
AB si BA ?

16

SEMINAR 5. DESCOMPUNEREA VALORILOR SINGULARE

5.4

Bibliografie

1. B. Jora, B. Dumitrescu, C. Oar


a, Numerical Methods, UPB, Bucharest, 1995.
2. G.W. Stewart, Introduction to Matrix Computations, Academic Press, 1973.
3. G. Golub, Ch. Van Loan, Matrix Computations, 3-rd edition, John Hopkins University Press, 1998.
4. G.W. Stewart, Matrix Algorithms, vol.1: Basic Decompositions, SIAM, 1999.
5. G.W. Stewart, Matrix Algorithms, vol.2: Eigensystems, SIAM, 2001.
6. B. Dumitrescu, C. Popeea, B. Jora, Metode de calcul numeric matriceal. Algoritmi fundamentali, ALL, Bucuresti, 1998.

5.5. PROGRAME MATLAB

5.5

17

Programe MATLAB

In aceast
a sectiune sunt date programele MATLAB pentru implementarea algoritmilor
prezentati n acest seminar. Programele au fost testate si pot fi obtinute de la autorul
lor mentionat n comentariile atasate.

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:

function [ A ]=JQ ortogonal(A)


%
% Se da o matrice A(nxm). Algoritmul ofera o metoda eficienta pentu
% calculul matricelor ortogonale U (mxm) si V (nxn) cu U transpus*A*V=[ B 0 ].
% B este o matrice superior bidiagonala.
% Apelul: A=JQ ortogonal(A)
%
% Dumitru Iulia, mai 2006.
%
[ n,m ]=size(A);
B=JQ(A);
A=B;
for k=m:-1:1
rho=sqrt(A(i,i)*A(i,i)+A(i,m=1)*A(i,m=1));
c=A(i,i)/rho;
s=A(i,m+1)/rho
A(i,i)=rho
A(i,m+1)=0;
if i>1
A(i-1,m+1)=A(i-1,i)*s;
A(i-1,i)=A(i-1,i)*c;
end
end

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:

function [ T ]=JQ tridiagonal(T);


%
% Se da o matrice patratica, superior tridiagonala T. Algoritmul ofera o
% reducere eficienta a matricei A la forma superior bidiagonala, folosind
% algoritmul JQ si transformarile ortogonale.
% Apelul: T=JQ tridiagonal(T)
%
% Dumitru Iulia, mai 2006.
%
[ n,m ]=size(T);
%analizam daca matricea e patratica

18

14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:

SEMINAR 5. DESCOMPUNEREA VALORILOR SINGULARE

if n=m
error(Matricea nu e patratica);
end
for i=1:n-2
for j=i+2:n
if T(i,j)=0
error(Matricea nu e tridiagonala)
end
end
end
for i=3:n
for j=1:i-2
if T(i,j)=0
error(Matricea nu e tridiagonala)
end
end
end
for k=1:n-1
rho=sqrt(T(k,k)*T(k,k)+T(k+1,k)*T(k+1,k));
c=T(k,k)/rho;
s=-T(k+1,k)/rho;
T(k,k) =rho;
T(k+1,k)=0;
rho=T(k,k+1);
T(k,k+1)=c*T(k,k+1)-s*T(k+1,k+1);
T(k+1,k+1)=s*rho+c*T(k+1,k+1);
if k<n-1
T(k,k+2)=-s*T(k+1,k+2);
T(k+1,k+2)=c*T(k+1,k+2);
end
end
p=n;
for k=n:-1:3
max=1;
if max<p-2
max=p-2;
end
p=max;
for i=p:k-2
rho=sqrt(T(i,k)*T(i,k)+T(i+1,k)*T(i+1,k));
c=T(i+1,k)/rho;
s=T(i,k)/rho;
T(i,k) =0;
T(i+1,k)=rho;
T(i+1,i)=s*T(i,i);

5.5. PROGRAME MATLAB

61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:

T(i,i)=c*T(i,i);
for j=i+1:k-1
tau=T(i,j);
T(i,j)=c*T(i,j)-s*T(i+1,j);
T(i+1,i)=s*tau + c*T(i+1,j);
end
rho=sqrt(T(i+1,i)*T(i+1,i)+T(i+1,i+1)*T(i+1,i+1));
c=T(i+1,i+1)/rho;
s=T(i+1,i)/rho;
T(i+1,i)=0;
T(i+1,i+1)=rho;
max=1;
if max<p-2
max=p-2;
end
q=max;
for l=q:i
tau=T(l,i);
T(l,i)=T(l,i)*c-T(l,i+1)*s;
T(l,i+1)=tau*s+T(l,i+1)*c;
end
end
end

function [ A ]=JQ triunghiular(A);


%
% Se da o matrice patratica, superior triunghiulara A. Algoritmul ofera o
% reducere eficienta a matricei A la forma superior bidiagonala, folosind
% algoritmul JQ si transformarile ortogonale.
% Apelul: A=JQ triunghiular(A);
%
% Dumitru Iulia, mai 2006.
%
[ n,m ]=size(A);
%analizam daca matricea e patratica
if n=m
error(Matricea nu e patratica);
end
for i=1:n
for j=1:n
if i>j
if A(i,j)=0
error(Matricea nu este superior trunghiulara);

19

20

23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:

SEMINAR 5. DESCOMPUNEREA VALORILOR SINGULARE

end
end
end
end
for k=n:-1:3
for i=1:k-2
rho=sqrt(A(i,k)*A(i,k)+A(i+1,k)*A(i+1,k));
c=A(i+1,k)/rho;
s=A(i,k)/rho;
A(i,k) =0;
A(i+1,k)=rho;
A(i+1,i)=s*A(i,i);
for j=i+1:k-1
tau=A(i,j);
A(i,j)=c*A(i,j)-s*A(i+1,j);
A(i+1,i)=s*tau + c*A(i+1,j);
end
rho=sqrt(A(i,k)*A(i,k)+A(i+1,k)*A(i+1,k));
c=A(i+1,i)/rho;
s=A(i+1,i+1)/rho;
A(i+1,i)=0;
A(i+1,i+1)=rho;
for l=1:i
tau=A(l,i);
A(l,i)=A(l,i)*c+A(l,i+1)*s;
A(l,i+1)=-tau*s+A(l,i+1)*s;
end
end
end

Seminar 6

Probleme de examen
Acest seminar are rolul de a v
a pregati pentru examen.
Examenul final este unul scris, la care trebuie sa rezolvati un set de probleme personalizat.
Nu uitati c
a puteti folosi orice material scris doriti. Puteti de asemenea sa folositi orice tip
de calculator care nu este conectat la vreo sursa externa de informatii (cum ar fi conexiunea
wireless la INTERNET). Folosirea telefoanelor mobile si orice fel de comunicare cu colegii
nu este permis
a. Pedeapsa pentru o actiune interzisa este pierderea examenului.
D
am n continuare c
ateva exemple exemple de seturi de probleme pentru examenul final.

6.1

Setul de probleme nr. 1

1. Matricea A IRnn are elemente nenule numai pe diagonala si pe prima coloana. Scrieti
un algoritm eficient care s
a:
a. calculeze kAk1 , kAk kAkF ;
b. rezolve Ax = b, unde b IRn este dat;
c. calculeze A1 .
2. a. Adaptati algoritmul de factorizare Crout fara pivotare pentru o matrice nesingulara
si inferior Hessenberg H IRnn avand toate submatricele lider principal nesingulare.
b. Folosind rezultatul algoritmului precedent, scrieti un algoritm care sa rezolve sistemul
Dx = H 1 b, unde D IRnn este o matrice diagonala nesingulara iar b IRn este un vector
dat. At
at matricea D c
at si vectorul b sunt date.
3. Fie U1 IRmm un reflector elementar dat (de indice 1) definit de vectorul u1 IRm .
Scrieti un algoritm eficient care s
a
a. calculeze U1 A, unde A IRmn este dat;
b. rezolve sistemul U1 x = b, cu b IRm dat;
4. Fie b IRm dat. Scrieti un algoritm care sa calculeze m 1 rotatii G1 , G2 , . . . , Gm1
astfel nc
at Gm1 . . . G2 G1 b = em , unde = kbk2 . (Amintiti-va ca em este vectorul unitate
de indice m.)

SEMINAR 6. EXAMINARE

6.1.1

Solutia problemelor din setul nr. 1

Observatie Programele MATLAB de implementare a algoritmilor elaborati sunt prezentati n Anexa


Problema 1. Matricea dat
a A IRnn are elemente nenule numai pe diagonal
a si pe prima
coloan
a, astfel A este o matrice inferior triunghiular
a cu urm
atoarea structur
a.

A=

a11
a21
a31
..
.
an1

0
a22
0
..
.
0

0
0
a33
..
.
0

..
.

0
0
0
..
.

ann

a. Exploat
and structura matricei avem:

!
= kAk1 = max

j=1:n

|aij |

!
X

= max

= kAk = max

i=1:n

i=1:n

!
X

|ai1 |, max (|ajj |)


j=2:n

i=1:n

|aij |

= max |a11 |, max (|ai1 | + |aii |) ,


i=2:n

j=1:n

v
v
u
uX
n
n
X
u
u n X
= kAkF = t
a2ij = ta211 +
(a2i1 + a2ii ).
i=1 j=1

i=2

Astfel, un algoritm eficient care calculeaz


a cele trei norme ale matricei este:
1. = 0
2. pentru i = 1 : n
1. = + |ai1 |
3. pentru j = 2 : n
1. dac
a |ajj | >
1. = |ajj |
4. = |a11 |
5. pentru i = 2 : n
1. = |ai1 | + |aii |
2. dac
a>
1. =
6. = a211
7. pentru i = 2 : n
1. = + a2i1 + a2ii

8. =
b. Sistemul Ax = b, unde b IRn este dat, este inferior triunghiular si are o solutie unic
a
datorit
a faptului c
a matricea A este nesingular
a, ntruc
at aii 6= 0 oricare ar fi i = 1 : n. Pentru
a calcula x vom adapta algoritmul de substitutie nainte la structura matricei A. Ecuatia i este
ai1 x1 + aii xi = bi , asadar vom folosi formula xi = (bi ai1 x1 )/aii . Algoritmul este
1. x1 = b1 /a11
2. pentru i = 2 : n
1. xi = (bi ai1 x1 )/aii

6.1. SETUL DE PROBLEME NR. 1

c. Solutia 1. Pentru a calcula X = A1 vom rezolva sistemul liniar matriceal AX = Im , care


este echivalent cu rezolvarea sistemelor binare Axj = ej , j = 1 : n, unde xj = X(:, j) este coloana
j a lui X si ej = Im (:, j) este coloana j a matricei unitate Im . Observati mai nt
ai c
a matricea
X = A1 este inferior triunghiular
a deoarece A este inferior triunghiular
a. Astfel xj (1 : j 1) = 0.
La fel, ca n cazul algoritmului general de inversare a matricelor inferior triunghiulare (vezi cursul),
vectorul xj (j : n) este solutia sistemului liniar inferior triunghiular
1
0
nj+1

.
e1 = ej (j : n) =
... IR
0

A(j : n, j : n)xj (j : n) = e1 ,

unde

Datorit
a structurii matricei A, pentru j = 2 : n matricea A(j : n, j : n) este una diagonal
a si, astfel,
solutia sistemului de mai sus pentru j = 2 : n este
1/ajj
0

xj (j : n) =
... ,
0

astfel

xj =

1
ej IRn .
ajj

Prima coloan
a a lui X poate fi calculat
a de algoritmul de la punctul b) pentru b = e1 . In concluzie,
matricea X = A1 are aceeasi structur
a ca si A si poate fi calculat
a eficient de urm
atorul algoritm.
1. x11 = 1/a11
2. pentru i = 2 : n
1. xi1 = ai1 x11 /aii
3. pentru j = 2 : n
1. pentru i = 1 : n
1. xij = 0
2. xjj = 1/ajj
Solutia 2. Fie D = diag(A) matricea diagonal
a nesingular
a
a11
0
D=
...
0

0
a22
..
.
0

..
.

0
0
..
.

ann

si definim
1
a21 /a22

M1 = D1 A =
..

.
an1 /ann

0
1
..
.
0

..
.

0
0
T
..
= In m1 e1 ,
.
1

0
a21 /a22

m1 =
..

.
an1 /ann

unde

care este o matrice inferior triunghiular


a elementar
a de ordin n si indice 1. Deci (vezi cursul),
inversa sa este Y = M11 = In + m1 eT1 . Astfel,
1/a11
0
=
...
0

X = A1 = D1 M11

0
1/a22
..
.
0

..
.

0
1
0
a21 /a22

..
..

.
.
1/ann
an1 /ann

0
1
..
.
0

..
.

0
0
..
=
.
1

SEMINAR 6. EXAMINARE

1/a11
a21 /(a22 a11 )
=
..

.
an1 /(ann a11 )

..
.

0
1/a22
..
.
0

0
0

..

.
1/ann

Algoritmul explicit este


1. x11 = 1/a11
2. pentru i = 2 : n
1. xi1 = ai1 /(a11 aii )
3. pentru j = 2 : n
1. pentru i = 1 : n
1. xij = 0
2. xjj = 1/ajj
cu acelasi num
ar de operatii (flops) Nf l 3n cu solutia 1.
Observatie. O solutie e suficient
a pentru a obtine punctajul maxim.
Problema 2. a. Algoritmul de factorizare Crout f
ar
a pivotare pentru o matrice inferior
Hessenberg H = L U poate fi obtinut n aceeasi manier
a ca si algoritmul general (vezi cursul),
calcul
and, n ordine direct
a, o coloana a matricei inferior triunghiulare L si linia corespunz
atoare a
matricei superior triunghiulare unitate U . Utiliz
and identitatea

h11

h12

h21
..
.

h22
..
.

hn1,1
hn1

hn1,2
hn2

l11
l21
..
.

l22
..
.

ln1

ln1
ln2

l
n1,1

..
.

..
.
..
.

0
..
.

0
..
.

hn1,n1
hn,n1

hn1,n
hnn

0
0
..
.
ln1,n1
ln,n1

0
0
..
.
0

lnn

1
0
..
.
0
0

u12
1
..
.
0
0

..
.

u1,n1
u2,n1
..
.
1
0

u1n
u2n
..
.
un1,n
1

putem continua dup


a cum urmeaz
a.
Pas 1. Avem hi1 = li1 1, astfel li1 = hi1 , i = 1 : n. Atunci h1,j = l11 u1j , astfel u12 = h12 /l11 ,
si u2j = 0 pentru j = 3 : n. Observati c
a matricea U este bidiagonal
a pe prima linie.
Pas k. Presupunem c
a am calculat primele k 1 coloane ale matricei L si primele k 1 linii
ale matricei U si c
a matricea U este superior bidiagonal
a pe primele k 1 linii. Avem hik =
li,k1 uk1,k + lik 1, astfel
lik = hik li,k1 uk1,k ,

i = 1 : n.

Atunci, hk,j = lkk ukj si datorit


a faptului c
a ukj = 0 pentru j = k + 2 : n avem
uk,k+1 = hk,k+1 /lkk

si

ukj = 0 pentru j = k + 1 : n.

Astfel, matricea U este bidiagonal


a pe linia k. Prin inductie, matricea U va fi superior bidiagonal
a.
Expresiile de mai sus pentru elementele matricelor L si U duc la urm
atorul algoritm Crout
adaptat pentru matrice inferioare Hessenberg.

6.1. SETUL DE PROBLEME NR. 1

1. pentru i = 1 : n
1. pentru j = 1 : n
1. lij = 0
2. uij = 0
2. uii = 1
2. pentru i = 1 : n
1. li1 = hi1
3. u12 = h12 /l11
4. pentru k = 2 : n
1. pentru i = k : n
1. lik = hik li,k1 uk1,k
2. dac
ak=n
1. STOP
3. uk,k+1 = hk,k+1 /lkk
Evident, matricea Hessenberg H poate fi suprascris
a de matricea L si de matricea U (except
and
diagonala). Num
arul de operatii (flops) necesar algoritmului este Nf l 3n.
b. Sistemul Dx = H 1 b este echivalent cu HDx = b si folosind algoritmul de factorizare Crout
de la punctul precedent sistemul se transform
a n LU Dx = b. Astfel, not
and Dx = y si U y = z o
variant
a eficient
a pentru a calcula x este
1. Se rezolv
a sistemul inferior triunghiular Lz = b
2. Se rezolv
a sistemul superior bidiagonal U y = z
3. Se rezolv
a sistemul diagonal Dx = y
care este detaliat
a n urm
atorul algoritm
1. z = LT RIS(L, b)
2. yn = zn
3. pentru i = n 1 : 1 : 1
1. yi = zi ui,i+1 zi+1
4. pentru i = 1 : n
1. xi = yi /dii
Efortul de calcul este Nf l n2 operatii (flops).
Problema 3.
a. Pentru a calcula B = U1 A, unde A IRmn este dat, vom partitiona B pe coloane, si
vom calcula bj = U1 aj pentru j = 1 : n, unde bj = B(:, j) si aj = A(:, j). Datorit
a faptului c
a
U1 = Im u1 uT1 /1 unde 1 = ku1 k2 /2, , avem
bj = U1 aj = (Im u1 uT1 /1 )aj = aj (u1 uT1 /1 )aj = aj u1 ,
unde = (uT1 aj )/1 =
B = U1 A este

Pm

Pm
i=1

ui1 aij /1 . Astfel, un algoritm eficient pentru calcularea matricei

1. 1 =
u2 /2
i=1 i1
2. pentru j P
=1:n

m
1. =
u a /1
i=1 i1 ij
2. pentru i = 1 : m
1. bij = aij ui1 ,
si necesit
a Nf l 4mn operatii (flops).
b. Pentru a rezolva sistemul U1 x = b, vom folosi faptul c
a reflectorii U1 sunt matrice simetrice
si ortogonale. Astfel, x = U11 b = U1T b = U1 b iar algoritmul este

SEMINAR 6. EXAMINARE
Pm

2
1. 1 =
Pmi=1 ui1 /2
u b /1
2. =
i=1 i1 i
3. pentru i = 1 : m
1. xi = bi ui1 ,

cer
and Nf l 6m operatii (flops).
Problema 4. (10p) Problema cere un algoritm care s
a calculeze m 1 rotatii G1 , G2 , . . . ,
Gm1 astfel nc
at Gm1 . . . G2 G1 b = em , unde = kbk2 , deci avem nevoie s
a transform
am n zero
primele elemente ale vectorului b. Pentru a face asta s
a calcul
am matricea de rotatie Pij pentru
i < j astfel nc
at (Pij b)(i) = 0. Scalarii c si s trebuiesc s
a fie o solutie a sistemului

c2 + s2 = 1
cbi + sbj = 0

cerint
a care este satisfacut
a, de exemplu, de
bj
c= p
,
2
bi + b2j

bi
s= p
.
b2i + b2j

Folosind astfel de rotatii porblema este rezolvat


a dac
a lu
am spre exemplu Gk = Pmk,m , astfel
nc
at secventa urm
atoare
b P1,m . . . Pm2,m Pm1,m b = em
reprezint
a schema de calcul.
1. pentru i = m 1 : 1 : 1
1. Se calculeaz
a ci , si adic
a rotatia Pim , astfel nc
at (Pim b)(i) = 0
2. b Pim b.
Algoritmul este
1. pentru ip
= m 1 : 1 : 1
1. = b2i + b2m
2. ci = bm /
3. si = bi /
4. bi = 0
5. bm =
si necesit
a m 1 extrageri de radical si 5(m 1) operatii (flops).

6.2

Setul de probleme nr. 2


"

1. Care sunt permut


arile de linii realizate c
and se aplic
a algoritmul GP P matricei A =

1
2
1

4
4
3

1
3
1

2. Fie A IRnn o matrice inferior Hessenberg (aij = 0, pentru j > i + 1) av


and toate submatricele
A(1 : k, 1 : k) nesingulare.
a. Scrieti un algoritm eficient care s
a calculeze norma Frobenius a matricei A.
b. Adaptati algoritmul de eliminare gaussian
a (f
ar
a pivotare) pentru matricea A.
c. Scrieti un algoritm detaliat pentru rezolvarea sistemului Ap x = b, unde p 2 si b IRn
sunt de asemenea date.

#
.

6.3. SETUL DE PROBLEME NR. 3

3. Dac
a matricea A IRnn este simetric
a si pozitiv definit
a, elaborati un algoritm detaliat pentru
calculul factoriz
arii Cholesky A = U U T , unde U este o matrice superior triunghiular
a cu elemente
diagonale pozitive


4. Calculati o forma Schur real
a a matricei A =

6.3

1
2

0
3


.

Setul de probleme nr. 3


"

1. Care sunt permut


arile care apar la aplicarea algoritmului GP P matricei A =

3
4
2

1
2
1

2
2
3

#
?

Aceeasi ntrebare pentru cazul n care se aplic


a GP C.
2. Se poate utiliza n sigurant
a algoritmul de eliminare Gaussian
a (f
ar
a pivotare) pentru a calcula
determinantul unei matrice ? De ce ?
3. Fie A IRnn o matrice tridiagonal
a cu toate submatricele A(1 : j, 1 : j) nesingulare.
a. Scrieti un algoritm eficient care s
a calculeze eficient norma infinit a matricei A (kAk ).
b. Adaptati algoritmul Crout pentru A.
4. Fie A IRnn dat. Scrieti detaliat un algoritm care s
a
a. calculeze reflectorul Householder U2 astfel nc
at (U2 A)i1 = 0, i = 3 : n;
b. calculeze A U2 A;
c. calculeze A AU2 .
d. Ce valori proprii are matricea calculat
a dup
a pasii ac ? De ce ?

6.4

Setul de probleme nr. 4




1. a. Calculati factorizarile Doolittle si Crout ale matricei A =

1
3

2
1


.

b. G
asiti o matrice B 2 2 pentru care kBk1 6= kBk . Aratati ca pentru toate matricele B
1
kBk kBk1 2kBk .
2

2 2 avem

2. Fie R IRnn o matrice superior triunghiular


a si b IRn un vector. Scrieti algoritmi detaliati
si eficienti care s
a
a. calculeze kRkF ;
b. calculeze bT RRT b;
c. calculeze bT R1 RT b.
d. Care este num
arul de operatii necesar pentru a calcula x12 , unde X = R1 ? (celelalte
elemente ale lui X nu se calculeaz
a).


3. a. Adaptati algoritmul de triangularizare ortogonal
a pentru matricea A =
nn

R IR

R
zT


, unde

este o matrice superior triunghiular


a si z IR un vector, ambii dati.

b. Scrieti un algoritm eficient care s


a rezolve sistemul supradeterminat Ax = b n sensul celor
mai mici p
atrate, unde A este matricea de la punctul a si b IRn+1 este un vector dat.

SEMINAR 6. EXAMINARE

6.5

Bibliografie

1. B. Jora, B. Dumitrescu, C. Oar


a, Metode numerice, UPB, Bucuresti, 1995.
2. G.W. Stewart, Introduction to Matrix Computations, Academic Press, 1973.
Observatie. Pentru a rezolva problemele de la examen referinta [1] este suficient
a. Referinta
[2] poate, de asemenea s
a, fie de mare ajutor.


6.6. ANEXA

6.6

Anex
a

Prezent
am programele MATLAB pentru implementarea algoritmilor din acest seminar.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:

function [ n1,ni,nF ]=norme2(A)


%------------------------------------------------------------------------% Seminar 6 Problema 1 punctul a
% Functia calculeaza norma unu, norma infinit si norma Frobenius a unei
% matrice patratice A, care are elemente nenule numai pe diagonala si pe
% prima coloana. Cele trei norme sunt notate cu n1, ni respectiv nF.
% Apelul: [ n1,ni,nF ] = norme2(A)
%
% Valentin Buta, mai, 2006
%-------------------------------------------------------------------------

[ n,m ]=size(A);
if n=m
error(Matricea nu este patratica!);
end
for j=2:n
if A[ 1,j ]=0
error(Matricea nu este inferior triunghiulara!);
end
end
for i=2:n
for j=i+1:n
if A[ i,j ]=0
error(Matricea nu este inferior triunghiulara!);
end
if A[ j,i ]=0
error(Matricea are elemente nenule sub diagonala care nu se afla pe prima coloana!);
end
end
end
n1=0;
for i=1:n
n1=n1+abs(A(i,1));
end
for j=2:n
if abs(A(j,j))>n1
n1=abs(A(j,j));
end
end
ni=abs(A(1,1));
for i=2:n
sigma=abs(A(i,1))+abs(A(i,i));
if sigma>ni
ni=sigma;
end
end

10

SEMINAR 6. EXAMINARE

48:
49:
50:
51:
52:

nF=A(1,1)2;
for i=2:n
nF=nF+A(i,1)2+A(i,i)2;
end
nF=sqrt(nF);

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:

function [ x ]=rez sis(A,b)


%-----------------------------------------------------------------------% Seminar 6 Problema 1 punctul b
% Functia calculeaza eficient solutia sistemului Ax=b unde A este o matrice
% patratica cu elemente nenule numai pe diagonala si pe prima coloana.
% Apelul: [ x ] = rez sis(A,b)
%
% Valentin Buta, mai, 2006
%-------------------------------------------------------------------------

1:

function [ X ]=invers1(A)

[ n,m ]=size(A);
if n=m
error(Matricea nu este patratica!);
end
if min(size(b))=1
error(b nu este vector!);
end
if n=max(size(b))
error(Vectorul b nu are dimensiunile corecte!);
end
for j=2:n
if A(1,j)=0
error(Matricea nu este inferior triunghiulara!);
end
end
for i=2:n
for j=i+1:n
if A(i,j)=0
error(Matricea nu este inferior triunghiulara!);
end
if A(j,i)=0
error(Matricea are elemente nenule sub diagonala care nu se afla pe prima coloana!);
end
end
end
x(1)=b(1)/A(1,1);
for i=2:n
x(i)=(b(i)-A(i,1)*x(1))/A(i,i);
end


6.6. ANEXA

2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:

%------------------------------------------------------------------------% Seminar 6 Problema 1 punctul c. Solutia 1.


% Functia calculeaza eficient inversa matricei A unde A este o matrice
% patratica cu elemente nenule numai pe diagonala si pe prima coloana.
% Inversa matricei A va fi notata cu X.
% Apelul: [ X ] = invers(A)
%
% Valentin Buta, mai, 2006
%-------------------------------------------------------------------------

1:
2:
3:
4:
5:
6:
7:
8:
9:

function [ X ]=invers2(A)
%------------------------------------------------------------------------% Seminar 6 Problema 1 punctul c. Solutia 2.
% Functia calculeaza eficient inversa matricei A unde A este o matrice
% patratica cu elemente nenule numai pe diagonala si pe prima coloana.
% Inversa matricei A va fi notata cu X.
% Apelul: [ X ] = invers(A)
%
% Valentin Buta, mai, 2006

11

[ n,m ]=size(A);
if n=m
error(Matricea nu este patratica!);
end
for j=2:n
if A(1,j)=0
error(Matricea nu este inferior triunghiulara!);
end
end
for i=2:n
for j=i+1:n
if A(i,j)=0
error(Matricea nu este inferior triunghiulara!);
end
if A(j,i)=0
error(Matricea are elemente nenule sub diagonala care nu se afla pe prima coloana!);
end
end
end
X(1,1)=1/A(1,1);
for i=2:n
X(i,1)=-A(i,1)*X(1,1)/A(i,i);
end
for j=2:n
for i=1:n
X(i,j)=0;
end
X(j,j)=1/A(j,j);
end

12

SEMINAR 6. EXAMINARE

10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:

%-------------------------------------------------------------------------

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:

function [ L,U ]=Crout MH(H)


%------------------------------------------------------------------------% Seminar 6 Problema 2 punctul a.
% Algoritmul calculeaza factorizarea Crout fara pivotare in cazul unei
% matrice patratice inferior Hessenberg cu toate submatricele lider principal
% nesingulare.
% Apelul: [ U,L ] = Crout MH(H)
%
% Valentin Buta, mai, 2006
%-------------------------------------------------------------------------

[ n,m ]=size(A);
if n=m
error(Matricea nu este patratica!);
end
for j=2:n
if A(1,j)=0
error(Matricea nu este inferior triunghiulara!);
end
end
for i=2:n
for j=i+1:n
if A(i,j)=0
error(Matricea nu este inferior triunghiulara!);
end
if A(j,i)=0
error(Matricea are elemente nenule sub diagonala care nu se afla pe prima coloana!);
end
end
end
X(1,1)=1/A(1,1);
for i=2:n
X(i,1)=-A(i,1)/(A(1,1)*A(i,i));
end
for j=2:n
for i=1:n
X(i,j)=0;
end
X(j,j)=1/A(j,j);
end

[ n,m ]=size(H);
if n=m
error(Matricea nu este patratica!);
end
for i=1:n-2
for j=i+2:n


6.6. ANEXA

18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:

13

if H(i,j)=0
error(Matricea nu este inferior Hessenberg!);
end
end
end
for i=1:n
for j=1:n
L(i,j)=0;
U(i,j)=0;
end
U(i,i)=1;
end
for i=1:n
L(i,1)=H(i,1);
end
U(1,2)=H(2,1)/L(1,1);
for k=2:n
for i=k:n
L(i,k)=H(i,k)-L(i,k-1)*U(k-1,k);
end
if k=n
U(k,k+1)=H(k,k+1)/L(k,k);
end
end

function [ B ]=U1xA(U1,A)
%------------------------------------------------------------------------% Seminar 6 Problema 3 punctul a.
% Algoritmul calculeaza eficient produsul a doua matrice U1 si A, unde U1
% este un de reflector elementar definit de vectorul u1,
% iar A este o matrice m*n oarecare.
% Apelul: [ B ]=U1xA(U1,A)
%
% Valentin Buta, mai, 2006
%------------------------------------------------------------------------[ m,n ]=size(A);
beta1=0;
for i=1:m
for j=1:n
B(i,j)=0;
end
end
for i=1:m
beta1=beta1+U1(i,1)*U1(i,1);
end
beta1=beta1/2;
for j=1:n
tau=0;
for i=1:m

14

26:
27:
28:
29:
30:
31:
32:

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:

SEMINAR 6. EXAMINARE

tau=tau+U1(i,1)*A(i,j);
end
tau=tau/beta1;
for i=1:m
B(i,j)=A(i,j)-tau*U1(i,1);
end
end

function [ x ]=Sis U(U1,b)


%------------------------------------------------------------------------% Seminar 6 Problema 3 punctul b.
% Algoritmul calculeaza eficient solutia sistemului U1 * x = b, unde U1
% este o matrice patratica m*m de reflectori elementari, iar b este un
% vector dat.
% Apelul: [ x ]=Sis U(U1,b)
%
% Valentin Buta, mai, 2006
%------------------------------------------------------------------------[ m,n ]=size(U1);
if min(size(b))=1
error(b nu este vector!);
end
if m=max(size(b))
error(Vectorul b nu are dimensiunile corecte!);
end
beta1=0;
tau=0;
for i=1:m
beta1=beta1+U1(i,1)2;
tau=tau+U1(i,1)*b(i);
end
beta1=beta1/2;
tau=tau/beta1;
for i=1:m
x(i)=b(i)-tau*U1(i,1);
end

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