Sunteți pe pagina 1din 26

Seminar 1

Calcul matriceal elementar


Acest seminar este prima prezentare a calculului matriceal. Calculele matriceale elementare nu sunt prezente curs dar sunt intens utilizate. Fr o elegere profund a acestor n a a nt a notiuni introductive veti avea mari probleme la examinare i nu veti elege calculul tiintic s nt s modern.

1.1
1.1.1

Preliminarii
Notatii pentru scalari, vectori i matrice s

Structurile de date folosite la cursul de metode numerice i, special, cazul calculului s n n matriceal sunt matrici de numere reale sau complexe. O matrice este o structur de date a bidimensional (dreptunghiular) nodurile creia se a numere reale sau complexe. Un a a n a a vector este o structur de date unidimensional (linie sau coloan) nodurile creia se a a a a n a a numere reale sau complexe. Numerele reale sau complexe se numesc scalari reali, respectiv compleci. Un scalar s complex este o pereche ordonat de scalari reali. Astfel, calculul cu matrice cu elemente a complexe se poate reduce la calcul matriceal cu matrice cu elemente reale. Ca urmare, n continuare ne vom referi numai la scalari, vectori i matrice reale. Multimea numerelor reale s va notat cu IR, multimea vectorilor cu n elemente va notat cu IRn iar IRmn este a a multimea matricelor cu elemente reale cu m linii i n coloane. Vom considera un vector ca s ind implicit de tipul coloan. Un vector linie va vzut ca un vector (coloan) transpus. a a a O matrice de tipul 1 1 este un scalar, o matrice de tipul 1 n este un vector (linie) i o s matrice te tipul m 1 este un vector (coloan). Pentru comoditate vom folosi conceptul de a matrice vid, care este o matrice fr elemente, notat [ ]. a aa a Vom considera ntotdeauna c numerele reale sunt reprezentate memoria calculatorului a n ntr-un format specic, numit format virgul mobil (FVM) i c toate operatiile aritmetice a a s a de baz (cum ar adunarea, scderea, a a mmultirea, artirea, extragerea radicalului etc.) mp pentru numerele virgul mobil sunt implementate calculator. n a a n Pe parcursul cursului se va utiliza un set de notatii pe care v sftuim s folositi i a a a l s voi. Fiecare scalar, vector sau matrice va notat cu un simbol care va interpretat ca un

SEMINAR 1. CALCUL MATRICEAL ELEMENTAR

nume de identicare. Pentru ecare scalar, vector sau matrice real se aloc memoria a a n calculatorului o structur de date virgul mobil. Notatiile standard sunt: a n a a Litere greceti mici: , , . . ., pentru scalari (izolati); s 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 i b IRm un vector. Elementul aat pe linia i i coloana j a s s matricei A va notat cu A(i, j) sau aij . Elementul i al vectorului b va notat cu b(i) sau bi . Vom folosi intens notatia MATLAB : pentru a crea un vector linie. Expresia a=:: creaz un vector linie a cu primul element , al doilea element +, al treilea element +2 a s.a.m.d., a ultimul element nu poate mai mare dect . Valoarea implicit pentru pasul ns a a este = 1. Aadar, dac n = 5, atunci i = 1 : n creaz vectorul linie i = [ 1 2 3 4 5 ] dar s a a j = n : 1 creaz un vector vid; vectorul k = n : 1 : 1 este [ 5 4 3 2 1 ]. a Pentru a crea o matrice cu elementele unei alte matrice putem indica elementele matricei noi cu coordonatele matricei vechi. Spre exemplu, e r = [ r1 r2 . . . ] si c = [ c1 c2 . . . ] coordonatele liniilor, respectiv, ale coloanelor matricei vechi. Atunci expresia B = A(r, c) creaz matricea a A(r1 , c1 ) A(r1 , c2 ) A(r2 , c1 ) A(r2 , c2 ) B= . . . . . . . .. .

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

1.1.2

Matrice structurate

Matricele folosite calculul matriceal pot avea multe elemente nule. Numrul i pozitia lor n a s fac s existe mai multe tipuri de matrice pe care le denim cele ce urmeaz. a n a primul rnd, o matrice care are un numr mare (s zicem, mai mare de 90%) de In a a a elemente nule se numete matrice rar. O matrice care nu este rar se numete dens. s a a s a

1.1. PRELIMINARII

