Sunteți pe pagina 1din 12

Laborator 6

Descompunerea valorilor
singulare
6.1
6.1.1

Preliminarii
Descompunerea valorilor singulare

Vom introduce descompunerea valorilor singulare (DVS) ale unei matrice prin urmatoarea teorema.
Teorema 6.1 Pentru orice matrice A Rmn exist
a matricele ortogonale U
Rmm si V Rnn astfel nc
at
"
T

U AV = =

1 0
0 0

(6.1)

unde
1 = diag(1 , 2 , ..., r ) Rrr ,

(6.2)

1 2 ... r > 0.

(6.3)

cu
Expresiile (6.1)-(6.3) definesc descompunerea valorilor singulare ale matricei A.
Numerele pozitive i , i = 1 : p, p = min(m, n), ordonate descresc
ator
1 2 r > 0, r+1 = r+2 = = p = 0

(6.4)

se numesc valori singulare ale matricei A. Coloanele uj Rm ale matricei ortogonale U se numesc vectori singulari la st
anga ale matricei A. Coloanele vj Rn ale
matricei ortogonale V se numesc vectori singulari (la dreapta) ale matricei A.
DVS a unei matrice scoate n evident
a numeroase aspecte structurale ale matricei
respective si are multiple valente aplicative. Cateva din cele mai importante aplicatii
sunt prezentate succint n paragraful urmator.
Calculul DVS are la baza urmatorul rezultat.

Teorema 6.2 Valorile singulare nenule i , i = 1 : r, ale unei matrice A Rmn


sunt r
ad
acinile p
atrate pozitive ale valorilor proprii nenule ale matricei simetrice
pozitiv semidefinite
B = AT A
(6.5)
i.e., dac
a 1 2 r > 0, sunt cele r valori proprii nenule ale lui B atunci
i =

i , i = 1 : r.

(6.6)

Teorema 6.2 sugereaza o procedura pentru calculul valorilor singulare ale unei
matrice A date folosind algoritmul QR simetric pentru calculul valorilor proprii ale
matricei B = AT A. Aceasta procedura nu este recomandata datorita posibilei rele
conditionari numerice a matricei B. G.H.Golub si W.Kahan au elaborat un algoritm
(prezentat n sectiunea urmatoare) care evita calculul explicit al lui B.

6.1.2

Aplicatii ale DVS

Prezentam succint cateva aplicatii ale DVS. Pentru detalii si alte aplicatii recomandam consultarea cursului.
Calculul rangului unei matrice
Fie A = U V T DVS a matricei A Rmn . Intruc
at nmultirea cu matrice nesingulare nu modifica rangul unei matrice, rangul lui A este rangul lui . Prin urmare,
rangul unei matrice este dat de num
arul valorilor sale singulare nenule.
In general, din cauza erorilor de rotunjire, valorile proprii calculate
i vor fi toate
nenule, i.e.

1
2
p > 0.
(6.7)
De aceea n practica numeric
a se utilizeaza conceptul de rang numeric. Rangul
numeric se obtine neglijand valorile singulare mici, e.g. inferioare unei tolerante
precizate

i .
(6.8)
Daca indicele i = r + 1 este primul pentru care (6.8) este satisfacut
a, atunci rangul
numeric al matricei A este
rang(A, ) = r.
(6.9)
Rezolvarea problemei generale CMMP
Problema generala CMMP consta n rezolvarea sistemelor liniare (determinate, supradeterminate sau subdeterminate)
Ax = b

(6.10)

cu matricea A Rmn de rang posibil nemaximal. In general, n cazul


rangA < min(m, n)

(6.11)

sistemul liniar (6.10) nu are solutii dar are un num


ar infinit de (pseudo)solutii n
sens CMMP. Problema este calculul (pseudo)solutiei de norma euclidiana minima
kx k =

min

minxRn kbAxk

kxk.

(6.12)

Urmatoarea teorema arata cum se calculeaza (pseudo)solutia normal


