Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

Embed Size (px)

Citation preview

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    1/211

    Universitatea de Vest din TimişoaraFacultatea de Matematicˇ a şi Informaticˇ a

    METODE NUMERICE

    PROBLEME DE SEMINAR

    ŞI LUCR ǍRI DE LABORATOR

    Simina Mari̧s Liliana Brˇ aescu

    Timişoara

    2007

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    2/211

    Introducere

    Procesul de restructurare al Învǎţ ǎmântului Superior din Romˆania şi trecereaacestuia pe trei cicluri, a determinat la nivelul ̂ıntregii t ¸ǎri elaborarea de noiplanuri de ı̂nvˇaţ ǎmânt şi de programe analitice adecvate.

    Metode numerice - Probleme de seminar şi lucrˇ ari de laborator este unmaterial adiţ ional la cursul de Metode numerice elaborat ı̂n acord cu noilecerinţe, pe baza programei analitice conceputˇa la nivelul Departamentului deInformatic ǎ şi aprobatˇa ı̂n Consiliul Profesoral al Facultˇaţii de Matematicǎşi Informatic ǎ de la Universitatea de Vest din Timişoara.

    Problemele şi lucr ǎrile de laborator prezentate ı̂n aceastˇ a carte se adresea-zǎ ı̂n primul rˆand studenţ ilor de la Facultatea de Matematicˇ a şi Informatic ǎ,ind abordate toate temele din programa analiticˇ a, la nivelul studenţ ilorSecţiei de Informatic ǎ aaţi ı̂n semestrul al cincilea de studiu, oferind exempleşi detalii referitoare la metodele numerice prezentate ı̂n curs.

    Lucrarea este structuratˇ a pe şapte capitole, primul dintre acestea indrezervat pentru prezentarea unui set de cunoştint ¸e minimale de programare

    ı̂n Maple. Capitolele 2-7 corespund capitolelor din cursul de Metode numerice şi sunt organizate dupˇa cum urmeaz ǎ:

    • breviar teoretic• problemǎ rezolvat ǎ• probleme propuse• implementarePrin aceast ǎ lucrare, autorii pun la dispoziţ ia cititorilor toate cunoştint ¸ele

    necesare ı̂n vederea construirii de algoritmi şi proceduri capabile sˇ a ia caargument un obiect matematic şi sˇ a returneze un rezultat nal.

    Autorii

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    3/211

    Cuprins

    1 MapleV4 - scurtǎ introducere 91.1 Reguli generale de introducere a comenzilor . . . . . . . . . . 91.2 Pachete de programe . . . . . . . . . . . . . . . . . . . . . . . 111.3 Constante, operatori şi funct¸ii des utilizate . . . . . . . . . . . 121.4 Structuri de date . . . . . . . . . . . . . . . . . . . . . . . . . 13

    1.5 Calcule cu matrice şi vectori. Pachetul linalg . . . . . . . . . 161.6 Grace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201.7 Elemente de programare . . . . . . . . . . . . . . . . . . . . . 22

    2 Rezolvarea sistemelor liniare 292.1 Metoda lui Gauss . . . . . . . . . . . . . . . . . . . . . . . . . 292.2 Factorizarea LU . . . . . . . . . . . . . . . . . . . . . . . . . . 512.3 Sisteme tridiagonale . . . . . . . . . . . . . . . . . . . . . . . 612.4 Factorizarea Cholesky . . . . . . . . . . . . . . . . . . . . . . 682.5 Factorizarea Householder . . . . . . . . . . . . . . . . . . . . . 742.6 Metoda Jacobi . . . . . . . . . . . . . . . . . . . . . . . . . . 852.7 Metoda Gauss-Seidel . . . . . . . . . . . . . . . . . . . . . . . 942.8 Metoda relaxǎrii succesive . . . . . . . . . . . . . . . . . . . . 100

    3 Ecuat¸ii şi sisteme de ecuat ¸ii neliniare 1073.1 Metoda punctului x . . . . . . . . . . . . . . . . . . . . . . . 1073.2 Metoda lui Newton . . . . . . . . . . . . . . . . . . . . . . . . 113

    4 Interpolare polinomialǎ. Funct ¸ii spline 1274.1 Polinomul lui Newton cu diferenţ e divizate . . . . . . . . . . . 1274.2 Polinomul de interpolare Lagrange . . . . . . . . . . . . . . . 141

    4.3 Interpolare spline . . . . . . . . . . . . . . . . . . . . . . . . . 1444.4 Polinoame Bernstein . . . . . . . . . . . . . . . . . . . . . . . 155

    5 Derivare numericǎ 1595.1 Aproximarea derivatei prin diferenţ e nite . . . . . . . . . . . 159

    7

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    4/211

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    5/211

    Capitolul 1

    MapleV4 - scurtǎ introducere

    Maple este un sistem de calcul algebric (CAS) dezvoltat de rma Maplesoft(http://www.maplesoft.com ), care poate utilizat ı̂n:

    1. calcule simbolice;

    2. calcule numerice;

    3. programarea unor metode numerice;

    4. reprezent ǎri grace.

    În cele ce urmeazǎ, vom prezenta principalele elemente necesare ı̂n pro-gramarea unor metode numerice, corespunzˇatoare softului MapleV4.

    1.1 Reguli generale de introducere a comen-zilor

    Un document MapleV4 poate avea patru tipuri de câmpuri:

    1. comenzi Maple (introduse de cǎtre utilizator);

    2. rezultate Maple (r ǎspunsuri ale CAS-ului la comenzile introduse);

    3. grace (rǎspunsuri ale CAS-ului);4. texte (introduse de c ǎtre utilizator).

    În continuare, vom prezenta cˆateva reguli de introducere a comenzilor.

    9

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    6/211

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    7/211

    1.2. PACHETE DE PROGRAME 11

    6. Argumentele unei funcţ ii se pun ı̂ntre paranteze rotunde, () , iar indiciiı̂ntre paranteze pˇ atrate, [] .> a:=cos(Pi); b:=lista[2];

    a :=

    −1

    b := 1

    7. Procentul, % , face referire la ultima comand ǎ executat ǎ anterior. Deexemplu:> a:=2;

    a := 2> b:=%+1;

    b := 3

    8. Dacǎ rezultatul furnizat de Maple este identic cu comanda introdusˇ a(Maple r ǎspunde prin ecou la comand ǎ), atunci aceasta aratˇ a cǎ Maplenu poate interpreta comanda introdusˇ a. Pentru a remedia situat ¸ia,vericaţ i dac ǎ aţi introdus corect comanda sau dacˇa nu cumva funcţ iautilizat ǎ face parte dintr-un pachet care trebuie ı̂ncˇ arcat ı̂n prealabil.> arctg(1); # o incercare de a calcula arctangenta de 1

    arctg(1)> arctan(1); # apelarea corecta a functiei arctangenta

    π4

    9. Pentru a nu ret¸ine eventuale atribuiri anterioare, este util ca pentrurezolvarea unei probleme noi sǎ ı̂ncepem cu instruct¸iunea> restart;

    1.2 Pachete de programePachetele sunt colecţ ii de funcţii care permit efectuarea de calcule specice.Apelarea lor se face cu ajutorul comenzii with(nume_pachet) . Pentru aapela o anumit ǎ funcţie dintr-un pachet, se foloseşte sintaxa:

    pachet[’functie’](argumente)

    Printre cele mai utilizate pachete sunt:plots - pentru reprezentˇari grace;DEtools - pentru rezolvarea ecuaţ iilor diferenţ iale;

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    8/211

    12 CAPITOLUL 1. MAPLEV4 - SCURT Ǎ INTRODUCERE

    linalg - pentru rezolvarea unor probleme de algebrˇa liniarǎ;student - pentru analiz ǎ matematicˇa.

    De exemplu, la apelarea pachetului grac, se obţ ine lista tuturor funct ¸iilorapelabile:

    > with(plots);

    Warning, the name changecoords has been redefined

    [animate, animate3d, changecoords, complexplot, complexplot3d,conformal, contourplot, contourplot3d, coordplot,coordplot3d, cylinderplot, densityplot, display,display3d, fieldplot, fieldplot3d, gradplot, gradplot3d,implicitplot, implicitplot3d, inequal, listcontplot,listcontplot3d, listdensityplot, listplot, listplot3d,

    loglogplot, logplot, matrixplot, odeplot, pareto,pointplot, pointplot3d, polarplot, polygonplot,polygonplot3d, polyhedraplot, replot, rootlocus,semilogplot, setoptions, setoptions3d, spacecurve,sparsematrixplot, sphereplot, surfdata, textplot,textplot3d, tubeplot]

    1.3 Constante, operatori şi funct ¸ii des uti-lizate

    Constantele folosite de Maple sunt:

    Constantˇa Semnicaţiefalse ”fals”true ”adevǎrat”gamma constanta lui Eulerinfinity +∞Catalan constanta lui CatalanFail valoare de adevǎr necunoscut ǎPi

    πI unitatea imaginarˇaNULL secvenţa vid ǎ

    Operatorii folosiţ i frecvent sunt:

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    9/211

    1.4. STRUCTURI DE DATE 13

    Operator Sintaxˇa Semnicaţie+, - a+b , a-b suma a + b (diferenţa a −b)* a*b , 2*a produsul a ·b, sau 2a

    / a/b câtul ab

    ^, ** a^b , a**b puterea ab

    ! n! factorialul 1 ·2 ·... ·n max, min max(a,b,c) , maximul (minimul) dintre a, b, c min(a,b,c)

    =,=, operatori booleeni:= f:=expr operatorul de asignare f = expr= a=b ecuaţia a = b

    .. x=a..b a ≤x ≤band , or , xor , operatori logiciimplies , not

    Funcţ ii folosite frecvent ı̂n Maple:

    Funcţ ie Sintax ǎ Semnicaţiesin , cos , tan , cot sin(x) , ... funcţii trigonometrice

    arcsin , arctan , arccos arctan(x) , ...ln , log10 ln(x) , log10(x) logaritmi

    exp exp(x) , exp(1) funcţia exponenţ ial ǎsqrt sqrt(x) radicalabs abs(x) modul

    1.4 Structuri de date: secvent ¸e, liste, mult ¸imi,şiruri de caractere

    1.4.1 Secvent ¸eO secvenţ ǎ este o ı̂nşiruire de expresii, separate prin virgule. Existˇ a maimulte moduri de a deni o secvenţ ǎ:

    a. direct:

    > s:=1,2,3,4; t:=(a,b,c);s := 1, 2, 3, 4t := a, b, c

    b. cu ajutorul funcţ iei seq :> seq(3*x, x=2..7);

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    10/211

    14 CAPITOLUL 1. MAPLEV4 - SCURT Ǎ INTRODUCERE

    6, 9, 12, 15, 18, 21c. cu ajutorul unui ciclu for (vezi secţiunea 1.7.1)

    Cu ajutorul funcţ iilor min şi max se poate calcula minimul, respectiv maxi-mul unei secvenţe.

    > min(s); max(s,2,15);315

    1.4.2 Liste

    O listǎ este o secvenţ ǎ de expresii, scrisǎ ı̂ntre paranteze pˇ atrate, [ ]. Deexemplu, putem avea lista:> ll:=[1,2,5,2,4,2,7,2,a,2,c];

    ll := [1, 2, 5, 2, 4, 2, 7, 2, a, 2, c]Putem aa numˇarul de operanzi din list ǎ cu ajutorul funcţ iei nops :> nops(ll);

    11Al n-lea element din list ǎ poate aşat cu una din comenzile op(n,ll) saull[n] :> aa:=ll[3]; bb:=op(9,ll);

    aa := 5bb := a

    Funcţ ia member(elem, ll) returneaz ǎ true dacǎ elementul respectiv se a ǎ

    ı̂n list ǎ ll , şi f alse ı̂n caz contrar:> member(d, ll);

    falseLista vid ǎ este desemnat ǎ prin [] :> lista:=[];

    lista := [ ]Se poate ad ǎuga un element nou la lista ll astfel: [op(ll),elem] . Deexemplu:> lista:=[op(lista), d,e,f];

    lista := [d,e,f ]Se poate şterge al n-lea element din list ǎ ll astfel: subsop(n=NULL,ll) . Deexemplu:> lista:=subsop(2=NULL, lista);

    lista := [d, f ]

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    11/211

    1.4. STRUCTURI DE DATE 15

    1.4.3 Mult ¸imiO mulţime este o secvenţ ǎ de expresii, scrisǎ ı̂ntre acolade, {}, ı̂n care ecareelement gureaz ǎ o singurǎ dat ǎ. De exemplu:> ll:={1,2,5,2,4,2,7,2,a,2,c};

    ll := {1, 2, 4, 5, 7,a ,c}Adǎugarea unui nou element la mult¸ime, sau ştergerea elementului de pepoziţia n se face la fel ca la liste.Mulţimea vid ǎ este desemnat ǎ prin {} .Reuniunea a dou ǎ mulţ imi se face utilizând operatorul union :> s:={1,2,3} : t:={2,3,4} :> s union t;

    {1, 2, 3, 4}Intersecţ ia a dou ǎ mulţimi se realizeazǎ cu ajutorul operatorului intersect :> s intersect t;

    {2, 3

    }Diferenţa a dou ǎ mulţimi se realizeazǎ utiliz ând operatorul minus :> s minus t;

    {1}> s minus s;

    {}1.4.4 Şiruri de caractereŞirurile de caractere sunt delimitate de apostrof invers, ‘ , dupǎ cum urmeaz ǎ:> ‘acesta este un sir‘;

    acesta este un sirŞirurile de caractere se pot concatena cu ajutorul comenzii cat . De exemplu,putem avea:> i:=4;

    i := 4> cat( ‘Valoarea lui i este ‘, i);

    V aloarea lui i este 4Atenţ ie! La concatenarea unui şir de cifre, se obtine un şir de caractere, nuun num ǎr:> a:=cat(5,7,9); b:=52;

    a := 579 b := 52

    > whattype(a); # afla tipul expresiei asymbol

    > whattype(b); # afla tipul expresiei b

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    12/211

    16 CAPITOLUL 1. MAPLEV4 - SCURT Ǎ INTRODUCERE

    integer> a+b;

    a := 579 +52> whattype(a+b); # afla tipul expresiei a+b

    symbol

    1.5 Calcule cu matrice şi vectori. Pachetullinalg

    Cu ajutorul cuvˆantului-cheie array se pot deni vectori şi matrice.Un vector se deneşte ı̂n urmˇatorul mod:

    > v:=array(1..dim_vect);Elementele unui vector se pot deni unul cˆate unul, sau printr-un ciclu

    for (vezi secţiunea 1.7.1):

    > v:=array(1..4);v := array(1 ..4, [ ])

    > v[1]:=a; v[2]:=b; v[3]:={a,b}; v[4]:=3;v1 := av2 := bv3 := {a, b}v4 := 3

    > evalm(v); # evalueaza valoarea lui v[a,b, {a, b}, 3]O matrice se deneşte astfel:

    > M:=array(1..nr_rand, 1..nr_col);Elementele unei matrice se pot deni unul c âte unul, sau printr-un ciclu

    for (vezi secţiunea 1.7.1):> M:=array(1..2,1..2);

    M := array(1 ..2, 1..2, [ ])> M[1,1]:=1: M[1,2]:=a: M[2,1]:=3: M[2,2]:={}:> evalm(M); # evalueaza valoarea lui M

    1 a3 { }

    Un alt mod de a deni matrice şi vectori, precum şi de a efectua operat ¸iispecice cu aceste obiecte, este folosirea pachetului linalg . Pachetul linalgse ı̂ncarc ǎ astfel:

    >with(linalg);

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    13/211

    1.5. CALCULE CU MATRICE ŞI VECTORI. PACHETUL LINALG 17

    Warning, the protected names norm and trace have beenredefined and unprotected

    [BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp, QRdecomp,Wronskian, addcol, addrow, adj, adjoint, angle, augment,backsub, band, basis, bezout, blockmatrix, charmat,charpoly,cholesky, col, coldim, colspace, colspan,companion, concat, cond, copyinto, crossprod, curl,definite, delcols, delrows, det, diag, diverge, dotprod,eigenvals, eigenvalues, eigenvectors, eigenvects,entermatrix, equal, exponential, extend, ffgausselim,fibonacci, forwardsub, frobenius, gausselim, gaussjord,geneqns, genmatrix, grad, hadamard, hermite, hessian,hilbert, htranspose, ihermite, indexfunc, innerprod,intbasis, inverse, ismith, issimilar, iszero, jacobian,

    jordan, kernel, laplacian, leastsqrs, linsolve, matadd, matrix, minor, minpoly, mulcol, mulrow, multiply, norm,normalize, nullspace, orthog, permanent, pivot,potential, randmatrix, randvector, rank, ratform, row,rowdim, rowspace, rowspan, rref, scalarmul, singularvals,smith, stack, submatrix, subvector, sumbasis, swapcol,swaprow, sylvester, toeplitz, trace, transpose,vandermonde, vecpotent, vectdim, vector, wronskian]

    O matrice se deneşte cu comanda matrix : matrix(nr_randuri, nr_coloane, lista_elem sau fc_generatoare)Astfel, putem avea:> a:=matrix(3,2,[1,2,3,4,5,6]);

    a :=1 23 45 6

    dar şi> f:=(i,j)->i+j; # functia generatoare a elem matricei

    f := ( i, j ) →i + j> b:=matrix(2,3,f); # adica b[i,j]=f(i,j)

    b := 2 3 4

    3 4 5Elementul aij se scrie a[i,j] . Astfel, pentru matricea a din exemplul ante-rior, putem avea:> a[3,1];

    5

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    14/211

    18 CAPITOLUL 1. MAPLEV4 - SCURT Ǎ INTRODUCERE

    Un vector se deneşte cu ajutorul comenzii vector :vector(nr_elem, lista_elem sau fc_generatoare)Astfel, putem avea:v:=vector([2,4,8,2]);

    v := [2, 4, 8, 2]sauf:=x-> 2*x+1;

    f := x →2x + 1w:=vector(5,f); # adica w[i]=f(i)w := [3, 5, 7, 9, 11]

    Elementul i al vectorului v, vi , se scrie v[i] . Astfel, pentru vectorul vdin exemplul anterior, putem avea:> v[3];

    8Redǎm mai jos cele mai utilizate funcţ ii din pachetul linalg , ı̂mpreunǎ cu

    descrierea lor. Pentru mai multe detalii referitoare la aceste funct ¸ii, precumşi la celelalte funcţ ii din pachetul linalg , se poate consulta pagina de helpreferitoare la pachetul linalg .

    Funcţ ie Descriereaddcol(A,c1,c2,m) ı̂nlocuieşte coloana c2 a matricei A cu

    m*c1+c2addrow(A,r1,r2,m) ı̂nlocuieşte linia r2 a matricei A cu

    m*r1+r2adj(A) , adjoint(A) calculeazǎ matricea adjunctˇa a matricei

    A

    angle(u,v) calculeazǎ unghiul vectorilor u şi vaugment(A,B) concateneaz ǎ (alǎtur ǎ) matricile A şi B

    pe orizontal ǎbacksub(U,b) rezolvǎ sistemul Ux=b, prin substitut¸ie

    inversa, unde U este o matrice superiortriunghiularˇa

    band(b,n) construieşte o matrice n x n care arepe diagonala principal ǎ elementele vec-torului b, iar celelalte elemente suntnule

    continuare pe pagina urmˇ atoare

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    15/211

    1.5. CALCULE CU MATRICE ŞI VECTORI. PACHETUL LINALG 19

    Pachetul linalg - continuare Funcţ ie Descriere

    cholesky(A) efectueazǎ descompunerea Cholesky amatricei A

    col(A,i) , col(A,i..k) extrage coloana i , respectiv coloanele ipânǎ la k, din matricea A

    coldim(A) returneaz ǎ numǎrul de coloane ale ma-tricei A

    crossprod(u,v) returneaz ǎ produsul vectorial al vecto-rilor u şi v

    delcols(A,r..s) şterge coloanele de la r la s din ma-tricea A

    delrows(A,r..s) şterge liniile de la r la s din matricea Adet(A) calculeazǎ determinantul matricei Adiverge(f) calculeazǎ divergenţa vectorului f

    dotprod(u,v) calculeazǎ produsul scalar al vectoriloru şi vexponential(A) calculeazǎ eAextend(A,m,n,x) adaugǎ m linii şi n coloane matricei A,

    iniţializate cu xforwardsub(L,b) rezolvǎ sistemul Lx=b prin substitut¸ie

    ı̂nainte, unde L este o matrice inferiortriunghiularˇa

    gausselim(A) efectueazǎ eliminarea gaussian ǎ cusemipivot asupra matricei A

    geneqns(A,x) genereazǎ un sistem de ecuaţ ii pornindde la matricea A şi vectorul necunos-cutelor x

    genmatrix(sist, var) genereazǎ matricea coecienţ ilor sis-temului sist , in raport cu multimeavariabilelor var

    grad(expr, vect) calculeazǎ gradientul expresiei expr , infuncţie de variabilele vect

    inverse(A) calculeazǎ inversa matricei A matadd(A,B,c1,c2) calculeazǎ c1*A+c2*B minor(r,c) calculeazǎ minorul de ordin (r,c)

    (eliminǎ linia r şi coloana c) din ma-tricea A

    continuare pe pagina urmˇ atoare

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    16/211

    20 CAPITOLUL 1. MAPLEV4 - SCURT Ǎ INTRODUCERE

    Pachetul linalg - continuare Funcţ ie Descriere

    mulcol(A,c,expr) multiplic ǎ coloana c a matricei A cu ex-presia expr

    mulrow(A,r,expr) multiplic ǎ linia r a matricei A cu expre-sia expr

    multiply(A,B) efectueazǎ ı̂nmulţ irea matricelor A şi Bnorm(A) calculeazǎ norma matricei Anormalize(v) calculeazǎ versorul vectorului vrank(A) calculeazǎ rangul matricei Arow(A,i) , row(A,i..j) extrage linia i , respectiv liniile de la i

    la j , ale matricei Arowdim(A) returneaz ǎ numǎrul de linii din ma-

    tricea Ascalarmult(A,s) ı̂nmulţ eşte toate elementele matricei A

    cu scalarul sstack(A,B) concateneaz ǎ matricele A şi B pe verti-calǎ

    submatrix(A,r1..r2,c1..c2) extrage o submatrice a matricei A, ı̂ntreliniile r1 , r2 , şi coloanele c1 , c2

    subvector(A,r1..r2) extrage un subvector al vectorului A, dela rangul r1 la rangul r2

    swapcol(A,c1,c2) interschimb ǎ coloanele c1 şi c2 ale ma-tricei A

    swaprow(A,r1,r2) interschimb ǎ liniile r1 şi r2 ale matriceiA

    trace(A) calculeazǎ urma matricei Avectdim(v) returneaz ǎ dimensiunea vectorului v

    1.6 Grace

    Gracul unei funcţ ii se realizeazǎ folosind comanda plot , a cǎrei sintax ǎ este

    plot(functie, x=x_min..x_max, y_min..y_max)

    unde argumentul y_min..y_max este opţional.

    De exemplu, putem avea:

    > plot(sin(x), x=-5..5);

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    17/211

    1.6. GRAFICE 21

    –1

    –0.5

    0

    0.5

    1

    –4 –2 2 4

    x

    > plot(cos(x)^2, x=-5..5);

    0

    0.2

    0.4

    0.6

    0.8

    1

    –4 –2 2 4

    x

    > plot([sin(x),cos(x)^2], x=-5..5);

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    18/211

    22 CAPITOLUL 1. MAPLEV4 - SCURT Ǎ INTRODUCERE

    –1

    –0.5

    0

    0.5

    1

    –4 –2 2 4

    x

    Mai multe detalii despre grace se pot g ǎsi accesând pagina de help refe-ritoare la instruct¸iunea plot , sau la pachetul plots .

    1.7 Elemente de programare

    1.7.1 Condit ¸ionarea şi ciclareaA. Condit ¸ionareaSintaxa unei instruct¸iuni condiţ ionale este

    if CONDITIE then EXPRESIE[ elif CONDITIE then EXPRESIE ][ else EXPRESIE ]

    fi

    Instrucţ iunile puse ı̂ntre paranteze pˇ atrate, [ ], sunt opţ ionale.De exemplu, putem avea secvenţ a:

    > if a if x

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    19/211

    1.7. ELEMENTE DE PROGRAMARE 23

    [ for CONTOR ] [ from EXPR ] [ by EXPR ] [ to EXPR ][ while EXPR ]

    do INSTRUCTIUNI od;

    sau

    [ for CONTOR ] [ in EXPR ] [ while EXPR ]do INSTRUCTIUNI od;

    unde:- from indicǎ punctul de plecare ı̂n iterat ¸ie (dac ǎ este omis, valoarea sa

    implicit ǎ este 1);- by indicǎ pasul contorului (dacˇa este omis, se considerǎ implicit cǎ are

    valoarea 1);- to indicǎ punctul de oprire a iterat¸iei (dac ǎ este omis, se considerǎ

    implicit cǎ are valoarea + ∞şi se obţine o buclǎ innit ǎ);- while indicǎ o expresie booleanǎ, care trebuie s ǎ poat ǎ evaluat ǎ caadevǎrat ǎ sau falsǎ;- in indicǎ elementele succesive ale expresiei EXPR.

    De exemplu, pentru a scrie toate numerele pare de la 6 la 100 putemfolosi:> for i from 6 by 2 to 100 do print(i) od;

    Cu ajutorul buclei for se pot deni secvenţe, liste, mulţ imi, vectori saumatrice.> s:=NULL;

    for i from 1 to 3 do s:=s,2*i+1 od; # definirea unei secvente

    s :=s := 3s := 3, 5s := 3, 5, 7

    > l:=[];for i from 1 to 4 do l:=[op(l),i^2] od; # definirea unei liste

    l := [ ]l := [1]l := [1, 4]l := [1, 4, 9]

    l := [1, 4, 9, 16]> v:=vector(3); # definirea vectoruluifor i from 1 to 3 do v[i]:=i^3-i^2+1 od; # definirea elem vectevalm(v); # vizualizarea vectorului

    v := array(1 ..3, [ ])

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    20/211

    24 CAPITOLUL 1. MAPLEV4 - SCURT Ǎ INTRODUCERE

    v1 := 1v2 := 5v3 := 19[1, 5, 19]

    M:=array(1..3,1..4); # definirea matriceiM := array(1 ..3, 1..4, [ ])

    > for i from 1 to 3 do # definirea elem matriceifor j from 1 to 4 do

    M[i,j]:=i^jod;

    od;> evalm(M);

    1 1 1 12 4 8 163 9 2 7 8 1

    Putem aşa elemetele unei liste (secvent¸e, mulţ imi, matrice, vector) astfel:

    > lista:=[3,2,4,5,1]:> for i in lista do print(i) od;

    Mai multe detalii despre instruct ¸iunile de condiţ ionare şi de ciclare se potgasi accesând pagina de help referitoare la acestea.

    1.7.2 Funct ¸ii şi proceduri

    O funcţie poate denit ǎ cu ajutorul operatorului -> . Putem deni funcţ iide o variabilǎ sau funcţii de mai multe variabile.> f:=x->x^2+1;

    f := x →x2 + 1> g:=(x,y)->x^2+y;

    g := ( x, y) →x2 + y> f(3);

    10> g(3,4);

    13> g(4,3);

    19

    O procedur ǎ este un grup de instruct¸iuni, variabile şi constante. Sintaxaeste:

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    21/211

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    22/211

    26 CAPITOLUL 1. MAPLEV4 - SCURT Ǎ INTRODUCERE

    Pentru a deni tipul unui argument, se foloseşte sintaxa argument::tip .De exemplu, sǎ luǎm urm ǎtoarea procedurˇa şi situaţ iile care pot ap ǎrea:> # procedura care returneaza determinantul unei matrice> determinant:=proc(A) RETURN(det(A)) end:

    > determinant(2);Error, (in linalg:-det) expecting a matrix

    Procedura determinant se poate ”imbun ǎt ǎţi” astfel:

    > determinant1:=proc(A)if not type(A, matrix)

    then ERROR(‘argumentul trebuie sa fie matrice!!!‘)fi;RETURN(det(A))

    end:

    care produce urm ǎtorul rezultat:> determinant1(2);Error, (in determinant1) argumentul trebuie sa fie matrice!!!Se mai poate deni argumentul A ca ind de tipul matrice:> determinant3:=proc(A::matrix) RETURN(det(A)) end:şi se obţine urm ǎtorul rezultat:> determinant3(2);Error, invalid input: determinant3 expects its 1st argument, A,

    to be of type matrix, but received 2

    Mai multe detalii despre tipurile existente se pot gˇ asi accesând pagina dehelp (cuvântul cheie este type ).

    Un alt exemplu este procedura rdc , procedur ǎ pentru calculul lui 1√ x :

    > rdc:=proc(x)

    if x

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    23/211

    1.7. ELEMENTE DE PROGRAMARE 27

    rdc := proc (x) if x < 0 then ERROR(‘ numar negativ !‘)elif x = 0 then RETURN( ∞)

    else simplify(1/(xˆ (1/2))) end if end proc> rdc(-1);Error, (in rdc) numar negativ!> rdc(0);

    ∞> rdc(4);

    12

    Pentru a putea urmˇ ari execuţia unei proceduri, se foloseşte debug , iarpentru a stopa urmˇarirea, se foloseşte undebug . De exemplu, putem avea:

    > f:=proc(a,b)local y,z;y:=a+b/2;z:=1/y;RETURN(y+z)

    end;

    f := proc (a, b)local y, z ;y := a + 1 / 2 b; z := 1/yRETURN( y + z ) end proc

    > debug(f);f

    > f(2,4);{--> enter f, args = 2, 4

    y := 4

    z := 14

    f(0,1);

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    24/211

    28 CAPITOLUL 1. MAPLEV4 - SCURT Ǎ INTRODUCERE

    {--> enter f, args = 0, 1

    y := 12

    z := 2 f(10,20);

    40120

    Alte detalii despre funcţ ii şi proceduri, precum şi despre opt¸iunile debugşi undebug , puteţ i gǎsi pe paginile de help referitoare la acestea.

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    25/211

    Capitolul 2

    Rezolvarea sistemelor liniare

    În acest capitol vom prezenta metode de rezolvare a sistemelor liniare detip Cramer (numˇarul de ecuaţ ii este egal cu numǎrul de necunoscute, şideterminantul matricei sistemului este nenul):

    a11x1 + a12x2 + . . . + a1n xn = b1a21x1 + a22x2 + . . . + a2n xn = b2

    .....................................an 1x1 + an 2x2 + . . . + ann xn = bn

    (2.1)

    ı̂n care aij şi bi sunt numere reale date, i = 1 . . . n , j = 1 . . . n , iar x1, x2, . . . , x nsunt numere reale necunoscute.

    Sistemul (2.1) se poate scrie matriceal sub forma:

    Ax = b

    unde: A = ( a ij )i,j =1 ,n , b = ( b1, b2, . . . , bn )T , x = ( x1, x2, . . . , x n )T .Dacǎ matricea A este nesingular ǎ, sistemul Ax = b are soluţie unicǎ:

    x = A− 1b.

    Deoarece ı̂n cele mai multe cazuri matricea A are numǎr mare de linii şicoloane, iar calculul matricei A− 1 este dicil şi acumuleazǎ erori, se impunmetode directe şi metode iterative pentru rezolvarea acestor sisteme.

    2.1 Metoda lui Gauss

    2.1.1 Breviar teoreticMetoda lui Gauss presupune transformarea sistemului Ax = bı̂ntr-un sistemsuperior triunghiular, şi apoi rezolvarea acestuia prin substitut ¸ie inversǎ.

    29

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    26/211

    30 CAPITOLUL 2. REZOLVAREA SISTEMELOR LINIARE

    Construct ¸ia sistemului superior triunghiular se face astfel: la pasulk se eliminǎ xk din ecuaţiile k + 1, ..., n , prin ı̂nmult¸irea ecuaţ iei k cu

    m ik = −a ikakk

    (elementul akk se numeşte pivot) şi adunarea acestora la ecuat ¸ia i (i > k ).În funcţie de alegerea pivotului, exist ǎ urmǎtoarele variante ale metodei

    lui Gauss :

    1. metoda lui Gauss clasicǎ - ı̂n care la ecare pas, pivotul este ele-mentul akk , k = 1 , n;

    2. metoda lui Gauss cu semipivot - ı̂n care la ecare pas, se alegeca pivot elementul aik maxim ı̂n valoare absolutˇa pe coloanǎ, pentrui > k , permut ându-se linia k cu linia i;

    3. metoda lui Gauss cu pivot total - ı̂n care la ecare pas, se alege capivot elementul maxim atˆat pe linie, cât şi pe coloan ǎ, pentru i > k , j > k , permut ându-se linia k cu linia i şi coloana k cu coloana j ;

    În acest fel, sistemul (2.1) se reduce la forma superior triunghiularǎ

    ã11 ã12 ... ã1,n − 2 ã1,n − 1 ã1,n0 ã22 ... ã2,n − 2 ã2,n − 1 ã2,n... ... ... ... ... ...0 0 ... 0 ãn − 1,n − 1 ãn − 1,n0 0 ... 0 0 ãnn

    ·

    x1x2...

    xn − 1xn

    =

    b̃1b̃2...

    b̃n − 1b̃n

    (2.2)

    iar rezolvarea sistemului (2.2) se face prin substitut¸ie inversǎ:

    xn =b̃n

    ãnn(2.3)

    xk = b̃k −n

    j = k+1

    ãkj ·x j · 1ãkk

    , k = n −1, n −2, . . . , 1

    Observat ¸ia 2.1.1. Cu ajutorul elimin ǎrii gaussiene se poate determina şi

    inversa unei matrice. Red ǎm ı̂n continuare algoritmul de aare a inverseiunei matrice A.

    1. generarea matricei B prin concatenarea matricelor A (de dimensiunen) cu matricea I n

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    27/211

    2.1. METODA LUI GAUSS 31

    2. pentru i = 1, n

    m = Biipentru j = 1, 2n

    B ij = Bij

    mpentru j = 1, n, j = i

    m1 = B jipentru k = 1 , 2n

    B jk = B jk −m1 Bik3. prin ştergerea primelor n coloane ale matricei B astfel transformate, se

    obţine inversa matricei A

    2.1.2 Probleme rezolvateExercit ¸iul 2.1.1. Sǎ se rezolve urmǎtorul sistem folosind cele trei varianteale eliminǎrii Gauss:

    x + y + z = 62x −y + 3 z = 9x + 4y + z = 12.Matricea sistemului este

    A =1 1 12 −1 31 4 1

    ,

    iar Ā este matricea sa extinsˇa:

    Ā = ( A, b) =1 1 1 62 −1 3 91 4 1 12

    .

    Deoarece numǎrul ecuaţ iilor este egal cu cel al necunoscutelor şi

    det A = −3 = 0 ,sistemul este compatibil determinat (de tip Cramer), şi deci metoda eliminˇ ariia lui Gauss este aplicabil ǎ.

    ˆIn continuare, pentru a efectua operat ¸iile asupra matricei extinse a sis-temului vom nota linia i cu Li , iar coloana j cu C j .

    Rezolvare utilizând metoda lui Gauss clasicǎA. Construcţ ia sistemului superior triunghiular

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    28/211

    32 CAPITOLUL 2. REZOLVAREA SISTEMELOR LINIARE

    Pasul 1

    • pivot: a11 = 1• m21 = −

    21

    = −2

    • m31 = −11 = −11 1 1 62 −1 3 91 4 1 12

    L2 →L 2 + m 21 L1L3 →L 3 + m 31 L1

    −−−−−−−−−→1 1 1 60 −3 1 −30 3 0 6

    Pasul 2

    • pivot: a22 = −3

    • m32 =

    − 3

    −3 = 1

    1 1 1 60 −3 1 −30 3 0 6

    L 3 →L3 + m 32 L 2

    −−−−−−−−−→1 1 1 60 −3 1 −30 0 1 3

    În acest moment am ajuns la un sistem de forma Ãx = b̃, echivalent cusistemul iniţ ial, ı̂n care matricea à este superior triunghiularˇa, unde:

    Ã =1 1 10

    −3 1

    0 0 1

    , x =xy

    z

    , b̃ =6

    −3

    3

    .

    B. Rezolvarea sistemului superior triunghiularPrin metoda substitut ¸iei inverse, avem:

    z = 31

    y = 1

    −3(−3 −1 ·z )

    x = 11

    (6 −1 ·y −1 ·z ),de unde obţinem soluţ ia sistemului: x = 1, y = 2, z = 3.

    Rezolvare cu metoda lui Gauss cu semipivotA. Construcţ ia sistemului superior triunghiular

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    29/211

    2.1. METODA LUI GAUSS 33

    Pasul 1

    • Ca pivot se ia elementul ai1 de modul maxim de pe coloana 1. Încazul nostru, pivotul este a12 , deci se permut ǎ linia 1 cu linia 2, şi sefac zerouri pe coloana 1 pentru i > 1:

    1 1 1 62 −1 3 91 4 1 12

    L 2 ↔L1

    −−−−→2 −1 3 91 1 1 61 4 1 12

    2 −1 3 91 1 1 61 4 1 12

    L2 →L2 − 12 L 1L3 →L3 − 12 L 1

    −−−−−−−→2 −1 3 90 32 −12 320 92 −12 152

    Pasul 2

    • Ca pivot se ia elementul a i2 de modul maxim de pe coloana 2, pentrui ≥2. În cazul nostru, pivotul este a32 , deci se permut ǎ linia 2 cu linia3 şi se fac zerouri pe coloana 2, pentru i > 2:2 −1 3 90 32 −12 320 92 −12 152

    L 3 ↔L2

    −−−−→2 −1 3 90 92 −12 1520 32 −12 32

    2 −1 3 90 92 −12 1520 32 −

    12

    32

    L 3 →L3 − 13 L2

    −−−−−−−→2 −1 3 90 92 −12 1520 0

    −13

    −1

    În acest moment am ajuns la un sistem de forma Ãx = b̃, echivalent cusistemul iniţ ial, unde matricea à este superior triunghiularˇa, iar:

    Ã =2 −1 30 92 −120 0 −13

    , x =xyz

    , b̃ =9152

    −1.

    B. Rezolvarea sistemului superior triunghiular se face ca şi ı̂n cazul metodeilui Gauss clasice, şi conduce la soluţia x = 1, y = 2, z = 3.

    Rezolvare cu metoda lui Gauss cu pivot totalA. Construcţ ia sistemului superior triunghiular

    Pasul 1

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    30/211

    34 CAPITOLUL 2. REZOLVAREA SISTEMELOR LINIARE

    • ca pivot se alege elementul aij de modul maxim pentru i, j ≥ 1.În cazul nostru pivotul este a32, deci se permut ǎ linia 3 cu linia 1, şicoloana 2 cu coloana 1:

    1 1 1 6

    2 −1 3 91 4 1 12L3 ↔L 1

    −−−−→1 4 1 12

    2 −1 3 91 1 1 61 4 1 122 −1 3 91 1 1 6

    C 2 ↔C 1

    −−−−→4 1 1 12

    −1 2 3 91 1 1 6• pentru corectitudinea rezultatului nal este necesar ca, ori de cˆ ateori se permut ǎ coloanele matricei extinse, s ǎ se permute şi elementelecorespunzǎtoare ale vectorului x. Astfel, avem:

    x =xyz

    x2 ↔x1

    −−−−→yxz

    • ı̂n nal, obţ inem:4 1 1 12

    −1 2 3 91 1 1 6

    L 2 →L 2 + 14 L1L 3 →L 3 − 14 L1

    −−−−−−−→4 1 1 120 94

    134 12

    0 3434 3

    Pasul 2

    • ca pivot se alege elementul aij de modul maxim pentru i, j ≥ 2.Deoarece pivotul este a23, se permut ǎ coloana 3 cu coloana 2:4 1 1 120 94

    134 12

    0 3434 3

    C 3 ↔C 2

    −−−−→4 1 1 120 134

    94 12

    0 3434 3

    x =yxz

    x3 ↔x2

    −−−−→yz x

    4 1 1 120 134

    94 12

    0 3434 3

    L3 →L3 − 313 L2

    −−−−−−−−→4 1 1 120 134

    94 12

    0 0 3133

    13

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    31/211

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    32/211

    36 CAPITOLUL 2. REZOLVAREA SISTEMELOR LINIARE

    1 0 −12 −12 1 00 1 2 1 −1 00 0 1 13 −43 23L1→L1− B 13 L3L2→L2− B 23 L3

    −−−−−−−−−→1 0 0 −13 13 130 1 0 13 53 −430 0 1 13 −43 23

    Inversa matricei A va matricea C , obţinut ǎ prin ştergerea primelor 3

    coloane ale matricei B:

    C = −13

    13

    13

    13

    53 −431

    3 −43 23Într-adevˇar, se vericǎ uşor cǎ

    A ·C = C ·A = I 3.

    2.1.3 Probleme propuseExercit ¸iul 2.1.3. Sǎ se rezolve urmǎtoarele sisteme, folosind cele trei vari-ante ale metodei lui Gauss:

    a)x + 2y + z = 13x −y + 5 z = 14x + y −z = −2

    b)

    x + y + z + t = 03x −2y −z + t = −8x −2y −z + 4 t = 1x + y −z + 2 t = 1

    Exercit ¸iul 2.1.4. Sǎ se gǎseascǎ soluţia sistemelor anterioare, calculˆandinversa matricei A a sistemului, şi efectu ând ı̂nmult¸irea A− 1b.

    2.1.4 ImplementareA. Algoritm

    Algoritmii pentru cele 3 metode sunt asemˇanǎtori, diferenţ a dintre eiapǎrând (aşa cum se poate vedea şi din exemplul rezolvat) ı̂n modul derezolvare a eliminǎrii Gauss.

    Date de intrare: un sistem de ecuaţ ii (scris ca mulţ ime de ecuaţ ii)Date de ieşire: soluţia sistemului

    Algoritmul constǎ din urm ǎtoarele etape:

    1. generarea matricei extinse a sistemului, A = ( a ij )i=1 ,n,j =1 ,n +1

    • n= num ǎrul de ecuaţ ii (num ǎrul de linii ale matricei A);

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    33/211

    2.1. METODA LUI GAUSS 37

    2. a) eliminarea Gauss pentru metoda lui Gauss clasicˇa

    - pentru k = 1, n −1- dacǎ akk = 0, atunci se cautˇa r pentru care akr = 0,r = k + 1 , n şi se schimbǎ linia k cu linia r ;- dacǎ toţ i akr = 0, r = k + 1 , n atunci se returneazˇa eroare;- pentru i = k + 1 , n

    m = −a ikakk

    , unde akk = 0;- pentru j = k, n

    a ij = aij + m ·akj ;b) eliminarea Gauss pentru metoda lui Gauss cu semipivot

    - pentru k = 1, n −1 se cautǎ elementul de modul maxim pe linie,i.e. dacǎ |akr | > |akk |, r = k + 1 , n, se schimbǎ linia k cu linia r- pentru i = k + 1 , n

    m = −a ikakk

    , unde akk = 0;- pentru j = k, n

    a ij = aij + m ·akj ;c) eliminarea Gauss pentru metoda lui Gauss cu pivot total

    - pentru k = 1 , n −1 se cautǎ elementul de modul maxim pe linie şicoloanǎ, i.e. dacǎ|a pr

    |>

    |akk

    |, p, r = k + 1 , n, se schimbǎ coloana

    p cu coloana k şi linia r cu linia k- pentru i = k + 1 , n

    m = −a ikakk

    , unde akk = 0;- pentru j = k, n

    a ij = aij + m ·akj ;3. rezolvarea sistemului superior triunghiular prin substitut ¸ie inversǎ

    xn = an,n +1

    ann,

    - pentru i = n −1, 1xi =

    1a ii

    a i,n +1 −n

    j = i+1

    a ij x j .

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    34/211

    38 CAPITOLUL 2. REZOLVAREA SISTEMELOR LINIARE

    B. Programe MAPLE şi rezultateDeoarece diferitele variante ale metodei lui Gauss se deosebesc doar prin

    modul ı̂n care se realizeaz ǎ eliminarea Gauss, ı̂n cele ce urmeaz ǎ am imple-mentat separat cele trei variante de eliminare, folosind procedurile cgauss ,spgauss , tpgauss . Aceste proceduri vor folosite apoi ca opţiuni ı̂n proce-dura nal ǎ gauss .

    restart: with(linalg):

    cgauss:=proc(A::matrix)local A1, A2, n, k, r, i, m, j;n:=rowdim(A);A1:=A;A2:=delcols(A1,n+1..n+1);if(det(A2)=0) then ERROR(‘sistemul nu are solutie unica!‘) fi;

    for k from 1 to n-1 doif A1[k,k]=0 thenfor r from k+1 to nwhile A1[k,r]=0 do r=r+1 od;if r>n then ERROR(‘sistemul nu are solutie unica!‘)

    else A1:=swaprow(A1,k,r);fi;

    fi;for i from k+1 to n do m:=A1[i,k]/A1[k,k];

    for j from k to n+1 doA1[i,j]:=A1[i,j]-m*A1[k,j];

    od;od;

    od;RETURN(evalm(A1));end:

    spgauss:=proc(A::matrix)local A1, A2, n, k, r, i, m, j, mx;n:=rowdim(A);

    A1:=A;A2:=delcols(A1,n+1..n+1);if(det(A2)=0) then ERROR(‘sistemul nu are solutie unica!‘) fi;for k from 1 to n-1 do

    mx:=k;

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    35/211

    2.1. METODA LUI GAUSS 39

    for r from k to n doif (abs(A1[r,k])>abs(A1[k,k])) then mx:=rfi;

    od;if mxk then A1:=swaprow(A1,k,mx); fi;

    for i from k+1 to n do m:=A1[i,k]/A1[k,k];

    for j from k to n+1 doA1[i,j]:=A1[i,j]-m*A1[k,j];

    od;od;

    od;RETURN(evalm(A1));end:

    tpgauss:=proc(A::matrix)local A1, A2, n, k, r, i, m, j, mx, my, l;n:=rowdim(A);A1:=A;A2:=delcols(A1,n+1..n+1);l:=[seq(i), i=1..n];if(det(A2)=0) then ERROR(‘sistemul nu are solutie unica!‘) fi;for k from 1 to n-1 do

    mx:=k; my:=k;for i from k to n do

    for j from k to n doif (abs(A1[i,j])>abs(A1[k,k])) then mx:=i; my:=j;fi;

    od;od;if mxk then A1:=swaprow(A1,k,mx); fi;if myk then

    A1:=swapcol(A1,k,my);l:=subsop(k=l[my],my=l[k],l);

    fi;for i from k+1 to n do

    m:=A1[i,k]/A1[k,k];for j from k to n+1 doA1[i,j]:=A1[i,j]-m*A1[k,j];

    od;od;

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    36/211

    40 CAPITOLUL 2. REZOLVAREA SISTEMELOR LINIARE

    od;RETURN(evalm(A1),l);end:

    gauss:=proc(eqn::set(equation), opt::symbol)local A,A1,l,n,r,k,i,m,j,s,x,rez;l:=[op(indets(eqn))];n:=nops(l);A:=genmatrix(eqn, l, flag);if opt=clasic then A1:=cgauss(A);elif opt=semipivot then A1:=spgauss(A);elif opt=totalpivot then

    rez:=tpgauss(A);A1:=rez[1];l:=[seq(l[rez[2][i]],i=1..n)];

    else ERROR(‘optiunile sunt: clasic, semipivot sau totalpivot‘);fi;x[n]:=A1[n,n+1]/A1[n,n];for i from n-1 by -1 to 1 do

    s:=0;for j from i+1 to n do

    s:=s+A1[i,j]*x[j];od;x[i]:=1/A1[i,i]*(A1[i,n+1]-s);

    od;RETURN(seq(l[i]=x[i],i=1..n));end:

    Observat ¸ia 2.1.2. Instrucţ iunea indets(set_eq) returneaz ǎ mulţimea nede-terminatelor sistemului set_eq . Deoarece ordinea elementelor acestei mulţ iminu este neap ǎrat aceeaşi cu ordinea nedeterminatelor din prima ecuat ¸ie a sis-temului, pot apˇarea diferenţ e ı̂ntre rezultatele furnizate cu ajutorul coduluiMAPLE şi rezultatele calculate pe hˆartie. Deşi matricea sistemului generatˇ acu a jutorul instruct¸iunii indets nu este ı̂ntotdeauna aceeaşi cu matriceasistemului scris ǎ pe hârtie, rezultatele furnizate de program vor aceleaşi(eventual ordinea soluţ iilor va schimbat ǎ).

    Observat ¸ia 2.1.3. Pentru a urmˇari execuţia unei proceduri, se foloseşteinstrucţ iunea debug . În cazul programelor din exemplele de mai sus, sepoate folosi urmǎtorul set de instruct¸iuni:

    debug(cgauss):

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    37/211

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    38/211

    42 CAPITOLUL 2. REZOLVAREA SISTEMELOR LINIARE

    A1 :=1 1 1 60 −3 1 −30 0 1 3x 3 := 3s := 0s := 3

    x 2 := 2s := 0s := 2s := 5

    x 1 := 1

    gauss( {x+y+z=6,2*x-y+3*z=9,x+4*y+z=12 },semipivot);{--> enter gauss, args = {x+y+z = 6, 2*x-y+3*z = 9, x+4*y+z = 12},semipivot

    l := [x, y, z ]n := 3

    A :=1 1 1 62 −1 3 91 4 1 12

    {--> enter spgauss, args = An := 3

    A1 := A

    A2 :=1 1 12 −1 31 4 1

    mx := 1mx := 2

    A1 :=2 −1 3 91 1 1 61 4 1 12

    m := 12

    A1 2, 1 := 0A1 2, 2 :=

    32

    A1 2, 3 := −12

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    39/211

    2.1. METODA LUI GAUSS 43

    A1 2, 4 := 32

    m := 12

    A1 3, 1 := 0

    A1 3, 2 := 92

    A1 3, 3 := −12A1 3, 4 :=

    152

    mx := 2mx := 3

    A1 :=

    2 −1 3 90

    92

    −12

    152

    0 3

    2−12

    32

    m := 13

    A1 3, 2 := 0

    A1 3, 3 := −13A1 3, 4 := −1

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    40/211

    44 CAPITOLUL 2. REZOLVAREA SISTEMELOR LINIARE

    gauss( {x+y+z=6,2*x-y+3*z=9,x+4*y+z=12 },totalpivot);{--> enter gauss, args = {x+y+z = 6, 2*x-y+3*z = 9, x+4*y+z = 12},totalpivot

    l := [x, y, z ]n := 3

    A :=1 1 1 62 −1 3 91 4 1 12

    {--> enter tpgauss, args = An := 3

    A1 := A

    A2 :=1 1 12 −1 31 4 1

    l := [1, 2, 3]mx := 1my := 1mx := 2my := 1mx := 2my := 3mx := 3my := 2

    A1 :=1 4 1 122 −1 3 91 1 1 6

    A1 :=4 1 1 12

    −1 2 3 91 1 1 6l := [2, 1, 3]

    m := −1

    4A1 2, 1 := 0

    A1 2, 2 := 94

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    41/211

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    42/211

    46 CAPITOLUL 2. REZOLVAREA SISTEMELOR LINIARE

    l := [y, z, x ]x 3 := 1s := 0

    s := 94

    x 2 := 3s := 0s := 3s := 4

    x 1 := 2

    A := matrix([[1, 1, 1, 6], [2, -1, 3, 9], [1, 4, 1, 12]]);

    A :=1 1 1 62 −1 3 91 4 1 12

    > gausselim(A);

    1 1 1 60

    −3 1

    −3

    0 0 1 3> backsub(%);

    [1, 2, 3]

    Redǎm programul Maple pentru determinarea inversei unei matrice, pre-cum şi un exemplu:

    invmatrix:=proc(A::matrix)local n,A1,i,B,j,m,m1,k,C;n:=rowdim(A);

    if coldim(A) n thenERROR(‘Matricea trebuie sa fie patratica!‘)fi;if det(A)=0 then

    ERROR(‘Matricea trebuie sa fie nesingulara!‘)

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    43/211

    2.1. METODA LUI GAUSS 47

    fi;A1:=matrix(n,n,0);for i from 1 to n do

    A1[i,i]:=1od;B:=concat(A,A1);for i from 1 to n do

    m:=B[i,i];for j from 1 to 2*n do B[i,j]:=B[i,j]/m od;for j from 1 to n do

    if ij then m1:=B[j,i];for k from 1 to 2*n do

    B[j,k]:=B[j,k]-m1*B[i,k];od;

    fi;od;od;evalm(B); # rezultatul eliminarii gaussieneC:=delcols(B,1..n); # inversa matricei Aend:

    > A := matrix([[2, 1, 1], [2, -1, 3], [1, 4, 1]]):

    > debug(invmatrix):

    > C:=invmatrix(A);

    {--> enter invmatrix, args = An := 3

    A1 :=0 0 00 0 00 0 0

    A1 1, 1 := 1A1 2, 2 := 1A1 3, 3 := 1

    B :=2 1 1 1 0 02 −1 3 0 1 01 4 1 0 0 1m := 2

    B 1, 1 := 1

    B 1, 2 := 12

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    44/211

    48 CAPITOLUL 2. REZOLVAREA SISTEMELOR LINIARE

    B 1, 3 := 12

    B 1, 4 := 12

    B 1, 5 := 0B 1, 6 := 0m1 := 2B 2, 1 := 0

    B 2, 2 := −2B 2, 3 := 2

    B 2, 4 := −1B 2, 5 := 1B 2, 6 := 0m1 := 1

    B 3, 1 := 0

    B 3, 2 := 72

    B 3, 3 := 12

    B 3, 4 := −12B 3, 5 := 0B 3, 6 := 1m := −2B 2, 1 := 0B 2, 2 := 1

    B 2, 3 := −1B 2, 4 :=

    12

    B 2, 5 := −12B 2, 6 := 0

    m1 := 12

    B 1, 1 := 1B 1, 2 := 0B 1, 3 := 1

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    45/211

    2.1. METODA LUI GAUSS 49

    B 1, 4 := 14

    B 1, 5 := 14

    B 1, 6 := 0

    m1 := 72

    B 3, 1 := 0B 3, 2 := 0B 3, 3 := 4

    B 3, 4 := −94B 3, 5 :=

    74

    B 3, 6 := 1m := 4

    B 3, 1 := 0B 3, 2 := 0B 3, 3 := 1

    B 3, 4 := −916B 3, 5 :=

    716

    B 3, 6 := 14

    m1 := 1B 1, 1 := 1B 1, 2 := 0B 1, 3 := 0

    B 1, 4 := 1316

    B 1, 5 := −316B 1, 6 := −14m1 := −1B 2, 1 := 0B 2, 2 := 1B 2, 3 := 0

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    46/211

    50 CAPITOLUL 2. REZOLVAREA SISTEMELOR LINIARE

    B 2, 4 := −116B 2, 5 := −116B 2, 6 :=

    14

    1 0 0 13

    16−316

    −14

    0 1 0 −116

    −116

    14

    0 0 1 −916

    716

    14

    C :=

    1316

    −316

    −14

    −116

    −116

    14

    −916

    716

    14

    multiply(A,C);

    1 0 00 1 00 0 1

    > multiply(C,A);

    1 0 00 1 00 0 1

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    47/211

    2.2. FACTORIZAREA LU 51

    2.2 Factorizarea LU

    2.2.1 Breviar teoreticFie sistemul compatibil determinat

    Ax = b. (2.4)

    Factorizarea LU presupune descompunerea matricei A ı̂ntr-un produs de ma-trice L ·U , unde

    L =

    λ11 0 . . . 0λ21 λ22 . . . 0. . . . . . . . . . . .λn 1 λn 2 . . . λnn

    U =

    µ11 µ12 . . . µ1n0 µ22 . . . µ2n

    . . . . . . . . . . . .0 0 . . . µnn

    . (2.5)

    Aceastǎ descompunere este posibil ǎ dacǎ toţ i determinant¸ii de colţ aimatricei A sunt nenuli.

    Pentru a asigura unicitatea descompunerii, trebuie precizate n elementeale matricei L sau U . În mod tradiţ ional, se specicǎ λ ii sau µii ; dacǎ λ ii = 1atunci factorizarea LU se numeşte factorizare Doolittle , iar dacǎ µii = 1se numeşte factorizare Crout .

    Astfel, rezolvarea sistemului (2.4) se reduce la rezolvarea sistemelor tri-unghiulare

    Ly = b (2.6)

    cu soluţia

    y1 = b1λ11

    yi = bi −i− 1

    j =1

    λ ij y j · 1λ ii

    , i = 2, 3, . . . , n(2.7)

    şiUx = y (2.8)

    cu soluţia

    xn = ynµnn

    xi = yi −n

    j = i+1

    µij x j · 1µii

    , i = 2, 3, . . . , n .(2.9)

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    48/211

    52 CAPITOLUL 2. REZOLVAREA SISTEMELOR LINIARE

    2.2.2 Problemǎ rezolvatǎExercit ¸iul 2.2.1. Sǎ se determine soluţ ia sistemului urmˇator, folosind fac-torizarea LU:

    x + y −z = 22x −y + z = 1x + 3y −2z = 5 .

    Sistemul se scrie ı̂n forma matricealˇa:

    Ax = b,

    unde

    A =1 1 −12 −1 11 3 −2

    , x =xyz

    , b =215

    .

    Deoarece

    1 = 0 , 1 12 −1= −3 = 0 ,

    1 1 −12 −1 11 3 −2= −3 = 0 ,

    rezult ǎ cǎ matricea A este nesingular ǎ şi are toţ i determinant¸ii de colţ nenuli,deci se poate folosi factorizarea LU pentru rezolvarea acestui sistem.Rezolvare folosind factorizarea Crout

    A. Factorizarea CroutPresupunem c ǎ

    A =1 1 −12 −

    1 11 3 −2

    =λ11 0 0λ21 λ22 0λ31 λ32 λ33 ·

    1 µ12 µ130 1 µ230 0 1

    ,

    şi ne propunem s ǎ determin ǎm coecienţii lij , u jk . Pentru aceasta, folosimdeniţia ı̂nmult¸irii matricelor. Astfel, avem:

    a11 = λ11 ·1 λ11 = 1a12 = λ11 ·µ12 µ12 = 1a13 = λ11 ·µ13 µ13 = −1a21 = λ21 ·1 λ21 = 2a22 = λ21 ·µ12 + λ22 ·1 λ22 = −3a23 = λ21 ·µ13 + λ22 ·µ23 µ23 = −1a31 = λ31 ·1 λ31 = 1a32 = λ31 ·µ12 + λ32 ·1 λ32 = 2a33 = λ31 ·µ13 + λ32 ·µ23 + λ33 ·1 λ33 = 1

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    49/211

    2.2. FACTORIZAREA LU 53

    sau

    L =1 0 02 −3 01 2 1

    , U =1 1 −10 1 −10 0 1

    .

    B. Rezolvarea sistemelor triunghiularePentru rezolvarea sistemului init ¸ial, avem de rezolvat dou ǎ sisteme tri-

    ungiulare:

    1 0 02 −3 01 2 1 ·

    y1y2y3

    =215

    ,

    a cǎrui soluţie este

    y = y1

    y2y3

    = 211

    ,

    şi respectiv:

    1 1 −10 1 −10 0 1 ·xyz

    =211

    ,

    a cǎrui soluţie este

    x =xyz

    =121

    .

    Rezolvare folosind factorizarea DoolittleA. Factorizarea DoolittlePresupunem c ǎ

    A =1 1

    −1

    2 −1 11 3 −2=

    1 0 0λ21 1 0λ31 λ32 1 ·

    µ11 µ12 µ130 µ22 µ230 0 µ33

    şi ne propunem s ǎ determin ǎm coecienţii lij , µ jk , la fel ca şi ı̂n exemplul

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    50/211

    54 CAPITOLUL 2. REZOLVAREA SISTEMELOR LINIARE

    precedent. Astfel avem:

    a11 = 1 ·µ11 µ11 = 1a12 = 1 ·µ12 µ12 = 1a13 = 1 ·µ13 µ13 = −1a21 = λ21 ·µ11 λ21 = 2a22 = λ21 ·µ12 + 1 ·µ22 µ22 = −3a23 = λ21 ·µ13 + 1 ·µ23 µ23 = 3a31 = λ31 ·µ11 λ31 = 1a32 = λ31 ·µ12 + λ32 ·µ22 λ32 = −

    23

    a33 = λ31 ·µ13 + λ32 ·µ23 + 1 ·µ33 µ33 = 1sau

    L =1 0 02 1 01 −23 1

    , U =1 1 −10 −3 30 0 1

    .

    B. Rezolvarea sistemelor triunghiularePentru rezolvarea sistemului init ¸ial, avem de rezolvat dou ǎ sisteme tri-

    ungiulare:1 0 02 1 01

    −23 1

    ·y1y2y3

    =215

    ,

    a cǎrui soluţie este

    y =y1y2y3

    =2

    −31,

    şi respectiv:1 1 −10 −3 30 0 1 ·

    xyz

    =2

    −31,

    a cǎrui soluţie este

    x =xyz

    =121

    .

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    51/211

    2.2. FACTORIZAREA LU 55

    2.2.3 Probleme propuseExercit ¸iul 2.2.2. Sǎ se gǎseascǎ soluţiile urm ǎtoarelor sisteme, folosind celedouǎ variante ale factoriz ǎrii LU:

    a)

    x + 2y + z = 1

    3x −y + 5 z = 14x + y −z = −2b)

    3x + y −2z = 1x + y + z = 6−2x −y + 4 z = 7

    2.2.4 ImplementareA. Algoritm

    Date de intrare: un sistem de ecuaţiiDate de ieşire: soluţia sistemului

    Algoritmul constǎ din urm ǎtoarele etape:

    1. generarea matricei A a sistemului, şi a vectorului coloan ǎ b

    •n = num ǎrul de linii ale matricei A (numǎrul de ecuaţ ii ale sistemului)2. a) factorizarea Crout

    pentru i = 1, nµii = 1

    pentru i = 1, npentru j = 1, i

    λ ij = aij − j − 1

    k=1

    λ ik µkj

    pentru j = i + 1 , n

    µij = 1λ ii

    a ij −i− 1

    k=1

    λ ik µkj

    b) factorizarea Doolittle

    pentru i = 1, nλ ii = 1pentru i = 1, n

    pentru j = 1, i −1

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    52/211

    56 CAPITOLUL 2. REZOLVAREA SISTEMELOR LINIARE

    λ ij = 1µ jj

    a ij −i

    k=1

    λ ik µkj

    pentru j = i, n

    µij = aij −i− 1

    k=1λ ik µkj

    3. Rezolvarea celor douǎ sisteme triunghiulare

    y1 = b1λ11

    pentru i = 2, n

    yi = bi −i− 1

    j =1

    λ ij y j · 1λ ii

    xn = ynµnnpentru i = 2, n

    xi = yi −n

    j = i+1

    µij x j · 1µii

    B. Programe MAPLE şi rezultateDeoarece cele douǎ variante ale descompunerii LU difer ǎ doar prin modul

    de factorizare a matricei sistemului, am implementat separat cele douˇ a vari-ante de factorizare: LUcrout şi LUdoolittle , dup ǎ care le-am folosit caopţiuni ı̂n procedura nalˇa LUsist .

    restart: with(linalg):

    LUcrout:=proc(A::matrix)local a1,n,l,u,i,s,j,k;n:=rowdim(A);a1:=A;if a1[1,1]=0 then

    ERROR(‘factorizarea LU nu este aplicabila!‘);fi;for i from n by -1 to 2 do

    if det(a1)0 then a1:=delrows(delcols(a1,i..i),i..i);else ERROR(‘factorizarea LU nu este aplicabila!‘);

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    53/211

    2.2. FACTORIZAREA LU 57

    fi;od;l:=matrix(n,n,0); u:=matrix(n,n,0);for i from 1 to n do

    u[i,i]:=1;od;for i from 1 to n do

    for j from 1 to i dos:=0; for k from 1 to j-1 do s:=s+l[i,k]*u[k,j]; od;l[i,j]:=A[i,j]-s;

    od;for j from i+1 to n do

    s:=0; for k from 1 to i-1 do s:=s+l[i,k]*u[k,j]; od;u[i,j]:=1/l[i,i]*(A[i,j]-s);

    od;

    od;RETURN(evalm(l), evalm(u));end:

    LUdoolittle:=proc(A::matrix)local a1,n,l,u,i,s,j,k;n:=rowdim(A);a1:=A;if a1[1,1]=0 then

    ERROR(‘factorizarea LU nu este aplicabila!‘);fi;for i from n by -1 to 2 do

    if det(a1)0 then a1:=delrows(delcols(a1,i..i),i..i);else ERROR(‘factorizarea LU nu este aplicabila!‘);fi;

    od;l:=matrix(n,n,0); u:=matrix(n,n,0);for i from 1 to n do

    l[i,i]:=1;od;for i from 1 to n do

    for j from 1 to i-1 dos:=0; for k from 1 to i do s:=s+l[i,k]*u[k,i]; od;l[i,j]:=1/u[j,j]*(A[i,j]-s);od;

    for j from i to n do

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    54/211

    58 CAPITOLUL 2. REZOLVAREA SISTEMELOR LINIARE

    s:=0; for k from 1 to i-1 do s:=s+l[i,k]*u[k,i]; od;u[i,j]:=A[i,j]-s;

    od;od;RETURN(evalm(l), evalm(u));end:

    LUsist:=proc(l::set(equation), opt::symbol)local lst, eqm, A, b, n, lu, L, U,i,s,j,aux, rez, rfin;eqm:=genmatrix(l, [op(indets(l))], flag);lst:=indets(l);n:=nops(lst);A:=delcols(eqm,n+1..n+1);b:=col(eqm,n+1);if opt=Crout then

    lu:=LUcrout(A);elif opt=Doolittle thenlu:=LUdoolittle(A);

    else ERROR(‘optiunile sunt: Crout sau Doolittle‘)fi;L:=lu[1];U:=lu[2];for i from 1 to n do

    s:=0; for j from 1 to i-1 do s:=s+L[i,j]*aux[j] od;aux[i]:=1/L[i,i]*(b[i]-s)

    od;for i from n by -1 to 1 do

    s:=0; for j from i+1 to n do s:=s+U[i,j]*rez[j] od;rez[i]:=1/U[i,i]*(aux[i]-s)

    od;RETURN(seq(lst[i]=rez[i], i=1..n));end:

    debug(LUsist);LUsist({x+y-z=2,2*x-y+z=1,x+3*y-2*z=5}, Doolittle);

    {--> enter LUsist, args = {x+y-z = 2, 2*x-y+z = 1, x+3*y-2*z = 5},Doolittle

    eqm := −1 1 1 21 2 −1 1

    −2 1 3 5

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    55/211

    2.2. FACTORIZAREA LU 59

    lst := {z, x, y }n := 3

    A := −1 1 11 2 −1

    −2 1 3

    b := [2, 1, 5]

    lu :=

    1 0 0

    −1 1 02 −1

    3 1

    ,−1 1 10 3 0

    0 0 1

    L :=

    1 0 0

    −1 1 02 −1

    3 1

    U := −1 1 1

    0 3 00 0 1

    s := 0aux 1 := 2

    s := 0s := −2

    aux 2 := 3s := 0s := 4s := 3

    aux 3 := 2s := 0rez 3 := 2

    s := 0s := 0

    rez 2 := 1s := 0s := 1s := 3

    rez 1 := 1

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    56/211

    60 CAPITOLUL 2. REZOLVAREA SISTEMELOR LINIARE

    {--> enter LUsist, args = {x+y-z = 2, 2*x-y+z = 1, x+3*y-2*z = 5},Crout

    eqm := −1 1 1 21 2 −1 1

    −2 1 3 5lst := {z, x, y }n := 3

    A := −1 1 11 2 −1

    −2 1 3b := [2, 1, 5]

    lu := −1 0 01 3 0

    −2

    −1 1

    ,1 −1 −10 1 00 0 1

    L := −1 0 01 3 0

    −2 −1 1

    U :=1 −1 −10 1 00 0 1s := 0

    aux 1 := −2s := 0

    s :=

    −2

    aux 2 := 1s := 0s := 4s := 3

    aux 3 := 2s := 0

    rez 3 := 2s := 0s := 0

    rez 2 := 1

    s := 0s := −1s := −3

    rez 1 := 1

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    57/211

    2.3. SISTEME TRIDIAGONALE 61

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    58/211

    62 CAPITOLUL 2. REZOLVAREA SISTEMELOR LINIARE

    2.3.2 Problemǎ rezolvatǎExercit ¸iul 2.3.1. Sǎ se rezolve sistemul tridiagonal:

    x +2 y = 32x

    −y + z = 2

    3y +2 z −t = 4−2z + t = −1.

    RezolvareMatricea sistemului este

    A =

    1 2 0 02 −1 1 00 3 2 −10 0 −2 1

    Descompunem aceast ǎ matrice astfel:

    1 2 0 02 −1 1 00 3 2 −10 0 −2 1

    =

    β 1 0 0 02 β 2 0 00 3 β 3 00 0 −2 β 4

    ·1 ν 2 0 00 1 ν 3 00 0 1 ν 40 0 0 1

    Din deniţia produsului a dou ǎ matrice, obţ inem:

    b1 = β 1 ·1 β 1 = 1c2 = β 1 ·ν 2 ν 2 = 2b2 = a2

    ·ν 2 + β 2

    β 2 =

    −5

    c3 = β 2ν 3 ν 3 = −15b3 = a3ν 3 + β 3 β 3 =

    135

    c4 = β 3 ·ν 4 ν 4 = − 513

    b4 = a4 ·ν 4 + β 4 β 4 = 313

    .

    B. Rezolvarea sistemelor triunghiularePentru a rezolva sistemul init¸ial, avem de rezolvat dou ǎ sisteme triun-

    ghiulare: 1 0 0 02 −5 0 00 3 135 00 0 −2 313

    ·y1y2y3y4

    =

    324

    −1,

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    59/211

    2.3. SISTEME TRIDIAGONALE 63

    a cǎrui soluţie estey1y2y3y4

    =

    3458

    131

    ,

    şi respectiv:1 2 0 00 1 −15 00 0 1 −5130 0 0 1

    ·xyz t

    =

    3458

    131

    ,

    a cǎriu soluţie estexyz t

    =

    1111

    .

    2.3.3 Probleme propuseExercit ¸iul 2.3.2. Sǎ se rezolve sistemele tridiagonale:

    a)x + y = 32x −y + z = 13y −z = 5

    b)

    2x + y = 0x −y + 2 z = −12y −z + t = 5z + 2 t = 5.

    2.3.4 ImplementareA. Algoritm

    Date de intrare: un sistem de ecuaţii tridiagonalDate de ieşire: soluţia sistemului

    Algoritmul constǎ ı̂n:

    1. generarea matricei A a sistemului (matrice tridiagonalˇa) şi a vectoruluicoloanǎ b

    • n = num ǎrul de linii ale matricei A2. descompunerea LU aplicat ǎ matricei tridiagonale A

    L = ( λ ij )i,j =1 ,n , U = ( µij )i,j =1 ,n

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    60/211

    64 CAPITOLUL 2. REZOLVAREA SISTEMELOR LINIARE

    pentru i = 1, nµii = 1

    pentru i = 2, nλ i,i − 1 = ai,i − 1

    λ11 = a11pentru i = 1, n −1

    µi,i +1 = ai,i +1

    λ iiλ i+1 ,i +1 = ai+1 ,i+1 −a i+1 ,i ·µi,i +1

    3. rezolvarea sistemelor triunghiulare

    y1 = b1λ11

    pentru i = 2, nyi = bi −λ i,i − 1yi− 1 ·

    1λ ii

    xn = ynpentru i = n −1, 1

    xi = yi −µi,i +1 xi+1

    B. Programe MAPLE şi rezultate

    Observat ¸ia 2.3.1. Spre deosebire de metodele anterioare, unde ordineanecunoscutelor ı̂n sistem nu era esent¸ial ǎ, ı̂n cazul sistemelor tridiagonale,dacǎ se schimbǎ ordinea necunoscutelor, atunci matricea sistemului nu vamai tridiagonal ǎ. De aceea, este necesarǎ construirea unei proceduri,nedeterminate , care sǎ returneze necunoscutele sistemului ı̂n ordinea ı̂n careapar ele ı̂n ecuaţ ii.

    restart: with(linalg):

    tridiagonal:=proc(A::matrix)

    local i,j,n,a1,l,u;n:=rowdim(A);for i from 1 to n do

    for j from 1 to i-2 doif A[i,j]0 then

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    61/211

    2.3. SISTEME TRIDIAGONALE 65

    ERROR(‘matricea nu este tridiagonala!‘);fi;

    od;for j from i+2 to n do

    if A[i,j]0 thenERROR(‘matricea nu este tridiagonala!‘);

    fi;od;

    od;a1:=A;if a1[1,1]=0 then

    ERROR(‘factorizarea LU nu este aplicabila!‘);fi;for i from n by -1 to 2 do

    if det(a1)0 then a1:=delrows(delcols(a1,i..i),i..i);

    else ERROR(‘factorizarea LU nu este aplicabila!‘);fi;od;l:=matrix(n,n,0); u:=matrix(n,n,0);for i from 1 to n do

    u[i,i]:=1;od;for i from 2 to n do

    l[i,i-1]:=A[i,i-1];od;l[1,1]:=A[1,1];for i from 1 to n-1 do

    u[i,i+1]:=A[i,i+1]/l[i,i];l[i+1,i+1]:=A[i+1,i+1]-A[i+1,i]*u[i,i+1];

    od;RETURN(evalm(l), evalm(u));end:

    # procedura care returneaza necunoscutele sistemului# in ordinea in care apar in ecuatii

    nedeterminate:=proc(l::set(equation))local n,i,j,ops,opst;n:=nops(l);for i from 1 to n doops[i]:=[seq(op(op(l[i])[1])[j] /

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    62/211

    66 CAPITOLUL 2. REZOLVAREA SISTEMELOR LINIARE

    coeff(op(l[i])[1],op(indets(op(op(l[i] )[1])[j]))),j=1..nops(op(l[i])[1]))];

    od;opst:=ops[1];for i from 1 to n do

    for j from 1 to nops(ops[i]) doif not(ops[i][j] in opst) then

    opst:=[op(opst),ops[i][j]]fi;

    od;od;RETURN(opst);end:

    tridiagonalsist:=proc(l::set(equation))

    local eqm, opst, A, b, n, lu, L, U, i, s, j, aux, rez;n:=nops(l);opst:=nedeterminate(l);eqm:=genmatrix(l, opst, flag);A:=delcols(eqm,n+1..n+1);b:=col(eqm,n+1);lu:=tridiagonal(A);L:=lu[1];U:=lu[2];aux[1]:=b[1]/L[1,1];for i from 2 to n do

    aux[i]:=1/L[i,i]*(b[i]-L[i,i-1]*aux[i-1])od;rez[n]:=aux[n];for i from n-1 by -1 to 1 do

    rez[i]:=aux[i]-U[i,i+1]*rez[i+1];od;RETURN(seq(opst[i]=rez[i], i=1..n));end:

    debug(tridiagonalsist):

    tridiagonalsist({x+2*y=3,2*x-y+z=2, 3*y+2*z-t=4, -2*z+t=-1});

    {--> enter tridiagonalsist, args = {x+2*y = 3, 2*x-y+z = 2, 3*y+2*z-t= 4, -2*z+t = -1}

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    63/211

    2.3. SISTEME TRIDIAGONALE 67

    n := 4opst := [x, y, z, t ]

    eqm :=

    1 2 0 0 32 −1 1 0 20 3 2

    −1 4

    0 0 −2 1 −1

    A :=

    1 2 0 02 −1 1 00 3 2 −10 0 −2 1

    b := [3, 2, 4, −1]

    lu :=

    1 0 0 02 −5 0 00 3

    135

    0

    0 0 −2 313

    ,

    1 2 0 0

    0 1 −15

    0

    0 0 1 −5

    130 0 0 1

    L :=

    1 0 0 02 −5 0 00 3

    135

    0

    0 0 −2 313

    U :=

    1 2 0 0

    0 1 −15

    0

    0 0 1 −513

    0 0 0 1aux 1 := 3

    aux 2 := 45

    aux 3 := 813

    aux 4 := 1rez 4 := 1rez 3 := 1rez 2 := 1rez 1 := 1

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    64/211

    68 CAPITOLUL 2. REZOLVAREA SISTEMELOR LINIARE

    0 , 1 22 5 = 1 > 0 ,1 2 12 5 21 2 3

    = 2 > 0 ,

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    65/211

    2.4. FACTORIZAREA CHOLESKY 69

    matricea A este pozitiv denit ǎ. Aplicând factorizarea Cholesky avem:

    A =1 2 12 5 21 2 3

    =λ11 0 0λ21 λ22 0λ31 λ32 λ33

    ·λ11 λ21 λ31

    0 λ22 λ320 0 λ33

    .

    Folosind deniţ ia produsului a dou ǎ matrice, obţ inem:

    a11 = λ211 λ11 = 1a12 = λ11 ·λ21 λ21 = 2a13 = λ11 ·λ31 λ31 = 1a22 = λ221 + λ

    222 λ22 = 1

    a23 = λ21 ·λ31 + λ22 ·λ32 λ32 = 0a33 = λ231 + λ

    232 + λ

    233

    λ33 = √ 2.

    Se observǎ cǎ pentru g ǎsirea elementelor λij , i = 1 , n, j = i, n , este sucientsǎ calculǎm dezvolt ǎrile corespunzǎtoare elementelor aij , i = 1, n, j = i, n .

    B. Rezolvarea sistemelor triunghiularePentru a determina solut ¸ia sistemului iniţ ial, avem de rezolvat douǎ sis-

    teme triunghiulare:

    1 0 02 1 01 0 √ 2 ·

    y1y2y3

    =5

    117

    ,

    cu soluţiay1y2y3

    =51√ 2

    ,

    şi1 2 10 1 00 0 √ 2 ·

    xyz

    =51√ 2

    ,

    cu soluţiaxyz

    =211

    .

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    66/211

    70 CAPITOLUL 2. REZOLVAREA SISTEMELOR LINIARE

    2.4.3 Probleme propuseExercit ¸iul 2.4.2. Sǎ se gǎseascǎ soluţia sistemului urmˇator, folosind facto-rizarea Cholesky:

    3x + y + 3 z = 11

    x + y + 2 z = 63x + y + 4 z = 12.

    2.4.4 ImplementareA. Algoritm

    Date de intrare: un sistem de ecuaţiiDate de ieşire: soluţia sistemului

    Algoritm

    1. generarea matricei A a sistemului (simetric ǎ şi pozitiv denit ǎ) şi avectorului b

    • n = num ǎrul de ecuaţ ii ale sistemului (num ǎrul de linii ale matriceiA)2. factorizarea Cholesky

    λ11 = a11pentru i = 2, n

    pentru j = 1, i −1λ ij = 1λ jj a

    ij − j − 1

    k=1λ ik λ jk

    λ ii = a ii − i− 1k=1

    λ2ik

    3. rezolvarea sistemelor triunghiulare

    y1 = b1λ11

    pentru i = 2, n

    yi = bi −i− 1

    k=1

    λ ik ·yk · 1λ ii

    xn = ynλnn

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    67/211

    2.4. FACTORIZAREA CHOLESKY 71

    pentru i = n −1, 1xi = yi −

    n

    k= i+1

    λki ·xk · 1λ ii

    B. Programe MAPLE şi rezultate

    restart: with(linalg):

    desccholesky:=proc(A::matrix)local a1,n,l,i,s,j,k;n:=rowdim(A);a1:=A;for i from 1 to n do

    for j from 1 to n doif a1[i,j]a1[j,i] thenERROR(‘matricea nu este simetrica!‘)

    fi;od;

    od;if a1[1,1]0 then a1:=delrows(delcols(a1,i..i),i..i);else ERROR(‘factorizarea Cholesky nu este aplicabila!‘);fi;

    od;l:=matrix(n,n,0);l[1,1]:=A[1,1];for i from 2 to n do

    for j from 1 to i-1 dol[i,j]:=1/l[j,j]*(A[i,j]-sum(l[i,k]*l[j,k],k=1..j-1));

    od;l[i,i]:=sqrt(A[i,i]-sum(l[i,k]^2,k=1..i-1));od;

    RETURN(evalm(l));end:

    # returnarea necunoscutelor sistemului in ordinea in care# apar in ecuatii

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    68/211

    72 CAPITOLUL 2. REZOLVAREA SISTEMELOR LINIARE

    nedeterminate:=proc(l::list(equation))local n,i,j,ops,opst;n:=nops(l);for i from 1 to n doops[i]:=[seq(op(op(l[i])[1])[j]/

    coeff(op(l[i])[1],op(indets(op(op(l[i])[1])[j]))),j=1..nops(op(l[i])[1]))];

    od;opst:=ops[1];for i from 1 to n do

    for j from 1 to nops(ops[i]) doif not(ops[i][j] in opst) then

    opst:=[op(opst),ops[i][j]]fi;

    od;od;RETURN(opst);end:

    choleskysist:=proc(l::list(equation))local lst, eqm, A, b, n, lu, L, U,i,s,j,aux, rez, rfin;lst:=nedeterminate(l);eqm:=genmatrix(l, lst, flag);n:=nops(lst);A:=delcols(eqm,n+1..n+1);b:=col(eqm,n+1);lu:=desccholesky(A);L:=lu;U:=transpose(lu);for i from 1 to n do

    s:=0; for j from 1 to i-1 do s:=s+L[i,j]*aux[j] od;aux[i]:=1/L[i,i]*(b[i]-s)

    od;for i from n by -1 to 1 do

    s:=0; for j from i+1 to n do s:=s+U[i,j]*rez[j] od;

    rez[i]:=1/U[i,i]*(aux[i]-s)od;RETURN(seq(lst[i]=rez[i], i=1..n));end:

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    69/211

    2.4. FACTORIZAREA CHOLESKY 73

    debug(choleskysist):choleskysist([x+2*y+z=5, 2*x+5*y+2*z=11, x+2*y+3*z=7]);

    {--> enter choleskysist, args = [x+2*y+z = 5, 2*x+5*y+2*z = 11,x+2*y+3*z = 7]

    lst := [x, y, z ]

    eqm :=1 2 1 52 5 2 111 2 3 7

    n := 3

    A :=1 2 12 5 21 2 3

    b := [5, 11, 7]

    lu :=1 0 02 1 01 0 √ 2

    L := lu

    U :=1 2 10 1 00 0 √ 2

    s := 0aux 1 := 5

    s := 0s := 10

    aux 2 := 1s := 0s := 5s := 5

    aux 3 := √ 2s := 0

    rez 3 := 1s := 0s := 0

    rez 2 := 1

    s := 0s := 2s := 3

    rez 1 := 2

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    70/211

    74 CAPITOLUL 2. REZOLVAREA SISTEMELOR LINIARE

    v 2 = λ ·e1. (2.17)

    Pentru evitarea ambiguitˇ aţilor vom considera vectorul v dat de:

    v = a1 + sign (a11 ) · a1 · e1. (2.18)Propozit ¸ia 2.5.2. Oricare ar matricea simetricˇ a A, matricea P denitˇ a prin:

    P = I − 2 ·v ·vT

    v 2 (2.19)

    este simetricˇ a şi are proprietatea cˇ a elementele 2, 3, . . . , n de pe prima coloanˇ a a matricei P A sunt nule, unde vectorul v este dat de relat i̧a (2.18).

    Denit ¸ia 2.5.1. Se numeşte matrice Householder de ordin n−1 asociatˇ a matricei A şi se noteazˇ a cu P n − 1 o matrice de ordin n −1 de forma:P n − 1 = I n − 1 −

    2 ·v ·vT v 2

    (2.20)

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    71/211

    2.5. FACTORIZAREA HOUSEHOLDER 75

    unde: v = a1n − 1 + sign (a21) · a1n − 1 ·e1 este vectorul format cu componentele vectorului a1 care este prima coloanˇ a a matricei A, e1 = ( 1 , 0, . . . , 0

    n − 1)T şi

    I n − 1 este matricea unitate de ordin n −1.Propozit ¸ia 2.5.3. Matricea Hauseholder P n − 1 asociatˇ a unei matrice sime-trice A este simetricˇ a şi are proprietatea cˇ a matricea U 1 denitˇ a prin:

    U 1 =

    1 0 . . . 00

    P n − 10

    (2.21)

    este simetricˇ a şi vericˇ a relat ̧ia:

    A(1) = U 1 A U 1 =

    a11 α1 0 . . . 0α 1 a(1)22 a

    (1)23 . . . a

    (1)2n

    0 a(1)32 a(1)33 . . . a (1)3n· · · · · · · · · · · · · · ·0 a(1)n 2 a

    (1)n 3 . . . a

    (1)nn

    (2.22)

    Se considerǎ vectorul coloanǎ a2n − 2 cu ultimele n −2 elemente ale coloaneimatrice A(1) . Cu acest vector se construiȩste o matrice Householder de or-dinul n −2, P n − 2. Matricea U 2 denitǎ prin:

    U 2 =

    1 0 0 . . . 00 1 0 . . . 00 0... ... P n − 20 0

    (2.23)

    are proprietatea:

    A(2) = U 2 A(1) U 2 =

    a11 α1 0 0 . . . 0α1 a

    (1)22 α2 0 . . . 0

    0 α2 a(2)33 a

    (2)34 . . . a

    (2)3n

    · · · · · · · · · · · · · · ·0 0 a(2)n 3 a

    (2)n 4 . . . a

    (2)nn

    (2.24)

    Matricea P n − 2 a condus la obţinerea unei noi linii şi coloane a matricei tridi-agonale la care vrem sǎ reducem matricea A.

    Continu ând astfel prin n −1 transform ǎri, obţinem egalitatea: UAU = T ı̂n care T este matrice tridiagonalˇa.

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    72/211

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    73/211

    2.5. FACTORIZAREA HOUSEHOLDER 77

    Soluţ ia sistemului tridiagonal

    T y = U b

    este

    y =

    120 −10√ 5

    215 −6√ 5

    15

    ,

    iar soluţia sistemului iniţ ial este

    x = U y =

    2 + √ 53

    2 −√ 53−23

    ,

    adicǎ x = 2 + √ 5

    3 , y =

    2−√ 53

    z = −23

    .

    2.5.3 Probleme propuseExercit ¸iul 2.5.2. Sǎ se gǎseascǎ soluţiile urm ǎtoarelor sisteme folosind fac-torizarea Householder:

    a)

    x + 2y + z = 5

    2x −y + 3 z = 6x + 3y −2z = 3

    b)

    x + y −z + t = 3x + 2y + 3 z + t = 9−x + 3y + 2 t = 7x + y + 2 z = 5 .

    2.5.4 ImplementareA. Algoritm

    Date de intrare: un sistem de ecuaţiiDate de ieşire: soluţia sistemului, obţ inut ǎ folosind factorizarea House-

    holder

    Algoritmul constǎ din urm ǎtoarele etape:

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    74/211

    78 CAPITOLUL 2. REZOLVAREA SISTEMELOR LINIARE

    1. generarea matricei tridiagonale pentru i = 1 . . . n −2pentru l = 1 . . . n

    pentru m = 1 . . . n

    dacǎ m = l atunci uml = 1dacǎ m = l atunci uml = 0

    //Generˇ am vectorul v

    norm a = n j = i+1

    a2ij

    ei+1 = 1

    pentru j = i + 2 . . . n

    e j

    = 0

    pentru j = i + 1 . . . n

    v j = aij + sign(a i,i +1 ) ·norm a ·e jnorm v=

    n

    j = i+1

    v2 j

    //Generˇ am matricea U

    j = i + 1 . . . n

    k = i + 1 . . . n

    u jk = u jk −2 ·v j ·vk / norm v// D=AU

    m = 1 . . . n

    l = 1 . . . n

    dml =n

    k=1

    amk ·ukl//A=UD=UAU

    m = 1 . . . nl = 1 . . . n

    aml =n

    k=1

    umk ·dkl

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    75/211

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    76/211

    80 CAPITOLUL 2. REZOLVAREA SISTEMELOR LINIARE

    e:=vector(n,0);v:=vector(n,0);norma:= simplify(sqrt(sum(A[i,k1]^2, k1=i+1..n)));e[i+1]:=1;for j from i+1 to n do

    v[j]:=A[i,j]+signum(A[i,i+1])*norma*e[j]od;normv:=simplify(sum(v[k1]^2, k1=i+1..n));for j from i+1 to n do

    for k from i+1 to n doU[j,k]:=simplify(U[j,k]-2*v[j]*v[k]/normv);

    od;od;evalm(U);A:=simplify( multiply( U, multiply(A,U) ) );

    b:=simplify( multiply(U,b) );UD:=multiply(UD,U);od;lu:=tridiagonal(A);LL:=simplify(lu[1]);UU:=simplify(lu[2]);aux[1]:=simplify(b[1]/LL[1,1]);for i from 2 to n do

    aux[i]:=simplify(1/LL[i,i]*(b[i]-LL[i,i-1]*aux[i-1]))od;rez[n]:=aux[n];for i from n-1 by -1 to 1 do

    rez[i]:=simplify(aux[i]-UU[i,i+1]*rez[i+1]);od;rez:=simplify(multiply(UD,rez));RETURN(seq(opst[i]=rez[i], i=1..n));end:

    debug(householder):

    householder([x-y+2*z+2*t=0,-x+y+3*z=-1,2*x+3*y-z+2*t=2,2*x+2*z=1]);

    {--> enter householder, args = [x-y+2*z+2*t = 0, -x+y+3*z = -1,2*x+3*y-z+2*t = 2, 2*x+2*z = 1]

    n := 4opst := [x, y, z, t ]

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    77/211

    2.5. FACTORIZAREA HOUSEHOLDER 81

    eqm :=

    1 −1 2 2 0−1 1 3 0 −12 3 −1 2 22 0 2 0 1

    A :=1 −1 2 2−1 1 3 02 3 −1 22 0 2 0

    b := [0, −1, 2, 1]rez := [0, 0, 0, 0]

    UD :=

    0 0 0 00 0 0 00 0 0 00 0 0 0

    UD 1, 1 := 1UD 2, 2 := 1UD 3, 3 := 1UD 4, 4 := 1

    U :=

    0 0 0 00 0 0 00 0 0 00 0 0 0

    U 1, 1 := 1U 2, 2 := 1U 3, 3 := 1U 4, 4 := 1

    e := [0, 0, 0, 0]v := [0, 0, 0, 0]

    norma := 3e2 := 1

    v2 := −4v3 := 2v4 := 2

    normv := 24

    U 2, 2 := −13U 2, 3 :=

    23

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    78/211

    82 CAPITOLUL 2. REZOLVAREA SISTEMELOR LINIARE

    U 2, 4 := 23

    U 3, 2 := 23

    U 3, 3 := 23

    U 3, 4 := −13U 4, 2 :=

    23

    U 4, 3 := −13U 4, 4 :=

    23

    1 0 0 0

    0 −1

    323

    23

    0 2

    323

    −13

    0 2

    3−13

    23

    A :=

    1 3 0 0

    3 1

    949

    199

    0 4

    9169

    229

    0 19

    9229 −

    179

    b := 0, 73

    , 13

    , −23

    UD :=

    1 0 0 0

    0 −13

    23

    23

    0 2

    323

    −13

    0 2

    3−13

    23

    U :=0 0 0 00 0 0 00 0 0 00 0 0 0

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    79/211

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    80/211

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    81/211

    2.6. METODA JACOBI 85

    aux 3 := −3 (377 + 4 √ 377)751 (4 + √ 377)

    aux 4 := −9 (377 + 4 √ 377) (4 + √ 377)

    30160 (393 + 8 √ 377)rez 4 := −

    9 (377 + 4 √ 377) (4 + √ 377)30160 (393 + 8 √ 377)

    rez 3 := −3 (377 + 4 √ 377)377 (4 + √ 377)

    rez 2 := −940rez 1 :=

    2740

    rez :=2740

    , 15

    , −740

    , −116

    solve( {x-y+2*z+2*t=0,-x+y+3*z=-1,2*x+3*y-z+2*t=2,2*x+2*z=1 },> {x,y,z,t });

    {x = 2740

    , y = 15

    , z = −740

    , t = −116 }

    2.6 Metoda Jacobi2.6.1 Breviar teoretic

    Metoda Jacobi este o metodˇa iterativ ǎ de rezolvare a sistemelor liniare deforma

    Ax = b. (2.25)

    Matricea A se descompune ı̂n suma L + D + U , unde

    L =0 0 0 . . . 0a21 0 0 . . . 0

    a31 a32 0 . . . 0

    · · · · · · · · · · · · · · ·an 1 an 2 an 3 . . . 0(2.26)

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    82/211

    86 CAPITOLUL 2. REZOLVAREA SISTEMELOR LINIARE

    D =

    a11 0 0 . . . 00 a22 0 . . . 00 0 a33 . . . 0

    · · · · · · · · · · · · · · ·0 0 0 . . . ann(2.27)

    U =

    0 a12 a13 . . . a1n0 0 a23 . . . a2n

    · · · · ·· · ·· · ·· · · ·0 0 0 . . . an − 1,n0 0 0 . . . 0

    . (2.28)

    Se deneşte traiectoria Jacobi a vectorului x(0) ca ind vectorul

    x(k+1) = D − 1[b−(L + U )x(k)] k = 0 , 1, 2, . . . (2.29)

    Folosind teorema de convergenţ ǎ se studiaz ǎ dacǎ traiectoria Jacobi con-verge la soluţia x( ) a sistemului (2.25).Traiectoria Jacobi converge la soluţ ia x( ) a sistemului (2.25), dac ǎ şi

    numai dac ǎ raza spectral ǎ ρ a matricei

    M = −D − 1(L + U ) (2.30)este strict subunitarˇ a, adicǎ

    max{|λ| | det( M −λI n ) = 0 }< 1. (2.31)

    În caz de convergenţ ǎ, componentele x(k+1)1 , ..., x(k+1)n ale vectoruluix(k+1) , situat pe traiectoria Jacobi a vectorului x(0) , sunt date de relaţ iile:

    x(k+1)i = bi −n

    j =1 j = i

    a ij ·x(k) j ·

    1a ii

    , i = 1, 2, . . . , n ; k = 0, 1, . . . (2.32)

    2.6.2 Problemǎ rezolvatǎExercit ¸iul 2.6.1. Calculaţ i primii trei termeni ai traiectoriei Jacobi asociatevectorului (0 , 0, 0) pentru sistemul:

    5x −2y + 3 z = −1−3x + 9y + z = 22x −y −7z = 3.

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    83/211

    2.6. METODA JACOBI 87

    RezolvareSistemul se mai poate scrie sub forma Ax = b, unde:

    A =5 −2 3

    −3 9 12 −1 −7

    , b = −12

    3

    .

    Matricea A se descompune ı̂n suma L + D + U cu

    L =0 0 0

    −3 0 02 −1 0 , D =

    5 0 00 9 00 0 −7

    , U =0 −2 30 0 10 0 0

    .

    Vericarea condiţ iei de convergenţ ǎ a algoritmului presupune calculul valo-rilor proprii ale matricei

    M = −D− 1

    (L + U ) =

    0 2

    5−351

    3 0 −1

    927

    −17

    0

    Calculând maximul ı̂n modul al valorilor proprii ale matricei M , obţinem

    ρ(M ) = 0 .2673998083 < 1,

    şi deci algoritmul converge.Aplicǎm formulele (2.32), plecând de la x(0) = 0, y(0) = 0, z (0) = 0, obţ inemsuccesiv:

    x(1) =

    −0.2000000000

    y(1) = 0 .2222222222z (1) = −0.4285714286x(2) = 0 .1460317460y(2) = 0 .2031746032z (2) = −0.5174603174x(3) = 0 .1917460316y(3) = 0 .3283950617z (3) =

    −0.4158730159.

    Pentru comparat ¸ie, am rezolvat acest sistem folosind procedura solvefurnizat ǎ de Maple, iar rezultatele sunt:

    x = 0.1861198738, y = 0.3312302839, z = −0.4227129338.

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    84/211

    88 CAPITOLUL 2. REZOLVAREA SISTEMELOR LINIARE

    2.6.3 Probleme propuseExercit ¸iul 2.6.2. Sǎ se verice dacǎ se poate aplica metoda iterativˇa a luiJacobi, şi ı̂n caz armativ sˇa se gǎseascǎ primele 3 elemente ale şirului desoluţii parţ iale. Comparat¸i soluţia obţ inut ǎ cu soluţia exact ǎ:

    a) x + 3y = −22x + y = 6b)

    x + 2y + z = 13x −y + 5 z = 14x + y −z = −2

    2.6.4 ImplementareA. Algoritm

    Observat ¸ia 2.6.1. Deoarece metoda lui Jacobi este o metod ǎ iterativ ǎ, tre-buie specicat ǎ o condiţie de oprire a algoritmului. Algoritmul converge dacˇaşirul ( x(k)) este convergent. Convergent¸a acestui şir poate descrisˇa ı̂n modteoretic ı̂n diverse moduri. În practic ǎ, se foloseşte o variant ǎ a criteriuluilui Cauchy, şi anume: şirul ( x(k)) este convergent, dac ǎ

    x(k+1) −x(k) < εunde ε este o constant ǎ dat ǎ.

    În cazul nostru, vom considera c ǎ soluţiile sistemului au fost obţ inute cueroarea ε, adicǎ

    x(k+1)i [x

    ( )i −ε, x

    ( )i + ε].

    De aici rezult ǎ o condiţie de oprire a algoritmului:

    ni=1

    (x(k+1)i −x(k)i ) < ε√ n. (2.33)

    Date de intrare: un sistem de ecuaţii (o mulţ ime de ecuaţ ii), un punctiniţial, x(0) , o eroare ε.

    Date de ieşire: soluţia aproximativˇa a sistemului, obţinut ǎ ı̂n urmaaplicǎrii traiectoriei Jacobi vectorului x(0) pânǎ când este ı̂ndeplinitˇ a condiţia(2.33).

    Algoritmul constǎ ı̂n urmˇatoarele etape:

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    85/211

    2.6. METODA JACOBI 89

    1. generarea matricei A a sistemului şi a vectorului b

    • n - numǎrul de necunoscute (numˇarul de linii ale matricei A)2. generarea matricelor L, D , U şi vericarea convergenţ ei metodei:

    ρ(−D − 1(L + U )) < 13. construirea traiectoriei Jacobi

    repet ǎ

    x(k+1)i = bi −n

    j =1 j = i

    a ij ·x(k) j ·

    1a ii

    , i = 1 , n

    pânǎ când

    n

    i=1

    (x(k+1)i

    −x(k)i ) < ε√ n

    B. Programe MAPLE şi rezultate

    jacobi:=proc(eq::set(equation), init::vector, eps::float)local var, n, AA, A, b, l, d, u, i, j, m, lst, xo, test, k, x;var:=[op(indets(eq))];n:=nops(var);if vectdim(init)n then

    ERROR(‘numarul de necunoscute nu este egal cudimensiunea vectorului initial‘)

    fi;AA:=genmatrix(eq, var, flag);A:=delcols(AA,n+1..n+1);b:=col(AA,n+1);l:=matrix(n,n,0):u:=matrix(n,n,0):d:=matrix(n,n,0):for i from 1 to n do

    for j from 1 to i-1 do

    l[i,j]:=A[i,j];od;d[i,i]:=A[i,i];for j from i+1 to n do

    u[i,j]:=A[i,j];

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    86/211

    90 CAPITOLUL 2. REZOLVAREA SISTEMELOR LINIARE

    od;od;# conditia de convergenta m:=multiply(inverse(d),matadd(l,u,-1,-1));lst:=[eigenvals(m)];if evalf(max(seq(abs(lst[k]),k=1..nops(lst))))>=1 then

    ERROR(‘Algoritmul nu converge‘);fi;# algoritmul propriu-zisfor i from 1 to n do

    xo[i]:=init[i]od;test:=1;while test>=evalf(eps*sqrt(n)) do

    for i from 1 to n do

    x[i]:=evalf(1/A[i,i]*( b[i]-sum(A[i,k]*xo[k],k=1..n)+A[i,i]*xo[i] ));

    od;test:=evalf(sqrt( sum( (x[k]-xo[k])^2, k=1..n ) ));for i from 1 to n do

    xo[i]:=x[i];od;

    od;RETURN(seq(var[i]=x[i],i=1..n));end:

    debug(jacobi):

    jacobi({3*x+y=5, x+2*y=5}, vector(2,[0,0]),0.01);

    {--> enter jacobi, args = {3*x+y = 5, x+2*y = 5}, array(1 ..2,[(1)=0,(2)=0]), .1e-1

    var := [x, y ]n := 2

    AA := 3 1 51 2 5

    A := 3 11 2

    b := [5, 5]

  • 8/15/2019 Documents.tips Metode Numerice Probleme de Seminar Si Lucrari de Laborator

    87/211

    2.6. METODA JACOBI 91

    l := 0 00 0

    u := 0 00 0

    d := 0 00 0d1, 1 := 3u 1, 2 := 1l2, 1 := 1d2, 2 := 2

    m :=0 −1

    3

    −12

    0

    lst := [√ 66

    , −√ 6

    6 ]

    xo1 := 0xo2 := 0test := 1

    x 1 := 1 .666666667x 2 := 2 .500000000

    test := 3 .004626063xo1 := 1 .666666667xo2 := 2 .500000000

    x 1 := 0 .8333333