cazul calculului matriceal cu matrice rare, calculatorul folosete metode speciale pentru In s memorare i procesare (de exemplu, sunt memorate doar elementele nenule s mpreun cu a coordonatele lor). continuare ne vom referi numai la calcul matriceal cu matrice dense. In Astfel, toate matricele folosite (chiar i matricea zero) vor vzute ca matrice dense. s a Matricele dense pot avea un numr semnicativ de elemente nule. Matricele care elea n mentele nule sunt pozitionate ntr-o form regulat vor numite matrice (dense) structurate. a a Matricele structurate joac un rol important calculul matriceal. Cele mai importante maa n trice structurate sunt denite mai jos. 1. Matrice triunghiulare. O matrice L IRmn se numete inferior triunghiular dac s a a L(i, j) = 0, oricare ar i < j iar L se numete inferior triunghiular unitate dac s a a n plus L(i, i) = 1 oricare ar i 1 : min(m, n). O matrice U IRmn se numete s superior triunghiular dac U (i, j) = 0, oricare ar j < i iar U se numete superior a a s triunghiular unitate dac plus U (i, i) = 1 oricare ar i 1 : min(m, n). Remarcati a a n c elementele nule ale unei matrice inferior triunghiulare cu m > n i elementele nule a s ale unei matrice superior triunghiulare cu m < n formeaz o structur trapezoidal. a a a 2. Matrice diagonale. O matrice D IRmn se numete diagonal dac D(i, j) = 0, s a a oricare ar i = j, adic este acelai timp i inferior triunghiular i superior a n s s a s triuunghiular. a 3. Matrice Hessenberg. O matrice patratic G IRnn se numete inferior Hessenberg a s dac G(i, j) = 0, oricare ar j > i + 1. O matrice patratic H IRnn se numete a a s superior Hessenberg dac H(i, j) = 0, oricare ar i > j + 1. a 4. Matrice tridiagonale. O matrice patratic T IRnn se numete tridiagonal dac a s a a T (i, j) = 0, oricare ar i, j care satisfac |i j| > 1, adic este acelai timp superior a n s i inferior Hessenberg. s 5. Matrice band. O matrice B IRmn se numete matrice band de latime (p,q) a s a dac B(i, j) = 0, oricare ar i < j + p i j < i + q. O matrice tridiagonal este o a s a matrice band cu p = q = 1. a Observatie: Dei limbajele de programare de nivel s nalt nu permit astfel de structuri de date cum sunt matricele triunghiulare, putem s evitm memorarea elementelor nule i s a a s a obtinem o memorare economic folosind o singur matrice patratic pentru memorarea unei a a a matrice inferior triunghiulare i a uneia superior tringhiulare. Astfel de strategii de stocare s vor folosite spre exemplu de algoritmii de factorizare LU i QR. s Unele matrice pot s nu aib (multe) elemente nule dar s necesite o procesare special. a a a a Cteva din aceste matrice sunt: a 1. Matrice simetrice. O matrice patratic S IRnn se numete simetric dac a s a a S(i, j) = S(j, i), oricare ar i, j. In mod normal, o matrice simetric este stocat a a numai prin partea sa inferior sau superior triunghiular. a 2. Matrice pozitiv denite. O matrice patratic simetric P IRnn se numete a a s pozitiv denit dac toti scalarii xT P x, unde x IRn este un vector (coloan) nenul a a a arbitrar ales, sunt strict pozitivi. Dac xT P x 0, x IRn , atunci P se numete a s pozitiv semi-denit. O matrice pozitiv denit are toti elementii de pe diagonal a a a

SEMINAR 1. CALCUL MATRICEAL ELEMENTAR pozitivi (demonstrati) dar elementele care nu se a pe diagonal nu sunt obligatoriu a a pozitive. O matrice simetric N IRnn se numete negativ (semi)-denit dac N a s a a este pozitiv (semi)-denit. a 3. Matrice ortogonale. Doi vectori (coloan) x, y IRn se numesc ortogonali dac a a y T x = 0 i ortonormati dac, plus, x 2 = y 2 = 1. O matrice patratic Q IRnn s a n a se numete ortogonal dac toate coloanele ei formeaz perechi ortonormate, adic s a a a a QT Q = In , unde In este matricea unitate. Matricele ortogonale joac un rol decisiv a rezolvarea problemei liniare a celor mai mici ptrate. n a

1.1.3

Probleme de calcul numeric, algoritmi secventiali i performantele lor s