a utilizand
DVS.
Teorema 6.3 Fie A Rmn cu rankA = r min(m, n). Dac
a U T AV = este
DVS a lui A atunci pseudosolutia de norm
a euclidian
a minim
a pentru (6.10) este
dat
a de
r
X
uTj b
x =
vj
(6.13)
j
j=1
unde uj = U ej = U (:, j) Rm si vj = V ej = V (:, j) Rn sunt coloanele j ale lui
U si, respectiv, V . Mai mult, reziduul minim este
( )2 = kAx bk22 =

m
X

(uTj b)2 .

(6.14)

j=r+1

Schema de calcul a pseudosolutiei normale este directa si evident


a.
Calculul bazelor ortogonale pentru subspatii liniare
DVS a matricei A Rmn produce baze ortogonale pentru toate subspatiile liniare
definite de A. Concret avem
(a)
(b)
(c)
(d)

S1 = ImA = ImU (:, 1 : r) Rm


T1 = KerA = ImV (:, r + 1 : n) Rn
S2 = KerAT = ImU (:, r + 1 : m) Rm
T2 = ImAT = ImV (:, 1 : r) Rn ,

(6.15)

i.e. primele r coloane ale matricei U formeaz


a o baz
a ortogonal
a pentru subspatiul
liniar ImA, ultimele n r coloane ale matricei V formeaz
a o baz
a ortogonal
a pentru
subspatiul liniar KerA etc.
Printre alte aplicatii ale DVS mention
am diverse operatii cu subspatii liniare,
calculul pseudoinversei, rezolvarea unor probleme de optimizare cu si far
a restrictii
etc.

6.2

Algoritmul DVS

Cea mai buna metoda pentru calculul DVS a fost propusa de G.H.Golub si W.Kahan
n 1965. Algoritmul propus de ei determina simultan U si V aplic
and ntr-un mod
implicit si indirect algoritmul QR simetric matricei B = AT A (i.e. action
and numai
asupra matricei A fara a forma explicit matricea B).
Algoritmul DVS se desfasoar
a n doua etape.
1. Prima etap
a consta n reducerea lui A la o forma bidiagonala J astfel nc
at
T
matricea tridiagonala T = J J coincide cu cea produsa de prima etapa a algoritmului QR simetric aplicat lui B.
2. Etapa a doua consta n reducerea iterativa a matricei bidiagonale J la forma
diagonala prin anularea asimptotica a elementelor supradiagonale. Aceasta poate
fi obtinuta folosind transformari ortogonale bilaterale ce corespund unui pas QR
simetric cu deplasare implicita aplicat lui B.

6.2.1

Etapa 1: bidiagonalizarea

Fie A Rmn si, pentru precizare, m > n. Vom arata cum se calculeaza matricele
ortogonale U Rmm si V Rnn astfel nc
at

f1 g1

f2

T
J = U AV =

g2
..
.

..

..

gn1

fn

(6.16)

este bidiagonala. Matricele U si V vor fi calculate ca produse de transformari Householder (reflectori elementari)
U = U1 U2 Un ,

V = V2 V3 Vn1

(6.17)

folosind urmatoarea schema de calcul


1. U Im
2. V In
3. Pentru k = 1 : n
1. Se calculeaza reflectorul Uk astfel nc
at (UkT A)(k + 1 : m, k) = 0
T
2. A Uk A
3. U U Uk
4. Dac
a k <n1
1. Se calculeaza reflectorul Vk+1 astfel nc
at (AVk+1 )(k, k + 2 : n) = 0
2. A AVk
3. V V Vk

De notat faptul ca la pasul k reflectorul Uk are structura Uk = diag(Ik1 , U k )


