Metode Numerice Seminarii 1-6

Embed Size (px)

Citation preview

  • 7/25/2019 Metode Numerice Seminarii 1-6

    1/140

    Seminar 1

    Calcul matriceal elementar

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

    1.1 Preliminarii

    1.1.1 Notatii pentru scalari, vectori si matrice

    Structurile de date folosite la cursul de metode numerice si, n special, n cazul calcululuimatriceal 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. Unvector este o structura de date unidimensionala (linie sau coloana) n nodurile careia se aflanumere reale sau complexe.

    Numerele reale sau complexe se numesc scalari reali, respectiv complecsi. Un scalarcomplex este o pereche ordonata de scalari reali. Astfel, calculul cu matrice cu elementecomplexe se poate reduce la calcul matriceal cu matrice cu elemente reale. Ca urmare, ncontinuare ne vom referi numai la scalari, vectori si matrice reale. Multimea numerelor realeva fi notata cu IR, multimea vectorilor cu n elemente va fi notata cu IRn iar IRmn estemultimea matricelor cu elemente reale cu m linii si ncoloane. Vom considera un vector cafiind implicit de tipul coloana. 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 omatrice te tipul m 1 este un vector (coloana). Pentru comoditate vom folosi conceptul dematrice vida, care este o matrice fara elemente, notata [ ].

    Vom considera ntotdeauna ca numerele reale sunt reprezentate n memoria calculatoruluintr-un format specific, numit format virgula mobila (FVM) si ca toate operatiile aritmeticede 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 sivoi. Fiecare scalar, vector sau matrice va fi notat cu un simbol care va fi interpretat ca un

    1

  • 7/25/2019 Metode Numerice Seminarii 1-6

    2/140

    2 SEMINAR 1. CALCUL MATRICEAL ELEMENTAR

    nume de identificare. Pentru fiecare scalar, vector sau matrice reala se aloca n memoriacalculatorului 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 , Zpentru matrice.

    FieA IRmn o matrice si b IRm un vector. Elementul aflat pe liniai si coloana j amatriceiA va fi notat cu A(i, j) sau aij. Elementul i al vectorului b va fi notat cu b(i) saubi.

    Vom folosi intens notatia MATLAB : pentru a crea un vector linie. Expresia

    a= : :

    creaza un vector linieacu 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] darj = 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 matriceinoi 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

    B=

    A(r1, c1) A(r1, c2) A(r2, c1) A(r2, c2)

    ..

    .

    ..

    .

    . ..

    .

    Utilizand notatia : putem crea o mare varietate de matrice cu elementele unei matricedate. 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 submatricelider principalaa 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,coloanaj 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 lorfac 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%) deelemente nule se numeste matrice rara. O matrice care nu este rara se numeste densa.

  • 7/25/2019 Metode Numerice Seminarii 1-6

    3/140

    1.1. PRELIMINARII 3

    In cazul calculului matriceal cu matrice rare, calculatorul foloseste metode speciale pentrumemorare si procesare (de exemplu, sunt memorate doar elementele nenule mpreuna cucoordonatele 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 ele-

    mentele 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 ma-trice structurate sunt definite mai jos.

    1. Matrice triunghiulare. O matriceL IRmn se numesteinferior triunghiularadacaL(i, j) = 0, oricare ar fi i < j iar L se numeste inferior triunghiulara unitatedaca nplus L(i, i) = 1 oricare ar fi i 1 : min(m, n). O matrice U IRmn se numestesuperior triunghiularadaca U(i, j) = 0, oricare ar fi j < i iar U se numeste superiortriunghiulara unitatedaca n plusU(i, i) = 1 oricare ar fii 1 : min(m, n). Remarcatica elementele nule ale unei matrice inferior triunghiulare cu m > n si elementele nule

    ale unei matrice superior triunghiulare cum < n formeaza o structura trapezoidala.

    2. Matrice diagonale. O matrice D IRmn se numeste diagonaladaca D(i, j) = 0,oricare ar fi i = j, adica este n acelasi timp si inferior triunghiulara si superiortriuunghiulara.

    3. Matrice Hessenberg. O matrice patratica G IRnn se numesteinferior Hessenbergdaca G(i, j) = 0, oricare ar fi j > i+ 1. O matrice patratica H IRnn se numestesuperior Hessenbergdaca H(i, j) = 0, oricare ar fi i > j + 1.

    4. Matrice tridiagonale. O matrice patraticaT IRnn se numestetridiagonaladacaT(i, j) = 0, oricare ar fii, j care satisfac |ij| >1, adica este n acelasi timp superiorsi inferior Hessenberg.

    5. Matrice banda. O matrice B IRmn

    se numeste matrice banda de latime (p,q)daca B(i, j) = 0, oricare ar fi i < j + p si j < i+ q. O matrice tridiagonala este omatrice banda cu p = q= 1.

    Observatie: Desi limbajele de programare de nivel nalt nu permit astfel de structuri dedate cum sunt matricele triunghiulare, putem sa evitam memorarea elementelor nule si saobtinem o memorare economica folosind o singura matrice patratica pentru memorarea uneimatrice inferior triunghiulare si a uneia superior tringhiulare. Astfel de strategii de stocarevor 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 simetrica dacaS(i, j) = S(j, i), oricare ar fi i, j. In mod normal, o matrice simetrica este stocatanumai prin partea sa inferior sau superior triunghiulara.

    2. Matrice pozitiv definite. O matrice patratica simetrica P IRnn se numestepozitiv definitadaca toti scalarii xTP x, unde xIRn este un vector (coloana) nenularbitrar ales, sunt strict pozitivi. Daca xTP x 0, x IRn, atunci P se numestepozitiv semi-definita. O matrice pozitiv definita are toti elementii de pe diagonala

  • 7/25/2019 Metode Numerice Seminarii 1-6

    4/140

    4 SEMINAR 1. CALCUL MATRICEAL ELEMENTAR

    pozitivi (demonstrati) dar elementele care nu se afla pe diagonala nu sunt obligatoriupozitive. O matrice simetricaN IRnn se numestenegativ (semi)-definitadacaNeste pozitiv (semi)-definita.

    3. Matrice ortogonale. Doi vectori (coloana) x, y IRn se numesc ortogonali dacayTx= 0 siortonormatidaca, n plus, x2= y2= 1. O matrice patraticaQ IRnnse numeste ortogonala daca toate coloanele ei formeaza perechi ortonormate, adicaQTQ = In, unde In este matricea unitate. Matricele ortogonale joaca un rol decisivn rezolvarea problemei liniare a celor mai mici patrate.

    1.1.3 Probleme de calcul numeric, algoritmi secventiali

    si performant ele lor

    Metodele numerice au rolul sa rezolve probleme matematice care folosesc date numerice. Oproblema 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 calculnumeric 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 lasolutia numerica finala. Aceste rezultate finale sunt interpretate casolutia calculataa uneiprobleme date. Cand algoritmul este facut pentru a fi executat pe un calculator cu un singurprocesor, adica exista o ordine stricta a executiei instructiunilor (doua instructiuni nu potfi executate n acelasi timp!) atunci algoritmul se numeste secvential. Altfel algoritmul senumeste paralel.

    Principalele performante ale algoritmilor seventiali suntstabilitatea si eficienta. Stabili-tatea este un obiectiv esential nsa foarte greu de masurat si de asigurat. Vezi cursul pentrumai multe detalii. Eficienta algoritmilor secventiali poate fi masurata de doi parametri:numarul de operatii n virgula mobilaN(flops) si volumul de memorie necesar M(exprimatprin 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 siM sunt polinoame de dimensiunea problemei, exprimate n functie de numarul initial si celfinal de date, spre exemplu n functie de ordinul n al matricelor folosite. Daca

    N=1np + 2n

    p1 + . . . + pn + p+1, M =1nq + 2n

    q1 + . . . + qn + q+1

    ne vor interesa numai evaluarile asimptotice

    N 1np, M 1nq

    (evident limnNN

    = limnMM

    = 1).

    Pentru a mbunatati eficienta algoritmilor sunt utile urmatoarele recomandari:

    nu executati operatii cu rezultatul cunoscut, de exemplu evitati adunari si scaderi cuzero, nmultiri cu 1 sau 0, mpart iri la 1 etc;

    nu repetati aceleasi calcule; n cazul n care calculatorul functioneaza corect veti obtineacelasi rezultat;

    evitati executia operatiilor inutile;

  • 7/25/2019 Metode Numerice Seminarii 1-6

    5/140

    1.2. CONVENTII PENTRU PSEUDO-COD 5

    evitati memorarea informatiilor care nu trebuiesc neaparat memorate; de exemplu numemorati niciodata matricea zero sau matricea unitate: le puteti folosi fara sa le avetin memoria calculatorului;

    nu memorati aceeasi informatie de mai multe ori; folositi metode eficiente de memorare a matricelor structurate, de exemplu matricele

    diagonale pot fi memorate numai prin memorarea elementelor diagonale etc;

    folositi suprascrierea; ex: daca vreti sa calculati vectorul z = x+y si nu mai avetinevoie de x sau y pentru calculele urmatoare atunci calculati x x+ y sau yx + y.

    Observatie. Nu neglijati recomandarile de mai sus. B.Francis si N.Koublanovskaia audevenit celebri descoperind cum sa evite calculele excesive dintr-un algoritm. Si tu potideveni un cercetator cunoscut reducand valoarea parametrilorp si/sau q n cazul problemelornumerice standard. Nu se cunoaste nca valoarea minima a parametruluip pentru o problema

    simpla cum este nmultirea matricelor!

    1.2 Conventii pentru pseudo-cod

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

    1.2.1 Instructiuni de atribuireFormele generale ale unei instructiuni de atribuire sunt:

    v= expresie sau v expresie

    undev este numele unei variabile siexpresieeste orice expresie aritmetica sau logica valida.O expresie aritmetica este valida daca:

    toate variabilele folosite au o valoare valida (adica au fost initializate sau calculateanterior);

    toate operatiile sunt bine definite si expresia are o valoare bine definita; astfel nu suntpermise: 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.

  • 7/25/2019 Metode Numerice Seminarii 1-6

    6/140

    6 SEMINAR 1. CALCUL MATRICEAL ELEMENTAR

    expresia ia o valoare logica clara (adevarat sau fals).Executia unei instructiuni de atribuire implica:

    evaluarea expresiei; memorarea valorii expresiei n memoria calculatorului ntr-o zona identificata cu nu-

    mele variabilei v ; vechea valoare a lui v se pierde.

    Uneori vom folosim o forma specialau v

    pentru interschimbarea valorilor dintre variabilele u si v. Aceasta instructiune este echiva-lenta cu urmatoarele trei instructiuni de atribuire

    1. aux =u2. u= v3. v= aux,

    unde aux este o variabila auxiliara.

    1.2.2 Instructiunea Daca

    Utilizarea conditionata a unui set de instructiuni poate fi realizata folosind instructiuneadaca a carei sintaxa este:

    1. daca expresie logica1. instructiuni 1

    altfel

    1. instructiuni 2

    Executia instructiunii daca implica

    1. evaluarea expresie logica; rezultatul are valoarea logica ADEVARAT sau FALS;

    2. daca rezultatul are valoarea logica ADEVARAT atunci se executa primul grup deinstructiuni (instructiuni 1);

    3. daca rezultatul are valoarea logica FALS atunci se executa al doilea grup de instructiuni(instructiuni 2).

    Partea altfel a unei instructiuni daca poate lipsi.

    Expresia logica poate fi scrisa explicit, dar trebuie sa aiba o valoare logica clara lamomentul executiei. Spre exemplu

    1. daca este duminica1. stai acasa

    altfel

    1. mergi la scoala.

    are sens numai daca cel care executa algoritmul stie n ce zi a saptamanii se afla.

    De asemenea, se recomanda sa se evite situatiile n care expresia logica este o constantaevidenta deoarece n acest caz instruct iunea daca nu mai este necesara. De exemplu

  • 7/25/2019 Metode Numerice Seminarii 1-6

    7/140

    1.2. CONVENTII PENTRU PSEUDO-COD 7

    1. daca 1 > 21. 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 dispozitiedoua tipuri de instructiuni ciclice.

    a) instructiunea pentru are urmatoarea sintaxa:

    1. pentru k = expresie1. instructiuni

    Executia unei instructiunipentru implica

    1. evaluarea expresiei; rezultatul trebuie sa fie un vector linie;

    2. se atribuie variabilei k primul element al vectorului linie calculat si se executainstructiunile din corpul ciclului;

    3. se atribuie variabilei k cel de-al doilea element al vectorului linie calculat si seexecuta instructiunile;

    4. si asa mai departe pana la atribuirea luik a ultimului element al vectorului linie.

    Obsevatie: Valoarea curenta a luik poate fi folosita n instructiuni dar nu recomandammodificarea acesteia. In MATLAB rezultatul evaluarii expreseiei p oate fi o matrice ncare caz lui k i se atribuie succesiv, n ordinea naturala, cate o coloana a matricei sipentru fiecare atribuire se executa instructiunile din corpul ciclului.

    Exemplu: fiind dat un scalar real si un numar natural n 1 urmatorul ciclu cal-culeaza = 2

    n

    .

    1. = 2. pentru k = 1 :n

    1. =

    b) instructiunea cat timp are urmatoarea sintaxa:

    1. cat timp expresie logica1. instructiuni

    Executia unei instructiunicat timp implica:

    1. evaluarea expresie logica; rezultatul trebuie sa fie ADEVARAT sau FALS;

    2. daca rezultatul este ADEVARAT se executa instructiunile; altfel ciclul cat timpeste terminat;

    3. mergi la 1.

  • 7/25/2019 Metode Numerice Seminarii 1-6

    8/140

    8 SEMINAR 1. CALCUL MATRICEAL ELEMENTAR

    Observatie: Daca rezultatul primei evaluari este FALS instructiunile din corpul cicluluinu sunt executate niciodata. Daca rezultatul primei evaluari este adevarat si valoareaexpresiei logice nu se schimba pe parcursul executarii instructiunilor, atunci ciclul

    cat timp nu se termina niciodata; avem un ciclu infinit. Daca nu aveti nevoiede un ciclu infinit aveti grija sa schimbati valoarea expresiei pe parcursul executariiinstructiunilor.

    Exemplu: fiind dat un scalar real si un numar natural n 1 urmatorul ciclu cal-culeaza = 2

    n

    .

    1. = 2. k= 13. cat timp k n

    1. = 2. k= k+ 1

    1.2.4 Structura algoritmilor

    Orice algoritm va avea doua parti:

    1. prima parte contine informatii privitoare la problema rezolvata si metoda folositapentru rezolvarea ei:

    datele de intrare (initiale); datele calculate (rezultate); metoda folosita;

    Optional, prima parte poate contine

    numele autorului data elaborarii algoritmului versiunea etc.

    2. a doua parte este o lista de instructiuni numerotate scrise n pseudo-cod care aratacum sunt folosite datele initiale pentru a ajunge la rezultatul final.

    1.3 BLAS

    Cele mai importante operatii cu matrice tratate n acest seminar sunt implementate ntr-unpachet software numit Basic Linear Algebra Soubrutines (BLAS). Exista versiuni specialea BLAS concepute pentru calculatoare cu organizare ierarhica a memoriei care sunt opti-mizate pentru a exploata toate atributele calculatorului t inta. BLAS este organizat pe treinivele. Lista subnivelelor BLAS este data n Anexa.

  • 7/25/2019 Metode Numerice Seminarii 1-6

    9/140

    1.3. BLAS 9

    1.3.1 Nivelul 1. Operatii de baza cu vectori

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

    1. SAXPY (acronim pentru Scalar Alpha X Plus Y)

    y x + y

    unde x si y sunt vectori dati de dimensiune n (coloana sau linie) si este un scalar dat.Evident dacay are initial toate elementele nule, atunci SAXPY calculeazay = x. (Atentie:daca vreti sa calculatiy = x folosind SAXPY, nu uitati sa initializatiy cu 0).

    2. DOT calculeaza produsul scalar a doi vectori (coloana) x, y IRn care este, prindefinitie,

    = yTx=ni=1

    xiyi

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

    n

    definita de

    =

    xTx=

    ni=1

    x2i .

    1.3.2 Nivelul 2. Operatii de baza matrice-vector

    Nivelul 2 al BLAS contine operatii de complexitate O(n2). Cateva dintre acestea sunt:

    1. GAXPY (acronim pentru General A X Plus Y)

    y Ax + y

    undex siy sunt vectori (coloana) de dimensiunen siA este o matricen ndata. Evident,daca initial toate elementele lui y sunt nule, atunci GAXPY calculeaza produsul matrice-vector y = Ax. (Atentie: daca vreti sa calculati y = Ax folosind GAXPY, nu uitati sainitializatiy cu zero). In acest context vom folosi si operatia cu vectori linieyT xTA+yT.

    2. OUT produsul extern a doi vectori (coloana)x, y IRn este definit ca o matrice nn

    A= xyT, i.e. A(i, j) = xiyj , i , j = 1 :n

    Nivelul 2 contine totodata algoritmi de rezolvare a sistemelor triunghiulare liniare (veziseminarul 2).

    1.3.3 Nivelul 3. Operatii de baza matrice-matrice

    Nivelul 3 al BLAS contine operatii de complexitate O(n3). Cele mai importante dintreacestea 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.

  • 7/25/2019 Metode Numerice Seminarii 1-6

    10/140

    10 SEMINAR 1. CALCUL MATRICEAL ELEMENTAR

    Luand = = 1 si matricea initialaCzero, procedura de mai sus calculeaza produsulC=AB. BLAS acopera toate cazurile particulare ale nmultirii matrice-matrice. Pentru cazuln care macar una dintre matrice este simetrica exista o procedura speciala. De asemenea,

    exista proceduri speciale pentru cazul n care matricele implicate sunt triunghiulare.2. Actualizarea de rang k a unei matrice simetrice: fiind dati scalarii reali si , o

    matrice simetricaC IRmn si o matrice AIRnk, se calculeaza matriceaC A AT + C.

    Daca k < n si A are coloanele liniar independente, atunci rangAAT = k. Acest lucru danumele procedurii.

    3. Actualizarea de rang 2k a unei matrici simetrice: fiind dati scalari reali si , omatrice simetricaC IRmn si doua matrice n k A si B , procedura calculeaza:

    C A BT + B AT + C.

    Nivelul 3 contine si algoritmi de rezolvare a sistemelor liniare triunghiulare cu membruldrept 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 ntalniten probleme mai complexe. Programele MATLAB de implementare a algoritmilor elaboratisunt prezentate n Anexa B.

    Problema 1. Fiind date numerele reale 1, 2, . . . , n, scrieti un algoritm care sacalculeze suma lor =

    ni=1 i si un alt algoritm care sa calculeze produsul lor =

    ni=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:

    Algoritmul 1.1(Date i, i = 1 :n, algoritmul calculeaza =n

    i=1 i)

    1. = 02. pentru i = 1 :n

    1. = + i

    Algoritmul 1.2(Date i, i = 1 :n, algoritmul calculeaza =n

    i=1 i)

    1. = 02. pentru i = n : 1 : 1

    1. = + i

    Observati ca cei doi algoritmi pentru calcularea sumei sunt diferiti. Datorita erorilor derotunjire, care apar la efectuarea fiecarei adunari, rezultatele executarii celor doi algoritmipot fi diferite. Adunarea n virgula mobila nu este o operatie asociativa. Este foarte greude gasit ordinea optima de nsumare astfel ncat eroarea sa fie minima.

    Algoritmul 1.3(Date i, i = 1 :n, algoritmul calculeaza =n

    i=1 i)

  • 7/25/2019 Metode Numerice Seminarii 1-6

    11/140

    1.4. PROBLEME REZOLVATE 11

    1. = 12. pentru i = 1 :n

    1. = i

    Evident, observatiile de mai sus raman valabile.

    Problema 2. Fiind data o matrice superior triunghiularaU IRnn, scrieti un algoritmeficient care sa calculeze

    1. urma matriceiU, i.e. = tr U;

    2. determinantul = det U

    3. normele Frobenius, 1 si infinit ale matricei U definite n felul urmator:

    F =

    n

    i=1

    n

    j=1

    u2ij (normaFrobenius),

    1= maxj1:n

    ni=1

    |uij| (norma1)

    si

    = maxi1:n

    nj=1

    |uij | (norma ).

    Solutie. Prin definitie =n

    i=1 U(i, i). De asemenea, este usor de demonstrat ca=

    ni=1 U(i, i). Astfel puteti folosi algoritmii de calcul a sumei, respectiv a produsului a

    nnumere reale de la problemele precedente. Pentru a putea calcula eficient norma matricei

    vom exploata structura superior triunghiulara a matriceiUevitand efectuarea unor operatiiinutile. Astfel avem

    F =

    ni=1

    nj=i

    u2ij, 1= maxj1:n

    ji=1

    |uij|, = maxi1:n

    nj=i

    |uij |.

    Prin urmare, algoritmul este:

    Algoritmul 1.4

    1. 1= 02. pentru j = 1 : n

    1. = 02. pentru i = 1 :j

    1. = + |uij|3. daca 1<

    1. 1= 3. = 04. pentru i = 1 :n

    1. = 0

  • 7/25/2019 Metode Numerice Seminarii 1-6

    12/140

    12 SEMINAR 1. CALCUL MATRICEAL ELEMENTAR

    1. pentru j = i : n2. = + |uij |

    2. daca <

    1. = 5. F = 06. pentru i = 1 :n

    1. pentru j = i : n1. F =F+ u

    2ij

    7. F =

    F

    Problema 3. a) Fie doi vectori necoliniari datib1, b2 IRn. Calculati un vectorq IRnaflat n subspat iul generat de b1 si b2, ortogonal la b1. b) Fie p vectori liniar independentibj IRn, j = 1 : p. Calculati un set de p vectori qj , j = 1 : p din subspatiul generat devectorii bj , ortogonali doi cate doi, i.e. astfel ncatq

    Ti qj = 0, i =j , qj IRn, j = 1 :p.

    Solutie. a) Orice vector din subspatiul generat de vectorii b1 si b2 este o combinatieliniara a acestor doi vectori. Fieqo astfel de combinatie liniara a luib1 sib2, i.e. q= b1+b2.Pentru a determina avem conditia de ortogonalitate bT1q= b

    T1b1+ b

    T1b2= 0. Vectorul b1

    fiind nenul, rezulta = bT1b2

    bT1b1. Algoritmul este:

    1. = 02. = 03. 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 subspat iu al lui IRn ca

    si setul de vectori bj . Ideea algoritmului Gram-Schmidt consta n a impune q1 = b1 si aexprima un vectorqj+1ca o combinatie liniara a vectorilorqk deja calculati sibj+1, conformschemei de calcul la nivel vectorial:

    1. q1= b12. pentru j = 1 :p 1

    1. qj+1=j

    i=1 ijqi+ bj+1

    unde scalariiij,i = 1 :j trebuie sa asigure ortogonalitatea vectoruluiqj+1 laqk, k= 1 :j .

    La fel ca mai sus, 11= bT1b2

    bT1b1. Mai general, avand n vedere ca qTkqj+1=

    ji=1 ijq

    Tkqi+

    qTkbj+1= 0 si caqTkqi= 0 pentru k =i avem

    ij = qTi bj+1qTi qi

    , i= 1 :j

    Astfel algoritmul Gram-Schmidt detaliat este:

  • 7/25/2019 Metode Numerice Seminarii 1-6

    13/140

    1.4. PROBLEME REZOLVATE 13

    Algoritmul 1.5(Gram-Schmidt) Fiind dati vectorii liniar independentibj , j =1 : p, algoritmul calculeaza un set de p vectori ortogonali qj, j = 1 : p careformeaza o baza ortogonala a subspatiului generat de vectorii bj , j = 1 :p.

    1. pentru k = 1 :n1. q1(k) = b1(k)

    2. pentru j = 1 : p 11. j = 02. pentru k = 1 : n

    1. j =j+ qj(k) qj(k)2. qj+1(k) = bj+1(k)

    3. pentru i = 1 :j1. ij = 02. pentru k = 1 :n

    1. ij =ij+ qi(k) bj+1(k)3. ij = ij/i4. pentru k = 1 :n1. qj+1(k) =qj+1(k) + ijqi(k)

    Observati ca algoritmul Gram-Schmidt contine multe operatii vector-vector cum suntprodusele SAXPY si DOT, implementate profesional la nivelul 1 BLAS.

    La curs vom prezenta un algortitm mai bun pentru rezovarea aceleiasi probleme.

    Problema 4. Fie o matrice AIRmn, un vector bIRn si un vector cIRm, toatedate. Scrieti un algoritm eficient care sa calculeze c c + A b. (Daca initial c = 0, atunciaceasta este o problema de nmultire matrice-vector c= A b).

    Solutie. Vom da doi algoritmi: primul bazat pe algoritmul DOT de calcul al produsuluiscalar a doi vectori (un algortim orientat pe linii) si un al doilea bazat pe SAXPY (unalgoritm orientat pe coloane). Pentru primul algoritm vom partit iona matriceaA pe linii si

    vom folosi formula

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

    aijbj, i= 1 : m.

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

    Algoritmul 1.6 GAXPY pe linii: Fiind data o matrice A IRmn si vectoriib IRn si c IRm, algoritmul calculeazac c + A b1. pentru i = 1 :m

    1. pentru j = 1 :n1. ci = ci+ aij bj

    Pentru al doilea algoritm vom partitiona matriceaA pe coloane si vom folosi formula

    c c +nj=1

    A:,jbj .

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

  • 7/25/2019 Metode Numerice Seminarii 1-6

    14/140

    14 SEMINAR 1. CALCUL MATRICEAL ELEMENTAR

    Algoritmul 1.7GAXPY pe coloane: Fiind data o matriceA IRmn si vectoriib IRn si c IRm, algoritmul calculeaza c c + A b1. pentru j = 1 :n

    1. pentru i = 1 : m1. ci= ci+ aij bj

    Complexitatea celor doi algoritmi este aceeasi Nop 2mn dar exista diferente ntre ei:primul este recomandat cand matricaA este memorata pe linii si al doilea cand matriceaAeste memorata pe coloane.

    Problema 5. Fie trei matrice A IRmn, B IRnp si C IRmp date, scrieti unalgoritm eficient care sa calculeze C C+ A B. (Daca initial C= 0, atunci aceasta esteo problema de nmultire matrice-matriceC=A B).

    Solutia. Solutia standard se bazeaza pe formula binecunoscuta

    cij cij+ nk=1

    aik bkj , i= 1 :m, j = 1 :p.

    Avand trei indici (i,j,k) putem scrie 3! = 6 algoritmi esential diferiti. Complexitatea acestoralgoritmi 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 operatieGAXPY-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 calculeazaC C+ A B.1. pentru i = 1 :m

    1. pentru j = 1 :p1. pentru k = 1 :n

    1. cij =cij+ aik bkj

    b) Versiunea (j, k, i) se bazeaza pe partitionarea luiAsi a luiB pe coloane. Ultimul cicluintern 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.9Versiunea (j, k, i) a nmultirii matrice-matrice.

    1. pentru j = 1 :p1. pentru k = 1 :n

    1. pentru i = 1 :m1. 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 produsulOUT a doi vectori, concretC(i, :) C(i, :)+A(i, k)B(k, :), respectivC C+A(:, k)B(k, :).

  • 7/25/2019 Metode Numerice Seminarii 1-6

    15/140

    1.4. PROBLEME REZOLVATE 15

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

    1. pentru k = 1 :m1. pentru i = 1 :p

    1. pentru j = 1 :n1. cij =cij+ aik bkj

    Problema 6. Fie L IRnn o matrice inferior triunghiulara si U IRnn o matricesuperior triunghiulara, ambele date. Scrieti un algoritm eficient care sa calculezeA = L U.(Problema inversa: fiind data A, calculati L si U, este cunoscuta ca problema factorizariiLU si va fi tratata la curs).

    Solutia. Pentru a obtine un algoritm eficient trebuie sa evitam calculele inutile cumsunt nmultirile si adunarile cu zero. Astfel, avem

    A(i, j) =

    nk=1

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

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

    si ca sa evitam comparatia dintre i si j vom mparti calculul n calcularea partii inferiortriunghiulare si a celei superior triunghiulare a lui A. Algoritmul este:

    Algoritmul 1.11

    1. pentru i = 1 :n1. pentru j = 1 :i

    1. aij = 02. pentru k = 1 :j

    1. aij =aij+ lik

    ukj

    2. pentru j =i + 1 :n1. aij = 02. pentru k = 1 :i

    1. aij =aij+ lik ukj

    Numarul de operatii necesare pentru algoritmul de mai sus este

    Nop=

    ni=1

    (

    ij=1

    2j+

    nj=i+1

    2i) 23

    n3,

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

    Problema 7. a. Fie matriceleU, V IRnn date. Propuneti un algoritm eficient pentrua calcula matricea:

    X= (In+ U(:, 1) V(1, :)) (In+ U(:, 2) V(2, :)) (In+ U(:, n) V(n, :)).

    bScrieti un algoritm eficient care sa calculeze determinantul matriceiXcalculate la punctula).

  • 7/25/2019 Metode Numerice Seminarii 1-6

    16/140

    16 SEMINAR 1. CALCUL MATRICEAL ELEMENTAR

    Solutia a) Scriem mai ntai un algoritm eficient pentru calcularea produsului XX (In + uvT), undeXeste o matrice data iaru, v IRn sunt vectori coloana dati. EvidentY = X (In+ uvT) = X+X u vT, astfel ca Y(i, j) = X(i, j) + X(i, :) u v(j) =X(i, j) + v(j) unde scalarul = X(i, :) u =

    n

    k=1 X(i, k)u(k) depinde de i dar nudepinde dej. Avem astfel urmatorul algoritm eficient:

    Algoritmul 1.12. Fiind data matriceaX IRnn si vectorii coloanau, v IRn,acest algoritm calculeaza X X (In+ uvT).1. pentru i = 1 :n

    1. = 02. pentru k = 1 :n

    1. = + xik uk3. pentru j = 1 :n

    1. xij =xij+ vj

    Acum, introducand numele Xuv pentru procedura de mai sus si apeland secventa deinstructiuni de mai sus prin

    X=Xuv(X,u,v)

    putem rezolva problema folosind urmatoarea procedura:

    Algoritmul 1.13

    1. X=In2. pentru k = 1 :n

    1. X=Xuv(X, U(:, k), V(k, :))

    Observati ca algoritmul 1.12 necesitaO(n2

    ) operatii, deci am rezolvat problema nmultiriia n matrice cu o complexitate de numai O(n3) flopi.

    b) Metoda eficienta de a calcula determinantul se bazeaza pe faptul ca daca u, v IRnsunt vectori coloana, atunci det(In+ uv

    T) = 1 +vTu (demonstrati, spre exemplu folosindinductia matematica). Asadar,

    det X=n

    k=1

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

    k=1

    (1 +ni=1

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

    si algoritmul este

    Algoritmul 1.14

    1. = 12. pentru k = 1 :n

    1. = 12. pentru k = 1 :n

    1. = + vki uik3. =

  • 7/25/2019 Metode Numerice Seminarii 1-6

    17/140

    1.5. PROBLEME PROPUSE 17

    1.5 Probleme propuse

    Problema 1.1 Fie doua matriceA, B

    Rmnn. Produsul scalar dintre A siB este definit

    de =< A, B >= trace(BTA). Demonstrati ca =

    mi=1

    nj=1 aijbij si scrieti un algoritmcare sa calculeze .

    Problema 1.2 Fie u, v Rn doi vectori nenuli si fie A = In+ uvT. Gasiti un algoritmeficient care sa calculeze norma Frobenius a lui A.

    Problema 1.3 Fie A,B, C IRnn trei matrice date si dIRn un vector dat. Scrieti unalgoritm eficient care sa calculeze vectorul x = A B C d.Problema 1.4 Fie A, B IRnn doua matrice date. Scrieti algoritmi eficienti pentrucalculareaA A B, si a B A B folosind cat mai putin spatiu de memorie. Repetatiproblema cand A si B sunt amandoua inferior triunghiulare (superior triunghiulare).

    Problema 1.5 Se considera date matricele: H IRnn superior Hessenberg, R Rnn

    superior triunghiulara si vectorul b IRn

    .a. Demonstrati ca matriceleX=HR siY =R Hsunt ambele superior Hessenberg.b. Scrieti algoritmi eficienti pentru calculul matricelor X si Y ; studiati posibilitatea de

    a suprascrie H cuX (cuY).

    c. Scrieti algoritmi eficienti pentru a calcula vectorii x = H Rb si y = RH b.

    Problema 1.6 Fie C IRnn, o matrice simetrica data si A Rnp o matrice oarecare.Scrieti un algoritm eficient care sa calculeze actualizarea de rang p a lui C, adica CC+A AT. Demonstrati ca daca initial C este zero, atunci matricea C calculata estesimetrica si pozitiv semi-definita.

    Problema 1.7 Fie C IRnn o matrice simetrica si matricele A, B Rnp. Scrieti unalgoritm eficient care sa calculeze actualizarea de rang 2pa lui C, adicaC C+ A BT +B A

    T

    .Problema 1.8 Fie Rnn o matrice inferior triunghiulara nesingulara. Scrieti un algoritmeficient care sa calculeze T = LLT si demonstrati ca T este o matrice simetrica pozitiv-definita.

    1.6 Bibliografie

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

    2. G.W. Stewart, Introduction to matrix computation, Academic Press, 1973.

    3. G. Golub, Ch. Van Loan, Matrix Computations, a treia editie, John Hopkins

    University Press, 1998.4. G.W. Stewart, Matrix Algorithms, vol.1: Basic Decompositions, SIAM, 1999.

    5. G.W. Stewart, Matrix Algorithms, vol.2: Eigensystems, SIAM, 2001.

    6. B. Dumitrescu, C. Popeea, B. Jora, Metode de calcul numeric matriceal. Al-goritmi fundamentali, ALL, Bucuresti, 1998.

  • 7/25/2019 Metode Numerice Seminarii 1-6

    18/140

    18 SEMINAR 1. CALCUL MATRICEAL ELEMENTAR

    1.7 Anexa B

    1: function [ sigma ] = suma1(alfa)2:3: %-------------------------------------------------------------------------4: % Algoritmul 1.15: % Functia calculeaza suma a n numere reale stocate in vectorul alfa6: % numerele sunt insumate in ordine normala de la alfa(1) pana la alfa(n)7: % Apelul: [ sigma ] = suma1(alfa)8: %9: % Buta Valentin, aprilie, 2006

    10: %-------------------------------------------------------------------------11:12: n=length(alfa);13: m=min(size(alfa));14: if m=115: error(Datele de intrare nu sunt corecte)16: end17: sigma=0;18: for i=1:n19: sigma=sigma+alfa(i);20: end

    1: function [ sigma ] = suma2(alfa)2:3: %-------------------------------------------------------------------------4: % Algoritmul 1.25: % Functia calculeaza suma a n numere reale stocate in vectorul alfa6: % numerele sunt insumate in ordine inversa de la alfa(n) pana la alfa(1)7: % Apelul: [ sigma ] = suma2(alfa)8: %9: % Buta Valentin, aprilie, 2006

    10: %-------------------------------------------------------------------------11:12: n=length(alfa);13: m=min(size(alfa));14: if m=115: error(Datele de intrare nu sunt corecte)16: end17: sigma=0;

    18: for i=n:-1:119: sigma=sigma+alfa(i);20: end

    1: function [ p ] = produs(alfa)2:

  • 7/25/2019 Metode Numerice Seminarii 1-6

    19/140

    1.7. ANEXA B 19

    3: %-------------------------------------------------------------------------4: % Algoritmul 1.35: % Functia calculeaza produsul a n numere reale stocate in vectorul alfa

    6: % numerele sunt inmultite in ordine normala de la alfa(1) pana la alfa(n)7: % Apelul: [ p ] = produs(alfa)8: %9: % Buta Valentin, aprilie, 2006

    10: %-------------------------------------------------------------------------11:12: n=length(alfa);13: m=min(size(alfa));14: if m=115: error(Datele de intrare nu sunt corecte)16: end17: p=1;18: for i=1:n19: p=p*alfa(i);

    20: end

    1: function [ v1,vi,vF ]=norme(U)2: %-------------------------------------------------------------------------3: % Algoritmul 1.44: % Functia calculeaza norma unu, norma infinit si norma Frobenius a unei5: % matrice superior triunghiulara U. Norma unu este notata cu v1, norma6: % infinit cu vi iar norma Frobenius cu vF.7: % Apelul: [ v1,vi,vF ] = norme(U)8: %9: % Buta Valentin, aprilie, 2006

    10: %-------------------------------------------------------------------------11: [ n,m ]=size(U);12: if n=m13: error(Matricea nu este patratica!);14: end15: for i=2:n-116: for j=1:i-117: if U(i,j)=018: error (Matricea nu este superior triunghiulara);19: end20: end21: end22: v1=0;23: for j=1:n

    24: sigma=0;25: for i=1:j26: sigma =sigma + abs(U(i,j));27: end28: if v1

  • 7/25/2019 Metode Numerice Seminarii 1-6

    20/140

    20 SEMINAR 1. CALCUL MATRICEAL ELEMENTAR

    32: vi=0;33: for i=1:n34: sigma=0;

    35: for j=i:n36: sigma =sigma + abs(U(i,j));37: end38: if vi < sigma39: vi = sigma;40: end41: end42: vF=0;43: for i=1:n44: for j=i:n45: vF=vF + U(i,j)*U(i,j);46: end47: end48: vF=sqrt(vF);

    1: function [ Q ]=gramschmidt(B)2:3: %-------------------------------------------------------------------------4: % Algoritmul 1.55: % Functia calculeaza p vectori ortogonali care genereaza acelasi subspatiu6: % ca p vectori liniar independenti dati.7: % Vectorii dati sunt memorati in coloanele matricei B, iar vectorii8: % calculati sunt memorati in coloanele matricei Q.9: % Algoritmul este cunoscut sub numele de Algoritmul Gram-Schmidt

    10: % Apelul: [ Q ]=gramschmidt(B)11: %12: % Buta Valentin, aprilie, 200613: %-------------------------------------------------------------------------14:15: [ n,p ]=size(B);16: for k=1:n17: Q(k,1)=B(k,1);18: end19: for j=1:p-120: beta(j)=0;21: for k=1:n22: beta(j)=beta(j)+Q(k,j)*Q(k,j);23: Q(k,j+1)=B(k,j+1);24: end

    25: for i=1:j26: alfa(i,j)=0;27: for k=1:n28: alfa(i,j)=alfa(i,j)+Q(k,i)*B(k,j+1);29: end30: alfa(i,j)=-alfa(i,j)/beta(i);31: for k=1:n32: Q(k,j+1)=Q(k,j+1)+alfa(i,j)*Q(k,i);

  • 7/25/2019 Metode Numerice Seminarii 1-6

    21/140

    1.7. ANEXA B 21

    33: end34: end35: end

    1: function [ c ]=GAXPY1(A,b,c)2:3: %-------------------------------------------------------------------------4: % Algoritmul 1.65: % Functia actualizeaza vectorul (coloana) c cu produsul unei matrice6: % A cu un vector (coloana) b. Algoritmul este cunoscut sub numele de GAXPY7: % pe linii.8: % Apelul: [ c ]=GAXPY1(A,b)9: %

    10: % Buta Valentin, aprilie, 200611: %-------------------------------------------------------------------------

    12:13: [m,n ]=size(A);14: [mb,nc ]=size(b);15: if mb=116: error(b nu este vector coloana);17: end18: if nc=n19: error(A si b nu pot fi inmultite);20: end21: [mc,nc ]=size(c);22: if mc=123: error(c nu este vector coloana);24: end25: for i=1:m26: for j=1:n27: c(i)=c(i)+A(i,j)*b(j);28: end29: end

    1: function [ c ]=GAXPY2(A,b,c)2:3: %-------------------------------------------------------------------------4: % Algoritmul 1.75: % Functia actualizeaza vectorul (coloana) c cu produsul unei matrice6: % A cu un vector (coloana) b. Algoritmul este cunoscut sub numele de GAXPY

    7: % pe coloane.8: % Apelul: [ c ]=GAXPY2(A,b)9: %

    10: % Buta Valentin, aprilie, 200611: %-------------------------------------------------------------------------12:13: [m,n ]=size(A);14: [mb,nc ]=size(b);

  • 7/25/2019 Metode Numerice Seminarii 1-6

    22/140

    22 SEMINAR 1. CALCUL MATRICEAL ELEMENTAR

    15: if mb=116: error(b nu este vector coloana);17: end

    18: if nc

    =n19: error(A si b nu pot fi inmultite);20: end21: [mc,nc ]=size(c);22: if mc=123: error(c nu este vector coloana);24: end25: for j=1:n26: for i=1:m27: c(i)=c(i)+A(i,j)*b(j);28: end29: end30: end

    1: function [ C ]=MxMijk(A,B)2:3: %-------------------------------------------------------------------------4: % Algoritmul 1.85: % Functia calculeaza matricea C definita ca produsul a doua6: % matrice A si B. Algoritmul se bazeaza pe partitionarea lui A pe linii,7: % si a lui B pe coloane.8: % Apelul: [ C ]=MxMijk(A,B)9: %

    10: % Buta Valentin, aprilie, 200611: %-------------------------------------------------------------------------12:13: [m,n ]=size(A);14: [ x,p ]=size(B);15: if n=x16: error(Matricele nu pot fi inmultite!)17: end18: for i=1:m19: for j=1:p20: C(i,j)=0;21: end22: end23: for i=1:m24: for j=1:p25: for k=1:n

    26: C(i,j)=C(i,j)+A(i,k)*B(k,j);27: end28: end29: end30: end

  • 7/25/2019 Metode Numerice Seminarii 1-6

    23/140

    1.7. ANEXA B 23

    1: function [ C ]=MxMjki(A,B)2:3: %-------------------------------------------------------------------------

    4: % Algoritmul 1.95: % Functia calculeaza matricea C definita ca produsul a doua6: % matrice A si B. Algoritmul se bazeaza pe partitionarea lui A si B pe7: % coloane.8: % Apelul: [ C ]=MxMjki(A,B)9: %

    10: % Buta Valentin, aprilie, 200611: %-------------------------------------------------------------------------12:13: [m,n ]=size(A);14: [ x,p ]=size(B);15: if n=x16: error(Matricele nu pot fi inmultite!)17: end

    18: for i=1:m19: for j=1:p20: C(i,j)=0;21: end22: end23: for j=1:p24: for k=1:n25: for i=1:m26: C(i,j)=C(i,j)+A(i,k)*B(k,j);27: end28: end29: end

    1: function [ C ]=MxMkij(A,B)2:3: %-------------------------------------------------------------------------4: % Algoritmul 1.105: % Functia calculeaza matricea C definita ca produsul a doua6: % matrice A si B. Algoritmul se bazeaza pe partitionarea lui A pe coloane7: % si a lui B pe linii.8: % Apelul: [ C ]=MxMkij(A,B)9: %

    10: % Buta Valentin, aprilie, 200611: %-------------------------------------------------------------------------12:

    13: [m,n ]=size(A);14: [ x,p ]=size(B);15: if n=x16: error(Matricele nu pot fi inmultite!)17: end18: for i=1:m19: for j=1:p20: C(i,j)=0;

  • 7/25/2019 Metode Numerice Seminarii 1-6

    24/140

    24 SEMINAR 1. CALCUL MATRICEAL ELEMENTAR

    21: end22: end23: for k=1:n

    24: for i=1:m25: for j=1:p26: C(i,j)=C(i,j)+A(i,k)*B(k,j);27: end28: end29: end

    1: function [ A ]=inmultire LU(L,U)2:3: %-------------------------------------------------------------------------4: % Algoritmul 1.115: % Functia calculeaza eficient produsul a doua matrice patratice L si U,

    6: % prima fiind inferior triunghiulara in timp ce a doua este superior7: % triunghiulara. Rezultatul este memorat in matricea A.8: % Apelul: [ A ]=inmultire LU(L,U)9: %

    10: % Buta Valentin, aprilie, 200611: %-------------------------------------------------------------------------12:13: [ n,x ]=size(L);14: [m,y ]=size(U);15: if n=x16: error(Matricea L nu este patratica);17: end18: if m=y19: error(Matricea U nu este patratica);20: end21: if n=m22: error(Matricele nu pot fi inmultite!)23: end24: for i=1:n25: for j=1:i26: A(i,j)=0;27: for k=1:j28: A(i,j)=A(i,j)+L(i,k)*U(k,j);29: end30: end31: for j=i+1:n32: A(i,j)=0;

    33: for k=1:i34: A(i,j)=A(i,j)+L(i,k)*U(k,j);35: end36: end37: end

  • 7/25/2019 Metode Numerice Seminarii 1-6

    25/140

    1.7. ANEXA B 25

    1: function [ X ]=Xuv(X,u,v)2:3: %-------------------------------------------------------------------------

    4: % Algoritmul 1.125: % Algoritmul calculeaza eficient produsul a doua matrice patratice una6: % oarecate (X) in timp ce cea de a doua are o forma particulara (In+u*v)7: % unde u si v sunt doi vectori (primul de tip coloana iar al doilea de tip8: % linie). Algoritmul suprascrie rezultatul in matricea X.9: % Apelul: [ X ]=Xuv(X,u,v)

    10: %11: % Buta Valentin, aprilie, 200612: %-------------------------------------------------------------------------13:14: [ n,m ]=size(X);15: if n=m16: error(Matricea X nu este patratica);17: end

    18: for i=1:n19: sigma=0;20: for k=1:n21: sigma=sigma+X(i,k)*u(k);22: end23: for j=1:n24: X(i,j)=X(i,j)+sigma*v(j);25: end26: end

    1: function [ X ]=prodUV(U,V)2:3: %-------------------------------------------------------------------------4: % Algoritmul 1.135: % Algoritmul calculeaza eficient produsul a n matrice de forma6: % (In+U(:,i)*V(i,:)), unde i=1:n, folosind procedura XUV7: % Apelul: [ X ]=doi(U,V)8: %9: % Buta Valentin, aprilie, 2006

    10: %-------------------------------------------------------------------------11:12: [ n,x ]=size(U);13: if n=x14: error(Matricea U nu este patratica);15: end

    16: [m,y ]=size(V);17: if m=y18: error(Matricea V nu este patratica);19: end20: for i=1:n21: for j=1:n22: X(i,j)=023: end

  • 7/25/2019 Metode Numerice Seminarii 1-6

    26/140

    26 SEMINAR 1. CALCUL MATRICEAL ELEMENTAR

    24: X(i,i)=1;25: end26: for k=1:n

    27: X=Xuv(X,U(:,k),V(k,:));28: end

    1: function [ detX ]=determinant(U,V)2:3: %-------------------------------------------------------------------------4: % Algoritmul 1.145: % Functia calculeaza determinantul matricei X egala cu produsul a n elementi6: % de tipul In+U(:,k)V(k,:). Algoritmul se bazeaza pe faptul ca datorita formei7: % matricei X determinantul putea fi calculat ca produsul a n factori de8: % tipul 1+V(k,:)*U(:,k) unde k=1:n.%9: % Apelul: [ detX ]=determinant(V,U)

    10: %11: % Buta Valentin, aprilie, 200612: %-------------------------------------------------------------------------13:14: [ n,x ]=size(U);15: [m,y ]=size(V);16: if n=x17: error(Matricea U nu este patratica);18: end19: if m=y20: error(Matricea V nu este patratica);21: end22: detX=1;

    23: for k=1:n24: nu=1;25: for i=1:n26: nu=nu+V(k,i)*U(i,k);27: end28: detX=detX*nu;29: end

  • 7/25/2019 Metode Numerice Seminarii 1-6

    27/140

    Seminar 2

    Rezolvarea sistemelor liniare

    determinate

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

    2.1 Preliminarii

    Fie un sistem liniar de n ecuatii cu n necunoscute. Un astfel de sistem poate fi scris concisn forma:

    Ax= b, A IRnn, b IRn, x IRn.Problema este de a calcula vectorulx al necunoscutelor atunci candA sib sunt date. Prob-lema are o solutie unica doar daca matricea A este nesingulara, i.e. are o inversa A1. Inacest caz:

    x= A1b.

    Pentru detalii despre teoria sistemelor liniare vezi cursul si bibliografia recomandata. Aicine vom concentra asupra unor sfaturi referitoare la metodele numerice pentru rezolvareaproblemei de mai sus. De asemenea, vom arata cum se rezolva cu ajutorul calculatoruluiprobleme nrudite, cum ar fi calculul determinantului sau al inversei unei matrice.

    1. Nu folositi metode binecunoscute cum ar fi Cramer sau formula x = A1b. Existametode mai bune, i.e. metode numerice mai precise si mai eficiente.

    2. Cea mai buna metoda de rezolvare a unui sistem liniar triunghiular este substitutianumerica. DacaA este o matrice inferiortriunghiulara nesingulara, atunci vom folosimetodasubstitutiei nainte. DacaA este o matricesuperiortriunghiulara nesingulara,atunci vom folosi metoda substitutiei napoi.

    1

  • 7/25/2019 Metode Numerice Seminarii 1-6

    28/140

    2 SEMINAR 2. REZOLVAREA SISTEMELOR LINIARE DETERMINATE

    3. Cea mai buna metoda de rezolvare a unui sistem general liniar determinat este metodareducerii si substitutiei, i.e. n prima faza sistemul este redus la unul sau doua sis-teme triunghiulare iar n a doua faza sistemul(le) triunghiular(e) este(sunt) rezolvat(e)prin substitutie.

    4. Cea mai populara schema de reducere este eliminarea gaussiana cu pivotare partiala(algoritmul GPP). Cea mai buna este eliminarea gaussiana cu pivotare completa(al-goritmul GPC). Nu uitati ca o strategie de pivotare este necesara totdeauna. Farapivotare este posibil ca eliminarea gaussiana sa nu poata reduce o matrice data la oforma triunghiulara.

    5. Eliminarea gaussiana este echivalenta cu metoda factorizarii LU. Metoda factorizariiLU trebuie sa fie utilizata mpreuna cu o strategie de pivotare adecvata.

    6. Asa numita metoda Gauss-Jordan, care reduce un sistem dat la unul diagonal este cuaproximativ 30% mai putin eficienta decat eliminarea gaussiana. Asadar eliminarea

    gaussiana este mai buna.

    7. Cea mai buna metoda de rezolvare a unui sistem liniar simetric pozitiv definit estefolosirea factorizarii Cholesky.

    8. Nu calculati determinanti si inversele matricelor fara o cerinta explicita. Asemeneaexpresii ca = cTA1bpot fi calculate fara calculul lui A1.

    2.2 Probleme rezolvate

    2.2.1 Sisteme triunghiulare si probleme nrudite

    Problema 2.1 Fie doua matrice nesingulare superior bidiagonalale B, C Rnn

    (bij =cij = 0 pentru i > j sau i < j 1), un vector d Rn si matricea A = BC. Dati solutiieficiente pentru:

    a. rezolvarea sistemului liniarAx = d;

    b. calculul determinantului = det A;

    c. calculul inversei X=A1.

    Solutie a.Vom analiza doua scheme de calcul. a1) Prima este:

    1. Se calculeaza A = BC2. Se rezolva Ax = d.

    Pentru a fi eficienta acesta schema trebuie sa exploateze faptul ca matriceaA are o structurade matrice superior triunghiulara banda de latime 3, i.e. aij = 0 pentu i > j si j > i+ 2(demonstrati!), n calcularea lui A ca si n adaptarea metodei substitutiei napoi pentrurezolvarea sistemului superior triunghiular Ax = d. Algoritmul este:

    1. pentru i = 1 :n1. pentru j = 1 :n

    1. ai,j = 0

  • 7/25/2019 Metode Numerice Seminarii 1-6

    29/140

    2.2. PROBLEME REZOLVATE 3

    2. ai,i = bi,ici,i3. daca i < n

    1. ai,i+1= bi,ici,i+1+ bi,i+1ci+1,i+14. daca i < n 1

    1. ai,i+2= bi,i+1ci+1,i+22. xn dnan,n3. xn1 (dn1an1,nxn)an1,n14. pentru i = n 2 : 1 : 1

    1. xi (diai,i+1xi+1ai,i+2xi+2)ai,iEfortul de calcul este de Nfl 10nflopi.

    a2) Schema a doua evita calcularea explicita a matricei A:

    1. Se rezolva sistemul superior bidiagonal B y= d

    2. Se rezolva sistemul superior bidiagonal C x= y.

    Adaptand metoda substitutiei napoi pentru rezolvarea sistemelor superior bidiagonalerezulta algoritmul:

    1. yn dnbn,n2. pentru i = n 1 : 1 : 1

    1. yi (dibi,i+1yi+1)bi,i3. xn yncnn4. pentru i = n 1 : 1 : 1

    1. xi (yici,i+1xi+1)ci,i

    Efortul de calclul in acest caz este de Nop 6nflopi, asadar al doilea algoritm este aproapede doua ori mai eficient decat primul.

    b. Avem = det A= det B C= det B det C= ni=1biicii. Asadar algoritmul este:

    1. = 12. pentru i = 1 : n

    1. = bi,ici,i

    c. Vom prezenta doi algoritmi alternativi.

    c1. Primul algoritm se bazeaza pe relatiaX=A1 =C1B1 si are urmatoarea schemade calcul:

    1. Se calculeaza Y =B

    1

    2. Se calculeaza Z=C1

    3. Se calculeaza X=Z Y.

    Asadar, trebuie sa stim sa calculam inversa unei matrice superior bidiagonale. Pentrucalcularea ei, vom proceda ca si n cazul superior triunghiular (vezi cursul), i.e. vom rezolvaecuatia matriceala 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,

  • 7/25/2019 Metode Numerice Seminarii 1-6

    30/140

    4 SEMINAR 2. REZOLVAREA SISTEMELOR LINIARE DETERMINATE

    yj(j + 1 : n) = 0. Este usor de vazut ca primele j elemente ale lui yj pot fi calculate,

    n ordine inversa, cu ajutorul relatiilor yjj = 1bjj

    , yij = bi,i+1yi+1,j

    bii, i = j 1 :1 : 1.

    Daca coloanele lui Y sunt calculate n ordine inversa, atunciY poate suprascrieB n timpulcalculului. In concluzie, algoritmul este:

    1. pentru j = n : 1 : 11. bj,j yj,j = 1bj,j2. pentru i = j 1 : 1 : 1

    1. bij yij = bi,i+1yi+1,jbiiNumarul flopilor necesari pentru a inversa o matrice bidiagonala este: Nfl =

    nj=1(1 +

    2(j 1)) n2.Pentru a multiplica cele doua matrice superior triunghiulareZandYvom folosi formula

    economica xij = j

    k=i zikykj si faptul ca produsul este o matrice superior triunghiulara.

    Introducand o sintaxa de forma B Y = UBINV(B) pentru calculul inversei uneimaricte 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 :n1. xij = 0

    2. pentru j = i : n1. pentru k = i : j2. xij =xij + cikbkj

    Efortul de calcul este de N(1)fl 2n2 + n3/6 n3/6 flopi.

    c2. Al doilea algoritm se bazeaza pe rezolvarea ecuatiei matriceale BC X =In folosindschema de calcul:

    1. Se rezolva ecuatia matricealaBY =In2. Se rezolva ecuatia matricealaCX=Y

    Prima instructiune este echivalenta cu inversarea lui B si are nevoie de n2 flopi. Adoua instructiune va fi efectuata p e coloanele, i.e. vom rezolva sistemeleC X(:, j) =Y(:, j),si tinand cont ca Y(j + 1 : n, j) = 0 vom avea X(j + 1 : n, j) = 0 (i.e. se stie faptulca Xeste superior triunghiulara), asadar trebuie sa rezolvam doar sistemele bidiagonaleC(1 : j, 1 :j)X(1 : j, j) = Y(1 : j, j),j = 1 :n. Al doilea algoritm este:

    1. B Y = UBINV(B)2. pentru j = n : 1 : 1

    1. pentru i = j + 1 :n1. xij = 0

    2. xjj = bjjcjj

    3. pentru i = j 1 : 1 : 11. xij =

    (bijci,i+1xi+1,j)cii

  • 7/25/2019 Metode Numerice Seminarii 1-6

    31/140

    2.2. PROBLEME REZOLVATE 5

    Al doilea algoritm necesita N(2)fl n2 + 3n

    2

    2 = 5n2

    2 flopi. In concluzie, al doilea algoritm

    este net mai bun decat primul: de exemplu, daca n= 3000 atunci N(1)fl

    4.5

    109 flopi si

    N(2)fl 22.5 106 flopi; asadar, n acest caz, primul algoritm necesita un timp de executie de200 de ori mai mare decat al doilea.

    Observatie. Compararea celor doi algoritmi precedenti arata ca este mai avantajoasarezolvarea sistemelor liniare decat calcularea inversei unei matrice. Aceasta recomandareeste valabila totdeauna, dupa cum vom vedea n probleme viitoare.

    Problema 2.2 Presupunem ca matricea nesingulara A Rnn are o factorizare LU si caL, Usunt cunoscute. Scrieti un algoritm care sa calculeze elementul (i, j) al matricei A1

    in aproximativ (n j)2 + (n i)2 flopi.Solutie. MatriceaA fiind nesingulara, asa vor fi si matricele L, U si

    A1 = (LU)1 =U1L1.

    In concluzieA1(i, j) = eTi A

    1ej =eTi U

    1L1ej =xTy,

    aicixT =eTi U1 =U1(i, :) si y = L1ej =L

    1(:.j ). Deoarece matriceleL1 siU1 suntinferior si, respectiv, superior truiunghiulare, avemx(1 : i1) = 0 si y(1 :j1) = 0. Pentrua calcula vectorul x= x(i: n) si y= y(j : n) este suficient sa rezolvam sistemele liniare:

    xT(i: n)U(i: n, i: n) = [1 0 . . . 0 ]

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

    10...0

    Deci,A

    1(i, j) =xTy=n

    k=max(i,j) xkyk. Primul sistem liniar poate fi scris n urmatoareaforma:

    UT(i: n, i: n)x(i: n) =

    10...0

    ,

    asadar trebuie sa rezolvam doua sisteme inferior tiunghiulare de gradn isinj, respectivun produs scalar a doi vectori. Prin urmare numarul de flopi necesari sunt: Nfl = (n i)2 +(n j)2 + 2(n max(i, j)) (n i)2 + (n j)2.

    2.2.2 Eliminarea gaussiana si probleme nrudite

    Problema 2.3 FieH Rnn o matrice superior Hessenberg nesingulara (hij = 0, pentrui > j+ 1).

    a. Daca toate submatricele lider principale ale lui H sunt nesingulare, adaptati algorit-mul de eliminare gaussiana pentru rezolvarea sistemului liniar H x= b, undeb Rn este unvector; calculati numarul de operatii.

    b. Adaptati algoritmii GP P siLSS GPP pentru aceeasi problema.

    c. Adaptati algoritmul Crout pentru calculul factorizarii LU al matricei H.

  • 7/25/2019 Metode Numerice Seminarii 1-6

    32/140

    6 SEMINAR 2. REZOLVAREA SISTEMELOR LINIARE DETERMINATE

    Solutie. Matricele Hessenberg apar n probleme mai complexe cum ar fi calculareavalorilor proprii si a vectorilor proprii.

    a. Este evident ca multiplicatorii ij vor fi zero pentru i > j + 1. Atunci, eliminareagaussiana pentru o matrice Hessenberg va avea forma:

    Algoritmul G HESS. Data o matrice superioara Hessenberg H Rnn cuH(1 : k, 1 :k) nesingulare pentruk = 1 :n 1, algoritmul efectueaza eliminareagaussiana fara pivotare. Multiplicatorii gaussieni si matricea superior triunghi-ulara rezultata vor suprascrie matricea H.

    1. pentru k = 1 :n 11. hk+1,k k+1,k = hk+1,khkk2. pentru j = k + 1 :n

    1. hk+1,j hk+1,j k+1,khkj

    Acest algoritm necesitaNfl =n1

    k=1(1+2(n k)) n2 flopi. Vectorulb va fi modificatn functie de valorile particulare ale multiplicatorilor:

    1. pentu k = 1 :n 11. bk+1 bk+1 hk+1,kbk

    executand 2n flopi. Atunci, un sistem superior triunghiular trebuie rezolvat (cu un plusde n2 flopi).

    b. Pivotarea partiala nu alterneaza structura superioar Hessenberg a matricei (darpivotarea completa da). La fiecare pas k, pentru a determina pivotul trebuie sa comparamdoar|hkk | si|hk+1,k|. Algoritmul de triunghiularizare prin eliminare gaussiana cu pivotarepartiala a unei matrice superior Hessenberg este:

    Algoritmul GPP HESS. Data o matrice superior Hessenberg H Rnn, al-goritmul efectueaza eliminarea gaussiana cu pivotare partiala. Multiplicatoriigaussieni si matricea superior triunghiulara rezultata vor suprascrie matriceaH.Permutarile sunt stocate n vectorul p.

    1. pentru k = 1 :n 11. p(k) =k2. daca|hk+1,k| > |hkk |

    1. p(k) = k+ 12. pentru j = k : n

    1. hkj

    hk+1,j3. hk+1,k k+1,k = hk+1,khkk4. pentru j = k + 1 :n

    1. hk+1,j hk+1,j k+1,khkj

    Introducand sintaxa [H, p] GPP HESS(H) pentru apelul algoritmului de mai sus csifolosind functiile MATLAB TRIUpentru a extrage partea superior triunghiulara dintr-omatrice, algoritmul pentru rezolvarea unui sistem liniar Hessenberg devine:

  • 7/25/2019 Metode Numerice Seminarii 1-6

    33/140

    2.2. PROBLEME REZOLVATE 7

    AlgoritmulLSS GPP HESS. Fiind data o matrice superior Hessenberg nesin-gulara H Rnn si un vector b Rn, algoritmul calculeaza solutiax Rn asistemuluiH x= b folosind eliminarea gaussiana cu pivotare partiala.

    1. [H, p] GPP HESS(H)2. pentru k = 1 :n 1

    1. daca p(k) = k+ 11. bk bk+1

    2. bk+1 bk+1 hk+1,kbk3. x= UT RIS(TRIU(H), b)

    Acest algoritm necesita Nfl 2n2 flopi (n comparatie cu 2n33 flopi necesari algoritmuluifundamentalLSS GPP).

    c. Presupunem ca toate submatricele lider principale ale lui Hsunt nesingulare. Algo-

    ritmul G HESS calculeaza factorizarea LU Doolittle a matricei H. Observam ca L esteinferior bidiagonala. Desigur, n factorizarea Crout LU matriceaL va fi deasemeni inferiorbidiagonala. Tinand cont de acest lucru si de faptul ca termenii diagonali ai luiUsunt egalicu 1, din identitatea H=LUva rezulta:

    pasul 1. l11= h11, l21= h21 si din h1j =l11u1j avem u1j = h1j

    l11, j = 2 :n.

    pasul k. Presupunand ca am calculat primele k 1 coloane ale lui L si primele k 1 liniiale lui U, din hkk =lk,k1uk1,k+ lkk si hk+1,k =lk+1,k avem lkk =hk,k lk,k1uk1,k silk+1,k = hk+1,k. Deasemeni, din egalitatea hkj = lk,k1uk1,j + lkkukj vom obtine ukj =hkj lk,k1uk1,j

    lkk, j = k+ 1 :n.

    In concluzie algoritmul Crout pentru o matrice superior Hessenberg este:

    AlgoritmulCROUT HESS. Data o matrice superior Hessenberg H Rnn cuH(1 :k, 1 :k) nesingulare pentru k = 1 :n 1, algoritmul calculeaza o matriceinferior bidiagonala L si o matrice superior triunghiulara unitate Uastfel ncatH = LU. Matricea L suprascrie triunghiul inferioar a lui H iar partea strictsuperioara a lui U suprascrie triunghiul strict superioar a luiH.

    1. pentru j = 2 :n 11. h1j u1j = h1j

    h112. pentru k = 2 :n

    1. hkk lkk =hk,k hk,k1hk1,k2. daca k = n

    1. RETURN3. pentru j = k+ 1 :n

    1. hkj ukj = hkj hk,k1hk1,jhkk

    Problema 2.4 Elaborati un algoritm pentru rezolvarea ecuatiei matricealeAX=B , undeA Rnn este nesingulara si B Rnp.

  • 7/25/2019 Metode Numerice Seminarii 1-6

    34/140

    8 SEMINAR 2. REZOLVAREA SISTEMELOR LINIARE DETERMINATE

    Solutie. Ecuatia matriceala AX = B este formata din p sisteme liniare: Axj = bj ,pentru j = 1 : p, unde xj si bj sunt notatii pentru coloana j din X respectiv B, i.e.xj =X(:, j), bj =B(:, j). Folosirea algoritmului:

    1. pentru j = 1 : p1. Se rezolva Axj =bj folosind LSS GPP

    nu este o idee buna, ntrucat numarul de operatii ar fi 2pn3

    3 . In schimb,GP Ppoate fi folosit

    doar o data pentru a triunghiulariza A, ca n urmatorul algoritm:

    1. [M,U,p] =GP P(A)2. pentru j = 1 : p

    1. pentru k = 1 : n 11. bkj bp(k),j2. pentru i = k+ 1 :n

    1. bij bij uikbkj2. xj =UT RIS(U, bj)

    Numarul operatiilor este 2n3

    3 + O(pn2) flopi.

    Problema 2.5 Propuneti un algoritm care sa rezolve sistemul liniar Ax = f, unde ACnn este nesingulara si f Cn, folosind numai aritmetica reala.

    Solutie. Daca notam A = B +iC, f = g +ih, x = y + iz , aici B, C Rnn sig,h,y,z Rn, sistemul Ax = fpoate fi scris sub forma:

    By Cz= g,Cy + Bz = h,

    sau

    Du = e, cu D=

    B CC B

    R2n2n, e=

    gh

    R2n, u=

    yz

    R2n.

    In concluzie trebuie sa rezolvam un sistem liniar de 2n ecuatii de 2n necunoscute, e.g.

    folosind algoritmul GPP care necesita (2n)33

    = 8n3

    3 flopi.

    Problema 2.6 Descrieti o varianta de eliminare gaussiana care introduce zerouri deasupradiagonalei principale, n ordinea n :1 : 2, si care produce factorizareaA = UL, unde Ueste superior triunghiulara unitate si L este inferior triunghiulara.

    Solutie. Definim o matrice superior triunghiulara elementara (STE) de ordin nsi indice

    k astfel:

    Nk =In nkeTk , nk =

    1k...

    k1,k0...0

    .

  • 7/25/2019 Metode Numerice Seminarii 1-6

    35/140

    2.2. PROBLEME REZOLVATE 9

    Aceasta tip de a matrice poate fi folosit pentru a introduce zerouri pe primele k 1 pozitiiale unui vector dat x cu xk= 0. Intradevar, (Nkx)(i) =x(i) ikxk, i = 1 :k 1 si, deci,daca ik = xi/xk, atunci (Nkx)(i) = 0, i = 1 : k

    1. Binenteles (Nkx)(i) =xi, i = k : n.

    Daca xk = 0, atunci Nkx= x pentru orice matrice STE Nk.

    Este usor de vazut ca daca A(k : n, k : n) este nesingulara pentru totik = n :1 : 1,atunci exista matricele superior triunghiulare elementare Nk astfel ncat matricea

    L= N2N3 Nn1NnA

    este inferior triunghiulara. Schema de calcul este,

    1. pentru k = n : 1 : 21. Se calculeaza matricea STENk astfel ncat (NkA)(1 :k 1, k) = 02. A NkA

    Ordinea inversa de aplicare a transformarilor elementare este esentiala pentru a nu mod-ifica zerourile create la pasii anteriori. Algoritmul este:

    AlgoritmulG. (O versiune a eliminarii gaussiene). Data o matriceA Rnn cuA(k: n, k: n) nesingulare pentru k= n : 1 : 2, algoritmul calculeaza matriceainferior triunghiulara L = N2N3 Nn1NnA. Matricea L suprascrie parteainferioar triunghiulara a lui A si multiplicatorii gaussieni ik suprascriu parteastrict superior triunghiulara a matricei A.

    1. pentru k = n : 1 : 21. pentru i= 1 :k

    1

    1. aik ik = aikakk2. pentru j = 1 : k 1

    1. pentru i = 1 :k 11. aij aij ikakj

    Algoritmul G ofera o factorizare UL, i.e. furnizeaza o matrice unitate superior triunghi-ulara U si una inferior triunghiulara L astfel ncat A = U L. Intradevar, din L =N2N3 Nn1NnA rezulta A= N1n N1n1 N12 L= U L, unde U =N1n N1n1 N12este superior triunghiulara ca un produs de matrice superior triunghiulare. Mai mult,N1k =In+ nke

    Tk si

    U =N1n N1n1 N12 =In+

    nk=2

    nkeTk =

    1 12

    1,n1 1n

    0 1 2,n1 2n...

    ... . . .

    ......

    0 0 1 n1,n0 0 0 1

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

    Nfl 2n33 flops.

  • 7/25/2019 Metode Numerice Seminarii 1-6

    36/140

    10 SEMINAR 2. REZOLVAREA SISTEMELOR LINIARE DETERMINATE

    Problema 2.7 Fieu, v Rn doi vectori nenuli si A = In+ uvT.a. Daca A este nesingulara si b Rn, scrieti un algoritm eficient pentru rezolvarea

    sistemului liniarAx = b.b. Daca A este nesingulara, scrieti un algoritm eficient care calculeaza X=A1.

    Solutie. Desigur, putem calcula A aplicand metode cunoscute precum eliminarea gaus-siana sau factorizarea LU. Dar probleme speciale necesita deseori solutii speciale. In acestcaz obtinem algoritmi mai eficienti daca procedam astfel:

    a. Determinantul lui A = In +uvT is 1 + vTu (vezi seminarul 1). Sa multiplicam

    Ax= b la stanga cu vT. Vom avea vTx + vTuvTx= vTb. Deoarece A este nesingulara, i.e.

    1 + vTu= 0 rezulta = vTx = vTb

    1 + vTu. In concluzie, x = b u. Un algoritm foarte

    eficient care necesita doar Nfl 4nflopi, este:

    1. = vTb

    1 + vTu2. pentru i = 1 :n

    1. xi = bi ui

    b. Daca A este nesingulara, un algoritm eficient pentru a calcula X = A1 esteurmatoarea schema:

    1. pentru j = 1 : n1. RezolvaAX(:, j) = ej folosind algoritmul de la punctul a.

    Tinand seama de faptul ca vTej si notand = 1 + vTu= 1 +

    ni=1 uivi forma sa detaliata

    este:

    1. = 12. pentru i=1:n

    1. = + uivi3. pentru j = 1 : n

    1. = vj

    2. pentru i = 1 :n

    1. X(i, j) = ui3. X(j, j) = 1

    X(j, j)

    Algoritmul necesita doarNfl n2 flopi.

    2.2.3 Sisteme simetrice pozitiv definite. Factorizarea Cholesky

    Problema 2.8 FieT Rnn o matrice simetrica, tridiagonala, pozitiv definita. Scrieti unalgoritm eficient care calculeaza factorizarea Cholesky T =LLT a lui T;

  • 7/25/2019 Metode Numerice Seminarii 1-6

    37/140

    2.2. PROBLEME REZOLVATE 11

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

    Pasul 1. Din egalitatea T =LLT avem: t11= l211, t21=l21l11 si 0 =li1l11, i = 3 :n; n

    concluzie l11=t11, l21= t21

    l11, li1= 0, i= 3 : n,

    i.e. matricea L este bidiagonala n prima sa coloana.

    Pasul k. Presupunem ca am calculat primele k1 coloane ale lui L si ca L este bidiagonalan primele k1 coloane. Din egalitateaT =LLT avem: tkk =l2k,k1+ l2kk ,tk+1,k =lk+1,klkksi 0 =liklkk, i = k + 2 :n; n concluzie

    lkk =

    tkk l2k,k1, lk+1,k = tk+1,k

    lkk, lik = 0, i= k + 1 :n,

    i.e. matricea L este bidiagonala si n coloana k; prin inductie, L este o matrice inferiorbidiagonala.

    Algoritmul este:AlgoritmCHOL TRID. Data o matrice simetrica, tridiagonala, pozitiv definitaT Rnn, acest algoritm suprascrie partea inferior triunghiulara cu matriceaLdin factorizarea Cholesky T =LLT.

    1. t11 l11=

    t112. t21 l21= t21l114. pentru k = 2 :n

    1. tkk lkk =

    tkk l2k,k12. daca k = n atunci stop

    3. tk+1,k lk+1,k = tk+1,klkk

    Problema 2.9 Daca A Rnn este simetrica si pozitiv definita, propuneti un algoritmpentru calculu factorizarii A = U UT, unde Ueste superior triunghiulara si are toate ele-mentele diagonale pozitive.

    Solutie. Este usor de vazut ca trebuie nceput cu calculul elementului (n, n) al matriceisuperior triunghiulareU si ca putem calcula U pe coloane n ordine inversa. Vom numerotapasii de calcul cu numarul coloanei calculate a matricei U. Pasul n. Din egalitateaA= U UT

    avem: ann = u2nn si ain = uinunn, i = 1 :n 1; n concluzie

    unn =

    ann, uin = ainunn

    , i= 1 :n 1.

    Pasul k. Presupunem ca am calculat ultimele k + 1 :n coloane ale lui U. Din egalitatea

    A= U UT

    avem: akk =u2

    kk+n

    j=k+1 u2

    kj siaik = uikukk+n

    j=k+1 uijukj , i = 1 :k 1; nconcluzie

    ukk =

    akk n

    j=k+1

    u2kj , uik =aik

    nj=k+1 uijukj

    ukk, i= 1 :k.

    Matricea A fiind pozitiv definita, argumentele radacinilor patrate sunt pozitive (demonstrati).Algoritmul este:

  • 7/25/2019 Metode Numerice Seminarii 1-6

    38/140

    12 SEMINAR 2. REZOLVAREA SISTEMELOR LINIARE DETERMINATE

    Algoritmul U U T. Data o matrice simetricaA Rnn, acest algoritm stabilestedaca matricea este pozitiv definita, n caz afirmativ, suprascrie partea superioaracu matricea Udin factorizarea A = U UT.)

    1. daca ann 0 atunci1. Imprima (A nu este pozitiv definita)2. stop

    2. ann unn = ann3. pentru i = 1 :n 1

    1. ain uin = ainunn4. pentru k = n 1 : 1 : 1

    1. akk n

    j=k+1 u2kj

    2. daca 0 atunci1. Imprima (Aeste pozitiv definita)2. stop

    3. akk ukk = 4. daca k = 1 atunci stop5. pentru i = 1 :k 1

    1. aik uik =aik

    n

    j=k+1uijukj

    ukk

    Algoritmul U U T necesita aproximativ Nfl = n3

    3 flopi si n plus n extrageri de radacini

    patrate. Memoria necesara este de Mfl = n2

    2 (o matrice simetrica este de obicei stocata nuna din partile sale triunghiulare).

    2.3 Probleme propuse

    Problema 2.10 Consideram date matriceleH Rnn, nesingulara superior triunghiularasi R Rnn, superior triunghiulara unitate. Propuneti algoritmi eficienti pentru:

    a. Rezolvarea sistemului liniarH Rx= b, cu b Rn.b. Cand toate submatricele lider principale ale luiHsunt nesingulare, factorizarea Crout

    a lui A = H R poate fi obtinuta folosind urmatoarele doua scheme:

    Schema 1. 1. Se calculeaza A = H R.2. Se calculeaza factorizarea Crout a lui A: A= LU.

    Schema 2. 1. Se calculeaza factorizarea Crout a lui H: H=LU.2. Se calculeaza U= U R.

    Care este mai eficienta?

    Problema 2.11 Propuneti un algoritm eficient pentru a rezolva sistemul liniar Akx = b,undeA Rnn este nesingulara,b Rn sik N, k >1.

    Problema 2.12 Fie B =

    A 0R A

    , cu A, R Rnn, nesingulare, R superior triunghiu-

    lara. Factorizarea LUa lui A exista si e cunoscuta ca (A= LU).

    a. Propuneti un algoritm pentru calcularea factorizariiLUa lui B , B = LU.

  • 7/25/2019 Metode Numerice Seminarii 1-6

    39/140

    2.4. BIBLIOGRAFIE 13

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

    Calculati numarul de operatii pentru amandoi algoritmi.Problema 2.13 Fie A R2n2n o matrice nesingulara cu toate submatricele lider prin-cipale nesingulare, A =

    A1 A2A3 A4

    , cu A1, A2, A3, A4 Rnn and A3 este superior tri-

    unghiulara.

    a. Scrieti un algoritm pentru rezolvarea sistemului liniar Ax= b, unde b R2n este unvector dat.

    b. Acelasi lucru, pastrand numai ipoteza ca A este nesingulara.

    Problema 2.14 FieA Rnn o matrice nesingulara tridiagonala (aij = 0, pentrui > j +1or 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 DacaA, B Rnn este o matrice nesingulara, propuneti un algoritm carerezolva sistemul liniar (AB)kx= c, undec Rn.Problema 2.16 Propuneti o varianta a algoritmuluiLSS GPPpentru rezolvarea sistemu-lui liniar Ax = b folosind eliminarea gaussiana cu pivotare partiala, faraa retine multipli-catorii.

    Problema 2.17 DacaA Rnn este simetrica, propuneti un algoritm pentru a testa dacamatriceaA este pozitiv definita sau nu.

    Problema 2.18 Fie T Rnn o matrice simetrica, tridiagonala, pozitiv definita si ma-triceaT =AA

    T

    . Propuneti un algoitm eficient pentru:a. a rezolva sistemul liniar T x= b, unde b Rn;b. calcularea det(T);

    c. calcularea inversei lui T.

    2.4 Bibliografie

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

    2. G.W. Stewart, Introduction to Matrix Computations, Academic Press, 1973.

    3. G. Golub, Ch. Van Loan, Matrix Computations, 3-rd edition, John Hopkins Uni-

    versity Press, 1998.

    4. G.W. Stewart, Matrix Algorithms, vol.1: Basic Decompositions, SIAM, 2000.

    5. G.W. Stewart, Matrix Algorithms, vol.2: Eigensystems, SIAM, 2002.

    6. B. Dumitrescu, C. Popeea, B. Jora, Metode de calcul numeric matriceal. Al-goritmi fundamentali, ALL, Bucuresti, 1998.

  • 7/25/2019 Metode Numerice Seminarii 1-6

    40/140

    14 SEMINAR 2. REZOLVAREA SISTEMELOR LINIARE DETERMINATE

    2.5 Programe MATLAB

    In aceasta sectiune sunt date programele MATLAB pentru implementarea algoritmilorprezentati n acest seminar. Programele au fost testate si pot fi obtinute de la autorullor mentionat n comentariile atasate.

    1: function [ delta]=determinant(B,C)2: %3: % Problema calculeaza determinanul unei matrice superior tridiagonala A(nxn).4: % (A fiind rezultatul unei inmultiri a doua matrice superior bidiagonale5: % B(nxn) si C(nxn)).Ca date de intrare avem cele doua matrice B respectiv C6: % care inmultite dau A, iar ca date de iesire avem determinanul notat cu delta.7: % Apelul: delta=determinant(B,C)

    8: %9: % Dumitru Iulia, aprilie 2006.10: %11:12: [n,m]=size(B);13:14: %analizam daca matricea e patratica15: if n=m16: error(Matricea nu e patratica);17: end18:19: %analizam daca matricele B si C sunt superior bidiagonale20: for i=1:n

    21: for j=i+2:n22: if B(i,j)=023: error(Matricea B nu e superior bidiagonala);24: end25: if C(i,j)=026: error(Matricea C nu e superior bidiagonala);27: end28: end29: for j=1:i-130: if B(i,j)=031: error(Matricea B nu e superior bidiagonala);32: end

    33: if C(i,j)=034: error(Matricea C nu e superior bidiagonala);35: end36: end37: end38:39: delta =1;40: for i=1:n

  • 7/25/2019 Metode Numerice Seminarii 1-6

    41/140

  • 7/25/2019 Metode Numerice Seminarii 1-6

    42/140

    16 SEMINAR 2. REZOLVAREA SISTEMELOR LINIARE DETERMINATE

    5: % B(nxn) respectiv C(nxn) care inmultite dau matricea A(nxn). Pasi de6: % rezolvare: intai se calculeaza matricea A superior tridiagonala cu formula7: % A=B*C apoi se rezolva sistemul liniar Ax=d.8: % Nota: folosim numele de UBSM pentru upper bidiagonal matrix solver9: % Apelul: x=UBSM1(B,C,d)

    10: %11: % Dumitru Iulia, aprilie 2006.12: %13:14: [n,m]=size(B);15:16: %analizam daca matricea e patratica17: if n=m18: error(Matricea nu e patratica);19: end

    20:21: %analizam daca matricele B si C sunt superior bidiagonale22: for i=1:n23: for j=i+2:n24: if B(i,j)=025: error(Matricea B nu e superior bidiagonala);26: end27: if C(i,j)=028: error(Matricea C nu e superior bidiagonala);29: end30: end31: for j=1:i-1

    32: if B(i,j)=033: error(Matricea B nu e superior bidiagonala);34: end35: if C(i,j)=036: error(Matricea C nu e superior bidiagonala);37: end38: end39: end40:41: for i=1:n42: for j=1:m43: A(i,j)=0;44: end

    45: A(i,i)=B(i,i)*C(i,i);46: if i

  • 7/25/2019 Metode Numerice Seminarii 1-6

    43/140

    2.5. PROGRAME MATLAB 17

    52: end53: x(n)=d(n)/A(n,m);54: x(n-1)=(d(n-1)-A(n-1,m)*x(n)) / A(n-1,m-1);55: for i=n-2:-1:156: x(i)=(d(i) - A(i,i+1)*x(i+1)- A(i,i+2)*x(i+2))/ A(i,i);57: end

    1: function [ x ]=UBSM2(B,C,d)2: %3: % Problema calculeaza sistemul liniar Ax=d. Ca date de intrare avem4: % vectorul d si matricele nesingulare superior bidiagonale B(nxn)5: % respectiv C(nxn) care inmultite dau matricea A(nxn). Pasi de rezolvare:6: % se inlocuieste A cu B*C in sistem, rezultand B*C*x=d. Notand y=C*x avem

    7: % B*y=d. Algoritmul urmator calculeaza intai y apoi x.8: % Apelul: x=UBSM2(B,C,d)9: %

    10: % Dumitru Iulia, aprilie 2006.11: %12:13: [n,m]=size(B);14:15: %analizam daca matricea e patratica16: if n=m17: error(Matricea nu e patratica);18: end19:

    20: %analizam daca matricele B si C sunt superior bidiagonale21: for i=1:n22: for j=i+2:n23: if B(i,j)=024: error(Matricea B nu e superior bidiagonala);25: end26: if C(i,j)=027: error(Matricea C nu e superior bidiagonala);28: end29: end30: for j=1:i-131: if B(i,j)=032: error(Matricea B nu e superior bidiagonala);33: end34: if C(i,j)=035: error(Matricea C nu e superior bidiagonala);36: end37: end38: end39:

  • 7/25/2019 Metode Numerice Seminarii 1-6

    44/140

    18 SEMINAR 2. REZOLVAREA SISTEMELOR LINIARE DETERMINATE

    40: y(n)=d(n)/B(n,m);41: for i=n-1:-1:142: y(i)=(d(i)-B(i,i+1)*y(i+1))/B(i,i);43: if B(i,i)==044: error(Matricea nu este nesingulara)45: end46: end47: x(n)=y(n)/C(n,m);48: for i=n-1:-1:149: x(i)=(y(i)-C(i,i+1)*x(i+1))/C(i,i);50: if C(i,i)==051: error(Matricea nu este nesingulara)52: end53: end

    1: function [X ]=UTRIINVa(B,C)2: %3: % Algoritmul calculeaza inversa unei matrice superior tridiagonale4: % patratice A(nxn).Ca date de intrare avem doar matricele superior5: % bidiagonale B(nxn) si C(nxn). Matricea A este rezultatul inmultirii6: % celor doua matrice. Pasii de calculare ai inversei sunt urmatorii:7: % se calculeaza inversa matricei B care se suprascrie in B si inversa8: % matricei C care se suprascrie in C. Inversa matricei A este rezultatul9: % inmultirii celor doua matrice.

    10: % Apelul: X=UTRIINVa(B,C)11: %

    12: % Dumitru Iulia, aprilie 2006.13: %-14:15: [n,m]=size(B);16:17: %analizam daca matricea e patratica18: if n=m19: error(Matricea nu e patratica);20: end21:22: %analizam daca matricele B si C sunt superior bidiagonale23: for i=1:n

    24: for j=i+2:n25: if B(i,j)=026: error(Matricea B nu e superior bidiagonala);27: end28: if C(i,j)=029: error(Matricea C nu e superior bidiagonala);30: end31: end

  • 7/25/2019 Metode Numerice Seminarii 1-6

    45/140

    2.5. PROGRAME MATLAB 19

    32: for j=1:i-133: if B(i,j)=034: error(Matricea B nu e superior bidiagonala);35: end36: if C(i,j)=037: error(Matricea C nu e superior bidiagonala);38: end39: end40: end41:42: Y=UBINV(B); %calculeaza inversa matricei B43: B=Y;44: Z=UBINV(C); %calculeaza inversa matricei C45: C=Z;46: for i=1:n %efectueaza inmultirea noilor matrice B si C

    47: for j=1:n48: X(i,j)=0;49: end50: for j=i:n51: for k=i:j52: X(i,j)=X(i,j)+C(i,k)*B(k,j);53: end54: end55: end

    1: function [ X]=UTINVb(C,B)

    2: %3: % Algoritmul calculeaza inversa unei matice superior tridiagonala4: % patratica A(nxn).Ca date de intrare avem doar matricele superior5: % bidiagonale B(nxn) si C(nxn). Matricea A este rezultatul inmultirii6: % celor doua matrice. Pasii de calculare ai inversei sunt urmatorii:7: % se rezolva ecuatia maticeala BY=In (se calculeaza practic inversa8: % matricei B) apoi ecuatia CX=Y (X reprezinta inversa maticei A).9: % In algoritm se foloseste o problema rezolvata anterior: inversa unei

    10: % matrice superior bidiagonala patratica, cu suprascriere (algoritmul UBINV)11: % Apelul: X=UTRIINVb(B,C)12: %13: % Dumitru Iulia, aprilie 2006.

    14: %-15:16: [n,m]=size(B);17:18: %analizam daca matricea e patratica19: if n=m20: error(Matricea nu e patratica);21: end

  • 7/25/2019 Metode Numerice Seminarii 1-6

    46/140

    20 SEMINAR 2. REZOLVAREA SISTEMELOR LINIARE DETERMINATE

    22:23: %analizam daca matricele B si C sunt superior bidiagonale24: for i=1:n25: for j=i+2:n26: if B(i,j)=027: error(Matricea B nu e superior bidiagonala);28: end29: if C(i,j)=030: error(Matricea C nu e superior bidiagonala);31: end32: end33: for j=1:i-134: if B(i,j)=035: error(Matricea B nu e superior bidiagonala);36: end

    37: if C(i,j)=038: error(Matricea C nu e superior bidiagonala);39: end40: end41: end42:43: Y=UBINV(B);44: B=Y;45: for j=n:-1:146: for i=j+1:n47: X(i,j)=0;48: end

    49: X(j,j)=B(j,j)/C(j,j);50: if C(j,j)==051: error(Matricea nu este nesingulara)52: end53: for i=j-1:-1:154: X(i,j)=(B(i,j)-C(i,i+1)*X(i+1,j))/C(i,i);55: if C(i,i)==056: error(Matricea nu este nesingulara)57: end58: end59: end60:61:

    62:63:64:65:66:

  • 7/25/2019 Metode Numerice Seminarii 1-6

    47/140

    2.5. PROGRAME MATLAB 21

    1: function [ x ]=UTRIS(U,b)2: %3: % Fiind data o matrice superior triunghiulara patratica A (nxn) si un4: % vector b, algoritmul calculeaza sistemul liniar Ax=b.5: % UTRIS=upper triunghiular solver.6: % Apelul: x=UTRIS(U,b)7: %8: % Dumitru Iulia, aprilie 2006.9: %-

    10:11: [m,n] = size(U);12:13: if m=n14: % in caz ca nu este o matrice patratica15: x = [ ];%x devine o matrice nula

    16: return;17: end18:19: if m=length(b)20: error(Nu exista solutie pentru);21: end22:23: for i=n:-1:124: s = b(i);25: if i

  • 7/25/2019 Metode Numerice Seminarii 1-6

    48/140

    22 SEMINAR 2. REZOLVAREA SISTEMELOR LINIARE DETERMINATE

    12:13: [n,m]=size(H);14:15: %analizam daca matricea e patratica16: if n=m17: error(Matricea nu e patratica);18: end19:20: %analizam daca matricea este superior Hessenberg21: for i=3:n22: for j=1:i-223: if H(i,j)=024: error(Matricea H nu e superior Hessenberg)25: end26: end

    27: end28:29: for k=1:n-1 %Multiplicatorii gaussieni si matricea30: miu(k+1,k)=H(k+1,k)/H(k,k); %superior triunghiulara rezultata vor31: if H(k,k)==0 %suprascrie matricea H.32: error(Matricea nu este nesingulara)33: end34: H(k+1,k)=miu(k+1,k);35: for j=k+1:n36: H(k+1,j)=H(k+1,j)-miu(k+1,k)*H(k,j);37: end38: b(k+1)=b(k+1)-H(k+1,k)*b(k);

    39: end

    1: function [H ]=CROUT HESS(H)2: %-3: % Data o matrice superior Hessenberg H nesingulara patratica (nxn)4: % algoritmul calculeaza o matrice inferior bidiagonala L si o matrice5: % superior unitate triunghiulara U astfel incat H=L*U. Matricea L este6: % suprascrisa partii inferior triunghiulare a matricei A(inclusiv diagonala)7: % iar matricea U este suprascrisa partii superior triunghiulare a8: % matricei A(fara diagonala).9: % Apelul: H=CROUT HESS(H)

    10: %11: % Dumitru Iulia, aprilie 2006.12: %-13:14: [n,m]=size(H);15:16: %analizam daca matricea e patratica17: if n=m

  • 7/25/2019 Metode Numerice Seminarii 1-6

    49/140

    2.5. PROGRAME MATLAB 23

    18: error(Matricea nu e patratica);19: end20:21: %analizam daca matricea este superior Hessenberg22: for i=3:n23: for j=1:i-224: if H(i,j)=025: error(Matricea H nu e superior Hessenberg)26: end27: end28: end29:30: for i=1:n31: U(i,i)=1;32: end

    33:34: for j=2:n-135: U(1,j)=H(1,j)/H(1,1);36: H(1,j)=U(1,j);37: end38:39: for k=2:n40: L(k,k)=H(k,k)-H(k,k-1)*H(k-1,k);41: H(k,k)=L(k,k);42: if k=n43: for j=k+1:n44: U(k,j)=(H(k,j)-H(k,k-1)*H(k-1,j))/H(k,k);

    45: if H(k,k)==046: error(Matricea nu este nesingulara)47: end48: H(k,j)=U(k,j)49: end50: end51: end

    1: function [ H,p ]=GPP HESS(H)2: %3: % Data o matrice superior Hassenberg H patratica(de ordin n), algoritmul

    4: % efectueaza eliminarea gaussiana cu pivotare partiala. Multiplicatorii5: % gaussieni si matricea superior triunghiulara rezultata vor suprascrie6: % matricea H.7: % Apelul: H,p=GPP HESS(H)8: %9: % Dumitru Iulia, aprilie 2006.

    10: %-11:

  • 7/25/2019 Metode Numerice Seminarii 1-6

    50/140

    24 SEMINAR 2. REZOLVAREA SISTEMELOR LINIARE DETERMINATE

    12: [n,m]=size(H);13:14: %analizam daca matricea e patratica15: if n=m16: error(Matricea nu e patratica);17: end18:19: %analizam daca matricea este superior Hessenberg20: for i=3:n21: for j=1:i-222: if H(i,j)=023: error(Matricea H nu e superior Hessenberg)24: end25: end26: end

    27:28: for k=1:n-129: p(k)=k;30: max = abs( H(k,k) );31: if abs( H(k+1,k) )>max32: max = abs( H(k+1,k) );33: end34: p(k)=k+1;35: for j=k:n36: temp = H(k,j);37: H(k,j) = H(k+1,j);38: H(k+1,j) = temp;

    39: end40: miu(k+1,k) = H(k+1,k)/H(k,k);41: if H(k,k)==042: error(Matricea nu este nesingulara)43: end44: H(k+1,k)=miu(k+1,k);45: for j = k+1:n46: H(k+1,j)=H(k+1,j)-miu(k+1,k)*H(k,j);47: end48: end49:

    1: function [x ]=LSS GPP HESS(H,b)2: %-3: % Fiind data o matrice superior Hassenberg nesingulara H patratica (de4: % ordin n) si un vector b, algoritmul calculeaza solutia x a sistemului5: % Hx=b folosind eliminarea gaussiana cu pivotare partiala.6: % Apelul: x=LSS GPP HESS(H,b)7: %

  • 7/25/2019 Metode Numerice Seminarii 1-6

    51/140

    2.5. PROGRAME MATLAB 25

    8: % Dumitru Iulia, aprilie 2006.9: %-

    10:11: [n,m]=size(H);12:13: %analizam daca matricea e patratica14: if n=m15: error(Matricea nu e patratica);16: end17:18: %analizam daca matricea este superior Hessenberg19: for i=3:n20: for j=1:i-221: if H(i,j)=022: error(Matricea H nu e superior Hessenberg)

    23: end24: end25: end26:27: %conditionam ca numarul liniilor vectorului b sa fie egal cu numarul coloanelor28: %matricei H29: if m=length(b)30: error(Nu exista solutie pentru);31: end32:33: [ H,p ]=GPP HESS(H);34: for k=1:n-1

    35: if p(k)==k+136: temp=b(k);37: b(k)=b(k+1);38: b(k+1)=temp;39: end40: b(k+1)=b(k+1)-H(k+1,k)*b(k);41: end42:43: x=UTRIS(triu(H),b)44:

    1: function [ A,miu,p ]=GPP(A)2: %3: % Data o matrice patratica A(nxn), algoritmul suprascrie triunghiul4: % superior al lui A cu matricea superior triunchiulara U. Triunghiul5: % strict inferior al lui A este suprascris de multiplicatorii gaussieni6: % miu. In vectorul p se memoreaza intregii i(k), care definesc permutarile7: % de linii.8: % Apelul: A,miu,p=GPP(A)

  • 7/25/2019 Metode Numerice Seminarii 1-6

    52/140

    26 SEMINAR 2. REZOLVAREA SISTEMELOR LINIARE DETERMINATE

    9: %10: % Dumitru Iulia, aprilie 2006.11: %12:13:14: [n,m] = size(A);15:16: %analizam daca matricea e patratica17: if n=m18: error(Matricea nu e patratica);19: end20:21: for k=1:n-122: ik = k;23: max = abs( A(k,k) );

    24:25: for i=k:n26: if abs( A(i,k) ) >max27: ik = i;28: max = abs( A(i,k) );29: end30: end31:32: p(k)=ik;33:34: for j=k:n35: temp = A(k,j);

    36: A(k,j) = A(ik,j);37: A(ik,j) = temp;38: end39:40: for i=k+1:n41: miu(i,k) = A(i,k)/A(k,k);42: if A(k,k)==043: error(Matricea nu este nesingulara)44: end45: A(i,k)=miu(i,k);46:47: end48:

    49: for i=k+1:n50: for j = k+1:n51: A(i,j)=A(i,j)-miu(i,k)*A(k,j);52: end53: end54: end55:

  • 7/25/2019 Metode Numerice Seminarii 1-6

    53/140

    2.5. PROGRAME MATLAB 27

    1: function [X ]=MMS(A,B)2: %-3: % Fiind date doua matrice: A (nxn) si B (nxp) se cere sa se rezolve ecuatia4: % matriceala A*X=B.5: % Apelul: X=MMS(A,B)6: %7: % Dumitru Iulia, aprilie 2003.8: %-9:

    10: [n,m]=size(A);11:12: %analizam daca matricea e patratica

    13: if n=m14: error(Matricea A nu e patratica);15: end16:17: [n,p]=size(B);18:19: [ M,U,p ]=