Metodele numerice au rolul s rezolve probleme matematice care folosesc date numerice. O a problem matematic cu date initiale numerice i cu un rezultat numeric trebuie s aib a a s a a o solutie unic. general, exist multe metode de rezolvare a unei probleme de calcul a In a numeric dat. O expunere detaliat a unei metode numerice se numete algoritm. Aadar, a a s s un algoritm este o list de operatii aritmetice i logice care duc datele numerice initiale la a s solutia numeric nal. Aceste rezultate nale sunt interpretate ca solutia calculat a unei a a a probleme date. Cnd algoritmul este fcut pentru a executat pe un calculator cu un singur a a procesor, adic exist o ordine strict a executiei instructiunilor (dou instructiuni nu pot a a a a executate acelai timp!) atunci algoritmul se numete secvential. Altfel algoritmul se n s s numete paralel. s Principalele performante ale algoritmilor seventiali sunt stabilitatea i ecienta. Stabili s tatea este un obiectiv esential a foarte greu de msurat i de asigurat. Vezi cursul pentru ns a s mai multe detalii. Ecienta algoritmilor secventiali poate msurat de doi parametri: a a numrul de operatii virgul mobil N (ops) i volumul de memorie necesar M (exprimat a n a a s prin numrul de locatii FVM). Numrul N determin timpul de executie al algoritmului. a a a Toti algoritmii pe care vom studia vor avea o complexitate polinomial, astfel N i i a s M sunt polinoame de dimensiunea problemei, exprimate functie de numrul initial i cel n a s nal de date, spre exemplu functie de ordinul n al matricelor folosite. Dac n a N = 1 np + 2 np1 + . . . + p n + p+1 , ne vor interesa numai evalurile asimptotice a N 1 np , (evident limn
N N

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

M 1 nq

= limn

M M

= 1).

Pentru a mbunti ecienta algoritmilor sunt utile urmtoarele recomandri: a at a a nu executati operatii cu rezultatul cunoscut, de exemplu evitati adunri i scderi cu a s a zero, nmultiri cu 1 sau 0, mpartiri la 1 etc; nu repetati aceleai calcule; cazul care calculatorul functioneaz corect veti obtine s n n a acelai rezultat; s evitati executia operatiilor inutile;

1.2. CONVENTII PENTRU PSEUDO-COD

evitati memorarea informatiilor care nu trebuiesc neaprat memorate; de exemplu nu a memorati niciodat matricea zero sau matricea unitate: le puteti folosi far s le aveti a a a memoria calculatorului; n nu memorati aceeai informatie de mai multe ori; s folositi metode eciente de memorare a matricelor structurate, de exemplu matricele diagonale pot memorate numai prin memorarea elementelor diagonale etc; folositi suprascrierea; ex: dac vreti s calculati vectorul z = x + y i nu mai aveti a a s nevoie de x sau y pentru calculele urmtoare atunci calculati x x + y sau y a x + y. Observatie. Nu neglijati recomandrile de mai sus. B.Francis i N.Koublanovskaia au a s devenit celebri descoperind cum s evite calculele excesive dintr-un algoritm. Si tu poti a deveni un cercettor cunoscut reducnd valoarea parametrilor p i/sau q cazul problemelor a a s n numerice standard. Nu se cunoate a valoarea minim a parametrului p pentru o problem s nc a a simpl cum este a nmultirea matricelor!

1.2

Conventii pentru pseudo-cod

Vom adopta cteva conventii pentru scrierea algoritmilor. Aceste conventii ne vor permite a s scriem algoritmii de calcul a ntr-o form concis, clar, uor de eles i de implementat a a a s nt s ntr-un limbaj de programare de nivel nalt. Instructiunile de baz ale pseudo-cod-ului sunt a prezentate mai jos. Ele pot completate cu orice alt instructiune neambigu i uor de a as s eles. nt

1.2.1

Instructiuni de atribuire

Formele generale ale unei instructiuni de atribuire sunt: v = expresie sau v expresie

unde v este numele unei variabile i expresie este orice expresie aritmetic sau logic valid. s a a a O expresie aritmetic este valid dac: a a a toate variabilele folosite au o valoare valid (adic au fost initializate sau calculate a a anterior); toate operatiile sunt bine denite i expresia are o valoare bine denit; astfel nu sunt s a permise: artirea la zero, operatiile nedeterminate cum ar 0 , 0/0, / etc. mp O expresie logic este valid dac: a a a toate variabilele logice folosite au o valoare logic valid (adevrat sau fals); a a a sunt folositi numai operatori logici binecunoscuti: SI, SAU, NU, NICI etc.

SEMINAR 1. CALCUL MATRICEAL ELEMENTAR expresia ia o valoare logic clar (adevarat sau fals). a a

Executia unei instructiuni de atribuire implic: a evaluarea expresiei; memorarea valorii expresiei memoria calculatorului n ntr-o zon identicat cu nua a mele variabilei v; vechea valoare a lui v se pierde. Uneori vom folosim o form special a a uv pentru interschimbarea valorilor dintre variabilele u i v. Aceast instructiune este echivas a lent cu urmtoarele trei instructiuni de atribuire a a 1. aux = u 2. u = v 3. v = aux, unde aux este o variabila auxiliar. a

1.2.2

Instructiunea Dac a