si, prin urmare, zerourile create n primele k 1 linii si primele k 1 coloane sunt
conservate. Similar, Vk+1 = diag(Ik , V k+1 ) nu afecteaza zerourile create n primele
k coloane si primele k 1 linii. In final, matricea A este suprascrisa de matricea
bidiagonala
A UnT U2T U1T AV2 V3 Vn1 = U T AV.
(6.18)
Algoritmul detaliat corespunzator schemei de mai sus este urmatorul.
Algoritm 6.4 JQ (Bidiagonalizarea) Data matricea A Rmn cu
m > n, algoritmul calculeaza matricele ortogonale U Rmm si V
Rnn si matricea bidiagonala J astfel nc
at J = U T AV . Matricea J
suprascrie matricea A dar se retin numai elementele diagonale ale lui
J n vectorul f Rn si cele supradiagonale n vectorul g Rn1 . Se
folosesc vectorii de lucru u si v, precum si scalarii si , pentru definirea
reflectorilor curenti Uk = Im uuT / si Vk+1 = In vv T /.
1.
2.
3.
%

U = Im
V = In
Pentru k = 1 : n
Calculeaza Uk = UkT , A
Uk A si U = U Uk
pP
m
2
1. = sign(A(k, k))
i=k A(i, k)
2. u(k) = A(k, k) +
3. Pentru i = k + 1 : m
1. u(i) = A(i, k)
4. = u(k)
5. A(k, k)
% A Uk A
6. Pentru i = k + 1 : m
1. A(i, k) 0
7. Dac
ak<n
1. Pentru j = k + 1 : n
P
1. = ( m
i=k u(i)A(i, j))/
2. Pentru i = k + 1 : m
1. A(i, j) A(i, j) u(i)
% U U Uk
8. Pentru i = 1 : m
P
1. = ( m
j=k U (i, j)u(j))/
2. Pentru j = k : m
1. U (i, j) U (i, j) u(j)
% Calculeaza Vk+1 , A AVk+1 si V V Vk+1
9. Dac
a k <n1
% Vk+1
qP
n
2
1. = sign(A(k, k + 1))
j=k+1 A(k, j)
2. v(k + 1) = A(k, k + 1) +

3. Pentru j = k + 2 : n
1. v(j) = A(k, j)
4. = v(k + 1)
% A AVk+1
5. A(k, k + 1)
6. Pentru j = k + 2 : n
1. A(k, j) 0
7. Pentru i = k + 1 : m
P
1. = ( nj=k+1 A(i, j)v(j))/
2. Pentru j = k + 1 : n
1. A(i, j) A(i, j) v(j)
% V V Vk+1
8. Pentru i = 1 : n
P
1. = ( nj=k+1 V (i, j)v(j))/
2. Pentru j = k + 1 : n
1. V (i, j) V (i, j) v(j)
4. Pentru i = 1 : n 1
1. f (i) = A(i, i)
2. g(i) = A(i, i + 1)
5. f (n) = A(n, n)
Recomandam scrierea unui program distinct de bidiagonalizare av
and ca date de
intrare matricea A si ca iesiri vectorii f Rn al elementelor diagonale ale matricei
bidiagonale J si g Rn1 al elementelor supradiagonale ale matricei bidiagonale J,
precum si matricele de transformare U si V , conform sintaxei
[f, g, U, V ] = JQ(A).

6.2.2

Etapa 2: diagonalizarea iterativ


a

Diagonalizarea iterativa produce un sir de matrice


J1 = J, J2 , , Jk ,
"

convergent catre matricea diagonala =

1 0
0 0

(6.19)

astfel nc
at sirul de matrice

T1 = J1T J1 , , Tk = JkT Jk ,
este sirul QR simetric cu deplasare implicita convergent catre

(6.20)
"

21 0
0 0

Rnn ,

care este o forma Schur a matricei tridiagonale T = T1 .


Presupunem ca matricea Jk := J are forma bidiagonala (6.16) si aplicam un pas
QR cu deplasare implicita matricei tridiagonale
T = Tk = JkT Jk = J T J.

(6.21)

Un pas QR simetric, cu deplasare implicita, pentru matricea tridiagonala T const


a
din:
1. Calculul deplasarii
2
= T (n, n) = gn1
+ fn2

(6.22)

sau, si mai bine, a deplas


arii Wilkinson, care este valoarea proprie cea mai apropiata
2
+ fn2 a matricei
de gn1
"

