documents.tips metode numerice probleme de seminar si lucrari de laborator
Post on 05-Jul-2018
235 Views
Preview:
TRANSCRIPT
-
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
top related