Utilizarea conditionat a unui set de instructiuni poate realizat folosind instructiunea a a dac a crei sintax este: a a a 1. dac expresie logic a a 1. instructiuni 1 altfel 1. instructiuni 2 Executia instructiunii dac implic a a 1. evaluarea expresie logic; rezultatul are valoare logic ADEVARAT sau FALS; a a a 2. dac rezultatul are valoarea logic ADEVARAT atunci se execut primul grup de a a a instructiuni (instructiuni 1); 3. dac rezultatul are valoarea logic FALS atunci se execut al doilea grup de instructiuni a a a (instructiuni 2). Partea altfel a unei instructiuni dac poate lipsi. a Expresia logic poate scris explicit, dar trebuie s aib o valoare logic clar la a a a a a a momentul executiei. Spre exemplu 1. dac este duminic a a 1. stai acas a altfel 1. mergi la scoal. a are sens numai dac cel care execut algoritmul tie ce zi a sptmnii se a. a a s n a a a a De asemenea, se recomand s se evite situatiile care expresia logic este o constant a a n a a evident deoarece acest caz instructiunea dac nu mai este necesar. De exemplu a n a a

1.2. CONVENTII PENTRU PSEUDO-COD 1. dac 1 > 2 a 1. a = 3.14 altfel 1. a = 2.73 se poate nlocui imediat cu a = 2.73.

1.2.3

Cicluri

Cnd avem un grup de instructiuni care trebuie executate mod repetat avem la dispozitie a n dou tipuri de instructiuni ciclice. a a) instructiunea pentru are urmtoarea sintax: a a 1. pentru k = expresie 1. instructiuni Executia unei instructiuni pentru implic a 1. evaluarea expresiei; rezultatul trebuie s e un vector linie; a 2. se atribuie variabilei k primul element al vectorului linie calculat i se execut s a instructiunile din corpul ciclului; 3. se atribuie variabilei k cel de-al doilea element al vectorului linie calculat i se s execut instructiunile; a 4. i asa mai departe pn la atribuirea lui k a ultimului element al vectorului linie. s a a Obsevatie: Valoarea curent a lui k poate folosit instructiuni dar nu recomandm a a n a modicarea acesteia. MATLAB rezultatul evalurii expreseiei poate o matrice In a n care caz lui k i se atribuie succesiv, ordinea natural, cte o coloan a matricei i n a a a s pentru ecare atribuire se execut instructiunile din corpul ciclului. a Exemplu: ind dat un scalar real i un numr natural n 1 urmtorul ciclu cals a a n culeaz = 2 . a 1. = 2. pentru k = 1 : n 1. = b) instructiunea ct timp are urmtoarea sintax: a a a 1. ct timp expresie logica a 1. instructiuni Executia unei instructiuni ct timp implic: a a 1. evaluarea expresie logic; rezultatul trebuie s e ADEVARAT sau FALS; a a 2. dac rezultatul este ADEVARAT se execut instructiunile; altfel ciclul ct timp a a a este terminat; 3. mergi la 1.

SEMINAR 1. CALCUL MATRICEAL ELEMENTAR Observatie: Dac rezultatul primei evaluri este FALS instructiunile din corpul ciclului a a nu sunt executate niciodat. Dac rezultatul primei evaluri este adevrat i valoarea a a a a s expresiei logice nu se schimb pe parcursul executrii instructiunilor, atunci ciclul a a ct timp nu se termin niciodat; avem un ciclu innit. Dac nu aveti nevoie a a a a de un ciclu innit aveti grij s schimbati valoarea expresiei pe parcursul executrii a a a instructiunilor. Exemplu: ind dat un scalar real i un numr natural n 1 urmtorul ciclu cals a a n culeaz = 2 . a 1. = 2. k = 1 3. ct timp k n a 1. = 2. k = k + 1

1.2.4

Structura algoritmilor

Orice algoritm va avea dou prti: a a 1. prima parte contine informatii privitoare la problema rezolvat i metoda folosit a s a pentru rezolvarea ei: datele de intrare (initiale); datele calculate (rezultate); metoda folosit; a Optional, prima parte poate contine numele autorului data elaborrii algoritmului a versiunea etc. 2. a doua parte este o list de instructiuni numerotate scrise pseudo-cod care arat a n a cum sunt folosite datele initiale pentru a ajunge la rezultatul nal.

1.3

BLAS

Cele mai importante operatii cu matrice tratate acest seminar sunt implementate n ntr-un pachet software numit Basic Linear Algebra Soubrutines (BLAS). Exist versiuni speciale a a BLAS concepute pentru calculatoare cu organizare ierarhic a memoriei care sunt optia mizate pentru a exploata toate atributele calculatorului int. BLAS este organizat pe trei t a nivele. Lista subnivelelor BLAS este dat Anex. a n a

1.3. BLAS

1.3.1

Nivelul 1. Operatii de baz cu vectori a