2
2
fn1 gn1
+ fn1
gn2
2
+ fn2
fn1 gn1
gn1

T (n 1 : n, n 1 : n) =

(6.23)

2. Calculul unei matrice ortogonale U1 astfel nc


at U1 e1 este prima coloana a
matricei de transformare de la pasul QR curent cu deplasare explicita

U 1 e1 =

t11
t21
0
..
.

f12
g1 f1
0
..
.

(6.24)

Matricea U1 poate fi o rotatie Givens P12 astfel nc


at

T
P12

f12
g1 f1
0
..
.


0


= 0

..
.

= 1 e1 .

(6.25)

3. Calculul matricei
T
C = P12
T P12

(6.26)

punandu-se n evidenta o alterare a structurii tridiagonale n pozitia (3, 2).


4. Aplicarea algoritmului HQ (adaptat adecvat pentru cazul simetric, i.e. algoritmul de tridiagonalizare) matricei C. Se obtine matricea
T = QT CQ

(6.27)

n forma tridiagonala. Matricea Q poate fi o secvent


a de rotatii:
Q = P23 Pn1,n ,

(6.28)

astfel ncat noua matrice este


T
T
T T
T T 0 = QT CQ = QT P12
T P12 Q = Pn1,n
P23
P12 T P12 P23 Pn1,n .

(6.29)

Ideea de baza a unui pas DVS consta n a actiona printr-o transformare ortogonala bilaterala J 0 = U T JV astfel nc
at J 0T J 0 = T 0 . Aceasta idee a unui pas DVS
Golub-Kahan este detaliata n cele ce urmeaza.
1. Se aplic
a rotatia Givens P12 , de mai sus, matricei J n loc de matricea T
K = JP12

(6.30)

ceea ce altereaza structura bidiagonala a matricei J n pozitia (1, 2).


2. Se readuce structura alterat
a la forma bidiagonal
a prin transformari ortogonale
bilaterale.
J J 0 = Un1 Un2 U1 KV2 Vn1
(6.31)
unde Us , Vs pot fi rotatii Givens (sau reflectori Householder).
Schema de calcul pentru (6.31) este urmatoarea.
Pentru k = 1 : n 1
1. Se calculeaza rotatia Givens Uk := Pk,k+1 astfel nc
at (UkT K)(k + 1, k) = 0
2. K UkT K
3. U U Uk
4. Dac
a k <n1
1. Se calculeaza rotatia Givens Vk+1 := Pk+1,k+2
astfel ncat (KVk+1 )(k, k + 2) = 0
2. K KVk+1
3. V V Vk+1
Noua matrice K = J 0 este bidiagonala si
T
T
T 0 = J 0T J 0 = (Un1
U1T JP12 V2 Vn1 )T Un1
U1T JP12 V2 Vn1 =
T
T T
T
= Vn1
V2T P12
J U1 Un1 Un1
U1T JP12 V2 Vn1 = QT J T JQ

(6.32)

si prima coloana a matricei de transformare


Qe1 = P12 V2 Vn1 e1 = P12 e1
este aceeasi ca n pasul QR simetric pentru matricea tridiagonala T .
In consecinta, matricea Jk = J, definind sirul DVS este astfel nc
at Tk = JkT Jk
este sirul QR pentru matricea B = AT A si, prin urmare, este convergent
a la o forma
diagonala.
Este posibil ca matricea diagonala limita = J s
a nu aiba elementele diagonale
ordonate. Ordonarea poate fi obtinut
a imediat cu o secvent
a de permut
ari si este
lasata n sarcina studentului.
Algoritm 6.5 (Iteratie (pas) DVS) Dati vectorii f Rn si g
Rn1 ce definesc matricea bidiagonala J din (6.16), algoritmul calculeaza
vectorii f 0 si g 0 ce definesc matricea succesor J 0 = QT JQ din sirul DVS.
Matricea J 0 suprascrie matricea J. Mai precis, noii vectori f 0 si g 0
suprascriu vectorii f si g.

