Documente Academic
Documente Profesional
Documente Cultură
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
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
1.1.3
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
N
N
= limn
M
M
1 nq
M
= 1).
1.2. CONVENT
II PENTRU PSEUDO-COD
1.2
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
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.
1.2.2
Instructiunea Dac
a
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.2.4
Structura algoritmilor
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
uX
T
= x x=t
x2i .
i=1
1.3.2
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
1.3.3
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
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 )
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
j1:n
i=1
i1:n
j=i
12
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
i=1:j
13
n
X
aij bj ,
i = 1 : m.
j=1
n
X
A:,j bj .
j=1
14
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, :
).
15
n
X
min(i,j)
L(i, k) U (k, j) =
k=1
k=1
n X
i
n
X
X
2
(
2j +
2i) n3 ,
3
i=1 j=1
j=i+1
16
n
Y
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
1.5
17
Probleme propuse
1.6
Bibliografie
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:
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 [ 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:
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:
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
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)
21
22
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)
23
24
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:
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)
25
26
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:
Seminar 2
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.
2.2
2.2.1
Probleme rezolvate
Sisteme triunghiulare si probleme nrudite
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 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,
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)
(2)
3n2
2
5n2
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.
2n3
3
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 .
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.
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
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
10
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
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 ;
11
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 .
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
12
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
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
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
14
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:
35:
36:
37:
38:
39:
40:
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:
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:
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
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
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:
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
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:
[ 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
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
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:
[ 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
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:
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:
%
% 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
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
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:
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:
62:
63:
31
Seminar 3
3.1
Preliminarii
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.
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).
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 ,
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
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
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
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
@
@
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).
v1k
..
.
vkk
mm
T
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
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
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
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
6. =
13
6
}
AKZ
Z
b A Z
A Z ba
Im a
Z
A
Z
ba A
Z
*
A
A
a
*
a
a
*
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
SEMINAR 3. PROBLEMA CELOR MAI MICI PATRATE
14
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.
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 /
15
T
x + Kera
KeraT
x
AK
xA
A
A
A
A
A
A a
AU
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.
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
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
i=1
j=1
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
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
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
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:
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
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:
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
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
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:
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));
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:
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
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:
%
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;
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 4
4.1
Preliminarii
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:
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.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
n
X
B(k, k) =
k=1
n
X
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) =
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 ,
n
X
|aij |},
i = 1 : n,
j=1
j6=i
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
Pn
j=1
j6=i
|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
(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
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.
1 1
b. Calculati forma Schur reala a matricei A =
.
1 1
1
2
2
3
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
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
(2 )x21 x22 = 0
x21 + (2 )x22 = 0
0
cu
==
6 0, o solutie nenula a sistemului
(2 )
. Daca = 0, cei doi vectori proprii sunt evident
de mai sus este x2 =
(1 )
(2 )
(2 )
+
=
xT2 x1 =
(1 ) =
(1 + 2 ) = 0.
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
[ 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:
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
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
p() = p(i1) () = i1 + p2
(i1)
(i1)
+ . . . + pi1 + pi
(i)
(i1)
1 i )i1 + . . . + (pi1 pi
(i1)
i ) + (0 pi
i ) =
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
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
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
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:
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,
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:
Problema 4.9
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
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.
%
[ 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:
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
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
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 = ||
si norma matriceal
a spectral
a k k2 , definita de
kAk2 =
max kAxk2 ,
kxk2 = 1
unde w = V x. Pentru a exprima kAk2 n functie de valorile singulare ale lui A avem:
kAk2 =
s
12 + 22 + + n2
1
1
1
+ 2 + + 2
n2
n1
1
1
.
n
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
def
(k)
(k)
(k)
def
5.2.2
Calculul DVS
= 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
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.
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
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
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
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 =
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.
12
5.2.3
Aplicatiile SVD
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)
(B)
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
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
di i
, i = 1 : r,
i2 +
yi = 0, i = r + 1 : n
d2i + yi2 .
14
si valoarea sa este
minn {kd yk2 + kyk2 } =
yIR
r
n
X
X
d2i
+
d2i .
2+
i
i=1
i=r+1
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
15
Probleme propuse
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
5.4
Bibliografie
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:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
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:
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);
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
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:
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
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
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
i=1:n
|aij |
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
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
.
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
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
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
i = 1 : n.
si
ukj = 0 pentru j = k + 1 : n.
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
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
6.2
1
2
1
4
4
3
1
3
1
#
.
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
.
3
4
2
1
2
1
2
2
3
#
?
6.4
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
3. a. Adaptati algoritmul de triangularizare ortogonal
a pentru matricea A =
nn
R IR
R
zT
, unde
SEMINAR 6. EXAMINARE
6.5
Bibliografie
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:
[ 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:
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:
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:
[ 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