Nivelul 1 contine operatii de complexitate O(n). Cteva dintre acestea sunt: a 1. SAXPY (acronim pentru Scalar Alpha X Plus Y) y x + y unde x i y sunt vectori dati de dimensiune n (coloan sau linie) i este un scalar dat. s a s Evident dac y are initial toate elementele nule, atunci SAXPY calculeaz y = x. (Atentie: a a dac vreti s calculati y = x folosind SAXPY, nu uitati s initializati y cu 0). a a a 2. DOT calculeaz produsul scalar a doi vectori (coloan) x, y IRn care este, prin a a denitie,
n

= yT x =
i=1

xi yi

3. Norme vectoriale. Ne mrginim s prezentm aici norma vectorial euclidian IRn a a a a a n denit de a n = xT x = x2 . i
i=1

1.3.2

Nivelul 2. Operatii de baz matrice-vector a

Nivelul 2 al BLAS contine operatii de complexitate O(n2 ). Cteva dintre acestea sunt: a 1. GAXPY (acronim pentru General A X Plus Y) y Ax + y unde x i y sunt vectori (coloan) de dimensiune n i A este o matrice n n dat. Evident, s a s a dac initial toate elementele lui y sunt nule, atunci GAXPY calculeaz produsul matricea a vector y = Ax. (Atentie: dac vreti s calculati y = Ax folosind GAXPY, nu uitati s a a a initializati y cu zero). acest context vom folosi i operatia cu vectori linie y T xT A+y T . In s 2. OUT produsul extern a doi vectori (coloan) x, y IRn este denit ca o matrice n n a A = xy T , i.e. A(i, j) = xi yj , i, j = 1 : n

Nivelul 2 contine totodat algoritmi de rezolvare a sistemelor triunghiulare liniare (vezi a seminarul 2).

1.3.3

Nivelul 3. Operatii de baz matrice-matrice a

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

10

SEMINAR 1. CALCUL MATRICEAL ELEMENTAR

Lund = = 1 i matricea initiala C zero, procedura de mai sus calculeaz produsul C = a s a A B. BLAS acoper toate cazurile particulare ale a nmultirii matrice-matrice. Pentru cazul care mcar una dintre matrice este simetric exist o procedur special. De asemenea, n a a a a a exist proceduri speciale pentru cazul care matricele implicate sunt triunghiulare. a n 2. Actualizarea de rang k a unei matrice simetrice: ind dati scalarii reali i , o s matrice simetric C IRmn i o matrice AIRnk , se calculeaza matricea a s C A AT + C. Dac k < n i A are coloanele liniar independente, atunci rangAAT = k. Acest lucru d a s a numele procedurii. 3. Actualizarea de rang 2k a unei matrici simetrice: ind dati scalari reali i , o s matrice simetric C IRmn i dou matrice n k A i B, procedura calculeaz: a s a s a C A B T + B AT + C. Nivelul 3 contine i algoritmi de rezolvare a sistemelor liniare triunghiulare cu membrul s drept multiplu (vezi seminar 2) care au o complexitate O(n3 ) .

1.4

Probleme rezolvate

Vom ncepe cu probleme simple, cum sunt cele rezolvate de BLAS, dar care sunt des alnite nt probleme mai complexe. Programele MATLAB de implementare a algoritmilor elaborati n sunt prezentate Anexa B. n Problema 1. Fiind date numerele reale 1 , 2 , . . . , n , scrieti un algoritm care s a n n s a calculeze suma lor = i=1 i i un alt algoritm care s calculeze produsul lor = i=1 i . Solutie. Amintiti-v c o sum este a a a ntotdeauna initializat cu 0 i un produs cu 1. a s Algoritmi posibili pentru a calcula i sunt: s Algoritmul 1.1 (Date i , i = 1 : n, algoritmul calculeaz = a 1. = 0 2. pentru i = 1 : n 1. = + i Algoritmul 1.2 (Date i , i = 1 : n, algoritmul calculeaza = 1. = 0 2. pentru i = n : 1 : 1 1. = + i Observati c cei doi algoritmi pentru calcularea sumei sunt diferiti. Datorit erorilor de a a rotunjire, care apar la efectuarea ecrei adunri, rezultatele executrii celor doi algoritmi a a a pot diferite. Adunarea virgul mobil nu este o operatie asociativ. Este foarte greu n a a a de gsit ordinea optim de a a nsumare astfel at eroarea s e minim. nc a a Algoritmul 1.3 (Date i , i = 1 : n, algoritmul calculeaz = a
n i=1 n i=1 n i=1

i )

i )

i )

1.4. PROBLEME REZOLVATE 1. = 1 2. pentru i = 1 : n 1. = i Evident, observatiile de mai sus rmn valabile. a a