1. % Se calculeaza deplasarea (pentru n > 2 deplasarea Wilkinson)


Dac
an>2
2
2
2
1. = (gn2
+ fn1
gn1
fn2 )/2
2. = (gn1 fn1 )2

2
p
3. = gn1
+ fn2 +
+ sign() 2 +
altfel
2
1. = gn1
+ fn2
2. y = f12 ; z = g1 f1
#
# "
"
?
y
T
=
3. % Se calculeaza c, s astfel nc
at P12
0
z
p
2
2
1. r = y + z
2. c = y/r
3. s = z/r
4. % Se calculeaza J JP12 . Fie elementul nenul
% alterant al structurii bidiagonale.
1. = f1 c g1 s
2. g1 = f1 s + g1 c
3. f1 =
4. = f2 s
5. f2 = f2 c
5. % Se calculeaza V V P12 .
Pentru i = 1 : nV
1. = vi1 c vi2 s
2. vi2 = vi1 s + vi2 c
3. vi1 =
6.% Readucerea la forma bidiagonala (6.31)
Pentru k =q1 : n 1
r = fk2 + 2
c = fk /r
s = /r
fk = r
= cgk sfk+1
fk+1 = sgk + cfk+1
gk =
Dac
a k <n1
1. = sgk+1
2. gk+1 = cgk+1
9. % Se calculeaza U U Uk .
Pentru i = 1 : mU
1. = ui,k c ui,k+1 s
2. ui,k+1 = ui,k s + ui,k+1 c
3. ui,k =

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

10. Dac
a k
q< n 1
1. r = gk2 + 2
2. c = gk /r
3. s = /r
4. gk = r
5. = fk+1 c gk+1 s
6. gk+1 = fk+1 s + gk+1 c
7. fk+1 =
8. = fk+2 s
9. fk+2 = fk+2 c
10. % Se calculeaza V V Vk+1 .
Pentru i = 1 : nV
1. = vi,k+1 c vi,k+2 s
2. vi,k+2 = vi,k+1 s + vi,k+2 c
3. vi,k+1 =
Dupa cum se observa algoritmul face si actualizarea matricelor de transformare.
Intrucat, pe parcursul iteratiilor DVS, se va actiona asupra unor vectori f si g
de lungime variabila (din ce n ce mai mici) iar matricele de transformare care se
actualizeaza pastreaza ordinul initial, n algoritm acest ordin este notat cu mU ,
respectiv nV .
Vom introduce pentru algoritmul de mai sus sintaxa
[f, g, U, V ] = pas DVS(f, g, U, V ).
Tipic, dupa cativa pasi DVS gn1 devine neglijabil si dimensiunea problemei
scade cu o unitate. Pentru a controla procesul de anulare asimptotica a elementelor
se foloseste urmatorul criteriu
daca |gi | tol(|fi | + |fi+1 |) atunci gi = 0,

(6.33)

unde tol este de ordinul de marime al erorilor de rotunjire.


Faza iterativa a algoritmului DVS consta n aplicarea iterativa a pasului DVS
partii ireductibile a matricei bidiagonale J si, simultan, monitorizarea anul
arii el
ementelor supradiagonale si diagonale. In final se obtine o matricea diagonala ale
carei elemente diagonale se ordoneaza prin permut
ari simultane de linii si coloane
(i.e. permutari diagonale). Matricea diagonala ordonata, mpreun
a cu matricele de
transformare, definesc descompunerea valorilor singulare.
Prezentam mai jos o versiune simplificata a algoritmului DVS, cu o monitorizare
mai simpla a elementelor care se anuleaz
a. Anularea are loc efectiv daca modulul
unui element supradiagonal devine inferior unei tolerante date, conform criteriului
(6.33). Concret aceasta versiune tine seama de faptul ca, n general, anularea elementelor supradiagonale are loc oarecum ordonat, ncep
and de la ultimul element si
mergand spre primul.

10