11

Problema 2. Fiind dat o matrice superior triunghiular U IRnn , scrieti un algoritm a a ecient care s calculeze a 1. urma matricei U , i.e. = tr U ; 2. determinantul = det U 3. normele Frobenius, 1 i innit ale matricei U denite felul urmtor: s n a
n n

F =
i=1 j=1

u2 ij
n

(normaFrobenius),

1 = max i s = max
n i1:n

j1:n

|uij |
i=1 n

(norma1)

|uij |
j=1

(norma ).

Solutie. Prin denitie = s a i=1 U (i, i). De asemenea, este uor de demonstrat c n = 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 ecient norma matricei vom exploata structura superior triunghiular a matricei U evitnd efectuarea unor operatii a a inutile. Astfel avem
n n j n

F =
i=1 j=i

u2 , ij

1 = max

j1:n

|uij |,
i=1

= max

i1:n

|uij |.
j=i

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

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

SEMINAR 1. CALCUL MATRICEAL ELEMENTAR

Problema 3. a) Fie doi vectori necoliniari dati b1 , b2 IRn . Calculati un vector q IRn aat subspatiul generat de b1 i b2 , ortogonal la b1 . b) Fie p vectori liniar independenti n s bj IRn , j = 1 : p. Calculati un set de p vectori qj , j = 1 : p din subspatiul generat de vectorii bj , ortogonali doi cte doi, i.e. astfel at qi qj = 0, i = j, qj IRn , j = 1 : p. a nc T Solutie. a) Orice vector din subspatiul generat de vectorii b1 i b2 este o combinatie s liniar a acestor doi vectori. Fie q o astfel de combinatie liniar a lui b1 i b2 , i.e. q = b1 +b2 . a a s Pentru a determina avem conditia de ortogonalitate bT q = bT b1 + bT b2 = 0. Vectorul b1 1 1 1 bT b2 1 ind nenul, rezult = T . Algoritmul este: a 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 procedur de ortogonalizare Gram-Schmidt utilizeaz i generalizeaz a as a rezultatul de la punctul a); vectorii ortogonali qj genereaz acelai subspatiu al lui IRn ca a s i setul de vectori bj . Ideea algoritmului Gram-Schmidt const a impune q1 = b1 i a s a n s exprima un vector qj+1 ca o combinatie liniar a vectorilor qk deja calculati i bj+1 , conform a s schemei de calcul la nivel vectorial: 1. q1 = b1 2. pentru j = 1 : p 1 j 1. qj+1 = i=1 ij qi + bj+1 unde scalarii ij , i = 1 : j trebuie s asigure ortogonalitatea vectorului qj+1 la qk , k = 1 : j. a bT b2 j 1 T La fel ca mai sus, 11 = T . Mai general, avnd vedere c qk qj+1 = i=1 ij qk qi + a n a T b1 b1 T qk bj+1 = 0 i c qk qi = 0 pentru k = i avem s a T ij =
T qi bj+1 , T qi qi

i=1:j

Astfel algoritmul Gram-Schmidt detaliat este:

1.4. PROBLEME REZOLVATE Algoritmul 1.5 (Gram-Schmidt) Fiind dati vectorii liniar independenti bj , j = 1 : p, algoritmul calculeaz un set de p vectori ortogonali qj , j = 1 : p care a formeaz o baz ortogonal a subspatiului generat de vectorii bj , j = 1 : p. a a a 1. pentru k = 1 : n 1. q1 (k) = b1 (k) 2. pentru j = 1 : p 1 1. j = 0 2. pentru k = 1 : n 1. j = j + qj (k) qj (k) 2. qj+1 (k) = bj+1 (k) 3. pentru i = 1 : j 1. ij = 0 2. pentru k = 1 : n 1. ij = ij + qi (k) bj+1 (k) 3. ij = ij /i 4. pentru k = 1 : n 1. qj+1 (k) = qj+1 (k) + ij qi (k)

13

Observati c algoritmul Gram-Schmidt contine multe operatii vector-vector cum sunt a produsele SAXPY i DOT, implementate profesional la nivelul 1 BLAS. s La curs vom prezenta un algortitm mai bun pentru rezovarea aceleiai probleme. s Problema 4. Fie o matrice A IRmn , un vector b IRn i un vector c IRm , toate s date. Scrieti un algoritm ecient care s calculeze c c + A b. (Daca initial c = 0, atunci a aceasta este o problem de a nmultire matrice-vector c = A b). Solutie. Vom da doi algoritmi: primul bazat pe algoritmul DOT de calcul al produsului scalar a doi vectori (un algortim orientat pe linii) i un al doilea bazat pe SAXPY (un s algoritm orientat pe coloane). Pentru primul algoritm vom partitiona matricea A pe linii i s vom folosi formula
n

c(i) c(i) + A(i, :) b = c(i) +


j=1

aij bj ,

i = 1 : m.

Algoritmul, numit versiunea (i, j) a lui GAXPY, este: Algoritmul 1.6 GAXPY pe linii: Fiind dat o matrice A IRmn i vectorii a s b IRn i c IRm , algoritmul calculeaz c c + A b s a 1. pentru i = 1 : m 1. pentru j = 1 : n 1. ci = ci + aij bj Pentru al doilea algoritm vom partitiona matricea A pe coloane i vom folosi formula s
n

cc+
j=1

A:,j bj .

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

14

SEMINAR 1. CALCUL MATRICEAL ELEMENTAR Algoritmul 1.7 GAXPY pe coloane: Fiind dat o matrice A IRmn i vectorii a s b IRn i c IRm , algoritmul calculeaz c c + A b s a 1. pentru j = 1 : n 1. pentru i = 1 : m 1. ci = ci + aij bj

Complexitatea celor doi algoritmi este aceeai Nop 2mn dar exist diferente s a ntre ei: primul este recomandat cnd matrica A este memorat pe linii i al doilea cnd matricea A a a s a este memorat pe coloane. a Problema 5. Fie trei matrice A IRmn , B IRnp i C IRmp date, scrieti un s algoritm ecient care s calculeze C C + A B. (Dac initial C = 0, atunci aceasta este a a o problem de a nmultire matrice-matrice C = A B). Solutia. Solutia standard se bazeaz pe formula binecunoscut a a
n

cij cij +
k=1

aik bkj ,

i = 1 : m,

j = 1 : p.

Avnd trei indici (i, j, k) putem scrie 3! = 6 algoritmi esential diferiti. Complexitatea acestor a algoritmi este aceeai Nop 2mnp. Prezentm trei dintre acetia cu scurte comentarii. s a s a) Versiunea (i, j, k) se bazeaz pe partitionarea lui A pe linii i a lui B pe coloane. a s Ultimul ciclu intern calculeaz un produs DOT i ultimele dou cicluri calculeaz o operatie a s a a 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 i C IRmp algoritmul calculeaz C C + A B. s a 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 bazeaz pe partitionarea lui A i a lui B pe coloane. Ultimul ciclu a s intern calculeaz o SAXPY-coloan i ultimele dou cicluri calculeaz o GAXPY-coloan, a as a a a 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 bazeaz pe partitionarea lui A pe coloane i a lui B pe linii. a s Ultimul ciclu calculeaz un produs SAXPY-linie i ultimele dou cicluri calculeaz produsul a s a a OUT a doi vectori, concret C(i, :) C(i, :)+A(i, k)B(k, :), respectiv C C +A(:, k)B(k, : ).

1.4. PROBLEME REZOLVATE Algoritmul 1.10 Versiunea (k, i, j) a nmultirii matrice-matrice. 1. pentru k = 1 : m 1. pentru i = 1 : p 1. pentru j = 1 : n 1. cij = cij + aik bkj

15

Problema 6. Fie L IRnn o matrice inferior triunghiular i U IRnn o matrice as superior triunghiular, ambele date. Scrieti un algoritm ecient care s calculeze A = L U . a a (Problema invers: ind dat A, calculati L i U , este cunoscut ca problema factorizrii a a s a a LU i va tratat la curs). s a Solutia. Pentru a obtine un algoritm ecient trebuie s evitm calculele inutile cum a a sunt nmultirile i adunrile cu zero. Astfel, avem s a
n min(i,j)

A(i, j) =
k=1

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

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

i ca s evitam comparatia dintre i i j vom s a s mparti calculul calcularea prtii inferior n a triunghiulare i a celei superior triunghiulare a lui A. Algoritmul este: s Algoritmul 1.11 1. pentru i = 1 : n 1. pentru j = 1 : i 1. aij = 0 2. pentru k = 1 : j 1. aij = aij + lik ukj 2. pentru j = i + 1 : n 1. aij = 0 2. pentru k = 1 : i 1. aij = aij + lik ukj

Numrul de operatii necesare pentru algoritmul de mai sus este a


n i n

Nop =

(
i=1 j=1

2j +
j=i+1

2i)

2 3 n , 3

de trei ori mai mic dect a nmultirea matrice-matrice standard. Problema 7. a. Fie matricele U, V IRnn date. Propuneti un algoritm ecient pentru a calcula matricea: X = (In + U (:, 1) V (1, :)) (In + U (:, 2) V (2, :)) (In + U (:, n) V (n, :)). b Scrieti un algoritm ecient care s calculeze determinantul matricei X calculate la punctul a a).

16

SEMINAR 1. CALCUL MATRICEAL ELEMENTAR