Pentru mai multa claritate algoritmul este prevazut cu comentarii care pun n
evidenta explicatiile de mai sus.
Algoritm 6.6 (Algoritmmul DVS) Dat
a o matrice A Rmn , cu
m > n, si nivelul de tolerant
a tol, algoritmul calculeaza matricea diagonala Rmn si matricele ortogonale U Rmm , V Rnn astfel
ncat = U T AV .
1. % Bidiagonalizarea
[f, g, U, V ] = JQ(A)
2. q = n
3 C
at timp q > 1
1. % Iteratia DVS
[f (1 : q), g(1 : q 1), U, V ] = iter DVS(f (1 : q), g(1 : q 1), U, V )
2. % Anularea elementelor neglijabile
1. index = 1
2. C
at timp index = 1
3. Dac
a |gq1 | tol(|fq1 | + |fq |)
1. gq1 = 0
2. q = q 1
altfel
1. index = 0
4. Dac
aq=1
1. index = 0
4. % Valorile singulare trebuie sa fie pozitive
1. Pentru i = 1 : n
1. Dac
a f (i) < 0
1. f (i) = f (i)
2. V (i, :) = V (i, :)
5. = diag(f )
6. = [; zeros(m n, n)].
Se demonstreaza ca algoritmul de mai sus este numeric stabil n sensul ca descompunerea valorilor singulare calculata este descompunerea valorilor singulare exacta
a unei matrice ce difera nesemnificativ de matricea initial
a data.

6.3
6.3.1

Sarcini de lucru
A. In laborator

1. Se va edita si testa un program MATLAB pentru implementarea algoritmului


JQ de bidiagonalizare a unei matrice A prin transformari ortogonale bilaterale.
Programul va afisa matricea A curent
a pentru vizualizarea procesului de bidiagonalizare. Testarea se va realiza prin calculul normei reziduului A U JV T .

11

2. Se va edita si testa un program MATLAB pentru implementarea algoritmului


DVS de reducere la forma diagonala a unei matrice prin transformari ortogonale bilaterale. Pentru aceasta se va edita si testa un program distinct pentru
implementarea unei iteratii DVS Golub-Kahan. Programul va afisa n faza iterativa vectorul g curent pentru vizualizarea procesului de anulare asimptotica
a elementelor sale. Se va compara rezultatul obtinut cu cel oferit de functia
MATLAB svd.
3. Folosind programul propriu de calcul al DVS, se va edita si testa un program
MATLAB pentru calculul rangului numeric (cu o tolerant
a data) al unei matrice.
4. Se va scrie un program MATLAB de calcul al solutiei CMMP a unui sistem
liniar n cazul cel mai general.

6.3.2

B. Acas
a

1 Se va completa programul MATLAB de calcul al DVS, elaborat n laborator, cu


ordonarea valorilor singulare n ordine descrescatoare. A nu se uita permutarea
corespunzatoare a liniilor si/sau a coloanelor matricelor de transformare.
2 Se va edita si testa un program MATLAB pentru implementarea algoritmului de calcul al pseudoinversei unei matrice n cazul general. Se va verifica
identitatea acestei pseudoinverse cu pseudinversele matricelor monice (epice)
calculate pe baza triangularizarilor ortogonale la stanga (la dreapta) (sau a
factorizarilor QR, respectiv LQ).
3 Comparati bazele ortogonale ale subspatiilor ImA, KerAT , ImAT , KerA calculate cu factorizarile QR ale matricelor A si AT si cu algoritmul DVS. Sunt
aceleasi sau difera?
4 Fie doua subspatii liniare S = ImS si T = ImT , cu S RmnS , T RmnT ,
ale spatiului Rm . Se cer programe MATLAB pentru calculul unor baze ortogonale pentru subspatiile intersectie S T = {x Rm |x S, x T }, si suma
S + T = {x Rm |x = s + t, s S, t T }.

Bibliografie
B. Dumitrescu, C. Popeea, B. Jora, Metode de calcul numeric matriceal.
Algoritmi fundamentali (cap.5), Ed. ALL, Bucuresti, 1998.

12

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