Solutia a) Scriem mai ai un algoritm ecient pentru calcularea produsului X nt X (In + uv T ), unde X este o matrice dat iar u, v IRn sunt vectori coloan dati. Evident a a Y = X (In + uv T ) = X + X u v T , astfel c Y (i, j) = X(i, j) + X(i, :) u v(j) = a n X(i, j) + v(j) unde scalarul = X(i, :) u = k=1 X(i, k)u(k) depinde de i dar nu depinde de j. Avem astfel urmtorul algoritm ecient: a Algoritmul 1.12. Fiind dat matricea X IRnn i vectorii coloan u, v IRn , a s a acest algoritm calculeaz X X (In + uv T ). a 1. pentru i = 1 : n 1. = 0 2. pentru k = 1 : n 1. = + xik uk 3. pentru j = 1 : n 1. xij = xij + vj Acum, introducnd numele Xuv pentru procedura de mai sus i apelnd secventa de a s a instructiuni de mai sus prin X = Xuv(X, u, v) putem rezolva problema folosind urmatoarea procedur: a Algoritmul 1.13 1. X = In 2. pentru k = 1 : n 1. X = Xuv(X, U (:, k), V (k, :)) Observati c algoritmul 1.12 necesit O(n2 ) operatii, deci am rezolvat problema a a nmultirii a n matrice cu o complexitate de numai O(n3 ) opi. b) Metoda ecient de a calcula determinantul se bazeaz pe faptul c dac u, v IRn a a a a sunt vectori coloan, atunci det(In + uv T ) = 1 + v T u (demonstrati, spre exemplu folosind a inductia matematic). Aadar, a s
n n n

det X = i algoritmul este s Algoritmul 1.14

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


k=1

(1 +
k=1 i=1

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

1. = 1 2. pentru k = 1 : n 1. = 1 2. pentru k = 1 : n 1. = + vki uik 3. =

1.5. PROBLEME PROPUSE

17

1.5

Probleme propuse

Problema 1.1 Fie dou matrice A, B Rmnn . Produsul scalar dintre A i B este denit a s n m de =< A, B >= trace(B T A). Demonstrati c = i=1 j=1 aij bij i scrieti un algoritm a s care s calculeze . a Problema 1.2 Fie u, v Rn doi vectori nenuli i e A = In + uv T . Gsiti un algoritm s a ecient care s calculeze norma Frobenius a lui A. a Problema 1.3 Fie A, B, C IRnn trei matrice date i d IRn un vector dat. Scrieti un s algoritm ecient care s calculeze vectorul x = A B C d. a Problema 1.4 Fie A, B IRnn dou matrice date. Scrieti algoritmi ecienti pentru a calcularea A A B, i a B A B folosind ct mai putin spatiu de memorie. Repetati s a problema cnd A i B sunt amndou inferior triunghiulare (superior triunghiulare). a s a a Problema 1.5 Se consider date matricele: H IRnn superior Hessenberg, R Rnn a superior triunghiulara i vectorul b IRn . s a. Demonstrati c matricele X = H R i Y = R H sunt ambele superior Hessenberg. a s b. Scrieti algoritmi ecienti pentru calculul matricelor X si Y ; studiati posibilitatea de a suprascrie H cu X (cu Y ). c. Scrieti algoritmi ecienti pentru a calcula vectorii x = HRb i y = RHb. s Problema 1.6 Fie C IRnn , o matrice simetric dat i A Rnp o matrice oarecare. a as Scrieti un algoritm ecient care s calculeze actualizarea de rang p a lui C, adic C a a C + A AT . Demonstrati c dac initial C este zero, atunci matricea C calculat este a a a simetric i pozitiv semi-denit. as a Problema 1.7 Fie C IRnn o matrice simetric i matricele A, B Rnp . Scrieti un a s algoritm ecient care s calculeze actualizarea de rang 2p a lui C, adic C C + A B T + a a B AT . Problema 1.8 Fie Rnn o matrice inferior triunghiular nesingular. Scrieti un algoritm a a ecient care s calculeze T = LLT i demonstrati c T este o matrice simetric pozitiva s a a denit. a

1.6

Bibliograe

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

18

SEMINAR 1. CALCUL MATRICEAL ELEMENTAR

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

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

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

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

1: 2:

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:

19

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

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

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

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

SEMINAR 1. CALCUL MATRICEAL ELEMENTAR

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:

21

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

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

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

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

SEMINAR 1. CALCUL MATRICEAL ELEMENTAR

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:

23

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

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

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

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

SEMINAR 1. CALCUL MATRICEAL ELEMENTAR

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

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

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

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

25

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

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

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

26
24: 25: 26: 27: 28:

SEMINAR 1. CALCUL MATRICEAL ELEMENTAR

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

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

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

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