Universitatea de Vest din Timi¸soara

Facultatea de Matematicˇa ¸si Informaticˇa
METODE NUMERICE
PROBLEME DE SEMINAR
S¸I LUCR
ˇ
ARI DE LABORATOR
Simina Mari¸s Liliana Brˇaescu
Timi¸soara
2007
Introducere
Procesul de restructurare al
ˆ
Invˇat ¸ˇamˆantului Superior din Romˆania ¸si trecerea acestuia pe
trei cicluri, a determinat la nivelul ˆıntregii t ¸ˇari elaborarea de noi planuri de ˆınvˇat ¸ˇamˆant
¸si de programe analitice adecvate.
Metode numerice - Probleme de seminar ¸si lucrˇari de laborator este un material
adit ¸ional la cursul de Metode numerice elaborat ˆın acord cu noile cerint ¸e, pe baza pro-
gramei analitice conceputˇa la nivelul Departamentului de Informaticˇa ¸si aprobatˇa ˆın Con-
siliul Profesoral al Facultˇat ¸ii de Matematicˇa ¸si Informaticˇa de la Universitatea de Vest
din Timi¸soara.
Problemele ¸si lucrˇarile de laborator prezentate ˆın aceastˇa carte se adreseazˇa ˆın primul
rˆand student ¸ilor de la Facultatea de Matematicˇa ¸si Informaticˇa, fiind abordate toate
temele din programa analiticˇa, la nivelul student ¸ilor Sect ¸iei de Informaticˇa aflat ¸i ˆın
semestrul al cincilea de studiu, oferind exemple ¸si detalii referitoare la metodele numerice
prezentate ˆın curs.
Lucrarea este structuratˇa pe ¸sapte capitole, primul dintre acestea fiind rezervat pentru
prezentarea unui set de cuno¸stint ¸e minimale de programare ˆın Maple. Capitolele 2-
7 corespund capitolelor din cursul de Metode numerice ¸si sunt organizate dupˇa cum
urmeazˇa:
• breviar teoretic
• problemˇa rezolvatˇa
• probleme propuse
• implementare
Prin aceastˇa lucrare, autorii pun la dispozit ¸ia cititorilor toate cuno¸stint ¸ele necesare
ˆın vederea construirii de algoritmi ¸si proceduri capabile sˇa ia ca argument un obiect
matematic ¸si sˇa returneze un rezultat final.
Autorii
Lista proiectelor
1. Metoda lui Gauss cu pivot total. Rezolvarea unui sistem
2. Inversa unei matrice. Rezolvarea unui sistem
3. Factorizarea LU Doolittle. Rezolvarea unui sistem
4. Factorizarea Cholesky. Rezolvarea unui sistem
5. Factorizarea Householder. Rezolvarea unui sistem
6. Metoda Gauss-Seidel. Comparat ¸ie cu metoda lui Jacobi ¸si cu solut ¸ia exactˇa
7. Metoda relaxˇarii succesive. Comparat ¸ie cu metoda Gauss-Seidel ¸si cu solut ¸ia exactˇa
8. Metoda lui Newton simplificatˇa ˆın dimensiunea n. Comparat ¸ie cu metoda lui New-
ton clasicˇa ˆın dimensiunea n
9. Metoda lui Newton simplificatˇa ˆın dimensiunea 1. Comparat ¸ie cu metoda lui New-
ton clasicˇa. Reprezentare intuitiva.
10. Polinomul lui Newton cu diferent ¸e finite la dreapta. Comparat ¸ie pentru o funct ¸ie
cunoscutˇa
11. Polinomul lui Newton cu diferent ¸e finite la stˆanga. Comparat ¸ie pentru o funct ¸ie
cunoscutˇa
12. Functia spline liniarˇa. Comparat ¸ie pentru o funct ¸ie cunoscutˇa
13. Polinoame Bernstein. Comparat ¸i cu polinomul Lagrange pentru o funct ¸ie cunos-
cutˇa.
14. Aproximarea derivatei prin diferent ¸e finite. Comparat ¸ie cu valoarea exactˇa ¸si ˆıntre
diferite valori ale pasului h.
15. Formule de tip Gauss de ordinul 3, 4. Comparat ¸ie cu rezultatul exact.
16. Metoda lui Taylor de ordinul 3. Comparat ¸ie cu rezultatul exact.
17. Metoda Runge-Kutta de ordinul 3. Comparat ¸ie cu rezultatul exact, pentru diverse
valori ale parametrilor.
18. Metoda Runge-Kutta de ordinul 4. Comparat ¸ie cu rezultatul exact, pentru diverse
valori ale parametrilor.
19. Metoda Adams-Bashforth de ordinul 3. Comparat ¸ie cu rezultatul exact, pentru
diverse valori ale parametrilor.
20. Metoda Adams-Bashforth de ordinul 4. Comparatie cu rezultatul exact, pentru
diverse valori ale parametrilor.
21. Metoda Adams-Bashforth de ordinul 5. Comparatie cu rezultatul exact, pentru
diverse valori ale parametrilor.
1
Cuprins
1 MapleV4 - scurtˇa introducere 4
1.1 Reguli generale de introducere a comenzilor . . . . . . . . . . . . . . . . 4
1.2 Pachete de programe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3 Constante, operatori ¸si funct ¸ii des utilizate . . . . . . . . . . . . . . . . . 7
1.4 Structuri de date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.5 Calcule cu matrice ¸si vectori. Pachetul linalg . . . . . . . . . . . . . . . 10
1.6 Grafice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.7 Elemente de programare . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2 Rezolvarea sistemelor liniare 21
2.1 Metoda lui Gauss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2 Factorizarea LU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.3 Sisteme tridiagonale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
2.4 Factorizarea Cholesky . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
2.5 Factorizarea Householder . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
2.6 Metoda Jacobi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
2.7 Metoda Gauss-Seidel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
2.8 Metoda relaxˇarii succesive . . . . . . . . . . . . . . . . . . . . . . . . . . 64
3 Ecuat ¸ii ¸si sisteme de ecuat ¸ii neliniare 68
3.1 Metoda punctului fix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
3.2 Metoda lui Newton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
4 Interpolare polinomialˇa. Funct ¸ii spline 83
4.1 Polinomul lui Newton cu diferent ¸e divizate . . . . . . . . . . . . . . . . . 83
4.2 Polinomul de interpolare Lagrange . . . . . . . . . . . . . . . . . . . . . 92
4.3 Interpolare spline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
4.4 Polinoame Bernstein . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
5 Derivare numericˇa 107
5.1 Aproximarea derivatei prin diferent ¸e finite . . . . . . . . . . . . . . . . . 107
5.2 Aproximarea derivatei . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
6 Integrare numericˇa 112
6.1 Formule de tip Newton-Cotes . . . . . . . . . . . . . . . . . . . . . . . . 112
6.2 Formule de tip Gauss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
2
7 Ecuat ¸ii diferent ¸iale 118
7.1 Metoda diferent ¸elor finite . . . . . . . . . . . . . . . . . . . . . . . . . . 118
7.2 Metoda lui Taylor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
7.3 Metoda Runge-Kutta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
7.4 Metoda Adams-Bashforth . . . . . . . . . . . . . . . . . . . . . . . . . . 132
7.5 Metoda Adams-Moulton . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
7.6 Metoda predictor-corector . . . . . . . . . . . . . . . . . . . . . . . . . . 137
7.7 Probleme la limitˇa liniare . . . . . . . . . . . . . . . . . . . . . . . . . . 141
7.8 Metoda colocat ¸iei ¸si metoda celor mai mici pˇatrate . . . . . . . . . . . . 147
3
Capitolul 1
MapleV4 - scurtˇa introducere
Maple este un sistem de calcul algebric (CAS) dezvoltat de firma Maplesoft
(http://www.maplesoft.com), care poate fi utilizat ˆın:
1. calcule simbolice;
2. calcule numerice;
3. programarea unor metode numerice;
4. reprezentˇari grafice.
ˆ
In cele ce urmeazˇa, vom prezenta principalele elemente necesare ˆın programarea unor
metode numerice, corespunzˇatoare softului MapleV4.
1.1 Reguli generale de introducere a comenzilor
Un document MapleV4 poate avea patru tipuri de cˆampuri:
1. comenzi Maple (introduse de cˇatre utilizator);
2. rezultate Maple (rˇaspunsuri ale CAS-ului la comenzile introduse);
3. grafice (rˇaspunsuri ale CAS-ului);
4. texte (introduse de cˇatre utilizator).
ˆ
In continuare, vom prezenta cˆateva reguli de introducere a comenzilor.
1. Orice comandˇa se terminˇa cu ; (dacˇa dorim sˇa afi¸seze rezultatul) sau : (dacˇa nu
dorim ca rezultatul sˇa fie afi¸sat). De exemplu:
> sin(Pi);
0
> 1+3:
4
2. Asignarea se face cu := , iar dezasignarea se face prin asignarea numelui variabilei.
De exemplu, putem avea secvent ¸a:
> x:= 7;
x := 7
> x:=x+1:
> x;
8
> x:=’x’;
x :=

x

> x;
x
3. Comentariile sunt precedate de caracterul #. De exemplu:
> x:=3; # se atribuie lui x valoarea 3
x := 3
4. Maple face diferent ¸a ˆıntre litere mici ¸si litere mari:
> x:=3; X:=5; a:=X-x;
x := 3
X := 5
a := 2
5. Secvent ¸ele sunt scrise ˆıntre paranteze rotunde, ( ), listele ˆıntre paranteze pˇatrate, [
], iar mult ¸imile ˆıntre acolade, {}. De exemplu:
> secv:=(1,2,3); lista:=[2,1,2,3]; multime:={2,1,2,3};
secv := 1, 2, 3
lista := [2, 1, 2, 3]
multime := {1, 2, 3}
6. Argumentele unei funct ¸ii se pun ˆıntre paranteze rotunde, () , iar indicii ˆıntre paran-
teze pˇatrate, [] .
> a:=cos(Pi); b:=lista[2];
a := −1
b := 1
7. Procentul, % , face referire la ultima comandˇa executatˇ a anterior. De exemplu:
> a:=2;
a := 2
> b:=%+1;
b := 3
5
8. Dacˇa rezultatul furnizat de Maple este identic cu comanda introdusˇa (Maple rˇaspunde
prin ecou la comandˇa), atunci aceasta aratˇa cˇa Maple nu poate interpreta comanda
introdusˇa. Pentru a remedia situat ¸ia, verificat ¸i dacˇa at ¸i introdus corect comanda
sau dacˇa nu cumva funct ¸ia utilizatˇa 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 pentru rezolvarea unei
probleme noi sˇa ˆıncepem cu instruct ¸iunea
> restart;
1.2 Pachete de programe
Pachetele sunt colect ¸ii de funct ¸ii care permit efectuarea de calcule specifice. Apelarea
lor se face cu ajutorul comenzii with(nume_pachet). Pentru a apela o anumitˇa funct ¸ie
dintr-un pachet, se folose¸ste sintaxa:
pachet[’functie’](argumente)
Printre cele mai utilizate pachete sunt:
plots - pentru reprezentˇari grafice;
DEtools - pentru rezolvarea ecuat ¸iilor diferent ¸iale;
linalg - pentru rezolvarea unor probleme de algebrˇa liniarˇa;
student - pentru analizˇa matematicˇa.
De exemplu, la apelarea pachetului grafic, se obt ¸ine lista tuturor funct ¸iilor apelabile:
> 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]
6
1.3 Constante, operatori ¸si funct ¸ii des utilizate
Constantele folosite de Maple sunt:
Constantˇa Semnificat ¸ie
false ”fals”
true ”adevˇarat”
gamma constanta lui Euler
infinity +∞
Catalan constanta lui Catalan
Fail valoare de adevˇar necunoscutˇa
Pi π
I unitatea imaginarˇa
NULL secvent ¸a vidˇa
Operatorii folosit ¸i frecvent sunt:
Operator Sintaxˇa Semnificat ¸ie
+, - a+b, a-b suma a + b (diferent ¸a a −b)
* a*b, 2*a produsul a · b, sau 2a
/ a/b cˆatul
a
b
^, ** a^b, a**b puterea a
b
! 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 ecuat ¸ia a = b
.. x=a..b a ≤ x ≤ b
and, or, xor, operatori logici
implies, not
Funct ¸ii folosite frecvent ˆın Maple:
Funct ¸ie Sintaxˇa Semnificat ¸ie
sin, cos, tan, cot sin(x) , ... funct ¸ii trigonometrice
arcsin, arctan, arccos arctan(x), ...
ln, log10 ln(x), log10(x) logaritmi
exp exp(x), exp(1) funct ¸ia exponent ¸ialˇa
sqrt sqrt(x) radical
abs abs(x) modul
7
1.4 Structuri de date: secvent ¸e, liste, mult ¸imi, ¸siruri
de caractere
1.4.1 Secvent ¸e
O secvent ¸ˇa este o ˆın¸siruire de expresii, separate prin virgule. Existˇa mai multe moduri
de a defini o secvent ¸ˇa:
a. direct:
> s:=1,2,3,4; t:=(a,b,c);
s := 1, 2, 3, 4
t := a, b, c
b. cu ajutorul funct ¸iei seq:
> seq(3*x, x=2..7);
6, 9, 12, 15, 18, 21
c. cu ajutorul unui ciclu for (vezi sect ¸iunea 1.7.1)
Cu ajutorul funct ¸iilor min ¸si max se poate calcula minimul, respectiv maximul unei
secvent ¸e.
> min(s); max(s,2,15);
3
15
1.4.2 Liste
O listˇa este o secvent ¸ˇa de expresii, scrisˇa ˆıntre paranteze pˇatrate, [ ]. De exemplu, 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 afla numˇarul de operanzi din listˇa cu ajutorul funct ¸iei nops:
> nops(ll);
11
Al n-lea element din listˇa poate fi afi¸sat cu una din comenzile op(n,ll) sau ll[n]:
> aa:=ll[3]; bb:=op(9,ll);
aa := 5
bb := a
Funct ¸ia member(elem, ll) returneazˇa true dacˇa elementul respectiv se aflˇa ˆın listˇa ll,
¸si false ˆın caz contrar:
> member(d, ll);
false
Lista vidˇa este desemnatˇa prin []:
> lista:=[];
lista := [ ]
Se poate adˇauga un element nou la lista ll astfel: [op(ll),elem]. De exemplu:
> lista:=[op(lista), d,e,f];
lista := [d, e, f]
Se poate ¸sterge al n-lea element din listˇa ll astfel: subsop(n=NULL,ll). De exemplu:
> lista:=subsop(2=NULL, lista);
8
lista := [d, f]
1.4.3 Mult ¸imi
O mult ¸ime este o secvent ¸ˇa de expresii, scrisˇa ˆıntre acolade, {}, ˆın care fiecare element
figureazˇa o singurˇa datˇa. De exemplu:
> ll:={1,2,5,2,4,2,7,2,a,2,c};
ll := {1, 2, 4, 5, 7, a, c}
Adˇaugarea unui nou element la mult ¸ime, sau ¸stergerea elementului de pe pozit ¸ia n se
face la fel ca la liste.
Mult ¸imea vidˇa este desemnatˇa prin {}.
Reuniunea a douˇa mult ¸imi se face utilizˆand operatorul union:
> s:={1,2,3} : t:={2,3,4} :
> s union t;
{1, 2, 3, 4}
Intersect ¸ia a douˇa mult ¸imi se realizeazˇa cu ajutorul operatorului intersect:
> s intersect t;
{2, 3}
Diferent ¸a a douˇa mult ¸imi se realizeazˇa utilizˆand operatorul minus:
> s minus t;
{1}
> s minus s;
{}
1.4.4 S¸iruri de caractere
S¸irurile de caractere sunt delimitate de apostrof invers,‘, dupˇa cum urmeazˇa:
> ‘acesta este un sir‘;
acesta este un sir
S¸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 4
Atent ¸ie! La concatenarea unui ¸sir de cifre, se obtine un ¸sir de caractere, nu un numˇar:
> a:=cat(5,7,9); b:=52;
a :=579
b := 52
> whattype(a); # afla tipul expresiei a
symbol
> whattype(b); # afla tipul expresiei b
integer
> a+b;
a :=579+52
> whattype(a+b); # afla tipul expresiei a+b
symbol
9
1.5 Calcule cu matrice ¸si vectori. Pachetul linalg
Cu ajutorul cuvˆantului-cheie array se pot defini vectori ¸si matrice.
Un vector se define¸ste ˆın urmˇatorul mod:
> v:=array(1..dim_vect);
Elementele unui vector se pot defini unul cˆate unul, sau printr-un ciclu for (vezi
sect ¸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;
v
1
:= a
v
2
:= b
v
3
:= {a, b}
v
4
:= 3
> evalm(v); # evalueaza valoarea lui v
[a, b, {a, b}, 3]
O matrice se define¸ste astfel:
> M:=array(1..nr_rand, 1..nr_col);
Elementele unei matrice se pot defini unul cˆate unul, sau printr-un ciclu for (vezi
sect ¸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 a
3 { }

Un alt mod de a defini matrice ¸si vectori, precum ¸si de a efectua operat ¸ii specifice cu
aceste obiecte, este folosirea pachetului linalg. Pachetul linalg se ˆıncarcˇa astfel:
>with(linalg);
Warning, the protected names norm and trace have been
redefined 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,
10
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 define¸ste 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 2
3 4
5 6
¸
¸
dar ¸si
> 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 5

Elementul a
ij
se scrie a[i,j]. Astfel, pentru matricea a din exemplul anterior, putem
avea:
> a[3,1];
5
Un vector se define¸ste 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]
sau
f:=x-> 2*x+1;
f := x →2x + 1
w:=vector(5,f); # adica w[i]=f(i)
w := [3, 5, 7, 9, 11]
Elementul i al vectorului v, v
i
, se scrie v[i]. Astfel, pentru vectorul v din exemplul
anterior, putem avea:
> v[3];
8
Redˇam mai jos cele mai utilizate funct ¸ii din pachetul linalg, ˆımpreunˇa cu descrierea
lor. Pentru mai multe detalii referitoare la aceste funct ¸ii, precum ¸si la celelalte funct ¸ii
din pachetul linalg, se poate consulta pagina de help referitoare la pachetul linalg.
11
Funct ¸ie Descriere
addcol(A,c1,c2,m) ˆınlocuie¸ste coloana c2 a matricei A cu
m*c1+c2
addrow(A,r1,r2,m) ˆınlocuie¸ste linia r2 a matricei A cu
m*r1+r2
adj(A), adjoint(A) calculeazˇa matricea adjunctˇa a matricei
A
angle(u,v) calculeazˇa unghiul vectorilor u ¸si v
augment(A,B) concateneazˇa (alˇaturˇa) matricile A ¸si B
pe orizontalˇa
backsub(U,b) rezolvˇa sistemul Ux=b, prin substitut ¸ie
inversa, unde U este o matrice superior
triunghiularˇa
band(b,n) construie¸ste o matrice n x n care are
pe diagonala principalˇa elementele vec-
torului b, iar celelalte elemente sunt
nule
cholesky(A) efectueazˇa descompunerea Cholesky a
matricei A
col(A,i), col(A,i..k) extrage coloana i, respectiv coloanele i
pˆanˇa la k, din matricea A
coldim(A) returneazˇa numˇarul de coloane ale ma-
tricei A
crossprod(u,v) returneazˇa produsul vectorial al vecto-
rilor u ¸si v
delcols(A,r..s) ¸sterge coloanele de la r la s din ma-
tricea A
delrows(A,r..s) ¸sterge liniile de la r la s din matricea A
det(A) calculeazˇa determinantul matricei A
diverge(f) calculeazˇa divergent ¸a vectorului f
dotprod(u,v) calculeazˇa produsul scalar al vectorilor
u ¸si v
exponential(A) calculeazˇa e
A
extend(A,m,n,x) adaugˇa m linii ¸si n coloane matricei A,
init ¸ializate cu x
forwardsub(L,b) rezolvˇa sistemul Lx=b prin substitut ¸ie
ˆınainte, unde L este o matrice inferior
triunghiularˇa
gausselim(A) efectueazˇa eliminarea gaussianˇa cu
semipivot asupra matricei A
continuare pe pagina urmˇatoare
12
Pachetul linalg - continuare
Funct ¸ie Descriere
geneqns(A,x) genereazˇa un sistem de ecuat ¸ii pornind
de la matricea A ¸si vectorul necunos-
cutelor x
genmatrix(sist, var) genereazˇa matricea coeficient ¸ilor sis-
temului sist, in raport cu multimea
variabilelor var
grad(expr, vect) calculeazˇa gradientul expresiei expr, in
funct ¸ie de variabilele vect
inverse(A) calculeazˇa inversa matricei A
matadd(A,B,c1,c2) calculeazˇa c1*A+c2*B
minor(r,c) calculeazˇa minorul de ordin (r,c)
(eliminˇa linia r ¸si coloana c) din ma-
tricea A
mulcol(A,c,expr) multiplicˇa coloana c a matricei A cu ex-
presia expr
mulrow(A,r,expr) multiplicˇa linia r a matricei A cu expre-
sia expr
multiply(A,B) efectueazˇa ˆınmult ¸irea matricelor A ¸si B
norm(A) calculeazˇa norma matricei A
normalize(v) calculeazˇa versorul vectorului v
rank(A) calculeazˇa rangul matricei A
row(A,i), row(A,i..j) extrage linia i, respectiv liniile de la i
la j, ale matricei A
rowdim(A) returneazˇa numˇarul de linii din ma-
tricea A
scalarmult(A,s) ˆınmult ¸e¸ste toate elementele matricei A
cu scalarul s
stack(A,B) concateneazˇa matricele A ¸si B pe verti-
calˇa
submatrix(A,r1..r2,c1..c2) extrage o submatrice a matricei A, ˆıntre
liniile r1, r2, ¸si coloanele c1, c2
subvector(A,r1..r2) extrage un subvector al vectorului A, de
la rangul r1 la rangul r2
swapcol(A,c1,c2) interschimbˇa coloanele c1 ¸si c2 ale ma-
tricei A
swaprow(A,r1,r2) interschimbˇa liniile r1 ¸si r2 ale matricei
A
trace(A) calculeazˇa urma matricei A
vectdim(v) returneazˇa dimensiunea vectorului v
1.6 Grafice
Graficul unei funct ¸ii se realizeazˇa folosind comanda plot, a cˇarei sintaxˇa este
plot(functie, x=x_min..x_max, y_min..y_max)
13
unde argumentul y_min..y_max este opt ¸ional.
De exemplu, putem avea:
> plot(sin(x), x=-5..5);
–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);
14
–1
–0.5
0
0.5
1
–4 –2 2 4
x
Mai multe detalii despre grafice se pot gˇasi accesˆand pagina de help referitoare la
instruct ¸iunea plot, sau la pachetul plots.
1.7 Elemente de programare
1.7.1 Condit ¸ionarea ¸si ciclarea
A. Condit ¸ionarea
Sintaxa unei instruct ¸iuni condit ¸ionale este
if CONDITIE then EXPRESIE
[ elif CONDITIE then EXPRESIE ]
[ else EXPRESIE ]
fi
Instruct ¸iunile puse ˆıntre paranteze pˇatrate, [ ], sunt opt ¸ionale.
De exemplu, putem avea secvent ¸a:
> if a<0 then -a else a fi; # pentru calculul modulului
pentru a returna modulul numˇarului a.
Un alt exemplu este dat de secvent ¸a:
> if x<0 then -1 elif x=0 then 0 else 1 fi; # functia signum
pentru a returna semnul unui numˇar (funct ¸ia sgn).
B. Ciclarea
O instruct ¸iune repetitivˇa poate avea una din urmˇatoarele douˇa sintaxe:
[ for CONTOR ] [ from EXPR ] [ by EXPR ] [ to EXPR ]
[ while EXPR ]
do INSTRUCTIUNI od;
15
sau
[ for CONTOR ] [ in EXPR ] [ while EXPR ]
do INSTRUCTIUNI od;
unde:
- from indicˇa punctul de plecare ˆın iterat ¸ie (dacˇa este omis, valoarea sa implicitˇa este
1);
- by indicˇa pasul contorului (dacˇa este omis, se considerˇa implicit cˇa are valoarea 1);
- to indicˇa punctul de oprire a iterat ¸iei (dacˇa este omis, se considerˇa implicit cˇa are
valoarea +∞ ¸si se obt ¸ine o buclˇa infinitˇa);
- while indicˇa o expresie booleanˇa, care trebuie sˇa poatˇa fi evaluatˇa ca adevˇaratˇa sau
falsˇa;
- in indicˇa elementele succesive ale expresiei EXPR.
De exemplu, pentru a scrie toate numerele pare de la 6 la 100 putem folosi:
> for i from 6 by 2 to 100 do print(i) od;
Cu ajutorul buclei for se pot defini secvent ¸e, liste, mult ¸imi, vectori sau matrice.
> s:=NULL;
for i from 1 to 3 do s:=s,2*i+1 od; # definirea unei secvente
s :=
s := 3
s := 3, 5
s := 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 vectorului
for i from 1 to 3 do v[i]:=i^3-i^2+1 od; # definirea elem vect
evalm(v); # vizualizarea vectorului
v := array(1..3, [ ])
v
1
:= 1
v
2
:= 5
v
3
:= 19
[1, 5, 19]
M:=array(1..3,1..4); # definirea matricei
M := array(1..3, 1..4, [ ])
> for i from 1 to 3 do # definirea elem matricei
for j from 1 to 4 do
M[i,j]:=i^j
od;
od;
> evalm(M);
16

1 1 1 1
2 4 8 16
3 9 27 81
¸
¸
Putem afi¸sa elemetele unei liste (secvent ¸e, mult ¸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 condit ¸ionare ¸si de ciclare se pot gasi accesˆand
pagina de help referitoare la acestea.
1.7.2 Funct ¸ii ¸si proceduri
O funct ¸ie poate fi definitˇa cu ajutorul operatorului ->. Putem defini funct ¸ii de o variabilˇa
sau funct ¸ii de mai multe variabile.
> f:=x->x^2+1;
f := x →x
2
+ 1
> g:=(x,y)->x^2+y;
g := (x, y) →x
2
+ y
> f(3);
10
> g(3,4);
13
> g(4,3);
19
O procedurˇa este un grup de instruct ¸iuni, variabile ¸si constante. Sintaxa este:
proc (ARGUMENTE)
local VARIABILE_LOCALE;
global VARIABILE_GLOBALE;
options OPTIUNI;
description SIR_DE_CARACTERE;
INSTRUCTIUNI;
end;
O procedurˇa returneazˇa ultimul rezultat obt ¸inut. Pentru a fort ¸a returnarea unui alt
rezultat, se folose¸ste RETURN. De asemenea, pentru a returna un mesaj de eroare, se
folose¸ste ERROR.
De exemplu, putem defini procedura:
> modul:=proc(a) if a<0 then -a else a fi; end;
modul := proc(a) if a < 0 then −a else a end if end proc
pe care o putem apela astfel:
> modul(-3);
3
Un alt exemplu de procedurˇa este urmˇatorul:
17
> ec2:=proc(a,b,c)
local delta,x1,x2;
description ‘Rezolvarea ecuatiei de gradul 2‘;
delta:=b^2-4*a*c;
if delta>0 then
x1:=(-b+sqrt(delta))/(2*a);
x2:=(-b-sqrt(delta))/(2*a);
RETURN(x1,x2);
elif delta=0 then RETURN(-b/(2*a));
else
RETURN(‘ecuatia nu ere solutii reale‘);
fi;
end:
care produce urmˇatoarele rezultate:
> ec2(1,6,9); # ecuatia x^2+6*x+9=0
−3
> ec2(1,2,9); # ecuatia x^2+2*x+9=0
ecuatia nu are solutii reale
> ec2(1,2,-3); # ecuatia x^2+2*x-3=0
1, −3
Pentru a defini tipul unui argument, se folose¸ste sintaxa argument::tip. De exemplu,
sˇa luˇam urmˇatoarea procedurˇa ¸si situat ¸iile care pot apˇarea:
> # 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ˇatˇat ¸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ˇatorul rezultat:
> determinant1(2);
Error, (in determinant1) argumentul trebuie sa fie matrice!!!
Se mai poate defini argumentul A ca fiind de tipul matrice:
> determinant3:=proc(A::matrix) RETURN(det(A)) end:
¸si se obt ¸ine urmˇatorul rezultat:
> determinant3(2);
Error, invalid input: determinant3 expects its 1st argument, A,
to be of type matrix, but received 2
18
Mai multe detalii despre tipurile existente se pot gˇasi accesˆand pagina de help (cuvˆantul
cheie este type).
Un alt exemplu este procedura rdc, procedurˇa pentru calculul lui
1

x
:
> rdc:=proc(x)
if x<0 then ERROR(‘numar negativ!‘)
elif x=0 then RETURN(infinity)
else simplify(x^(-1/2));
fi;
end;
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);
1
2
Pentru a putea urmˇari execut ¸ia unei proceduri, se folose¸ste debug, iar pentru a stopa
urmˇarirea, se folose¸ste 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/y
RETURN(y + z) end proc
> debug(f);
f
> f(2,4);
19
{--> enter f, args = 2, 4
y := 4
z :=
1
4
<-- exit f (now at top level) = 17/4}
17
4
> f(0,1);
{--> enter f, args = 0, 1
y :=
1
2
z := 2
<-- exit f (now at top level) = 5/2}
5
2
undebug(f)
f
> f(10,20);
401
20
Alte detalii despre funct ¸ii ¸si proceduri, precum ¸si despre opt ¸iunile debug ¸si undebug,
putet ¸i gˇasi pe paginile de help referitoare la acestea.
20
Capitolul 2
Rezolvarea sistemelor liniare
ˆ
In acest capitol vom prezenta metode de rezolvare a sistemelor liniare de tip Cramer
(numˇarul de ecuat ¸ii este egal cu numˇarul de necunoscute, ¸si determinantul matricei sis-
temului este nenul):

a
11
x
1
+ a
12
x
2
+ . . . + a
1n
x
n
= b
1
a
21
x
1
+ a
22
x
2
+ . . . + a
2n
x
n
= b
2
.....................................
a
n1
x
1
+ a
n2
x
2
+ . . . + a
nn
x
n
= b
n
(2.1)
ˆın care a
ij
¸si b
i
sunt numere reale date, i = 1 . . . n, j = 1 . . . n, iar x
1
, x
2
, . . . , x
n
sunt
numere reale necunoscute.
Sistemul (2.1) se poate scrie matriceal sub forma:
Ax = b
unde: A = (a
ij
)
i,j=1,n
, b = (b
1
, b
2
, . . . , b
n
)
T
, x = (x
1
, x
2
, . . . , x
n
)
T
.
Dacˇa matricea A este nesingularˇa, sistemul Ax = b are solut ¸ie unicˇa:
x = A
−1
b.
Deoarece ˆın cele mai multe cazuri matricea A are numˇar mare de linii ¸si coloane, iar
calculul matricei A
−1
este dificil ¸si acumuleazˇa erori, se impun metode directe ¸si metode
iterative pentru rezolvarea acestor sisteme.
2.1 Metoda lui Gauss
2.1.1 Breviar teoretic
Metoda lui Gauss presupune transformarea sistemului Ax = b ˆıntr-un sistem superior
triunghiular, ¸si apoi rezolvarea acestuia prin substitut ¸ie inversˇa.
Construct ¸ia sistemului superior triunghiular se face astfel: la pasul k se eliminˇa
x
k
din ecuat ¸iile k + 1, ..., n, prin ˆınmult ¸irea ecuat ¸iei k cu
m
ik
= −
a
ik
a
kk
(elementul a
kk
se nume¸ste pivot) ¸si adunarea acestora la ecuat ¸ia i (i > k).
ˆ
In funct ¸ie de alegerea pivotului, existˇa urmˇatoarele variante ale metodei lui Gauss:
21
1. metoda lui Gauss clasicˇa - ˆın care la fiecare pas, pivotul este elementul a
kk
,
k = 1, n;
2. metoda lui Gauss cu semipivot - ˆın care la fiecare pas, se alege ca pivot elemen-
tul a
ik
maxim ˆın valoare absolutˇa pe coloanˇa, pentru i > k, permutˆandu-se linia k
cu linia i;
3. metoda lui Gauss cu pivot total - ˆın care la fiecare pas, se alege ca pivot
elementul maxim atˆat pe linie, cˆat ¸si pe coloanˇa, pentru i > k, j > k, permutˆandu-
se linia k cu linia i ¸si coloana k cu coloana j;
ˆ
In acest fel, sistemul (2.1) se reduce la forma superior triunghiularˇa

¸
¸
¸
¸
¸
˜ a
11
˜ a
12
... ˜ a
1,n−2
˜ a
1,n−1
˜ a
1,n
0 ˜ a
22
... ˜ a
2,n−2
˜ a
2,n−1
˜ a
2,n
... ... ... ... ... ...
0 0 ... 0 ˜ a
n−1,n−1
˜ a
n−1,n
0 0 ... 0 0 ˜ a
nn

·

¸
¸
¸
¸
¸
x
1
x
2
...
x
n−1
x
n

=

¸
¸
¸
¸
¸
˜
b
1
˜
b
2
...
˜
b
n−1
˜
b
n

(2.2)
iar rezolvarea sistemului (2.2) se face prin substitut ¸ie inversˇa:
x
n
=
˜
b
n
˜ a
nn
(2.3)
x
k
=

˜
b
k

n
¸
j=k+1
˜ a
kj
· x
j

·
1
˜ a
kk
, k = n −1, n −2, . . . , 1
Observat ¸ia 2.1.1. Cu ajutorul eliminˇarii gaussiene se poate determina ¸si inversa unei
matrice. Redˇam ˆın continuare algoritmul de aflare a inversei unei matrice A.
1. generarea matricei B prin concatenarea matricelor A (de dimensiune n) cu matricea
I
n
2. pentru i = 1, n
m = B
ii
pentru j = 1, 2n
B
ij
=
B
ij
m
pentru j = 1, n, j = i
m
1
= B
ji
pentru k = 1, 2n
B
jk
= B
jk
−m
1
B
ik
3. prin ¸stergerea primelor n coloane ale matricei B astfel transformate, se obt ¸ine in-
versa matricei A
22
2.1.2 Probleme rezolvate
Exercit ¸iul 2.1.1. Sˇa se rezolve urmˇatorul sistem folosind cele trei variante ale eliminˇarii
Gauss:

x + y + z = 6
2x −y + 3z = 9
x + 4y + z = 12.
Matricea sistemului este
A =

¸
1 1 1
2 −1 3
1 4 1

,
iar
¯
A este matricea sa extinsˇa:
¯
A = (A, b) =

¸
1 1 1 6
2 −1 3 9
1 4 1 12

.
Deoarece numˇarul ecuat ¸iilor este egal cu cel al necunoscutelor ¸si
det A = −3 = 0,
sistemul este compatibil determinat (de tip Cramer), ¸si deci metoda eliminˇarii a lui Gauss
este aplicabilˇa.
ˆ
In continuare, pentru a efectua operat ¸iile asupra matricei extinse a sistemului vom
nota linia i cu L
i
, iar coloana j cu C
j
.
Rezolvare utilizˆand metoda lui Gauss clasicˇa
A. Construct ¸ia sistemului superior triunghiular
Pasul 1
• pivot: a
11
= 1
• m
21
= −
2
1
= −2
• m
31
= −
1
1
= −1

¸
1 1 1 6
2 −1 3 9
1 4 1 12

L
2
→L
2
+m
21
L
1
L
3
→L
3
+m
31
L
1
−−−−−−−−−→

¸
1 1 1 6
0 −3 1 −3
0 3 0 6

Pasul 2
• pivot: a
22
= −3
• m
32
= −
3
−3
= 1

¸
1 1 1 6
0 −3 1 −3
0 3 0 6

L
3
→L
3
+m
32
L
2
−−−−−−−−−→

¸
1 1 1 6
0 −3 1 −3
0 0 1 3

23
ˆ
In acest moment am ajuns la un sistem de forma
˜
Ax =
˜
b, echivalent cu sistemul init ¸ial,
ˆın care matricea
˜
A este superior triunghiularˇa, unde:
˜
A =

¸
1 1 1
0 −3 1
0 0 1

, x =

¸
x
y
z

,
˜
b =

¸
6
−3
3

.
B. Rezolvarea sistemului superior triunghiular
Prin metoda substitut ¸iei inverse, avem:
z =
3
1
y =
1
−3
(−3 −1 · z)
x =
1
1
(6 −1 · y −1 · z),
de unde obt ¸inem solut ¸ia sistemului: x = 1, y = 2, z = 3.
Rezolvare cu metoda lui Gauss cu semipivot
A. Construct ¸ia sistemului superior triunghiular
Pasul 1
• Ca pivot se ia elementul a
i1
de modul maxim de pe coloana 1.
ˆ
In cazul nostru,
pivotul este a
12
, deci se permutˇa linia 1 cu linia 2, ¸si se fac zerouri pe coloana 1
pentru i > 1:

¸
1 1 1 6
2 −1 3 9
1 4 1 12

L
2
↔L
1
−−−−→

¸
2 −1 3 9
1 1 1 6
1 4 1 12

¸
2 −1 3 9
1 1 1 6
1 4 1 12

L
2
→L
2

1
2
L
1
L
3
→L
3

1
2
L
1
−−−−−−−→

¸
2 −1 3 9
0
3
2

1
2
3
2
0
9
2

1
2
15
2

Pasul 2
• Ca pivot se ia elementul a
i2
de modul maxim de pe coloana 2, pentru i ≥ 2.
ˆ
In
cazul nostru, pivotul este a
32
, deci se permutˇa linia 2 cu linia 3 ¸si se fac zerouri pe
coloana 2, pentru i > 2:

¸
2 −1 3 9
0
3
2

1
2
3
2
0
9
2

1
2
15
2

L
3
↔L
2
−−−−→

¸
2 −1 3 9
0
9
2

1
2
15
2
0
3
2

1
2
3
2

¸
2 −1 3 9
0
9
2

1
2
15
2
0
3
2

1
2
3
2

L
3
→L
3

1
3
L
2
−−−−−−−→

¸
2 −1 3 9
0
9
2

1
2
15
2
0 0 −
1
3
−1

24
ˆ
In acest moment am ajuns la un sistem de forma
˜
Ax =
˜
b, echivalent cu sistemul init ¸ial,
unde matricea
˜
A este superior triunghiularˇa, iar:
˜
A =

¸
2 −1 3
0
9
2

1
2
0 0 −
1
3

, x =

¸
x
y
z

,
˜
b =

¸
9
15
2
−1

.
B. Rezolvarea sistemului superior triunghiular se face ca ¸si ˆın cazul metodei lui Gauss
clasice, ¸si conduce la solut ¸ia x = 1, y = 2, z = 3.
Rezolvare cu metoda lui Gauss cu pivot total
A. Construct ¸ia sistemului superior triunghiular
Pasul 1
• ca pivot se alege elementul a
ij
de modul maxim pentru i, j ≥ 1.
ˆ
In cazul nostru
pivotul este a
32
, deci se permutˇa linia 3 cu linia 1, ¸si coloana 2 cu coloana 1:

¸
1 1 1 6
2 −1 3 9
1 4 1 12

L
3
↔L
1
−−−−→

¸
1 4 1 12
2 −1 3 9
1 1 1 6

¸
1 4 1 12
2 −1 3 9
1 1 1 6

C
2
↔C
1
−−−−→

¸
4 1 1 12
−1 2 3 9
1 1 1 6

• pentru corectitudinea rezultatului final este necesar ca, ori de cˆate ori se per-
mutˇa coloanele matricei extinse, sˇa se permute ¸si elementele corespunzˇatoare ale
vectorului x. Astfel, avem:
x =

¸
x
y
z

x
2
↔x
1
−−−−→

¸
y
x
z

• ˆın final, obt ¸inem:

¸
4 1 1 12
−1 2 3 9
1 1 1 6

L
2
→L
2
+
1
4
L
1
L
3
→L
3

1
4
L
1
−−−−−−−→

¸
4 1 1 12
0
9
4
13
4
12
0
3
4
3
4
3

Pasul 2
• ca pivot se alege elementul a
ij
de modul maxim pentru i, j ≥ 2. Deoarece pivotul
este a
23
, se permutˇa coloana 3 cu coloana 2:

¸
4 1 1 12
0
9
4
13
4
12
0
3
4
3
4
3

C
3
↔C
2
−−−−→

¸
4 1 1 12
0
13
4
9
4
12
0
3
4
3
4
3

25
x =

¸
y
x
z

x
3
↔x
2
−−−−→

¸
y
z
x

¸
4 1 1 12
0
13
4
9
4
12
0
3
4
3
4
3

L
3
→L
3

3
13
L
2
−−−−−−−−→

¸
4 1 1 12
0
13
4
9
4
12
0 0
3
13
3
13

ˆ
In acest moment am ajuns la un sistem de forma
˜
Ax =
˜
b, echivalent cu sistemul init ¸ial,
unde matricea
˜
A este superior triunghiularˇa, iar:
˜
A =

¸
4 1 1
0
13
4
9
4
0 0
3
13

, x =

¸
y
z
x

,
˜
b =

¸
12
12
3
13

.
B. Rezolvarea sistemului superior triunghiular se face ca ¸si ˆın cazul metodei lui Gauss
clasice, ¸si conduce la solut ¸ia x = 1, z = 3, y = 2.
Exercit ¸iul 2.1.2. Sˇa se gˇaseascˇa inversa matricei
A =

¸
2 2 3
2 1 1
3 1 2

.
Rezolvare
Considerˇam matricea B obt ¸inutˇa prin concatenarea matricei A cu matricea unitate
I
3
:
B =

¸
2 2 3 1 0 0
2 1 1 0 1 0
3 1 2 0 0 1

.
Folosind metoda eliminˇarii a lui Gauss, transformˇam matricea B dupˇa cum urmeazˇa:

¸
2 2 3 1 0 0
2 1 1 0 1 0
3 1 2 0 0 1

L1→
1
B
11
L1
−−−−−−→

¸
1 1
3
2
1
2
0 0
2 1 1 0 1 0
3 1 2 0 0 1

¸
1 1
3
2
1
2
0 0
2 1 1 0 1 0
3 1 2 0 0 1

L2→L2−B
21
L1
L3→L3−B
31
L1
−−−−−−−−−→

¸
1 1
3
2
1
2
0 0
0 −1 −2 −1 1 0
0 −2 −
5
2

3
2
0 1

¸
1 1
3
2
1
2
0 0
0 −1 −2 −1 1 0
0 −2 −
5
2

3
2
0 1

L2→
1
B
22
L2
−−−−−−→

¸
1 1
3
2
1
2
0 0
0 1 2 1 −1 0
0 −2 −
5
2

3
2
0 1

¸
1 1
3
2
1
2
0 0
0 1 2 1 −1 0
0 −2 −
5
2

3
2
0 1

L1→L1−B
12
L2
L3→L3−B
32
L2
−−−−−−−−−→

¸
1 0 −
1
2

1
2
1 0
0 1 2 1 −1 0
0 0
3
2
1
2
−2 1

26

¸
1 0 −
1
2

1
2
1 0
0 1 2 1 −1 0
0 0
3
2
1
2
−2 1

L3→
1
B
33
L3
−−−−−−→

¸
1 0 −
1
2

1
2
1 0
0 1 2 1 −1 0
0 0 1
1
3

4
3
2
3

¸
1 0 −
1
2

1
2
1 0
0 1 2 1 −1 0
0 0 1
1
3

4
3
2
3

L1→L1−B
13
L3
L2→L2−B
23
L3
−−−−−−−−−→

¸
1 0 0 −
1
3
1
3
1
3
0 1 0
1
3
5
3

4
3
0 0 1
1
3

4
3
2
3

Inversa matricei A va fi matricea C, obt ¸inutˇa prin ¸stergerea primelor 3 coloane ale matricei
B:
C =

¸

1
3
1
3
1
3
1
3
5
3

4
3
1
3

4
3
2
3

ˆ
Intr-adevˇar, se verificˇa u¸sor cˇa
A · C = C · A = I
3
.
2.1.3 Probleme propuse
Exercit ¸iul 2.1.3. Sˇa se rezolve urmˇatoarele sisteme, folosind cele trei variante ale metodei
lui Gauss:
a)

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

x + y + z + t = 0
3x −2y −z + t = −8
x −2y −z + 4t = 1
x + y −z + 2t = 1
Exercit ¸iul 2.1.4. Sˇa se gˇaseascˇa solut ¸ia sistemelor anterioare, calculˆ and inversa matricei
A a sistemului, ¸si efectuˆand ˆınmult ¸irea A
−1
b.
2.1.4 Implementare
A. Algoritm
Algoritmii pentru cele 3 metode sunt asemˇanˇatori, diferent ¸a dintre ei apˇarˆand (a¸sa
cum se poate vedea ¸si din exemplul rezolvat) ˆın modul de rezolvare a eliminˇarii Gauss.
Date de intrare: un sistem de ecuat ¸ii (scris ca mult ¸ime de ecuat ¸ii)
Date de ie¸sire: solut ¸ia sistemului
Algoritmul constˇa din urmˇatoarele etape:
1. generarea matricei extinse a sistemului, A = (a
ij
)
i=1,n,j=1,n+1
• n= numˇarul de ecuat ¸ii (numˇarul de linii ale matricei A);
2. a) eliminarea Gauss pentru metoda lui Gauss clasicˇa
- pentru k = 1, n −1
27
- dacˇa a
kk
= 0, atunci se cautˇa r pentru care a
kr
= 0,
r = k + 1, n ¸si se schimbˇa linia k cu linia r;
- dacˇa tot ¸i a
kr
= 0, r = k + 1, n atunci se returneazˇa eroare;
- pentru i = k + 1, n
m = −
a
ik
a
kk
, unde a
kk
= 0;
- pentru j = k, n
a
ij
= a
ij
+ m· a
kj
;
b) eliminarea Gauss pentru metoda lui Gauss cu semipivot
- pentru k = 1, n −1 se cautˇa elementul de modul maxim pe linie, i.e. dacˇa
|a
kr
| > |a
kk
|, r = k + 1, n, se schimbˇa linia k cu linia r
- pentru i = k + 1, n
m = −
a
ik
a
kk
, unde a
kk
= 0;
- pentru j = k, n
a
ij
= a
ij
+ m· a
kj
;
c) eliminarea Gauss pentru metoda lui Gauss cu pivot total
- pentru k = 1, n −1 se cautˇa elementul de modul maxim pe linie ¸si coloanˇa,
i.e. dacˇa |a
pr
| > |a
kk
|, p, r = k + 1, n, se schimbˇa coloana p cu coloana k ¸si
linia r cu linia k
- pentru i = k + 1, n
m = −
a
ik
a
kk
, unde a
kk
= 0;
- pentru j = k, n
a
ij
= a
ij
+ m· a
kj
;
3. rezolvarea sistemului superior triunghiular prin substitut ¸ie inversˇa
x
n
=
a
n,n+1
a
nn
,
- pentru i = n −1, 1
x
i
=
1
a
ii

a
i,n+1

n
¸
j=i+1
a
ij
x
j

.
B. Programe MAPLE ¸si rezultate
Deoarece diferitele variante ale metodei lui Gauss se deosebesc doar prin modul ˆın
care se realizeazˇa eliminarea Gauss, ˆın cele ce urmeazˇa am implementat separat cele trei
variante de eliminare, folosind procedurile cgauss, spgauss, tpgauss. Aceste proceduri
vor fi folosite apoi ca opt ¸iuni ˆın procedura finalˇa gauss.
28
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 do
if A1[k,k]=0 then
for r from k+1 to n
while 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 do
A1[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;
for r from k to n do
if (abs(A1[r,k])>abs(A1[k,k])) then mx:=r
fi;
od;
if mx<>k 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 do
A1[i,j]:=A1[i,j]-m*A1[k,j];
od;
od;
od;
29
RETURN(evalm(A1));
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. Instruct ¸iunea indets(set_eq) returneazˇa mult ¸imea nedeterminatelor
sistemului set_eq. Deoarece ordinea elementelor acestei mult ¸imi nu este neapˇarat aceea¸si
cu ordinea nedeterminatelor din prima ecuat ¸ie a sistemului, pot apˇarea diferent ¸e ˆıntre
rezultatele furnizate cu ajutorul codului MAPLE ¸si rezultatele calculate pe hˆartie. De¸si ma-
tricea sistemului generatˇa cu ajutorul instruct ¸iunii indets nu este ˆıntotdeauna aceea¸si
cu matricea sistemului scrisˇa pe hˆartie, rezultatele furnizate de program vor fi acelea¸si
(eventual ordinea solut ¸iilor va fi schimbatˇa).
Observat ¸ia 2.1.3. Pentru a urmˇari execut ¸ia unei proceduri, se folose¸ste instruct ¸iunea
debug.
ˆ
In cazul programelor din exemplele de mai sus, se poate folosi urmˇatorul set de
instruct ¸iuni:
debug(cgauss):
debug(spgauss):
debug(gauss):
Redˇam mai jos, cu titlu de exemplu, rezultatul urmˇaririi procedurilor gauss, cgauss,
spgauss ¸si tpgauss pentru acela¸si sistem de ecuat ¸ii.
> gauss({x+y+z=6,2*x-y+3*z=9,x+4*y+z=12},clasic);
{--> enter gauss, args = {x+y+z = 6, 2*x-y+3*z = 9, x+4*y+z = 12},
clasic
30
l := [x, y, z]
n := 3
A :=

1 1 1 6
2 −1 3 9
1 4 1 12
¸
¸
{--> enter cgauss, args = A
n := 3
A1 := A
A2 :=

1 1 1
2 −1 3
1 4 1
¸
¸
m := 2
A1
2, 1
:= 0
A1
2, 2
:= −3
A1
2, 3
:= 1
A1
2, 4
:= −3
m := 1
A1
3, 1
:= 0
A1
3, 2
:= 3
A1
3, 3
:= 0
A1
3, 4
:= 6
m := −1
A1
3, 2
:= 0
A1
3, 3
:= 1
A1
3, 4
:= 3
<-- exit cgauss (now in gauss) = array(1 .. 3, 1 .. 4,[(3, 3)=1,(2,
1)=0,(3, 2)=0,(1, 3)=1,(3, 1)=0,(1, 4)=6,(2, 2)=-3,(2, 3)=1,(3,
4)=3,(1, 2)=1,(1, 1)=1,(2, 4)=-3])}
A1 :=

1 1 1 6
0 −3 1 −3
0 0 1 3
¸
¸
x
3
:= 3
s := 0
s := 3
x
2
:= 2
s := 0
s := 2
s := 5
x
1
:= 1
<-- exit gauss (now at top level) = x = 1, y = 2, z = 3}
x = 1, y = 2, z = 3
> gauss({x+y+z=6,2*x-y+3*z=9,x+4*y+z=12},semipivot);
31
{--> 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 6
2 −1 3 9
1 4 1 12
¸
¸
{--> enter spgauss, args = A
n := 3
A1 := A
A2 :=

1 1 1
2 −1 3
1 4 1
¸
¸
mx := 1
mx := 2
A1 :=

2 −1 3 9
1 1 1 6
1 4 1 12
¸
¸
m :=
1
2
A1
2, 1
:= 0
A1
2, 2
:=
3
2
A1
2, 3
:=
−1
2
A1
2, 4
:=
3
2
m :=
1
2
A1
3, 1
:= 0
A1
3, 2
:=
9
2
A1
3, 3
:=
−1
2
A1
3, 4
:=
15
2
mx := 2
mx := 3
A1 :=

2 −1 3 9
0
9
2
−1
2
15
2
0
3
2
−1
2
3
2
¸
¸
¸
¸
¸
m :=
1
3
A1
3, 2
:= 0
32
A1
3, 3
:=
−1
3
A1
3, 4
:= −1
<-- exit spgauss (now in gauss) = array(1 .. 3, 1 .. 4,[(3,
4)=-1,(2, 3)=-1/2,(1, 4)=9,(1, 1)=2,(3, 1)=0,(2, 1)=0,(1, 3)=3,(2,
4)=15/2,(3, 2)=0,(1, 2)=-1,(3, 3)=-1/3,(2, 2)=9/2])}
A1 :=

2 −1 3 9
0
9
2
−1
2
15
2
0 0
−1
3
−1
¸
¸
¸
¸
¸
x
3
:= 3
s := 0
s :=
−3
2
x
2
:= 2
s := 0
s := −2
s := 7
x
1
:= 1
<-- exit gauss (now at top level) = x = 1, y = 2, z = 3}
x = 1, y = 2, z = 3
Observat ¸ia 2.1.4. Pachetul linalg furnizeazˇa procedurile gausselim ¸si backsub. Ast-
fel, procedura gausselim efectueazˇa eliminarea gaussianˇa cu pivot part ¸ial asupra unei
matrice n × m. Procedura backsub ia ca argument rezultatul procedurii gausselim si
furnizeazˇa solut ¸ia sistemului. Astfel, pentru matricea din exemplul precedent, avem:
> A := matrix([[1, 1, 1, 6], [2, -1, 3, 9], [1, 4, 1, 12]]);
A :=

1 1 1 6
2 −1 3 9
1 4 1 12
¸
¸
> gausselim(A);

1 1 1 6
0 −3 1 −3
0 0 1 3
¸
¸
> backsub(%);
[1, 2, 3]
2.2 Factorizarea LU
2.2.1 Breviar teoretic
Fie sistemul compatibil determinat
Ax = b. (2.4)
33
Factorizarea LU presupune descompunerea matricei A ˆıntr-un produs de matrice L · U,
unde
L =

¸
¸
¸
λ
11
0 . . . 0
λ
21
λ
22
. . . 0
. . . . . . . . . . . .
λ
n1
λ
n2
. . . λ
nn

U =

¸
¸
¸
µ
11
µ
12
. . . µ
1n
0 µ
22
. . . µ
2n
. . . . . . . . . . . .
0 0 . . . µ
nn

. (2.5)
Aceastˇa descompunere este posibilˇa dacˇa tot ¸i determinant ¸ii de colt ¸ ai matricei A sunt
nenuli.
Pentru a asigura unicitatea descompunerii, trebuie precizate n elemente ale matricei
L sau U.
ˆ
In mod tradit ¸ional, se specificˇa λ
ii
sau µ
ii
; dacˇa λ
ii
= 1 atunci factorizarea LU
se nume¸ste factorizare Doolittle, iar dacˇa µ
ii
= 1 se nume¸ste factorizare Crout.
Astfel, rezolvarea sistemului (2.4) se reduce la rezolvarea sistemelor triunghiulare
Ly = b (2.6)
cu solut ¸ia

y
1
=
b
1
λ
11
y
i
=

b
i

i−1
¸
j=1
λ
ij
y
j

·
1
λ
ii
, i = 2, 3, . . . , n
(2.7)
¸si
Ux = y (2.8)
cu solut ¸ia

x
n
=
y
n
µ
nn
x
i
=

y
i

n
¸
j=i+1
µ
ij
x
j

·
1
µ
ii
, i = 2, 3, . . . , n.
(2.9)
2.2.2 Problemˇa rezolvatˇa
Exercit ¸iul 2.2.1. Sˇa se determine solut ¸ia sistemului urmˇator, folosind factorizarea LU:

x + y −z = 2
2x −y + z = 1
x + 3y −2z = 5.
Sistemul se scrie ˆın forma matricealˇa:
Ax = b,
unde
A =

¸
1 1 −1
2 −1 1
1 3 −2

, x =

¸
x
y
z

, b =

¸
2
1
5

.
Deoarece
1 = 0 ,

1 1
2 −1

= −3 = 0 ,

1 1 −1
2 −1 1
1 3 −2

= −3 = 0 ,
34
rezultˇa cˇa matricea A este nesingularˇa ¸si are tot ¸i determinant ¸ii de colt ¸ nenuli, deci se
poate folosi factorizarea LU pentru rezolvarea acestui sistem.
Rezolvare folosind factorizarea Crout
A. Factorizarea Crout
Presupunem cˇa
A =

¸
1 1 −1
2 −1 1
1 3 −2

=

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

·

¸
1 µ
12
µ
13
0 1 µ
23
0 0 1

,
¸si ne propunem sˇa determinˇam coeficient ¸ii l
ij
, u
jk
. Pentru aceasta, folosim definit ¸ia
ˆınmult ¸irii matricelor. Astfel, avem:
a
11
= λ
11
· 1 ⇒λ
11
= 1
a
12
= λ
11
· µ
12
⇒µ
12
= 1
a
13
= λ
11
· µ
13
⇒µ
13
= −1
a
21
= λ
21
· 1 ⇒λ
21
= 2
a
22
= λ
21
· µ
12
+ λ
22
· 1 ⇒λ
22
= −3
a
23
= λ
21
· µ
13
+ λ
22
· µ
23
⇒µ
23
= −1
a
31
= λ
31
· 1 ⇒λ
31
= 1
a
32
= λ
31
· µ
12
+ λ
32
· 1 ⇒λ
32
= 2
a
33
= λ
31
· µ
13
+ λ
32
· µ
23
+ λ
33
· 1 ⇒λ
33
= 1
sau
L =

¸
1 0 0
2 −3 0
1 2 1

, U =

¸
1 1 −1
0 1 −1
0 0 1

.
B. Rezolvarea sistemelor triunghiulare
Pentru rezolvarea sistemului init ¸ial, avem de rezolvat douˇa sisteme triungiulare:

¸
1 0 0
2 −3 0
1 2 1

·

¸
y
1
y
2
y
3

=

¸
2
1
5

,
a cˇarui solut ¸ie este
y =

¸
y
1
y
2
y
3

=

¸
2
1
1

,
¸si respectiv:

¸
1 1 −1
0 1 −1
0 0 1

·

¸
x
y
z

=

¸
2
1
1

,
a cˇarui solut ¸ie este
x =

¸
x
y
z

=

¸
1
2
1

.
35
Rezolvare folosind factorizarea Doolittle
A. Factorizarea Doolittle
Presupunem cˇa
A =

¸
1 1 −1
2 −1 1
1 3 −2

=

¸
1 0 0
λ
21
1 0
λ
31
λ
32
1

·

¸
µ
11
µ
12
µ
13
0 µ
22
µ
23
0 0 µ
33

¸si ne propunem sˇa determinˇam coeficient ¸ii l
ij
, µ
jk
, la fel ca ¸si ˆın exemplul precedent.
Astfel avem:
a
11
= 1 · µ
11
⇒µ
11
= 1
a
12
= 1 · µ
12
⇒µ
12
= 1
a
13
= 1 · µ
13
⇒µ
13
= −1
a
21
= λ
21
· µ
11
⇒λ
21
= 2
a
22
= λ
21
· µ
12
+ 1 · µ
22
⇒µ
22
= −3
a
23
= λ
21
· µ
13
+ 1 · µ
23
⇒µ
23
= 3
a
31
= λ
31
· µ
11
⇒λ
31
= 1
a
32
= λ
31
· µ
12
+ λ
32
· µ
22
⇒λ
32
= −
2
3
a
33
= λ
31
· µ
13
+ λ
32
· µ
23
+ 1 · µ
33
⇒µ
33
= 1
sau
L =

¸
1 0 0
2 1 0
1 −
2
3
1

, U =

¸
1 1 −1
0 −3 3
0 0 1

.
B. Rezolvarea sistemelor triunghiulare
Pentru rezolvarea sistemului init ¸ial, avem de rezolvat douˇa sisteme triungiulare:

¸
1 0 0
2 1 0
1 −
2
3
1

·

¸
y
1
y
2
y
3

=

¸
2
1
5

,
a cˇarui solut ¸ie este
y =

¸
y
1
y
2
y
3

=

¸
2
−3
1

,
¸si respectiv:

¸
1 1 −1
0 −3 3
0 0 1

·

¸
x
y
z

=

¸
2
−3
1

,
a cˇarui solut ¸ie este
x =

¸
x
y
z

=

¸
1
2
1

.
36
2.2.3 Probleme propuse
Exercit ¸iul 2.2.2. Sˇa se gˇaseascˇa solut ¸iile urmˇatoarelor sisteme, folosind cele douˇa vari-
ante ale factorizˇarii LU:
a)

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

3x + y −2z = 1
x + y + z = 6
−2x −y + 4z = 7
2.2.4 Implementare
A. Algoritm
Date de intrare: un sistem de ecuat ¸ii
Date de ie¸sire: solut ¸ia sistemului
Algoritmul constˇa din urmˇatoarele etape:
1. generarea matricei A a sistemului, ¸si a vectorului coloanˇa b
• n = numˇarul de linii ale matricei A (numˇarul de ecuat ¸ii ale sistemului)
2. a) factorizarea Crout
pentru i = 1, n
µ
ii
= 1
pentru i = 1, n
pentru j = 1, i
λ
ij
= a
ij

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
= 1
pentru i = 1, n
pentru j = 1, i −1
λ
ij
=
1
µ
jj

a
ij

i
¸
k=1
λ
ik
µ
kj

pentru j = i, n
37
µ
ij
= a
ij

i−1
¸
k=1
λ
ik
µ
kj
3. Rezolvarea celor douˇa sisteme triunghiulare
y
1
=
b
1
λ
11
pentru i = 2, n
y
i
=

b
i

i−1
¸
j=1
λ
ij
y
j

·
1
λ
ii
x
n
=
y
n
µ
nn
pentru i = 2, n
x
i
=

y
i

n
¸
j=i+1
µ
ij
x
j

·
1
µ
ii
B. Programe MAPLE ¸si rezultate
Deoarece cele douˇa variante ale descompunerii LU diferˇa doar prin modul de facto-
rizare a matricei sistemului, am implementat separat cele douˇa variante de factorizare:
LUcrout ¸si LUdoolittle, dupˇa care le-am folosit ca opt ¸iuni ˆın procedura finalˇ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!‘);
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 do
s:=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;
38
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:
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 then
lu:=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}, Crout);
{--> enter LUsist, args = {x+y-z = 2, 2*x-y+z = 1, x+3*y-2*z = 5},
Crout
eqm :=

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

−1 1 1
1 2 −1
−2 1 3
¸
¸
39
b := [2, 1, 5]
lu :=

−1 0 0
1 3 0
−2 −1 1
¸
¸
,

1 −1 −1
0 1 0
0 0 1
¸
¸
L :=

−1 0 0
1 3 0
−2 −1 1
¸
¸
U :=

1 −1 −1
0 1 0
0 0 1
¸
¸
s := 0
aux
1
:= −2
s := 0
s := −2
aux
2
:= 1
s := 0
s := 4
s := 3
aux
3
:= 2
s := 0
rez
3
:= 2
s := 0
s := 0
rez
2
:= 1
s := 0
s := −1
s := −3
rez
1
:= 1
<-- exit LUsist (now at top level) = z = 1, x = 1, y = 2}
z = 1, x = 1, y = 2
2.3 Sisteme tridiagonale
2.3.1 Breviar teoretic
O clasˇa specialˇa de sisteme liniare este aceea ˆın care matricea A a sistemului este tridi-
agonalˇa, adicˇa:
A =

¸
¸
¸
¸
¸
¸
¸
b
1
c
2
0 0 . . . . . . . . . 0
a
2
b
2
c
3
0 . . . . . . . . . 0
0 a
3
b
3
c
3
. . . . . . . . . 0
· · · · · · · · · · · · · · · · · · · · · · · ·
0 . . . . . . . . . . . . a
n−1
b
n−1
c
n
0 . . . . . . . . . . . . 0 a
n
b
n

. (2.10)
40
Pentru aceste sisteme se aplicˇa factorizarea LU. Astfel, matricea A se descompune,
folosind un caz particular al factorizˇarii Crout, ˆıntr-un produs L · U unde:
L =

¸
¸
¸
¸
¸
β
1
0 0 . . . 0 0
a
2
β
2
0 . . . 0 0
· · · · · · · · · · · · · · · · · ·
0 0 0 . . . β
n−1
0
0 0 0 . . . a
n
β
n

(2.11)
¸si
U =

¸
¸
¸
¸
¸
1 ν
2
0 . . . 0 0
0 1 ν
3
. . . 0 0
· · · · · · · · · · · · · · · · · ·
0 0 0 . . . 1 ν
n
0 0 0 . . . . . . 1

. (2.12)
Coeficient ¸ii a
2
, ..., a
n
sunt cunoscut ¸i din matricea A, iar coeficient ¸ii β
i
, µ
j
se obt ¸in
din definit ¸ia ˆınmult ¸irii matricelor:
β
1
= b
1
β
i
· ν
i+1
= c
i+1
, i = 2, n −1 (2.13)
a
i
· ν
i
+ β
i
= b
i
, i = 2, n
2.3.2 Problemˇa rezolvatˇa
Exercit ¸iul 2.3.1. Sˇa se rezolve sistemul tridiagonal:

x +2y = 3
2x −y +z = 2
3y +2z −t = 4
−2z +t = −1.
Rezolvare
Matricea sistemului este
A =

¸
¸
¸
1 2 0 0
2 −1 1 0
0 3 2 −1
0 0 −2 1

Descompunem aceastˇa matrice astfel:

¸
¸
¸
1 2 0 0
2 −1 1 0
0 3 2 −1
0 0 −2 1

=

¸
¸
¸
β
1
0 0 0
2 β
2
0 0
0 3 β
3
0
0 0 −2 β
4

·

¸
¸
¸
1 ν
2
0 0
0 1 ν
3
0
0 0 1 ν
4
0 0 0 1

41
Din definit ¸ia produsului a douˇa matrice, obt ¸inem:
b
1
= β
1
· 1 ⇒β
1
= 1
c
2
= β
1
· ν
2
⇒ν
2
= 2
b
2
= a
2
· ν
2
+ β
2
⇒β
2
= −5
c
3
= β
2
ν
3
⇒ν
3
= −
1
5
b
3
= a
3
ν
3
+ β
3
⇒β
3
=
13
5
c
4
= β
3
· ν
4
⇒ν
4
= −
5
13
b
4
= a
4
· ν
4
+ β
4
⇒β
4
=
3
13
.
B. Rezolvarea sistemelor triunghiulare
Pentru a rezolva sistemul init ¸ial, avem de rezolvat douˇa sisteme triunghiulare:

¸
¸
¸
1 0 0 0
2 −5 0 0
0 3
13
5
0
0 0 −2
3
13

·

¸
¸
¸
y
1
y
2
y
3
y
4

=

¸
¸
¸
3
2
4
−1

,
a cˇarui solut ¸ie este

¸
¸
¸
y
1
y
2
y
3
y
4

=

¸
¸
¸
3
4
5
8
13
1

,
¸si respectiv:

¸
¸
¸
1 2 0 0
0 1 −
1
5
0
0 0 1 −
5
13
0 0 0 1

·

¸
¸
¸
x
y
z
t

=

¸
¸
¸
3
4
5
8
13
1

,
a cˇariu solut ¸ie este

¸
¸
¸
x
y
z
t

=

¸
¸
¸
1
1
1
1

.
2.3.3 Probleme propuse
Exercit ¸iul 2.3.2. Sˇa se rezolve sistemele tridiagonale:
a)

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

2x + y = 0
x −y + 2z = −1
2y −z + t = 5
z + 2t = 5.
42
2.3.4 Implementare
A. Algoritm
Date de intrare: un sistem de ecuat ¸ii tridiagonal
Date de ie¸sire: solut ¸ia sistemului
Algoritmul constˇa ˆın:
1. generarea matricei A a sistemului (matrice tridiagonalˇa) ¸si a vectorului coloanˇa b
• n = numˇarul de linii ale matricei A
2. descompunerea LU aplicatˇa matricei tridiagonale A
L = (λ
ij
)
i,j=1,n
, U = (µ
ij
)
i,j=1,n
pentru i = 1, n
µ
ii
= 1
pentru i = 2, n
λ
i,i−1
= a
i,i−1
λ
11
= a
11
pentru i = 1, n −1
µ
i,i+1
=
a
i,i+1
λ
ii
λ
i+1,i+1
= a
i+1,i+1
−a
i+1,i
· µ
i,i+1
3. rezolvarea sistemelor triunghiulare
y
1
=
b
1
λ
11
pentru i = 2, n
y
i
=

b
i
−λ
i,i−1
y
i−1

·
1
λ
ii
x
n
= y
n
pentru i = n −1, 1
x
i
=

y
i
−µ
i,i+1
x
i+1

B. Programe MAPLE ¸si rezultate
Observat ¸ia 2.3.1. Spre deosebire de metodele anterioare, unde ordinea necunoscutelor
ˆın sistem nu era esent ¸ialˇa, ˆın cazul sistemelor tridiagonale, dacˇa se schimbˇa ordinea ne-
cunoscutelor, atunci matricea sistemului nu va mai fi tridiagonalˇa. De aceea, este necesarˇa
construirea unei proceduri, nedeterminate, care sˇa returneze necunoscutele sistemului
ˆın ordinea ˆın care apar ele ˆın ecuat ¸ii.
43
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 do
if A[i,j]<>0 then
ERROR(‘matricea nu este tridiagonala!‘);
fi;
od;
for j from i+2 to n do
if A[i,j]<>0 then
ERROR(‘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;
44
n:=nops(l);
for i from 1 to n do
ops[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]) do
if 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}
n := 4
opst := [x, y, z, t]
45
eqm :=

1 2 0 0 3
2 −1 1 0 2
0 3 2 −1 4
0 0 −2 1 −1
¸
¸
¸
¸
A :=

1 2 0 0
2 −1 1 0
0 3 2 −1
0 0 −2 1
¸
¸
¸
¸
b := [3, 2, 4, −1]
lu :=

1 0 0 0
2 −5 0 0
0 3
13
5
0
0 0 −2
3
13
¸
¸
¸
¸
¸
¸
¸
,

1 2 0 0
0 1
−1
5
0
0 0 1
−5
13
0 0 0 1
¸
¸
¸
¸
¸
¸
¸
¸
L :=

1 0 0 0
2 −5 0 0
0 3
13
5
0
0 0 −2
3
13
¸
¸
¸
¸
¸
¸
¸
U :=

1 2 0 0
0 1
−1
5
0
0 0 1
−5
13
0 0 0 1
¸
¸
¸
¸
¸
¸
¸
¸
aux
1
:= 3
aux
2
:=
4
5
aux
3
:=
8
13
aux
4
:= 1
rez
4
:= 1
rez
3
:= 1
rez
2
:= 1
rez
1
:= 1
<-- exit tridiagonalsist (now at top level) = x = 1, y = 1, z = 1, t =
1}
x = 1, y = 1, z = 1, t = 1
46
2.4 Factorizarea Cholesky
2.4.1 Breviar teoretic
Un caz particular de sisteme liniare este acela ˆın care matricea A a sistemului este simet-
ricˇa ¸si pozitiv definitˇa (adicˇa tot ¸i determinant ¸ii de colt ¸ sunt strict pozitivi). Pentru astfel
de sisteme putem folosi un caz particular al factorizˇarii LU: descompunem matricea A a
sistemului ˆıntr-un produs L · L
T
, unde
L =

¸
¸
¸
λ
11
0 . . . 0
λ
21
λ
22
. . . 0
. . . . . . . . . . . .
λ
n1
λ
n2
. . . λ
nn

. (2.14)
Coeficient ¸ii λ
ij
se obt ¸in din definit ¸ia produsului a douˇa matrice.
2.4.2 Problemˇa rezolvatˇa
Exercit ¸iul 2.4.1. Sˇa se rezolve sistemul:

x + 2y + z = 5
2x + 5y + 2z = 11
x + 2y + 3z = 7.
Rezolvare
A. Factorizarea Cholesky
Matricea sistemului este
A =

¸
1 2 1
2 5 2
1 2 3

Se observˇa cˇa a
ij
= a
ji
, adicˇa matricea A este simetricˇa. Deoarece
1 > 0 ,

1 2
2 5

= 1 > 0 ,

1 2 1
2 5 2
1 2 3

= 2 > 0 ,
matricea A este pozitiv definitˇa. Aplicˆand factorizarea Cholesky avem:
A =

¸
1 2 1
2 5 2
1 2 3

=

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

·

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

.
Folosind definit ¸ia produsului a douˇa matrice, obt ¸inem:
a
11
= λ
2
11
⇒λ
11
= 1
a
12
= λ
11
· λ
21
⇒λ
21
= 2
a
13
= λ
11
· λ
31
⇒λ
31
= 1
a
22
= λ
2
21
+ λ
2
22
⇒λ
22
= 1
a
23
= λ
21
· λ
31
+ λ
22
· λ
32
⇒λ
32
= 0
a
33
= λ
2
31
+ λ
2
32
+ λ
2
33
⇒λ
33
=

2.
47
Se observˇa cˇa pentru gˇasirea elementelor λ
ij
, i = 1, n, j = i, n, este suficient sˇa calculˇam
dezvoltˇarile corespunzˇatoare elementelor a
ij
, i = 1, n, j = i, n.
B. Rezolvarea sistemelor triunghiulare
Pentru a determina solut ¸ia sistemului init ¸ial, avem de rezolvat douˇa sisteme triunghi-
ulare:

¸
1 0 0
2 1 0
1 0

2

·

¸
y
1
y
2
y
3

=

¸
5
11
7

,
cu solut ¸ia

¸
y
1
y
2
y
3

=

¸
5
1

2

,
¸si

¸
1 2 1
0 1 0
0 0

2

·

¸
x
y
z

=

¸
5
1

2

,
cu solut ¸ia

¸
x
y
z

=

¸
2
1
1

.
2.4.3 Probleme propuse
Exercit ¸iul 2.4.2. Sˇa se gˇaseascˇa solut ¸ia sistemului urmˇator, folosind factorizarea Cholesky:

3x + y + 3z = 11
x + y + 2z = 6
3x + y + 4z = 12.
2.4.4 Implementare
A. Algoritm
Date de intrare: un sistem de ecuat ¸ii
Date de ie¸sire: solut ¸ia sistemului
Algoritm
1. generarea matricei A a sistemului (simetricˇa ¸si pozitiv definitˇa) ¸si a vectorului b
• n = numˇarul de ecuat ¸ii ale sistemului (numˇarul de linii ale matricei A)
2. factorizarea Cholesky
λ
11
= a
11
pentru i = 2, n
pentru j = 1, i −1
λ
ij
=
1
λ
jj

a
ij

j−1
¸
k=1
λ
ik
λ
jk

48
λ
ii
=

a
ii

i−1
¸
k=1
λ
2
ik
3. rezolvarea sistemelor triunghiulare
y
1
=
b
1
λ
11
pentru i = 2, n
y
i
=

b
i

i−1
¸
k=1
λ
ik
· y
k

·
1
λ
ii
x
n
=
y
n
λ
nn
pentru i = n −1, 1
x
i
=

y
i

n
¸
k=i+1
λ
ki
· x
k

·
1
λ
ii
B. Programe MAPLE ¸si rezultate
2.5 Factorizarea Householder
2.5.1 Breviar teoretic
Factorizarea Householder este o metodˇa de rezolvare numericˇa a sistemelor de tip Cramer
simetrice, ¸si constˇa ˆın determinarea unei matrice simetrice nesingulare U, astfel ˆıncˆat
UAU = T sˇa fie o matrice tridiagonalˇa. Atunci solut ¸ia sistemului Ax = b este datˇa de
x = Uy, (2.15)
unde y este solut ¸ia sistemului
Ty = Ub. (2.16)
Factorizarea Householder se bazeazˇa pe urmˇatoarele rezultate.
Propozit ¸ia 2.5.1. Oricare ar fi A o matrice pˇatraticˇa de ordinul n ¸si simetricˇa, existˇa
un vector v = (v
1
, v
2
, . . . , v
n
)
T
astfel ˆıncˆat vectorul coloanˇa a
1
= Ae
1
, e
1
= (1, 0, . . . , 0)
T
(a
1
este prima coloanˇa a matricei A) are proprietatea
a
1

2v· < v, a
1
>
v
2
= λ · e
1
. (2.17)
Pentru evitarea ambiguitˇat ¸ilor vom considera vectorul v dat de:
v = a
1
+ sign(a
11
) · a
1
· e
1
. (2.18)
49
Propozit ¸ia 2.5.2. Oricare ar fi matricea simetricˇa A, matricea P definitˇa prin:
P = I −
2 · v · v
T
v
2
(2.19)
este simetricˇa ¸si are proprietatea cˇa elementele 2, 3, . . . , n de pe prima coloanˇa a matricei
PA sunt nule, unde vectorul v este dat de relat ¸ia (2.18).
Definit ¸ia 2.5.1. Se nume¸ste matrice Householder de ordin n − 1 asociatˇa matricei
A ¸si se noteazˇa cu P
n−1
o matrice de ordin n −1 de forma:
P
n−1
= I
n−1

2 · v · v
T
v
2
(2.20)
unde: v = a
1
n−1
+ sign(a
21
) · a
1
n−1
· e
1
este vectorul format cu componentele vectorului
a
1
care este prima coloanˇa a matricei A, e
1
= ( 1, 0, . . . , 0
. .. .
n−1
)
T
¸si I
n−1
este matricea unitate
de ordin n −1.
Propozit ¸ia 2.5.3. Matricea Hauseholder P
n−1
asociatˇa unei matrice simetrice A este
simetricˇa ¸si are proprietatea cˇa matricea U
1
definitˇa prin:
U
1
=

¸
¸
¸
1 0 . . . 0
0
P
n−1
0

(2.21)
este simetricˇa ¸si verificˇa relat ¸ia:
A
(1)
= U
1
AU
1
=

¸
¸
¸
¸
¸
¸
a
11
α
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)
n2
a
(1)
n3
. . . a
(1)
nn

(2.22)
Se considerˇa vectorul coloanˇa a
2
n−2
cu ultimele n−2 elemente ale coloanei matrice A
(1)
.
Cu acest vector se construie¸ste o matrice Householder de ordinul n − 2, P
n−2
. Matricea
U
2
definitˇa prin:
U
2
=

¸
¸
¸
¸
¸
¸
1 0 0 . . . 0
0 1 0 . . . 0
0 0
.
.
.
.
.
. P
n−2
0 0

(2.23)
are proprietatea:
A
(2)
= U
2
A
(1)
U
2
=

¸
¸
¸
¸
¸
¸
a
11
α
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)
n3
a
(2)
n4
. . . a
(2)
nn

(2.24)
50
Matricea P
n−2
a condus la obt ¸inerea unei noi linii ¸si coloane a matricei tridiagonale la
care vrem sˇa reducem matricea A.
Continuˆand astfel prin n − 1 transformˇari, obt ¸inem egalitatea: UAU = T ˆın care T
este matrice tridiagonalˇa.
2.5.2 Problemˇa rezolvatˇa
Exercit ¸iul 2.5.1. Sˇa se rezolve urmˇatorul sistem folosind factorizarea Householder:

2x + 2y + z = 2
2x −y + z =

5
x + y + 2z = 0.
Rezolvare
Sistemul se poate scrie sub forma Ax = b, unde:
A :=

¸
2 2 1
2 −1 1
1 1 2

¸si b :=

¸
2

5
0

Se observˇa cˇa matricea A este simetricˇa, deci factorizarea Householder este aplicabilˇa.
Generarea matricei U
Calculˇam elementele vectorului
v = a
1
+ sign(a
1
11
) · a
1
· e
1
unde a
1
= (2, 1)
T
, a
1
=

5 ¸si e
1
= (1, 0)
T
. De aici rezultˇa
v = (0, 2 +

5, 1)
T
¸si v = 10 + 4

5. Elementele matricei U sunt date de:
U
j,k
= I
3

2v
j
· v
k
v
.
Dupˇa efectuarea calculelor, obt ¸inem:
U =

¸
¸
¸
¸
¸
¸
1 0 0
0 −
2 (2 +

5)
5 + 2

5

2 +

5
5 + 2

5
0 −
2 +

5
5 + 2

5
2 (2 +

5)
5 + 2

5

¸si
T = UAU =

¸
¸
¸
¸
¸
¸
¸
¸
2 −
5 (2 +

5)
5 + 2

5
0

5 (2 +

5)
5 + 2

5
2
5
−9
5
0
−9
5
3
5

, Ub =

¸
2
−2
−1

51
Solut ¸ia sistemului tridiagonal
Ty = Ub
este
y =

¸
¸
¸
¸
1
20 −10

5
21
5 −6

5
15

,
iar solut ¸ia sistemului init ¸ial este
x = Uy =

¸
¸
¸
¸
¸
¸
2 +

5
3
2 −

5
3

2
3

,
adicˇa x =
2 +

5
3
, y =
2 −

5
3
z = −
2
3
.
2.5.3 Probleme propuse
Exercit ¸iul 2.5.2. Sˇa se gˇaseascˇa solut ¸iile urmˇatoarelor sisteme folosind factorizarea
Householder:
a)

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

x + y −z + t = 3
x + 2y + 3z + t = 9
−x + 3y + 2t = 7
x + y + 2z = 5.
2.5.4 Implementare
A. Algoritm
Date de intrare: un sistem de ecuat ¸ii
Date de ie¸sire: solut ¸ia sistemului, obt ¸inutˇa folosind factorizarea Householder
Algoritmul constˇa din urmˇatoarele etape:
1. generarea matricei tridiagonale pentru i = 1 . . . n −2
pentru l = 1 . . . n
pentru m = 1 . . . n
dacˇa m = l atunci u
ml
= 1
dacˇa m = l atunci u
ml
= 0
//Generˇam vectorul v
52
norm a =

n
¸
j=i+1
a
2
ij
e
i+1
= 1
pentru j = i + 2 . . . n
e
j
= 0
pentru j = i + 1 . . . n
v
j
= a
ij
+ sign(a
i,i+1
) · norm a · e
j
norm v=
n
¸
j=i+1
v
2
j
//Generˇam matricea U
j = i + 1 . . . n
k = i + 1 . . . n
u
jk
= u
jk
−2 · v
j
· v
k
/ norm v
// D=AU
m = 1 . . . n
l = 1 . . . n
d
ml
=
n
¸
k=1
a
mk
· u
kl
//A=UD=UAU
m = 1 . . . n
l = 1 . . . n
a
ml
=
n
¸
k=1
u
mk
· d
kl
2. rezolvarea sistemului tridiagonal (vezi paragraful 2.3.4):
Ty = Ub
3. gˇasirea solut ¸iei sistemului init ¸ial:
x = Uy
B. Programe MAPLE ¸si rezultate
Observat ¸ia 2.5.1. Deoarece o condit ¸ie neceesarˇa pentru aplicarea factorizˇarii House-
holder este ca sistemul sˇa fie simetric, folosim procedura nedeterminate (prezentatˇa ˆın
paragraful 2.4.4). De asemenea, pentru descompunerea matricei tridiagonale, am folosit
procedura tridiagonal prezentatˇa ˆın paragraful 2.3.4.
53
2.6 Metoda Jacobi
2.6.1 Breviar teoretic
Metoda Jacobi este o metodˇa iterativˇa de rezolvare a sistemelor liniare de forma
Ax = b. (2.25)
Matricea A se descompune ˆın suma L + D + U, unde
L =

¸
¸
¸
¸
¸
0 0 0 . . . 0
a
21
0 0 . . . 0
a
31
a
32
0 . . . 0
· · · · · · · · · · · · · · ·
a
n1
a
n2
a
n3
. . . 0

(2.26)
D =

¸
¸
¸
¸
¸
a
11
0 0 . . . 0
0 a
22
0 . . . 0
0 0 a
33
. . . 0
· · · · · · · · · · · · · · ·
0 0 0 . . . a
nn

(2.27)
U =

¸
¸
¸
¸
¸
0 a
12
a
13
. . . a
1n
0 0 a
23
. . . a
2n
· · · · · · · · · · · · · · ·
0 0 0 . . . a
n−1,n
0 0 0 . . . 0

. (2.28)
Se define¸ste traiectoria Jacobi a vectorului x
(0)
ca fiind vectorul
x
(k+1)
= D
−1
[b −(L + U)x
(k)
] k = 0, 1, 2, . . . (2.29)
Folosind teorema de convergent ¸ˇa se studiazˇa dacˇa traiectoria Jacobi converge la solut ¸ia
x
(∗)
a sistemului (2.25).
Traiectoria Jacobi converge la solut ¸ia x
(∗)
a sistemului (2.25), dacˇa ¸si numai dacˇa raza
spectralˇa ρ a matricei
M = −D
−1
(L + U) (2.30)
este strict subunitarˇa, adicˇa
max{|λ| | det(M −λI
n
) = 0} < 1. (2.31)
ˆ
In caz de convergent ¸ˇa, componentele x
(k+1)
1
, ..., x
(k+1)
n
ale vectorului x
(k+1)
, situat pe
traiectoria Jacobi a vectorului x
(0)
, sunt date de relat ¸iile:
x
(k+1)
i
=

b
i

n
¸
j=1
j=i
a
ij
· x
(k)
j

·
1
a
ii
, i = 1, 2, . . . , n; k = 0, 1, . . . (2.32)
54
2.6.2 Problemˇa rezolvatˇa
Exercit ¸iul 2.6.1. Calculat ¸i primii trei termeni ai traiectoriei Jacobi asociate vectorului
(0, 0, 0) pentru sistemul:

5x −2y + 3z = −1
−3x + 9y + z = 2
2x −y −7z = 3.
Rezolvare
Sistemul se mai poate scrie sub forma Ax = b, unde:
A =

¸
5 −2 3
−3 9 1
2 −1 −7

, b =

¸
−1
2
3

.
Matricea A se descompune ˆın suma L + D + U cu
L =

¸
0 0 0
−3 0 0
2 −1 0

, D =

¸
5 0 0
0 9 0
0 0 −7

, U =

¸
0 −2 3
0 0 1
0 0 0

.
Verificarea condit ¸iei de convergent ¸ˇa a algoritmului presupune calculul valorilor proprii ale
matricei
M = −D
−1
(L + U) =

¸
¸
¸
¸
¸
0
2
5
−3
5
1
3
0
−1
9
2
7
−1
7
0

Calculˆand maximul ˆın modul al valorilor proprii ale matricei M, obt ¸inem
ρ(M) = 0.2673998083 < 1,
¸si deci algoritmul converge.
Aplicˇam formulele (2.32), plecˆand de la x
(0)
= 0, y
(0)
= 0, z
(0)
= 0, obt ¸inem succesiv:
x
(1)
= −0.2000000000
y
(1)
= 0.2222222222
z
(1)
= −0.4285714286
x
(2)
= 0.1460317460
y
(2)
= 0.2031746032
z
(2)
= −0.5174603174
x
(3)
= 0.1917460316
y
(3)
= 0.3283950617
z
(3)
= −0.4158730159.
Pentru comparat ¸ie, am rezolvat acest sistem folosind procedura solve furnizatˇa de
Maple, iar rezultatele sunt:
x = 0.1861198738, y = 0.3312302839, z = −0.4227129338.
55
2.6.3 Probleme propuse
Exercit ¸iul 2.6.2. Sˇa se verifice dacˇa se poate aplica metoda iterativˇa a lui Jacobi, ¸si ˆın
caz afirmativ sˇa se gˇaseascˇa primele 3 elemente ale ¸sirului de solut ¸ii part ¸iale. Comparat ¸i
solut ¸ia obt ¸inutˇa cu solut ¸ia exactˇa:
a)

x + 3y = −2
2x + y = 6
b)

x + 2y + z = 1
3x −y + 5z = 14
x + y −z = −2
2.6.4 Implementare
A. Algoritm
Observat ¸ia 2.6.1. Deoarece metoda lui Jacobi este o metodˇa iterativˇa, trebuie spec-
ificatˇa o condit ¸ie de oprire a algoritmului. Algoritmul converge dacˇa ¸sirul (x
(k)
) este
convergent. Convergent ¸a acestui ¸sir poate fi descrisˇa ˆın mod teoretic ˆın diverse moduri.
ˆ
In practicˇa, se folose¸ste o variantˇa a criteriului lui Cauchy, ¸si anume: ¸sirul (x
(k)
) este
convergent, dacˇa
x
(k+1)
−x
(k)
< ε
unde ε este o constantˇa datˇa.
ˆ
In cazul nostru, vom considera cˇa solut ¸iile sistemului au fost obt ¸inute cu eroarea ε,
adicˇa
x
(k+1)
i
∈ [x
(∗)
i
−ε, x
(∗)
i
+ ε].
De aici rezultˇa o condit ¸ie de oprire a algoritmului:

n
¸
i=1
(x
(k+1)
i
−x
(k)
i
) < ε

n. (2.33)
Date de intrare: un sistem de ecuat ¸ii (o mult ¸ime de ecuat ¸ii), un punct init ¸ial, x
(0)
,
o eroare ε.
Date de ie¸sire: solut ¸ia aproximativˇa a sistemului, obt ¸inutˇa ˆın urma aplicˇarii traiec-
toriei Jacobi vectorului x
(0)
pˆanˇa cˆand este ˆındeplinitˇa condit ¸ia (2.33).
Algoritmul constˇa ˆın urmˇatoarele etape:
1. generarea matricei A a sistemului ¸si a vectorului b
• n - numˇarul de necunoscute (numˇarul de linii ale matricei A)
2. generarea matricelor L, D, U ¸si verificarea convergent ¸ei metodei:
ρ(−D
−1
(L + U)) < 1
56
3. construirea traiectoriei Jacobi
repetˇa
x
(k+1)
i
=

b
i

n
¸
j=1
j=i
a
ij
· x
(k)
j

·
1
a
ii
, i = 1, n
pˆanˇa cˆand

n
¸
i=1
(x
(k+1)
i
−x
(k)
i
) < ε

n
B. Programe MAPLE ¸si 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 cu
dimensiunea 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];
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-zis
for i from 1 to n do
xo[i]:=init[i]
od;
test:=1;
57
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 5
1 2 5

A :=
¸
3 1
1 2

b := [5, 5]
l :=
¸
0 0
0 0

u :=
¸
0 0
0 0

d :=
¸
0 0
0 0

d
1, 1
:= 3
u
1, 2
:= 1
l
2, 1
:= 1
d
2, 2
:= 2
m :=

0
−1
3
−1
2
0
¸
¸
¸
lst := [

6
6
, −

6
6
]
xo
1
:= 0
58
xo
2
:= 0
test := 1
x
1
:= 1.666666667
x
2
:= 2.500000000
test := 3.004626063
xo
1
:= 1.666666667
xo
2
:= 2.500000000
x
1
:= 0.8333333333
x
2
:= 1.666666666
test := 1.178511303
xo
1
:= 0.8333333333
xo
2
:= 1.666666666
x
1
:= 1.111111111
x
2
:= 2.083333334
test := 0.5007710115
xo
1
:= 1.111111111
xo
2
:= 2.083333334
x
1
:= 0.9722222220
x
2
:= 1.944444444
test := 0.1964185512
xo
1
:= 0.9722222220
xo
2
:= 1.944444444
x
1
:= 1.018518519
x
2
:= 2.013888889
test := 0.08346183593
xo
1
:= 1.018518519
xo
2
:= 2.013888889
x
1
:= 0.9953703703
x
2
:= 1.990740740
test := 0.03273642604
xo
1
:= 0.9953703703
xo
2
:= 1.990740740
x
1
:= 1.003086420
x
2
:= 2.002314815
test := 0.01391030679
xo
1
:= 1.003086420
xo
2
:= 2.002314815
<-- exit jacobi (now at top level) = x = 1.003086420, y = 2.002314815}
x = 1.003086420, y = 2.002314815
Se pot compara rezultatele obt ¸inute dacˇa eroarea ε se modificˇa:
> jacobi({3*x+y=5, x+2*y=5}, vector(2,[0,0]),0.01);
x = 1.003086420, y = 2.002314815
> jacobi({3*x+y=5, x+2*y=5}, vector(2,[0,0]),0.001);
x = 0.9998713993, y = 1.999742798
59
> jacobi({3*x+y=5, x+2*y=5}, vector(2,[0,0]),0.00001);
x = 1.000002381, y = 2.000001786
De asemenea, se poate compara ¸sirul solut ¸iilor part ¸iale cu solut ¸ia exactˇa obt ¸inutˇa
rezolvˆand sistemul Ax = b cu ajutorul procedurii linsolve. Pentru sistemul considerat
mai sus, a cˇarui solut ¸ie exactˇa este x = 1, y = 2, obt ¸inem urmˇatoarele grafice:
comparatie cu solutia exacta
0
0.2
0.4
0.6
0.8
1
1.2
1.4
1.6
1 2 3 4 5 6 7 8
60
comparatie cu solutia exacta
0
0.5
1
1.5
2
2.5
1 2 3 4 5 6 7 8
2.7 Metoda Gauss-Seidel
2.7.1 Breviar teoretic
Metoda Gauss-Seidel este o metodˇa de rezolvare numericˇa a sistemelor de tip Cramer, prin
aproximat ¸ii succesive. Matricea A a sistemului se descompune ˆın suma L+D+U, unde L
este matrice triunghiularˇa subdiagonalˇa, D matrice diagonalˇa ¸si U matrice triunghiularˇa
supradiagonalˇa.
Pentru un vector x
(0)
∈ R
n
, ¸sirul de vectori x
(k)
definit prin:
x
(k+1)
= (L + D)
−1
(b −Ux
(k)
) (2.34)
se nume¸ste traiectoria Gauss-Seidel a vectorului x
(0)
.
Traiectoria Gauss-Seidel a vectorului x
(0)
converge dacˇa ¸si numai dacˇa raza spectralˇa
ρ a matricei
−(L + D)
−1
U (2.35)
este strict subunitarˇa.
ˆ
In caz de convergent ¸ˇa, componentele x
(k+1)
1
, ..., x
(k+1)
n
ale vectorului x
(k+1)
, situat pe
61
traiectoria Gauss-Seidel a vectorului x
(0)
, sunt date de relat ¸iile:
x
(k+1)
1
=

b
1

n
¸
j=2
a
1j
· x
(k)
j

·
1
a
11
(2.36)
x
(k+1)
i
=

b
i

i−1
¸
j=1
a
ij
· x
(k+1)
j

n
¸
j=i+1
a
ij
· x
(k)
j

·
1
a
ii
, i = 2, . . . , n. (2.37)
2.7.2 Problemˇa rezolvatˇa
Exercit ¸iul 2.7.1. Sˇa se determine primele 3 puncte de pe traiectoria Gauss-Seidel a
vectorului (0, 0)
T
pentru sistemul urmˇator:

4x + y = −1
4x + 3y = −2.
Rezolvare
Sistemul se poate scrie sub forma Ax = b, unde
A =

4 1
4 3

, b =

−1
−2

iar matricea A se descompune ˆın suma L + D + U, dupˇa cum urmeazˇa:
L =

0 0
4 0

, D =

4 0
0 3

, U =

0 1
0 0

.
Algoritmul converge dacˇa raza spectralˇa a matricei
M = −(L + D)
−1
U =

0 −
1
4

4
3
0

este strict subunitarˇa. Efectuˆand calculele, obt ¸inem
ρ(M) =

3
3
< 1
¸si deci algoritmul este convergent.
ˆ
In continuare, aplicˇam formulele (2.36)-(2.37) ¸si, plecˆand de la punctele x
(0)
= 0, y
(0)
= 0,
obt ¸inem:
x
(1)
= −0.2500000000
y
(1)
= −0.3333333333
x
(2)
= −0.1666666667
y
(2)
= −0.4444444443
x
(3)
= −0.1388888889
y
(3)
= −0.4814814813
Pentru comparat ¸ie, determinˇam solut ¸ia exactˇa a sistemului considerat:
x = −
1
8
, y = −
1
2
adicˇa x = −0.125 , y = −0.5.
62
2.7.3 Probleme propuse
Exercit ¸iul 2.7.2. Sˇa se verifice dacˇa se poate aplica metoda iterativˇa a lui Gauss-
Seidel, ¸si ˆın caz afirmativ sˇa se gˇaseascˇa primele 3 elemente ale ¸sirului de solut ¸ii part ¸iale.
Comparat ¸i cu solut ¸ia exactˇa ¸si cu ¸sirul de solut ¸ii part ¸iale obt ¸inut prin metoda lui Jacobi:
a)

x + 3y = −2
2x + y = 6
b)

x + 2y + z = 1
3x −y + 5z = 14
x + y −z = −2
2.7.4 Implementare
A. Algoritm
Observat ¸ia 2.7.1. Deoarece metoda Gauss-Seidel este o metodˇa iterativˇa, trebuie spec-
ificatˇa o condit ¸ie de oprire a algoritmului.
ˆ
In continuare vom folosi aceea¸si condit ¸ie de
oprire a algoritmului ca ¸si cea prezentatˇa ˆın paragraful 2.6.4:

n
¸
i=1
(x
(k+1)
i
−x
(k)
i
) < ε

n. (2.38)
Date de intrare: un sistem de ecuat ¸ii (o mult ¸ime de ecuat ¸ii), un punct init ¸ial, x
(0)
,
o eroare ε.
Date de ie¸sire: solut ¸ia aproximativˇa a sistemului, obt ¸inutˇa ˆın urma aplicˇarii traiec-
toriei Gauss-Seidel vectorului x
(0)
pˆanˇa cˆand este ˆındeplinitˇa condit ¸ia (2.38).
Algoritmul constˇa ˆın urmˇatoarele etape:
1. generarea matricei A a sistemului ¸si a vectorului b
• n - numˇarul de necunoscute (numˇarul de linii ale matricei A)
2. generarea matricelor L, D, U ¸si verificarea convergent ¸ei metodei:
ρ(−(L + D)
−1
U) < 1
3. construct ¸ia traiectoriei Gauss-Seidel
repetˇa
x
(k+1)
1
=

b
1

n
¸
j=2
a
1j
· x
(k)
j

·
1
a
11
x
(k+1)
i
=

b
i

i−1
¸
j=1
a
ij
· x
(k+1)
j

n
¸
j=i+1
a
ij
· x
(k)
j

·
1
a
ii
, i = 2, n.
pˆanˇa cˆand

n
¸
i=1
(x
(k+1)
i
−x
(k)
i
) < ε

n
63
B. Programe MAPLE ¸si rezultate
Comparativ, prezentˇam rezultatele obt ¸inute cu ajutorul metodei Gauss-Seidel pen-
tru acela¸si sistem ¸si vector init ¸ial al traiectoriei, dar pentru diferite valori ale erorii:
> gseidel({3*x+y=5, x+2*y=5}, vector(2,[0,0]),0.01);
x = 1.000514403, y = 1.999742798
> gseidel({3*x+y=5, x+2*y=5}, vector(2,[0,0]),0.001);
x = 1.000085734, y = 1.999957133
> gseidel({3*x+y=5, x+2*y=5}, vector(2,[0,0]),0.00001);
x = 1.000002381, y = 1.999998810
2.8 Metoda relaxˇarii succesive
2.8.1 Breviar teoretic
Metoda relaxˇarii succesive este o metodˇa de rezolvare numericˇa a sistemelor de tip
Cramer, prin aproximat ¸ii succesive. Aceastˇa metodˇa se deosebe¸ste de metoda Gauss-
Seidel prin aceea cˇa se introduc corect ¸iile
∆x
(k)
= x
(k+1)
−x
(k)
, k = 0, 1, 2, ... (2.39)
Matricea A a sistemului se descompune ˆın suma L + D + U, unde L este matrice
triunghiularˇa subdiagonalˇa, D matrice diagonalˇa ¸si U matrice triunghiularˇa supradiago-
nalˇa.
Pentru un vector x
(0)
∈ R
n
, ¸sirul de vectori x
(k)
definit prin:
x
(k+1)
=

L +
1
ω
D

−1

b −
¸
1 −
1
ω

D + U

x
(k)

, k = 0, 1, 2, . . . (2.40)
se nume¸ste traiectoria vectorului x
(0)
obt ¸inutˇa prin relaxˇari succesive.
Traiectoria vectorului x
(0)
obt ¸inutˇa prin relaxˇari succesive converge dacˇa ¸si numai
dacˇa raza spectralˇa ρ a matricei

L +
1
ω
D

−1
¸
1 −
1
ω

D + U

(2.41)
este strict subunitarˇa.
ˆ
In caz de convergent ¸ˇa, componentele x
(k+1)
1
, ..., x
(k+1)
n
ale vectorului x
(k+1)
situat pe
traiectoria vectorului x
(0)
obt ¸inutˇa prin relaxˇari succesive sunt date de relat ¸iile:
x
(k+1)
1
= (1 −ω) · x
(k)
1
+
ω
a
11
¸
b
1

n
¸
j=1
a
1j
· x
(k)
j
¸
(2.42)
x
(k+1)
i
= (1 −ω) · x
(k)
i
+
ω
a
ii
¸
b
i

i−1
¸
j=1
a
ij
· x
(k+1)
j

n
¸
j=i
a
ij
· x
(k)
j
¸
, i = 2, . . . , n. (2.43)
Observat ¸ia 2.8.1. Metoda Gauss-Seidel este un caz particular al metodei relaxˇarii suc-
cesive, pentru care ω = 1.
64
2.8.2 Problemˇa rezolvatˇa
Exercit ¸iul 2.8.1. Sˇa se gˇaseascˇa primele 3 elemente ale traiectoriei vectorului (0, 0)
T
folosind metoda relaxˇarii succesive cu ω = 0.5, pentru sistemul:

4x + y = −1
4x + 3y = −2.
Rezolvare
Sistemul se poate scrie sub forma Ax = b, unde
A =

4 1
4 3

, b =

−1
−2

.
Matricea A se descompune ˆın suma L + D + U, cu
L =

0 0
4 0

, D =

4 0
0 3

, U =

0 1
0 0

.
Algoritmul converge dacˇa raza spectralˇa a matricei
M = −

L +
1
ω
D

−1
¸
1 −
1
ω

D + U

=

0.500 −0.125
0.333 0.583

este strict subunitarˇa. Efectuˆand calculele, obt ¸inem
ρ(M) = 0.75 < 1
¸si deci algoritmul este convergent.
ˆ
In continuare, aplicˇam formulele (2.42)-(2.43), plecˆand de la punctele
x
(0)
= 0, y
(0)
= 0, ¸si obt ¸inem:
x
(1)
= −0.1250000000
y
(1)
= −0.5000000000
x
(2)
= −0.1250000000
y
(2)
= −0.7500000000
x
(3)
= −0.0937500000
y
(3)
= −0.9166666667
Pentru comparat ¸ie, determinˇam solut ¸ia exactˇa a sistemului considerat:
x = −0.125 , y = −0.5.
2.8.3 Probleme propuse
Exercit ¸iul 2.8.2. Sˇa se verifice dacˇa se poate aplica metoda relaxˇarii succesive, ¸si ˆın
caz afirmativ sˇa se gˇaseascˇa primele 3 elemente ale ¸sirului de solut ¸ii part ¸iale, folosind o
subrelaxare ¸si o suprarelaxare. Comparat ¸i rezultatele obt ¸inute cu solut ¸ia exactˇa:
a)

x + 3y = −2
2x + y = 6
b)

x + 2y + z = 1
3x −y + 5z = 14
x + y −z = −2
65
2.8.4 Implementare
A. Algoritm
Observat ¸ia 2.8.2. Deoarece metoda relaxˇarii succesive este o metodˇa iterativˇa, trebuie
specificatˇa o condit ¸ie de oprire a algoritmului. Aceastˇa condit ¸ie este similarˇa cu cea
folositˇa ˆın paragrafele anterioare, ¸si anume:

n
¸
i=1
(x
(k+1)
i
−x
(k)
i
) < ε

n. (2.44)
Date de intrare: un sistem de ecuat ¸ii (o mult ¸ime de ecuat ¸ii), un punct init ¸ial, x
(0)
,
o relaxare, ω, o eroare ε.
Date de ie¸sire: solut ¸ia aproximativˇa a sistemului, obt ¸inutˇa ˆın urma aplicˇarii traiec-
toriei vectorului x
(0)
obt ¸inutˇa prin relaxˇari succesive pˆanˇa cˆand este ˆındeplinitˇa condit ¸ia
(2.44).
Algoritmul constˇa ˆın urmˇatoarele etape:
1. generarea matricei A a sistemului ¸si a vectorului b
• n - numˇarul de necunoscute (numˇarul de linii ale matricei A)
2. generarea matricelor L, D, U ¸si verificarea convergent ¸ei metodei:
ρ

L +
1
ω
D

−1
¸
1 −
1
ω

D + U

< 1
¸si
0 < ω < 2
3. construct ¸ia traiectoriei relaxˇarilor succesive
repetˇa
x
(k+1)
1
= (1 −ω) · x
(k)
1
+
ω
a
11
¸
b
1

n
¸
j=1
a
1j
· x
(k)
j
¸
(2.45)
x
(k+1)
i
= (1 −ω) · x
(k)
i
+
ω
a
ii
¸
b
i

i−1
¸
j=1
a
ij
· x
(k+1)
j

n
¸
j=i
a
ij
· x
(k)
j
¸
, i = 2, n (2.46)
pˆanˇa cˆand

n
¸
i=1
(x
(k+1)
i
−x
(k)
i
) < ε

n
66
B. Programe MAPLE ¸si rezultate
Prezentˇam comparativ rezultatele aplicˇarii metodei relaxˇarii succesive pentru diferite
valori ale lui ω:
> relsucc({3*x+y=5, x+2*y=5}, vector(2,[0,0]), 0.99, 0.0001);
x = 0.9919288541, y = 2.024277742
> relsucc({3*x+y=5, x+2*y=5}, vector(2,[0,0]), 0.9, 0.0001);
x = 0.9091141587, y = 2.272710330
> relsucc({3*x+y=5, x+2*y=5}, vector(2,[0,0]), 1.01, 0.0001);
x = 1.007912178, y = 1.976281288
> relsucc({3*x+y=5, x+2*y=5}, vector(2,[0,0]), 1.1, 0.0001);
x = 1.071425885, y = 1.785716899
> relsucc({3*x+y=5, x+2*y=5}, vector(2,[0,0]), 0.7, 0.0001);
x = 0.6250722364, y = 3.124921273
> relsucc({3*x+y=5, x+2*y=5}, vector(2,[0,0]), 1.3, 0.0001);
x = 1.176464330, y = 1.470600344
> relsucc({3*x+y=5, x+2*y=5}, vector(2,[0,0]), 1, 0.0001); #
> gauss-seidel
x = 1.000014289, y = 1.999992856
67
Capitolul 3
Rezolvarea ecuat ¸iilor ¸si a sistemelor
de ecuat ¸ii neliniare
Fie sistemul neliniar
F(x) = 0 (3.1)
unde F(x) este vectorul (f
1
(x), ..., f
n
(x))
T
, funct ¸iile f
1
, ..., f
n
: D ∈ R
n
→ R
1
sunt con-
siderate cunoscute, iar vectorul x = (x
1
, ..., x
n
)
T
este necunoscut.
3.1 Metoda punctului fix
3.1.1 Breviar teoretic
Solut ¸iile sistemului neliniar (3.1) se cautˇa printre punctele fixe x
(∗)
, adicˇa printre solut ¸iile
sistemului
G(x) = x (3.2)
obt ¸inut din sistemul init ¸ial prin alegerea
G(x) = x −[F

(x)]
−1
· F(x) (3.3)
unde F

(x) este matricea Jacobi asociatˇa vectorului F, matrice despre care s-a presupus
cˇa este continuˇa ¸si inversabilˇa.
Presupunem cˇa operatorul G are un punct fix x
(∗)
.
Definit ¸ia 3.1.1. Vom spune cˇa x
(∗)
este un punct de atract ¸ie dacˇa existˇa o sferˇa deschisˇa
S(x
(∗)
, r) = {x ∈ R
n
| x −x
(∗)
< r} cu urmˇatoarele proprietˇat ¸i:
1. S(x
(∗)
, r) ⊂ D ¸si x
(k)
generat de
x
(k+1)
= G(x
(k)
) (3.4)
este un ¸sir bine definit pentru ∀ x
(0)
∈ S(x
(∗)
, r);
2. ∀ x
(0)
∈ S(x
(∗)
, r) ¸sirul x
(k)
definit de (3.4) apart ¸ine lui D ¸si x
(k)
−−−−→
k→∞
x
(∗)
.
68
Teorema 3.1.1. Fie G : D ⊂ R
n
→R
n
un operator neliniar ¸si x
(∗)
∈ D un punct fix al
lui G. Dacˇa G este de clasˇa C
1
pe D ¸si raza spectralˇa ρ a matricei Jacobi a lui G ˆın x
(∗)
este strict subunitarˇa (ρ < 1), atunci x
(∗)
este un punct de atract ¸ie ¸si
limsup
k→∞
x
(k)
−x
(∗)

1/k
= ρ.
Teorema 3.1.2. Fie G : D ⊂ R
n
→R
n
un operator neliniar ¸si x
(∗)
∈ D un punct fix al
lui G. Dacˇa G este de clasˇa C
1
pe D ¸si norma µ a matricei Jacobi a lui G ˆın x
(∗)
este
strict subunitarˇa (µ < 1), atunci x
(∗)
este punct de atract ¸ie ¸si
limsup
k→∞
x
(k)
−x
(∗)

1/k
= µ.
Teorema 3.1.3. (Unicitatea punctului fix) Fie G : D ⊂ R
n
→ R
n
un operator neliniar.
Dacˇa G este de clasˇa C
1
pe D, ¸si dacˇa norma µ a matricei Jacobi asociatˇa operatorului
G este strict subunitarˇa (µ < 1) pentru orice x ∈ D, atunci pentru orice x
0
¸sirul de
aproximat ¸ii succesive
x
(k+1)
= G(x
k
), k = 0, 1, 2, . . . x
(0)
∈ D (3.5)
converge la un unic punct fix x
(∗)
∈ D.
Observat ¸ia 3.1.1. Norma unei matrice este datˇa de:
A = max
x=0
Ax
x
(3.6)
3.1.2 Problemˇa rezolvatˇa
Exercit ¸iul 3.1.1. Sˇa se gˇaseascˇa primii trei termeni ai ¸sirului de aproximat ¸ii succesive
folosind metoda punctului fix, pentru sistemul urmˇator:

x
2
1
+ x
2
6
−x
1
= 0 pe domeniul D = [0, 1] ×[1, 2]
x
1
+ x
2
2
8
−x
2
= 0
Rezolvare
Sistemul se mai scrie G(x) = x, unde
G =

x
2
1
+ x
2
6
,
x
1
+ x
2
2
8

T
, x = (x
1
, x
2
)
T
Calculˇam jacobianul lui G, ¸si obt ¸inem:
G

=

x
1
3
1
6
1
8
x
2
4

a cˇarui normˇa este:
max

1
8
,
1
4
|x
2
| ,
1
6
,
1
3
|x
1
|

69
Deoarece x
1
∈ [0, 1] ¸si x
2
∈ [1, 2], rezultˇa cˇa norma matricei G

este
2
3
< 1, ¸si deci pentru
orice punct init ¸ial x
(0)
∈ D, algoritmul converge.
Fie x
(0)
= (0.5, 0.5)
T
. Aplicˆand formula (3.5), obt ¸inem valorile pentru primii trei
termeni ai ¸sirului de aproximat ¸ii succesive:
x
(1)
1
= 0.1250000000
x
(1)
2
= 0.0468750000
x
(2)
1
= 0.0104166666
x
(2)
2
= 0.0015767415
x
(3)
1
= 0.0002808747
x
(3)
2
= 0.0000354201
Pentru comparat ¸ie, determinˇam solut ¸ia exactˇa a sistemului: x
(∗)
1
= 0, x
(∗)
2
= 0.
3.1.3 Probleme propuse
Exercit ¸iul 3.1.2. Sˇa se gˇaseascˇa o condit ¸ie ˆın care se poate aplica metoda punctului fix
asupra sistemului urmˇator, precum ¸si primii 3 termeni ai ¸sirului de aproximat ¸ii succesive
ale solut ¸iei:

x
2
+ y
2
−1 = 0
x
3
−y = 0
3.1.4 Implementare
A. Algoritmi
Date de intrare: un sistem de ecuat ¸ii (dat ca mult ¸ime de ecuat ¸ii), eqn, un punct
init ¸ial, x
0
¸si o eroare ε
Date de ie¸sire: solut ¸ia sistemului eqn obt ¸inutˇa prin metoda punctului fix, plecˆand
de la punctul init ¸ial x
0
, cu eroarea ε.
Algoritmul constˇa ˆın urmˇatorii pa¸si:
1. generarea matricei G ¸si verificarea condit ¸iei ca norma matricei G

sˇa fie strict sub-
unitarˇa
2. gˇasirea solut ¸iei aproximative
repetˇa
x
(k+1)
= G(x
k
)
pˆanˇa cˆand max
i=1,n
|x
(k+1)
i
−x
(k)
i
| < ε
B. Programe MAPLE ¸si rezultate
70
fixedpoint:=proc(eqn::set(equation), x0::vector, eps::float)
local x, n, g, i, j, jac, yo, test, k, y, jac1, eig;
if nops(eqn) <> vectdim(x0) then
ERROR(‘problema nu este bine pusa!‘)
fi;
n:=nops(eqn);
x:=[op(indets(eqn, name))];
if nops(x) <> n then
ERROR(‘numarul de ecuatii nu coincide cu numarul de
necunoscute!‘)
fi;
g:=vector(n,0);
for i from 1 to n do g[i]:=x[i]+lhs(eqn[i])-rhs(eqn[i]); od;
evalm(g);
jac:=Matrix(n,n,0);
for i from 1 to n do for j from 1 to n do
jac[i,j]:=jacobian(g,x)[i,j]; od;od;
jac1:=[];
for i from 1 to n do
for j from 1 to n do
jac1:=[op(jac1),jacobian(g,x)[i,j]];
od;
od;
eig:=max(op(jac1));
WARNING(‘punctul de plecare trebuie ales astfel incat expresia
\%1 sa fie strict subunitara‘,eig);
yo:=x0;
test:=1; k:=1;
while test>=eps and k<50 do
for i from 1 to n do
test:=0;
y[i]:=evalf(subs(seq(x[k]=yo[k],k=1..n),g[i]));
if abs(y[i]-yo[i])>test then test:=abs(y[i]-yo[i]); fi;
yo[i]:=y[i];
if test>10^10 then ERROR(‘Algoritmul nu converge!‘);fi;
od;
k:=k+1;
od;
if k>=50 then
ERROR(‘sunt necesare mai mult de 50 de iteratii pentru gasirea
solutiei‘)
fi;
RETURN(seq(x[k]=y[k],k=1..n));
end:
debug(fixedpoint):
71
fixedpoint({(x^2+y)/6-x=0, (x+y^2)/8-y=0},vector(2,[0.5,0.5]),
0.0001);
{--> enter fixedpoint, args = {1/6*x^2+1/6*y-x = 0, 1/8*x+1/8*y^2-y =
0}, array(1 .. 2,[(1)=.5,(2)=.5]), .1e-3
n := 2
x := [x, y]
g := [0, 0]
g
1
:=
x
2
6
+
y
6
g
2
:=
x
8
+
y
2
8
¸
x
2
6
+
y
6
,
x
8
+
y
2
8

jac :=
¸
0 0
0 0

jac
1, 1
:=
x
3
jac
1, 2
:=
1
6
jac
2, 1
:=
1
8
jac
2, 2
:=
y
4
jac1 := []
jac1 := [
x
3
]
jac1 := [
x
3
,
1
6
]
jac1 := [
x
3
,
1
6
,
1
8
]
jac1 := [
x
3
,
1
6
,
1
8
,
y
4
]
eig := max(
1
6
,
x
3
,
y
4
)
Warning, punctul de plecare trebuie ales astfel incat expresia
max(1/6,1/3*x,1/4*y) sa fie strict subunitara
yo := [0.5, 0.5]
test := 1
k := 1
test := 0
y
1
:= 0.1250000000
test := 0.3750000000
yo
1
:= 0.1250000000
test := 0
72
y
2
:= 0.04687500000
test := 0.4531250000
yo
2
:= 0.04687500000
k := 2
test := 0
y
1
:= 0.01041666667
test := 0.1145833333
yo
1
:= 0.01041666667
test := 0
y
2
:= 0.001576741537
test := 0.04529825846
yo
2
:= 0.001576741537
k := 3
test := 0
y
1
:= 0.0002808747470
test := 0.01013579192
yo
1
:= 0.0002808747470
test := 0
y
2
:= 0.00003542010761
test := 0.001541321429
yo
2
:= 0.00003542010761
k := 4
test := 0
y
1
:= 0.5916499705 10
−5
test := 0.0002749582473
yo
1
:= 0.5916499705 10
−5
test := 0
y
2
:= 0.7397192861 10
−6
test := 0.00003468038832
yo
2
:= 0.7397192861 10
−6
k := 5
<-- exit fixedpoint (now at top level) = x = .5916499705e-5, y =
.7397192861e-6}
x = 0.5916499705 10
−5
, y = 0.7397192861 10
−6
3.2 Metoda lui Newton
3.2.1 Breviar teoretic
Solut ¸ia x
(∗)
a sistemului neliniar (3.1) este datˇa de limita ¸sirului x
(k)
, unde:
x
(k+1)
= x
(k)
−[F

(x
(k)
)]
−1
· F(x
(k)
), k = 0, 1, 2, . . . (3.7)
ˆın cazul ¸sirului de iterat ¸ii succesive clasic al lui Newton, respectiv
x
(k+1)
= x
(k)
−[F

(x
(0)
)]
−1
· F(x
(k)
), k = 0, 1, 2, . . . (3.8)
73
ˆın cazul ¸sirului de iterat ¸ii succesive simplificat al lui Newton.
Teorema 3.2.1. Fie F : D ⊂ R
n
→R
n
¸si ecuat ¸ia F(x) = 0, despre care presupunem cˇa
are o solut ¸ie x
(∗)
∈ D. Dacˇa existˇa o sferˇa deschisˇa S(x
(∗)
, r) = {x ∈ R
n
| x−x
(∗)
< r}
pe care F este de clasˇa C
1
¸si F

(x
(∗)
) este nesingularˇa atunci, ˆın cazul metodei lui Newton
clasice, x
(∗)
este un punct de atract ¸ie.
Teorema 3.2.2.
ˆ
In condit ¸iile teoremei precedente, dacˇa raza spectralˇa ρ a matricei
I −[F

(x
(0)
)]
−1
· F

(x
(∗)
)
este strict subunitarˇa atunci, ˆın cazul metodei lui Newton simplificatˇa, x
(∗)
este un punct
fix atractiv.
Un caz particular al metodei lui Newton este acela pentru care n = 1.
ˆ
In acest caz
ecuat ¸ia (3.1) devine
f(x) = 0, (3.9)
¸sirul de iterat ¸ii succesive clasic al lui Newton se scrie
x
(k+1)
= x
(k)

f(x
(k)
)
f

(x
(k)
)
, k = 0, 1, 2, . . . (3.10)
iar ¸sirul de iterat ¸ii succesive simplificat al lui Newton se scrie
x
(k+1)
= x
(k)

f(x
(k)
)
f

(x
(0)
)
, k = 0, 1, 2, . . . (3.11)
3.2.2 Probleme rezolvate
Exercit ¸iul 3.2.1. Sˇa se gˇaseascˇa primii 3 termeni ai ¸sirului de iterat ¸ii succesive (clasic
¸si simplificat) al lui Newton, cu x
(0)
= (0.7, 0.4)
T
pentru sistemul:

x
2
+ y
2
−1 = 0
x
3
−y = 0.
Rezolvare
Sistemul se mai scrie F(x) = 0, unde
F(x) = (x
2
+ y
2
−1, x
3
−y)
T
, x = (x, y)
T
.
Jacobianul operatorului F este:
F

(x) =

2x 2y
3x
2
−1

A. Rezolvare folosind metoda lui Newton clasicˇa
Determinˇam produsul:
[F

(x)]
−1
F(x) =

(x
2
+ y
2
−1)
2x(1 + 3yx)
+
y(x
3
−y)
x(1 + 3yx)
,
3x(x
2
+ y
2
−1)
2 + 6yx

(x
3
−y)
1 + 3yx

T
74
¸si aplicˇam formula (3.7), considerˆand
x
(0)
= 0.7
y
(0)
= 0.4.
Astfel, obt ¸inem primii 3 termeni ai ¸sirului de iterat ¸ii succesive clasic al lui Newton:
x
(1)
= 0.8535714287
y
(1)
= 0.5800885499
x
(2)
= 0.8267993467
y
(2)
= 0.5637617094
x
(3)
= 0.8260319270
y
(3)
= 0.5636241719.
B. Rezolvare folosind metoda lui Newton simplificatˇa
Aplicˆand formula (3.8), obt ¸inem primii 3 termeni ai ¸sirului de iterat ¸ii succesive sim-
plificat al lui Newton:
x
(1)
= 0.8535714286
y
(1)
= 0.5841767661
x
(2)
= 0.8147421666
y
(2)
= 0.5577269491
x
(3)
= 0.8297474476
y
(3)
= 0.5653470981.
Exercit ¸iul 3.2.2. Sˇa se aplice metoda lui Newton (clasicˇa ¸si simplificatˇa), pentru aflarea
solut ¸iei ecuat ¸iei
sin(x) −x = 0,
plecˆand de la punctul x
(0)
= 0.2.
Rezolvare
Se observˇa cˇa o solut ¸ie a ecuat ¸iei este x
(∗)
= 0.
Dacˇa notˇam
f(x) = sin(x) −x,
atunci f

(x) = cos(x) −1.
Plecˆand de la x
(0)
= 0.2 ¸si aplicˆand formula (3.10), obt ¸inem:
x
(1)
= 0.1332443177
x
(2)
= 0.0888032392
x
(3)
= 0.0591943762
x
(4)
= 0.0394606157
x
(5)
= 0.0263064006 etc.
75
Dupˇa 13 iterat ¸ii se obt ¸ine o solut ¸ie aproximativˇa a ecuat ¸iei, cu eroarea ε = 0.001:
x
(13)
= 0.001539688244.
Aplicˆand iterat ¸ia datˇa de formula (3.11), obt ¸inem:
x
(1)
= 0.1332443177
x
(2)
= 0.1134824727
x
(3)
= 0.1012708415
x
(4)
= 0.0925912882
x
(5)
= 0.0859570495 etc.
Dupˇa 18147 iterat ¸ii se obt ¸ine o solut ¸ie aproximativˇa a ecuat ¸iei, cu eroarea ε =
0.00000005:
x
(18147)
= 0.001814907756.
ˆ
In continuare, pentru ecuat ¸ia consideratˇa, prezentˇam comparativ ¸sirurile aproximat ¸iilor
succesive clasicˇa ¸si respectiv simplificatˇa ale lui Newton, raportate la graficul funct ¸iei f.
metoda lui Newton clasica
–0.0012
–0.001
–0.0008
–0.0006
–0.0004
–0.0002
0
0.05 0.1 0.15 0.2
x
76
metoda lui Newton simplificata
–0.0012
–0.001
–0.0008
–0.0006
–0.0004
–0.0002
0
0.05 0.1 0.15 0.2
x
3.2.3 Probleme propuse
Exercit ¸iul 3.2.3. Pornind de la punctul (x
0
, y
0
) = (0.5, 0.5), sˇa se gˇaseascˇa primii 3
termeni ai ¸sirului de solut ¸ii part ¸iale, folosind metoda lui Newton clasicˇa ¸si metoda lui
Newton simplificatˇa:

x
2
+ y
6
−x = 0
x + y
2
8
−y = 0.
Exercit ¸iul 3.2.4. Pornind de la punctul x
0
= 0.5, sˇa se gˇaseascˇa primii 3 termeni ai
¸sirului de solut ¸ii part ¸iale, folosind cele douˇa variante ale metodei lui Newton:
x
3
+ x = 0
3.2.4 Implementare
A. Algoritmi
A1. Cazul n-dimensional
Date de intrare: un sistem de ecuat ¸ii eqn, un punct init ¸ial, x
0
¸si o eroare ε
Date de ie¸sire: solut ¸ia aproximativˇa a sistemului, obt ¸inutˇa folosind metoda lui
Nexton clasicˇa, respectiv metoda lui Newton simplificatˇa
Algoritmul constˇa ˆın urmˇatorii pa¸si:
77
1. generarea funct ¸iei F
2. a) metoda lui Newton clasicˇa
repetˇa
x
(k+1)
= x
(k)
−[F

(x
(k)
)]
−1
· F(x
(k)
)
pˆanˇa cˆand max
i=1,n
|x
(k+1)
i
−x
(k)
i
| < ε
b) metoda lui Newton simplificatˇa
repetˇa
x
(k+1)
= x
(k)
−[F

(x
(0)
)]
−1
· F(x
(k)
)
pˆanˇa cˆand max
i=1,n
|x
(k+1)
i
−x
(k)
i
| < ε
A2. Cazul unidimensional
Date de intrare: o ecuat ¸ie eqn, un punct init ¸ial, x
0
¸si o eroare ε
Date de ie¸sire: solut ¸ia aproximativˇa a ecuat ¸iei, obt ¸inutˇa folosind metoda lui Nexton
clasicˇa, respectiv metoda lui Newton simplificatˇa
Algoritmul constˇa ˆın urmˇatorii pa¸si:
1. generarea funct ¸iei f
2. a) metoda lui Newton clasicˇa
repetˇa
x
(k+1)
= x
(k)

f(x
(k)
)
f

(x
(k)
)
pˆanˇa cˆand |x
(k+1)
−x
(k)
| < ε
b) metoda lui Newton simplificatˇa
repetˇa
x
(k+1)
= x
(k)

f(x
(k)
)
f

(x
(0)
)
pˆanˇa cˆand |x
(k+1)
−x
(k)
| < ε
B. Programe MAPLE ¸si rezultate
Pentru metoda lui Newton clasicˇa, respectiv simplificatˇaˆın n dimensiuni, am construit
procedurile cnewton, respectiv snewton.
cnewton:=proc(eqn::set(equation), x0::vector, eps::float)
local n,x,y,i,j,f,jc,y0,c,jc0,test;
n:=nops(eqn);
f:=vector(n,0);
y0:=vector(n,[seq(x0[i]+1,i=1..n)]);
78
x:=[op(indets(eqn, name))];
y:=x0;
for i from 1 to n do f[i]:=lhs(eqn[i])-rhs(eqn[i]); od;
jc:=evalf(multiply(inverse(jacobian(f,x)),f));
c:=1; test:=max(seq(abs(y0[i]-y[i]), i=1..n));
while test>eps do
if c>1000 then ERROR(‘algoritmul nu converge‘) fi;
for i from 1 to n do
y0[i]:=y[i];
jc0[i]:=evalf(subs(seq(x[k]=y[k],k=1..n),jc[i]));
y[i]:=y[i]-jc0[i];
od;
test:=max(seq(abs(jc0[i]), i=1..n));
c:=c+1;
od;
RETURN(seq(x[i]=y[i],i=1..n));
end:
debug(cnewton):
cnewton({x^2+y^2-1=0,x^3-y=0},vector(2,[0.7,0.4]),0.0001);
> cnewton({x^2+y^2-1=0,x^3-y=0},vector(2,[0.7,0.4]),0.0001);
{--> enter cnewton, args = {x^2+y^2-1 = 0, x^3-y = 0}, array(1 ..
2,[(1)=.7,(2)=.4]), .1e-3
n := 2
f := [0, 0]
y0 := [1.7, 1.4]
x := [x, y]
y := [0.7, 0.4]
f
1
:= x
2
+ y
2
−1
f
2
:= x
3
−y
jc :=
¸
0.5000000000 (x
2
+ y
2
−1.)
x(1. + 3. y x)
+
y (x
3
−1. y)
x(1. + 3. y x)
,
1.500000000 x(x
2
+ y
2
−1.)
1. + 3. y x

1. (x
3
−1. y)
1. + 3. y x

c := 1
test := 1.0
y0
1
:= 0.7
jc0
1
:= −0.1535714287
y
1
:= 0.8535714287
y0
2
:= 0.4
jc0
2
:= −0.1800885499
y
2
:= 0.5800885499
79
test := 0.1800885499
c := 2
y0
1
:= 0.8535714287
jc0
1
:= 0.02677208199
y
1
:= 0.8267993467
y0
2
:= 0.5800885499
jc0
2
:= 0.01632684047
y
2
:= 0.5637617094
test := 0.02677208199
c := 3
y0
1
:= 0.8267993467
jc0
1
:= 0.0007674197500
y
1
:= 0.8260319270
y0
2
:= 0.5637617094
jc0
2
:= 0.0001375374562
y
2
:= 0.5636241719
test := 0.0007674197500
c := 4
y0
1
:= 0.8260319270
jc0
1
:= 0.5693512518 10
−6
y
1
:= 0.8260313576
y0
2
:= 0.5636241719
jc0
2
:= 0.9765710647 10
−8
y
2
:= 0.5636241621
test := 0.5693512518 10
−6
c := 5
<-- exit cnewton (now at top level) = x = .8260313576, y =
.5636241621}
x = 0.8260313576, y = 0.5636241621
snewton({x^2+y^2-1=0,x^3-y=0},vector(2,[0.7,0.4]),0.0001);
x = 0.8260165866, y = 0.5636182992
Pentru metoda lui Newton clasicˇa, respectiv simplificatˇa ˆıntr-o dimensiune, am con-
struit procedurile cnewton1d, respectiv snewton1d.
cnewton1d:=proc(eqn::equation, x0::numeric, eps::float)
local f,x,fp,y,c,test,y0;
x:=op(indets(eqn, name));
f:=lhs(eqn)-rhs(eqn);
fp:=diff(f,x);
y:=x0;
c:=1; test:=1;
80
while test>eps do
if c>1000 then ERROR(‘Algoritmul nu converge!‘) fi;
y0:=y;
y:=evalf(y-subs(x=y,f)/subs(x=y,fp));
test:=abs(y-y0);
c:=c+1;
od;
RETURN(x=y);
end:
debug(cnewton1d):
cnewton1d(sin(xx)-xx=0, 0.2,0.001);
> cnewton1d(sin(xx)-xx=0, 0.2,0.001);
{--> enter cnewton1d, args = sin(xx)-xx = 0, .2, .1e-2
x := xx
f := sin(xx) −xx
fp := cos(xx) −1
y := 0.2
c := 1
test := 1
y0 := 0.2
y := 0.1332443177
test := 0.0667556823
c := 2
y0 := 0.1332443177
y := 0.08880323922
test := 0.04444107848
c := 3
y0 := 0.08880323922
y := 0.05919437624
test := 0.02960886298
c := 4
y0 := 0.05919437624
y := 0.03946061575
test := 0.01973376049
c := 5
y0 := 0.03946061575
y := 0.02630640064
test := 0.01315421511
c := 6
y0 := 0.02630640064
y := 0.01753738944
test := 0.00876901120
81
c := 7
y0 := 0.01753738944
y := 0.01169155254
test := 0.00584583690
c := 8
y0 := 0.01169155254
y := 0.007794289520
test := 0.003897263020
c := 9
y0 := 0.007794289520
y := 0.005196191723
test := 0.002598097797
c := 10
y0 := 0.005196191723
y := 0.003464143309
test := 0.001732048414
c := 11
y0 := 0.003464143309
y := 0.002309495886
test := 0.001154647423
c := 12
y0 := 0.002309495886
y := 0.001539688244
test := 0.000769807642
c := 13
<-- exit cnewton1d (now at top level) = xx = .1539688244e-2}
xx = 0.001539688244
82
Capitolul 4
Interpolare polinomialˇa. Funct ¸ii
spline
ˆ
In practicˇa este des ˆıntˆalnitˇa situat ¸ia ˆın care se cunoa¸ste valoarea unei funct ¸ii f ˆın diferite
puncte x
i
¸si se cere valoarea sa ˆıntr-un punct intermediar. De exemplu, se poate cere
valoarea temperaturii aerului la ora 14.30, cunoscˆandu-se temperaturile aerului luate din
orˇa ˆın orˇa.
Astfel, se pune problema ca, plecˆand de la punctele date (x
i
, y
i
) sˇa se determine o
funct ¸ie de interpolare al cˇarei grafic sˇa treacˇa prin toate punctele date. Interpolarea
se nume¸ste polinomialˇa atunci cˆand se cautˇa funct ¸ii polinomiale avˆand proprietˇat ¸ile
ment ¸ionate.
4.1 Polinomul lui Newton cu diferent ¸e divizate
4.1.1 Breviar teoretic
Fie funct ¸ia f : X →R
1
datˇa prin: y
i
= f(x
i
), i = 0, 1, . . . , m.
Diferent ¸a divizatˇa de ordinul ˆıntˆai a lui f relativ la punctul x
r
este numˇarul definit
de fract ¸ia:
(D
1
f)(x
r
) =
f(x
r+1
) −f(x
r
)
x
r+1
−x
r
. (4.1)
Diferent ¸a divizatˇa de ordinul al doilea a funct ¸iei f relativ la punctul x
r
este prin
definit ¸ie numˇarul:
(D
2
f)(x
r
) =
(D
1
f)(x
r+1
) −(D
1
f)(x
r
)
x
r+2
−x
r
=
[x
r+1
, x
r+2
, f] −[x
r
, x
r+1
, f]
x
r+2
−x
r
(4.2)
Prin calcul se gˇase¸ste cˇa diferent ¸a divizatˇa de ordin k a lui f ˆın x
r
este:
(D
k
f)(x
r
) =
k
¸
i=0
f(x
r+i
)
k
¸
m=0
m =i
(x
r+i
−x
r+m
)
(4.3)
83
Polinomul lui Newton cu diferent ¸e divizate se define¸ste ca fiind polinomul:
P
m
(x) =f(x
0
) + (D
1
f)(x
0
)(x −x
0
) + (D
2
f)(x
0
)(x −x
0
)(x −x
1
) + . . . (4.4)
+ (D
m
f)(x
0
)(x −x
0
)(x −x
1
) . . . (x −x
m−1
)
Astfel, funct ¸ia f se poate aproxima dupˇa cum urmeazˇa:
f(x) = P
m
(x) + R
m
(x), (4.5)
unde
R
m
(x) =
f
(m+1)
(ξ)
(m + 1)!
(x −x
0
)(x −x
1
) . . . (x −x
m−1
)(x −x
m
) (4.6)
este restul sau eroarea de aproximare la interpolarea polinomialˇa.
ˆ
In cazul ˆın care x
i+1
− x
i
= h = const (i.e. nodurile x
i
sunt echidistante), se pot
introduce diferent ¸ele finite. Astfel,
△f(x
k
) = f(x
k+1
) −f(x
k
) (4.7)
se nume¸ste diferent ¸ˇa finitˇa la dreapta, iar
▽f(x
k
) = f(x
k
) −f(x
k−1
) (4.8)
se nume¸ste diferent ¸ˇa finitˇa la stˆanga.
Diferent ¸ele finite de ordin superior se definesc recursiv, dupˇa cum urmeazˇa:

n
f(x
k
) = △
n−1
f(x
k+1
) −△
n−1
f(x
k
) (4.9)

n
f(x
k
) = ▽
n−1
f(x
k
) −▽
n−1
f(x
k−1
) (4.10)
Legˇatura dintre diferent ¸ele divizate ¸si diferent ¸ele finite este urmˇatoarea:
(D
m
f)(x
0
) =

m
f(x
0
)
m!h
m
, (D
m
f)(x
m
) =

m
f(x
m
)
m!h
m
. (4.11)
ˆ
In acest fel, obt ¸inem polinomul lui Newton cu diferent ¸e finite la dreapta:
p
m
(x) =f(x
0
) +
△f(x
0
)
h
(x −x
0
) +

2
f(x
0
)
2!h
2
(x −x
0
)(x −x
1
) + . . . + (4.12)
+

m
f(x
0
)
m!h
m
(x −x
0
) . . . (x −x
m−1
),
respectiv polinomul lui Newton cu diferent ¸e finite la stˆanga:
p
m
(x) =f(x
m
) +
▽f(x
m
)
h
(x −x
m
) +

2
f(x
m
)
2!h
2
(x −x
m
)(x −x
m−1
) + . . . (4.13)
+

m
f(x
m
)
m!h
m
(x −x
m
) . . . (x −x
1
).
84
4.1.2 Probleme rezolvate
Exercit ¸iul 4.1.1. Sˇa se gˇaseascˇa polinomul de interpolare pentru urmˇatorul set de date:
x 1 2 3 4 5
f(x) 2 5 10 17 26
folosind
a) diferent ¸e divizate
b) diferent ¸e finite la dreapta
c) diferent ¸e finite la stˆanga.
Rezolvare
A. Polinomul lui Newton cu diferent ¸e divizate
1. Obt ¸inerea diferent ¸elor divizate:
x f(x) D
1
f(x) D
2
f(x) D
3
f(x) D
4
f(x)
1 2
5 −2
2 −1
= 3
2 5
5 −3
3 −1
= 1
10 −5
3 −2
= 5
1 −1
4 −1
= 0
3 10
7 −5
4 −2
= 1
0 −0
5 −1
= 0
17 −10
4 −3
= 7
1 −1
5 −2
= 0
4 17
9 −7
5 −3
= 1
26 −17
5 −4
= 9
5 26
S¸irul diferent ¸elor divizate este ¸sirul primelor valori de pe fiecare coloanˇa, ˆıncepˆand cu
valorile funct ¸iei, adicˇa:
[2, 3, 1, 0, 0].
2. Obt ¸inerea polinomului de interpolare
P(x) =2 + 3 · (x −1) + 1 · (x −1)(x −2) + 0 · (x −1)(x −2)(x −3)+
+ 0 · (x −1)(x −2)(x −3)(x −4) =
=2 + 3x −3 + x
2
−3x + 2 =
=x
2
+ 1.
B. Polinomul lui Newton cu diferent ¸e finite la dreapta
Aceastˇa metodˇa este aplicabilˇa, deoarece x
i+1
−x
i
= 1
not
= h, i = 1, 4.
1. Obt ¸inerea diferent ¸elor finite la dreapta
85
x f(x) △
1
f(x) △
2
f(x) △
3
f(x) △
4
f(x)
1 2 5 −2 = 3 5 −3 = 2 2 −2 = 0 0 −0 = 0
2 5 10 −5 = 5 7 −5 = 2 2 −2 = 0 −
3 10 17 −10 = 7 9 −7 = 2 − −
4 17 26 −17 = 9 − − −
5 26 − − − −
S¸irul diferent ¸elor finite la dreapta este ¸sirul rezultatelor de pe prima linie, ˆıncepˆand
cu valorile funct ¸iei, adicˇa:
[2, 3, 2, 0, 0].
2. Obt ¸inerea polinomului de interpolare
P(x) =2 +
3
1
(x −1) +
2
2! · 1
2
(x −1)(x −2) +
0
3! · 1
3
(x −1)(x −2)(x −3)+
+
0
4! · 1
4
(x −1)(x −2)(x −3)(x −4) =
=2 + 3x −3 + x
2
−3x + 2 =
=x
2
+ 1.
C. Polinomul lui Newton cu diferent ¸e finite la stˆanga
Aceastˇa metodˇa este aplicabilˇa, deoarece x
i+1
−x
i
= 1
not
= h, i = 1, 4.
1. Obt ¸inerea diferent ¸elor finite la stˆanga
x f(x) ▽
1
f(x) ▽
2
f(x) ▽
3
f(x) ▽
4
f(x)
1 2 − − − −
2 5 5 −2 = 3 − − −
3 10 10 −5 = 5 5 −3 = 2 − −
4 17 17 −10 = 7 7 −5 = 2 2 −2 = 0 −
5 26 26 −17 = 9 9 −7 = 2 2 −2 = 0 0 −0 = 0
S¸irul diferent ¸elor finite la stˆanga este ¸sirul rezultatelor de pe ultima linie, ˆıncepˆand
cu valorile funct ¸iei, adicˇa:
[26, 9, 2, 0, 0].
86
2. Obt ¸inerea polinomului de interpolare
P(x) =26 +
9
1
(x −5) +
2
2! · 1
2
(x −5)(x −4) +
0
3! · 1
3
(x −5)(x −4)(x −3)+
+
0
4! · 1
4
(x −5)(x −4)(x −3)(x −2) =
=26 + 9x −45 + x
2
−9x + 20 =
=x
2
+ 1.
4.1.3 Probleme propuse
Exercit ¸iul 4.1.2. Sˇa se gˇaseascˇa polinomul de interpolare folosind diferent ¸e divizate,
diferent ¸e finite la stˆanga ¸si diferent ¸e finite la dreapta pentru urmˇatoarele seturi de date:
a)
x −1 0 1 2
f(x) 2 1 0 −1
b)
x
π
2
π

2

f(x) 1 0 −1 0 1
4.1.4 Implementare
A. Algoritmi
Date de intrare: lista argumentelor x ale funct ¸iei, lista valorilor fx ale funct ¸iei, ¸si
o variabilˇa z
Date de ie¸sire: valoarea polinomului de interpolare ˆın acel numˇar, dacˇa z este un
numˇar, respectiv expresia polinomului de interpolare, dacˇa z este o nedeterminatˇa
Algoritm pentru diferent ¸e divizate
1. obt ¸inerea diferent ¸elor divizate
aux = fx
difdiv = [fx
1
]
n = numˇarul de elemente ale listei x
n
aux
= numˇarul de elemente ale listei aux
pentru s = 1, n −1
calculeazˇa elementele listei dd, astfel: dd
k
=
aux
k
−aux
k−1
x
k+s−1
−x
k−1
, k = 2, n
aux
adaugˇa elementul dd
1
la lista difdiv
aux = dd
2. obt ¸inerea polinomului de interpolare
P = difdiv
n
pentru i de la n −1 la 1
P = P · (z −x
i
) + difdiv
i
87
Algoritm pentru diferent ¸e finite la dreapta
1. obt ¸inerea diferent ¸elor finite la dreapta
aux = fx
dfs = [fx
1
]
n = numˇarul de elemente ale listei aux
pentru k = n −1, 1
pentru i = 1, k
aux
i
= aux
i+1
−aux
i
eliminˇa elementul aux
n
din lista aux
n = n −1
adaugˇa elementul aux
1
la lista dfd
2. obt ¸inerea polinomului de interpolare
h = x
2
−x
1
P =
dfd
n
(n −1)! · h
n−1
pentru i de la n −1 la 1
P = P · (z −x
i
) +
dfd
i
(i −1)! · h
i−1
Algoritm pentru diferent ¸e finite la stˆanga
1. obt ¸inerea diferent ¸elor finite la stˆanga
aux = fx
n = numˇarul de elemente ale listei aux
dfs = [fx
n
]
pentru k = 1, n −1
pentru i = 1, n −k
pentru i = 1, k
aux
i
= aux
i+1
−aux
i
eliminˇa elementul aux
n−k+1
din lista aux
adaugˇa elementul aux
n−k
la lista dfs
2. obt ¸inerea polinomului de interpolare
h = x
2
−x
1
P =
dfs
n
(n −1)! · h
n−1
pentru i de la n −1 la 1
P = P · (z −x
i
) +
dfs
i
(i −1)! · h
i−1
88
B. Programe MAPLE ¸si rezultate
Pentru polinomul lui Newton cu diferent ¸e divizate, am folosit urmˇatoarele proceduri:
difdiv care construie¸ste ¸sirul diferent ¸elor divizate, ¸si ddinterp care construie¸ste polino-
mul de interpolare.
difdiv:=proc(x::list, fx::list)
local aux, dd, n, s, d1, k;
if nops(x)<>nops(fx) then
ERROR(‘primul si al doilea argument trebuie sa aibe
acelasi numar de elemente‘);
fi;
aux:=fx;
dd:=[fx[1]];
n:=nops(x);
for s from 1 to n-1 do
d1:=[seq((aux[k]-aux[k-1])/(x[k+s-1]-x[k-1]),
k=2..nops(aux))];
dd:=[op(dd), d1[1]];
aux:=d1;
od;
RETURN(dd);
end:
ddinterp:=proc(x::list, fx::list,xx)
local dd, pol, i;
if evalb(type(xx,numeric) and (xx<x[1] or xx>x[nops(x)])) then
WARNING (‘Polinomul de interpolare da rezultate corecte doar
pentru x in intervalul [%1,%2]‘, x[1],x[nops(x)]);
fi;
dd:=difdiv(x,fx);
pol:=dd[nops(dd)];
for i from nops(dd)-1 by -1 to 1 do
pol:=pol*(xx-x[i])+dd[i];
od;
RETURN(simplify(pol));
end:
Testˇam acest program pentru calculul diferent ¸elor divizate de la problema rezolvatˇa
anterior.
x:=[1,2,3,4,5]: fx:=[2,5,10,17,26]: difdiv(x,fx);
[2, 3, 1, 0, 0]
Pentru calculul polinomului de interpolare, avem douˇa variante:
89
ddinterp(x,fx,10);
Warning, Polinomul de interpolare da rezultate corecte doar
pentru x in intervalul [1,5]
101
sau
ddinterp(x,fx,z);
z
2
+ 1
Observat ¸ia 4.1.1. Polinomul de interpolare dˇa rezultate exacte pentru funct ¸ii polinomi-
ale de grad maxim n, unde n este numˇarul de puncte ˆın care se cunoa¸ste valoarea funct ¸iei
cˇautate.
Observat ¸ia 4.1.2. Fie o funct ¸ie tabelatˇa, datˇa prin lista ordonatˇa a variabilelor [x
1
=
min, x
2
, ..., x
n
= max], ¸si lista valorilor sale [f
1
, f
2
, ..., f
n
]. Polinomul de interpolare dˇa
rezultate apropiate de valoarea funct ¸iei doar pentru x ˆın intervalul [x
1
, x
n
]. Pentru a
ilustra acest fapt, considerˇam funct ¸ia sin x pe intervalul [0, 2π], ¸si construim polinomul
de interpolare cu diferent ¸e divizate. Pentru o vizualizare mai bunˇa, am reprezentat grafic
punctele de interpolare, funct ¸ia sin x ¸si polinomul de interpolare.
Avem astfel:
x:=[0,Pi/2,Pi,3*Pi/2,2*Pi]: fx:=[0,1,0,-1,0]:
f:=ddinterp(x,fx,z);
p1:=plot(f, z=-2..8, color=red):
p2:=pointplot([seq([x[i],fx[i]],i=1..nops(x))], symbol=circle):
p3:=plot(sin(t), t=-2..8, color=green):
display(p1,p2,p3);
f :=
8(z
2
−3zπ + 2π
2
)z

3
90
–2
–1
0
1
–2 2 4 6 8
z
Pentru polinomul lui Newton cu diferent ¸e finite la dreapta, respectiv la stˆanga, am
folosit proceduri similare celor folosite pentru polinomul lui Newton cu diferent ¸e divizate.
Observat ¸ia 4.1.3. Fie o funct ¸ie tabelatˇa, datˇa prin lista ordonatˇa a variabilelor, [x
1
=
min, x
2
, ..., x
n
= max], ¸si lista valorilor sale, [f
1
, f
2
, ..., f
n
]. Polinomul de interpolare cu
diferent ¸e finite nu aproximeazˇa bine funct ¸ia, pentru valori ale lui x ˆın afara intervalului
[x
1
, x
n
]. Un exemplu intuitiv ˆın acest sens ˆıl constituie urmˇatoarea secvent ¸ˇa de program:
x:=[0,Pi/2,Pi,3*Pi/2,2*Pi]: fx:=[1,0,-1,0,1]:
f:=dfdinterp(x,fx,z);
g:=dfsinterp(x,fx,z);
p1d:=plot(f, z=-1.5..7.5, color=red):
p1s:=plot(f, z=-1.5..7.5, color=red):
p2:=pointplot([seq([x[i],fx[i]],i=1..nops(x))], symbol=circle):
p3:=plot(cos(t), t=-2..8, color=black, thickness=2):
display(p1d,p2,p3);
display(p1s,p2,p3);
al cˇarei rezultat este:
f := −
8 z
4
−32 z
3
π + 34 z
2
π
2
−4 z π
3
−3 π
4
3 π
4
g := −
8 z
4
−16 z
3
π + 10 z
2
π
2
−8 z π
3
−3 π
4
3 π
4
91
Polinomul de interpolare cu diferente finite la dreapta
–3
–2
–1
0
1
–2 2 4 6 8
z
Polinomul de interpolare cu diferente finite la stanga
–3
–2
–1
0
1
–2 2 4 6 8
z
4.2 Polinomul de interpolare Lagrange
4.2.1 Breviar teoretic
Fie o funct ¸ie tabelatˇa, datˇa prin lista ordonatˇa a variabilelor
[x
0
= min, x
1
, ..., x
m
= max], ¸si lista valorilor sale [f
0
, f
1
, ..., f
m
].
Polinomul de interpolare Lagrange care aproximeazˇa funct ¸ia f este
(L
m
f)(x) =
m
¸
i=0
l
i
(x) · f
i
(4.14)
unde
l
i
(x) =
(x −x
0
) . . . (x −x
i−1
)(x −x
i+1
) . . . (x −x
m
)
(x
i
−x
0
) . . . (x
i
−x
i−1
)(x
i
−x
i+1
) . . . (x
i
−x
m
)
, i = 0, m (4.15)
92
se numesc polinoame de interpolare Lagrange fundamentale.
4.2.2 Probleme rezolvate
Exercit ¸iul 4.2.1. Sˇa se gˇaseascˇa polinomul de interpolare Lagrange pentru funct ¸ia
x 1 2 3 4 5
f(x) 2 5 10 17 26
Rezolvare
Polinoamele de interpolare Lagrange fundamentale sunt:
l
0
(x) =
(x −2)(x −3)(x −4)(x −5)
(1 −2)(1 −3)(1 −4)(1 −5)
l
1
(x) =
(x −1)(x −3)(x −4)(x −5)
(2 −1)(2 −3)(2 −4)(2 −5)
l
2
(x) =
(x −1)(x −2)(x −4)(x −5)
(3 −1)(3 −2)(3 −4)(3 −5)
l
3
(x) =
(x −1)(x −2)(x −3)(x −5)
(4 −1)(4 −2)(4 −3)(4 −5)
l
4
(x) =
(x −1)(x −2)(x −3)(x −4)
(5 −1)(5 −2)(5 −3)(5 −4)
Astfel, polinomul de interpolare Lagrange este:
(L
4
f)(x) = 2l
0
(x) + 5l
1
(x) + 10l
2
(x) + 17l
4
(x) + 26l
5
(x)
ceea ce, dupˇa efectuarea calculelor, devine
(L
4
f)(x) = 1 + x
2
.
4.2.3 Probleme propuse
Exercit ¸iul 4.2.2. Sˇa se gˇaseascˇa polinomul de interpolare Lagrange pentru urmˇatoarele
seturi de date ¸si sˇa se compare cu rezultatul obt ¸inut ˆın paragraful anterior:
a)
x −1 0 1 2
f(x) 2 1 0 −1
b)
x
π
2
π

2

f(x) 1 0 −1 0 1
4.2.4 Implementare
A. Algoritm
Date de intrare: lista argumentelor funct ¸iei, x, lista valorilor funct ¸iei, fx, ¸si o
variabilˇa z
Date de ie¸sire: valoarea polinomului de interpolare ˆın acel numˇar, dacˇa z este un
numˇar, respectiv expresia polinomului de interpolare, dacˇa z este o nedeterminatˇa
93
Algoritm
n = numˇarul de elemente ale listei x
s = 0
pentru i = 1, n
p = 1
pentru j = 1, n
dacˇa i = j atunci p = p ·
z −x
j
x
i
−x
j
s = s + f
i
· p
returneazˇa s
B. Programe MAPLE ¸si rezultate
lagrange:=proc(x::list, f::list, xx)
local n,s,p,i,j;
if nops(x)<>nops(f) then
ERROR(‘primul si al doilea argument trebuie sa aibe
acelasi numar de elemente‘);
fi;
if evalb(type(xx,numeric) and (xx<x[1] or xx>x[nops(x)])) then
WARNING (‘Polinomul de interpolare da rezultate corecte doar
pentru x in intervalul [%1,%2]‘, x[1],x[nops(x)]);
fi;
n:=nops(x);
s:=0;
for i from 1 to n do
p:=1;
for j from 1 to n do
if i<>j then p:=p*(xx-x[j])/(x[i]-x[j]) fi;
od;
s:=s+f[i]*p;
od;
RETURN(simplify(s));
end:
x:=[1,2,3,4,5]:fx:=[2,5,10,17,26]:lagrange(x,fx,z);
1 + z
2
Observat ¸ia 4.2.1. Polinomul de interpolare dˇa rezultate exacte pentru funct ¸ii polinomi-
ale de grad maxim n, unde n este numˇarul de puncte ˆın care se cunoa¸ste valoarea funct ¸iei
cˇautate.
Observat ¸ia 4.2.2. S¸i ˆın acest caz este valabilˇa observat ¸ia cˇa, ˆın general, polinomul
de interpolare nu dˇa rezultate corecte pentru valori ale parametrului z situate ˆın afara
intervalului care cont ¸ine argumentele funct ¸iei.
94
Observat ¸ia 4.2.3. Aspecte practice ale interpolˇarii polinomiale:
1. Polinoamele Newton ¸si Lagrange diferˇa numai prin formˇ a; restul este acela¸si ˆın
ambele cazuri, dacˇa se considerˇa aceea¸si ret ¸ea de noduri. Din punct de vedere
al calculului numeric, este preferatˇa folosirea polinomului Newton deoarece acesta
necesitˇa un numˇar de operat ¸ii aritmetice mai mic fat ¸ˇa de polinomul Lagrange.
Necesarul de memorie este acela¸si pentru ambii algoritmi.
2. Dacˇa notˇam cu α ¸si β cel mai mic, respectiv cel mai mare dintre nodurile de in-
terpolare, atunci din punct de vedere computat ¸ional, sunt convenabile urmˇatoarele
polinoame de interpolare: pentru x apropiat de α este convenabilˇa utilizarea poli-
nomului Newton cu diferent ¸e la dreapta (forward); pentru x apropiat de β este
convenabilˇa utilizarea polinomului Newton cu diferent ¸e la stˆanga (backward).
4.3 Interpolare spline
4.3.1 Breviar teoretic
Fie o funct ¸ie tabelatˇa, datˇa prin lista ordonatˇa a variabilelor,
[x
1
= min, x
2
, ..., x
n
= max], ¸si lista valorilor sale, [f
1
, f
2
, ..., f
n
].
Deoarece interpolarea polinomialˇa globalˇa pe tot intervalul [x
1
, x
n
] (de exemplu, poli-
noamele de interpolare Newton ¸si Lagrange) nu converge ˆıntotdeauna, apare ideea de
interpolare polinomialˇa pe port ¸iuni (interpolare spline), la care pe fiecare subdiviziune a
intervalului [x
0
, x
n
] definim un alt polinom de interpolare.
Funct ¸ia spline polinomialˇa de ordinul ˆıntˆai are expresia
S(x) = S
i
(x) = s
i,0
+ s
i,1
(x −x
i
), x ∈ [x
i−1
, x
i
] (4.16)
unde coeficient ¸ii s
ik
se determinˇa din condit ¸iile:
S(x
i
) = y
i
, i = 0, n;
(4.17)
S
i
(x
i
) = S
i+1
(x
i
), i = 1, n −2.
Funct ¸ia spline polinomialˇa de ordinul al doilea are expresia
S(x) = S
i
(x) = s
i,0
+ s
i,1
(x −x
i
) + s
i,2
(x −x
i
)
2
, x ∈ [x
i−1
, x
i
] (4.18)
unde coeficient ¸ii s
ik
se determinˇa din condit ¸iile:
S(x
i
) = y
i
, i = 0, n;
S
i
(x
i
) = S
i+1
(x
i
), i = 1, n −1; (4.19)
S

i
(x
i
) = S

i+1
(x
i
), i = 1, n −1.
Deoarece avem 3n coeficient ¸i ¸si 3n − 1 condit ¸ii, pentru a determina ˆın mod unic
funct ¸ia spline polinomialˇa de ordinul al doilea mai avem nevoie de o condit ¸ie suplimentarˇa.
Aceastˇa condit ¸ie suplimentarˇa se referˇa la prima derivatˇa, ¸si are urmˇatoarea seminficat ¸ie:
95
unul din capetele funct ¸iei spline de ordinul al doilea trebuie sˇa fie punct de extrem local.
De regulˇa, se alege
S
0

(x
0
) = 0. (4.20)
Pentru diferite condit ¸ii suplimentare, se obt ¸in diferite funct ¸ii spline.
Funct ¸ia spline polinomialˇa cubicˇa (de ordinul al treilea) are expresia
S(x) = S
i
(x) = s
i,0
+ s
i,1
(x −x
i
) + s
i,2
(x −x
i
)
2
+ s
i,3
(x −x
i
)
3
, x ∈ [x
i−1
, x
i
] (4.21)
unde coeficient ¸ii s
ik
se determinˇa din condit ¸iile:
S(x
i
) = y
i
, i = 0, n;
S
i
(x
i
) = S
i+1
(x
i
), i = 1, n −1; (4.22)
S

i
(x
i
) = S

i+1
(x
i
), i = 1, n −1;
S
′′
i
(x
i
) = S
′′
i+1
(x
i
), i = 1, n −1.
Deoarece avem 4n coeficient ¸i ¸si 4n − 2 condit ¸ii, pentru determinarea ˆın mod unic
a funct ¸iei spline polinomiale cubice este nevoie de douˇa condit ¸ii suplimentare. Aceste
condit ¸ii suplimentare pot fi
- libere (sau naturale):
S
′′
1
(x
0
) = S
′′
n−1
(x
n−1
) = 0 (4.23)
caz ˆın care vorbim de o funct ¸ie spline cubicˇa naturalˇa;
- ”clamped”:
S

1
(x
0
) = y

0
, S

n−1
(x
n−1
) = y

n−1
. (4.24)
4.3.2 Probleme rezolvate
Exercit ¸iul 4.3.1. Sˇa se gˇaseascˇa funct ¸iile spline de interpolare de ordinul ˆıntˆai, doi ¸si
trei pentru urmˇatorul set de date (funct ¸ia sinus):
x 0
π
2
π

2

f(x) 0 1 0 −1 0
Rezolvare
Avem 5 puncte, deci n = 4 intervale.
A. Funct ¸ia spline de ordinul ˆıntˆai
Funct ¸ia cˇautatˇa va avea expresia:
S(x) =

s
10
+ s
11
(x −0) , x ∈ [0,
π
2
]
s
20
+ s
21
(x −
π
2
) , x ∈ [
π
2
, π]
s
30
+ s
31
(x −π) , x ∈ [π,

2
]
s
40
+ s
41
(x −

2
) , x ∈ [

2
, 2π].
Notˇam:

S
1
= s
10
+ s
11
(x −0)
S
2
= s
20
+ s
21
(x −
π
2
)
S
3
= s
30
+ s
31
(x −π)
S
4
= s
40
+ s
41
(x −

2
)
96
Condit ¸iile care se pun sunt urmˇatoarele:
• funct ¸ia trece prin puncte
S
1
(0) = 0 ⇒s
10
= 0
S
2
(
π
2
) = 1 ⇒s
20
= 1
S
3
(π) = 0 ⇒s
30
= 0
S
4
(

2
) = −1 ⇒s
40
= −1
S
4
(2π) = 0 ⇒s
41
=
2
π
• funct ¸ia este continuˇa
S
1
(
π
2
) = S
2
(
π
2
) ⇒s
11
=
2
π
S
2
(π) = S
3
(π) ⇒s
21
= −
2
π
S
3
(

2
) = S
4
(

2
) ⇒s
31
= −
2
π
Cu acestea, dupˇa efectuarea calculelor, funct ¸ia cˇautatˇa devine:
S(x) =

2
π
x , x ∈ [0,
π
2
]

2
π
x + 2 , x ∈ [
π
2
, π]

2
π
x + 2 , x ∈ [π,

2
]
2
π
x −4 , x ∈ [

2
, 2π].
ˆ
In figura urmˇatoare am reprezentat graficul funct ¸iei spline S ˆın raport cu funct ¸ia
init ¸ialˇa (sin x):
–1
–0.5
0
0.5
1
–1 1 2 3 4 5 6 7
x
97
B. Funct ¸ia spline de ordinul al doilea
Funct ¸ia cˇautatˇa va avea expresia:
S(x) =

s
10
+ s
11
(x −0) + s
12
(x −0)
2
, x ∈ [0,
π
2
]
s
20
+ s
21
(x −
π
2
) + s
22
(x −
π
2
)
2
, x ∈ [
π
2
, π]
s
30
+ s
31
(x −π) + s
32
(x −π)
2
, x ∈ [π,

2
]
s
40
+ s
41
(x −

2
) + s
42
(x −

2
)
2
, x ∈ [

2
, 2π].
Notˇam:

S
1
= s
10
+ s
11
(x −0) + s
12
(x −0)
2
S
2
= s
20
+ s
21
(x −
π
2
) + s
22
(x −
π
2
)
2
S
3
= s
30
+ s
31
(x −π) + s
32
(x −π)
2
S
4
= s
40
+ s
41
(x −

2
) + s
42
(x −

2
)
2
Condit ¸iile care se pun sunt urmˇatoarele:
• funct ¸ia trece prin puncte
S
1
(0) = 0 ⇒s
10
= 0
S
2
(
π
2
) = 1 ⇒s
20
= 1
S
3
(π) = 0 ⇒s
30
= 0
S
4
(

2
) = −1 ⇒s
40
= −1
S
4
(2π) = 0
• funct ¸ia este continuˇa
S
1
(
π
2
) = S
2
(
π
2
)
S
2
(π) = S
3
(π)
S
3
(

2
) = S
4
(

2
)
• derivata este continuˇa
S
1

(
π
2
) = S
2

(
π
2
)
S
2

(π) = S
3

(π)
S
3

(

2
) = S
4

(

2
)
• condit ¸ie suplimentarˇa
S
1

(0) = 0 ⇒s
11
= 0
ˆ
Inlocuind valorile cunoscute ˆın celelalte ecuat ¸ii, obt ¸inem urmˇatorul sistem liniar

−1 + s
41
π
2
+ s
42
(
π
2
)
2
= 0
s
21
π
2
+ s
22
(
π
2
)
2
= −1
s
31
π
2
+ s
32
(
π
2
)
2
= −1
2s
12
π
2
−s
21
= 0
s
12
(
π
2
)
2
= 1
s
21
+ 2s
22
π
2
−s
31
= 0
s
31
+ 2s
32
π
2
−s
41
= 0
98
cu solut ¸ia
s
12
=
4
π
2
, s
22
= −
12
π
2
s
32
=
12
π
2
, s
42
= −
4
π
2
, s
21
=
4
π
, s
31
= −
8
π
, s
41
=
4
π
.
ˆ
In acest fel, am determinat funct ¸ia spline polinomialˇa de ordinul al doilea care apro-
ximeazˇa funct ¸ia sinus pe intervalul [0, 2π]:
S(x) =

4
π
2
x
2
, x ∈ [0,
π
2
]

12
π
2
x
2
+
16
π
x −4 , x ∈ [
π
2
, π]
12
π
2
x
2

32
π
x + 20 , x ∈ [π,

2
]

4
π
2
x
2
+
16
π
x −16 , x ∈ [

2
, 2π].
ˆ
In figura urmˇatoare am reprezentat graficul funct ¸iei spline S ˆın raport cu funct ¸ia
init ¸ialˇa (sin x):
–1
–0.5
0
0.5
1
–1 1 2 3 4 5 6 7
x
C. Funct ¸ia spline cubicˇa
Funct ¸ia cˇautatˇa va avea expresia:
S(x) =

s
10
+ s
11
(x −0) + s
12
(x −0)
2
+ s
13
(x −0)
3
, x ∈ [0,
π
2
]
s
20
+ s
21
(x −
π
2
) + s
22
(x −
π
2
)
2
+ s
23
(x −
π
2
)
3
, x ∈ [
π
2
, π]
s
30
+ s
31
(x −π) + s
32
(x −π)
2
+ s
33
(x −π)
3
, x ∈ [π,

2
]
s
40
+ s
41
(x −

2
) + s
42
(x −

2
)
2
+ s
43
(x −

2
)
3
, x ∈ [

2
, 2π].
Notˇam:
S(x) =

S
1
= s
10
+ s
11
(x −0) + s
12
(x −0)
2
+ s
13
(x −0)
3
S
2
= s
20
+ s
21
(x −
π
2
) + s
22
(x −
π
2
)
2
+ s
23
(x −
π
2
)
3
S
3
= s
30
+ s
31
(x −π) + s
32
(x −π)
2
+ s
33
(x −π)
3
S
4
= s
40
+ s
41
(x −

2
) + s
42
(x −

2
)
2
+ s
43
(x −

2
)
3
99
Condit ¸iile care se pun sunt urmˇatoarele:
• funct ¸ia trece prin puncte
S
1
(0) = 0
S
2
(
π
2
) = 1
S
3
(π) = 0
S
4
(

2
) = −1
S
4
(2π) = 0
• funct ¸ia este continuˇa
S
1
(
π
2
) = S
2
(
π
2
)
S
2
(π) = S
3
(π)
S
3
(

2
) = S
4
(

2
)
• derivata este continuˇa
S
1

(
π
2
) = S
2

(
π
2
)
S
2

(π) = S
3

(π)
S
3

(

2
) = S
4

(

2
)
• derivata a doua este continuˇa
S
1
′′
(
π
2
) = S
2
′′
(
π
2
)
S
2
′′
(π) = S
3
′′
(π)
S
3
′′
(

2
) = S
4
′′
(

2
)
• condit ¸ii suplimentare
S
1
′′
(0) = 0
S
4
′′
(2π) = 0
Solut ¸ia acestui sistem va fi:
s
10
= 0 s
11
=
3
π
s
12
= 0 s
13
=
4
π
3
s
20
= 1 s
21
= 0 s
22
= −
6
π
2
s
23
=
4
π
3
s
30
= 0 s
31
= −
3
π
s
32
= 0 s
13
=
4
π
3
s
40
= −1 s
41
= 0 s
42
=
6
π
2
s
13
= −
4
π
3
de unde, dupˇa efectuarea simplificˇarilor, rezultˇa cˇa expresia funct ¸iei spline cubice naturale
100
care interpoleazˇa setul de date init ¸ial este:
S(x) =


x(−3π
2
+ 4x
2
)
π
3
, x ∈ [0,
π
2
]
(−π
3
−12πx
2
+ 9xπ
2
+ 4x
3
)
π
3
, x ∈ [
π
2
, π]
(x −π)(π
2
+ 4x
2
−8xπ)
π
3
, x ∈ [π,

2
]

(−26π
3
−24πx
2
+ 45xπ
2
+ 4x
3
)
π
3
, x ∈ [

2
, 2π].
Redˇam ˆın figura urmˇatoare graficul funct ¸iei spline cubice S ˆın raport cu funct ¸ia init ¸ialˇa
(sin x):
–1
–0.5
0
0.5
1
1.5
2
–4 –2 2 4 6 8 10
z
4.3.3 Probleme propuse
Exercit ¸iul 4.3.2. Sˇa se gˇaseascˇa funct ¸ia spline de ordinul ˆıntˆai si funct ¸ia spline cubicˇa
naturalˇa pentru urmˇatoarele seturi de date:
a)
x −1 0 1 2
f(x) 2 1 0 −1
b)
x
π
2
π

2

f(x) 1 0 −1 0 1
4.3.4 Implementare
A. Algoritmi
Prezentˇam ˆın continuare algoritmul pentru obt ¸inerea funct ¸iei spline cubice naturale.
Date de intrare lista argumentelor funct ¸iei, x, lista valorilor funct ¸iei, f, si variabila
z
Date de ie¸sire dacˇa z este numˇar, atunci returneazˇa valoarea funct ¸iei spline ˆın acel
numˇar, dacˇa z este simbol, atunci returneazˇa expresiile pe subintervale ale funct ¸iei spline.
101
Algoritm
n = numˇarul de puncte, A - matrice pˇatraticˇa de ordinul n − 2, b - vector cu n − 2
linii
pentru i = 1, n −1
h
i
= x
i+1
−x
i
pentru i = 1, n −2
A
i,i
= 2(h
i
+ h
i+1
)
pentru i = 2, n −2
A
i,i−1
= h
i
A
i−1,i
= h
i
pentru i = 1, n −2
b
i
= 6

f
i+2
−fi + 1
h
i+1

f
i+1
−f
i
h
i

c
1
= 0
c
n
= 0
pentru i = 2, n −1
c
i
= a i −1-a solut ¸ie a sistemului tridiagonal Ac = b
pentru i = 1, n −1
s
i0
= f
i
s
i1
=
f
i+1
−f
i
h
i

2h
i
c
i
+ h
i
c
i+1
6
s
i2
=
c
i
2
s
i3
=
c
i+1
−c
i
6h
i
B. Programe MAPLE ¸si rezultate
Programul Maple pentru determinarea funct ¸iei spline cubice naturale este urmˇatorul:
cubicspline:=proc(x::list, f::list, xx)
local n,i,h, A, b,c,aa,bb,cc,dd;
n:=nops(x);
A:=matrix(n-2, n-2, 0);
b:=vector(n-2);
for i from 1 to n-1 do
h[i]:=x[i+1]-x[i];
od;
for i from 1 to n-2 do
A[i,i]:=2*(h[i]+h[i+1]);
od;
for i from 2 to n-2 do
A[i,i-1]:=h[i];
A[i-1,i]:=h[i];
od;
for i from 1 to n-2 do
b[i]:=6*( (f[i+2]-f[i+1])/h[i+1] - (f[i+1]-f[i])/h[i] );
od;
102
c:=linsolve(A,b);
c:=[0,seq(c[i],i=1..n-2),0];
for i from 1 to n-1 do
aa[i]:=f[i];
bb[i]:=(f[i+1]-f[i])/h[i]-(2*c[i]*h[i]+c[i+1]*h[i])/6;
cc[i]:=c[i]/2;
dd[i]:=(c[i+1]-c[i])/(6*h[i]);
od;
if type(xx,numeric) then
if evalb(evalf(xx)<evalf(x[1]) or evalf(xx)>evalf(x[n])) then
WARNING(‘rezultatele interpolarii nu sunt exacte decat pentru
x in intervalul [%1,%2]‘, x[1],x[n]) fi;
if (evalf(xx)<evalf(x[1])) then
RETURN(aa[1]+bb[1]*(xx-x[1])+cc[1]*(xx-x[1])^2+dd[1]*(xx-x[1])^3);
else
i:=1;
while evalb(evalf(x[i])<=evalf(xx) and i<n) do i:=i+1; od;
if i>=n then
RETURN(aa[n-1]+bb[n-1]*(xx-x[n-1])+cc[n-1]*(xx-x[n-1])^2+
dd[n-1]*(xx-x[n-1])^3);
else
i:=i-1;
fi;
RETURN(aa[i]+bb[i]*(xx-x[i])+cc[i]*(xx-x[i])^2+dd[i]*(xx-x[i])^3);
fi;
fi;
if type(xx, name) then
printf(‘Functia spline cubice care interpoleaza datele x=%a si
f(x)=%a este\n‘, x, f);
for i from 1 to n-1 do
printf(‘ %a+%a*(%a-%a)+%a*(%a-%a)^2+%a*(%a-%a)^3 , pentru
%a in intervalul [%a,%a] \n‘, aa[i],bb[i],xx,x[i],cc[i],
xx,x[i],dd[i],xx,x[i],xx,x[i],x[i+1]);
od;
fi;
RETURN(seq(simplify(f[i]+bb[i]*(xx-x[i])+cc[i]*(xx-x[i])^2+
dd[i]*(xx-x[i])^3), i=1..n-1));
end:
Testˇam aceastˇa procedurˇa pe exemplul rezolvat anterior.
x:=[0,Pi/2,Pi,3*Pi/2,2*Pi]: fx:=[0,1,0,-1,0]:
x1:=cubicspline(x,fx,10);
x2:=cubicspline(x,fx,3);
cubicspline(x,fx,z);
Warning, rezultatele interpolarii nu sunt exacte decat
pentru x in intervalul [0,2*Pi]
103
x
1
:= −1 +
6

10 −

2

2
π
2

4

10 −

2

3
π
3
x
2
:= 1 +
6

3 −
π
2

2
π
2
+
4

3 −
π
2

3
π
3
Functia spline cubice care interpoleaza datele
x=[0, 1/2*Pi, Pi, 3/2*Pi, 2*Pi] si f(x)=[0, 1, 0, -1, 0] este
0+3/Pi*(z-0)+0*(z-0)^2+-4/Pi^3*(z-0)^3 , pentru z in
intervalul [0,1/2*Pi]
1+0*(z-1/2*Pi)+-6/Pi^2*(z-1/2*Pi)^2+4/Pi^3*(z-1/2*Pi)^3 ,
pentru z in intervalul [1/2*Pi,Pi]
0+-3/Pi*(z-Pi)+0*(z-Pi)^2+4/Pi^3*(z-Pi)^3 , pentru z in
intervalul [Pi,3/2*Pi]
-1+0*(z-3/2*Pi)+6/Pi^2*(z-3/2*Pi)^2+-4/Pi^3*(z-3/2*Pi)^3 ,
pentru z in intervalul [3/2*Pi,2*Pi]

z (−3 π
2
+ 4 z
2
)
π
3
,
−π
3
−12 π z
2
+ 9 z π
2
+ 4 z
3
π
3
,
(z −π) (π
2
+ 4 z
2
−8 z π)
π
3
, −
−26 π
3
−24 π z
2
+ 45 z π
2
+ 4 z
3
π
3
4.4 Polinoame Bernstein
4.4.1 Breviar teoretic
Polinomul Bernstein de grad m de aproximare a funct ¸iei f pe intervalul [0, 1] este dat de
relat ¸ia:
(B
m
f)(x) =
m
¸
k=0
C
k
m
· x
k
· (1 −x)
m−k
· f

k
m

, x ∈ [0, 1]. (4.25)
Cu ajutorul polinoamelor Bernstein se poate construi curba Bezier asociatˇa punctelor
P
i
(x
i
, y
i
), i = 0, n. Aceasta este datˇa prin ecuat ¸iile parametrice:
x(t) =
n
¸
i=0
C
i
n
· t
i
(1 −t)
n−i
x
i
,
y(t) =
n
¸
i=0
C
i
n
· t
i
(1 −t)
n−i
y
i
, t ∈ [0, 1].
(4.26)
4.4.2 Probleme rezolvate
Exercit ¸iul 4.4.1. Gˇasit ¸i curba Bezier determinatˇa de punctele P
1
(0, 0), P
2
(1, 2), P
3
(2, 1),
P
4
(3, 2), P
5
(2, 4).
104
Rezolvare
Ecuat ¸iile parametrice ale curbei Bezier sunt date de:
x(t) =
5
¸
i=0
C
i
n
· t
i
(1 −t)
n−i
x
i
= C
0
4
t
0
(1 −t)
4
· 0 + C
1
4
t
1
(1 −t)
3
· 1+
+ C
2
4
t
2
(1 −t)
2
· 2 + C
3
4
t
3
(1 −t)
1
· 3 + C
4
4
t
4
(1 −t)
0
· 2 =
=4t(1 −t)
3
+ 12t
2
(1 −t)
2
+ 12t
3
(1 −t) + 2t
4
y(t) =
5
¸
i=0
C
i
n
· t
i
(1 −t)
n−i
x
i
= C
0
4
t
0
(1 −t)
4
· 0 + C
1
4
t
1
(1 −t)
3
· 2+
+ C
2
4
t
2
(1 −t)
2
· 1 + C
3
4
t
3
(1 −t)
1
· 2 + C
4
4
t
4
(1 −t)
0
· 4 =
=8t(1 −t)
3
+ 6t
2
(1 −t)
2
+ 8t
3
(1 −t) + 4t
4
4.4.3 Probleme propuse
Exercit ¸iul 4.4.2. Sˇa se scrie ecuat ¸ia curbei Bezier determinatˇa de punctele (0, 0), (0, 2),
(2, 1), (2, 2).
Exercit ¸iul 4.4.3. Sˇa se scrie ecuat ¸ia curbei Bezier determinatˇa de punctele (1, 0), (0, 2),
(1, 1), (2, 0), (3, 1).
4.4.4 Implementare
A. Algoritmi
Date de intrare o listˇa de puncte ˆın plan, P
i
(x
i
, y
i
), i = 1, n
Date de ie¸sire ecuat ¸iile parametrice ale curbei Bezier determinatˇa de aceste puncte
Algoritm pentru i = 0, n
x = x + C
i
n
· t
i
(1 −t)
n−i
x
i+1
y = y + C
i
n
· t
i
(1 −t)
n−i
y
i+1
B. Programe MAPLE ¸si rezultate
Testˇam aceastˇa procedurˇa pe exemplul rezolvat anterior.
pct:=[[0,0],[1,2],[2,1],[3,2],[2,4]];
bezier(pct);
with(plots):
p1:=pointplot(pct,symbol=circle):
p2:=plot([bezier(pct)[1],bezier(pct)[2], t=0..1], thickness=2):
display(p1, p2);
4t(1 −t)
3
+ 12t
2
(1 −t)
2
+ 12t
3
(1 −t) + 2t
4
, 8t(1 −t)
3
+ 6t
2
(1 −t)
2
+ 8t
3
(1 −t) + 4t
4
105
0
1
2
3
4
0.5 1 1.5 2 2.5 3
106
Capitolul 5
Derivare numericˇa
Necesitatea derivˇarii numerice apare ˆın practicˇa ˆın urmˇatoarele douˇa situat ¸ii:
a) expresia analiticˇa a funct ¸iei date f conduce la o derivare formalˇa dificilˇa, caz ˆın care
derivata se aproximeazˇa prin diferent ¸e finite;
b) expresia analiticˇa a funct ¸iei f nu este cunoscutˇa (i.e. funct ¸ia f este datˇa tabelat),
caz ˆın care derivata se aproximeazˇa prin derivata unui polinom de interpolare
5.1 Aproximarea derivatei prin diferent ¸e finite
5.1.1 Breviar teoretic
Aproximarea derivatei ˆıntˆai:
a) cu diferent ¸e finite la dreapta:
f

(x) =
f(x + h) −f(x)
h

f
′′
(ξ)
2
h, ξ ∈ (x, x + h) (5.1)
b) cu diferent ¸e finite la stˆanga:
f

(x) =
f(x) −f(x −h)
h
+
f
′′
(ξ)
2
h, ξ ∈ (x −h, x) (5.2)
Aproximarea derivatei a doua:
a) cu diferent ¸e finite la dreapta:
f
′′
(x) =
f(x + h) −2f(x) + f(x −h)
h
2

h
2
12
f
(4)
(ξ), ξ ∈ (x −h, x + h) (5.3)
b) cu diferent ¸e finite la stˆanga:
f
′′
(x) =
f(x) −2f(x −h) + f(x −2h)
h
2
+
h
2
12
f
(4)
(ξ), ξ ∈ (x −2h, x) (5.4)
107
5.1.2 Probleme rezolvate
Exercit ¸iul 5.1.1. Sˇa se gˇaseascˇa prima derivatˇa a funct ¸iei f : R →R, f(x) = x
2
+3x+2
cu diferent ¸e finite la stˆanga ¸si la dreapta, ˆın punctul x
0
= 2.
Rezolvare
Precizia cu care este returnatˇa valoarea derivatei este legatˇa de valoarea pasului h.
Pentru a exemplifica acest lucru, folosind varianta clasicˇ a cu formula de derivare calculˇam
valoarea derivatei ˆın punctul x
0
= 2 , ¸si apoi o comparˇam cu diversele valori obt ¸inute
pentru diferite valori ale lui h.
Astfel, folosind formula de derivare avem:
f

(x) = 2x + 3
de unde rezultˇa cˇa f

(2) = 7.
Folosind aproximarea derivatei ˆıntˆai cu diferent ¸e finite la dreapta, respectiv la stˆanga,
pentru h = 0.1, avem:
f

(2) =
f(2 + 0.1) −f(2)
0.1
= 7.1
respectiv
f

(2) =
f(2) −f(2 −0.1)
0.1
= 6.9,
iar pentru h = 0.01, avem
f

(2) =
f(2 + 0.01) −f(2)
0.01
= 7.01
respectiv
f

(2) =
f(2) −f(2 −0.01)
0.01
= 6.99,
¸si a¸sa mai departe.
Se observˇa cˇa, rezultatele numerice obt ¸inute diferˇa de rezultatul exact cu ±h.
5.1.3 Probleme propuse
Exercit ¸iul 5.1.2. Sˇa se calculeze prima ¸si a doua derivatˇa folosind diferent ¸e finite la
stˆanga, ¸si apoi la dreapta pentru urmˇatoarele funct ¸ii:
a) f(x) = x
3
+ 2 ˆın punctul x
0
= 2 cu eroarea h = 0.1
b) f(x) = sin x ˆın punctul x
0
= π cu eroarea h = 0.01.
Comparat ¸i cu valorile exacte.
5.1.4 Implementare
A. Algoritmi
Date de intrare expresia unei funct ¸ii, f, punctul x
0
ˆın care dorim sˇa calculˇam
derivata (respectiv a doua derivatˇa) ¸si precizia h cu care dorim sˇa calculˇam aceastˇa
derivatˇa.
Date de ie¸sire valoarea f

(x
0
) calculatˇa cu diferent ¸e finite la dreapta (respectiv la
stˆanga), respectiv valoarea lui f
′′
(x
0
) calculatˇa cu diferent ¸e finite la dreapta
108
Algoritm
a) derivata ˆıntˆai cu diferent ¸e finite la dreapta:
f

(x) =
f(x + h) −f(x)
h
b) derivata ˆıntˆai cu diferent ¸e finite la stˆanga:
f

(x) =
f(x) −f(x −h)
h
c) derivata a doua cu diferent ¸e finite la dreapta:
f
′′
(x) =
f(x + h) −2f(x) + f(x −h)
h
2
B. Programe MAPLE ¸si rezultate
Toate cele trei variante de program iau ca argument o expresie algebricˇa, f, o variabilˇa
x (care poate sˇa fie un numˇar, sau un simbol) ¸si o eroare, h.
Testˇam aceste programe astfel:
derivdr(x^2+3*x+2,2,0.1);
derivst(x^2+3*x+2,2,0.1);
derivdr(x^2+3*x+2,2,0.01);
derivst(x^2+3*x+2,2,0.01);
derivdr(x^2+3*x+2,2,0.00001);
derivst(x^2+3*x+2,2,0.00001);
derivdoi(x^3+5*x^2+1,x,0.01);
derivdr(sin(x),0,0.001);
7.100000000
6.900000000
7.010000000
6.990000000
7.
6.
6.x + 10.
0.9999998333
5.2 Aproximarea derivatei prin derivata unei funct ¸ii
de interpolare
5.2.1 Breviar teoretic
ˆ
In cazul ˆın care expresia analiticˇa a funct ¸iei f nu este cunoscutˇa (funct ¸ia f este datˇa
tabelat), derivata funct ¸iei se mai poate obt ¸ine prin derivarea unui polinom de interpolare
(Newton sau Lagrange). Derivata acestui polinom de interpolare se poate obt ¸ine fie
formal, fie folosind diferent ¸e finite (vezi paragraful anterior).
109
5.2.2 Probleme rezolvate
Exercit ¸iul 5.2.1. Se dˇa funct ¸ia tabelatˇa
x 1 2 3 4 5
f(x) 1 3 −1 0 1
a) folosind un polinom de interpolare, sˇa se gˇaseasca funct ¸ia f precum ¸si derivata
acesteia
b) folosind un polinom de interpolare, sˇa se gˇaseascˇa derivata ˆıntˆai a funct ¸iei f ˆın
punctul x
0
= 2.5.
Rezolvare
Cu ajutorul polinomului de interpolare Lagrange, obt ¸inem o valoare aproximativˇa
pentru funct ¸ia f:
f(z) = −
2
3
z
4
+
17
2
z
3

112
3
z
2
+
129
2
z −34.
Derivata sa formalˇa este:
f

(z) = −
8
3
z
3
+
51
2
z
2

224
3
z +
129
2
,
iar valoarea derivatei ˆın punctul x
0
= 2.5 este −4.45833340.
Aceastˇa valoare se poate obt ¸ine ¸si dacˇa folosim derivata cu diferent ¸e finite la dreapta
a funct ¸iei f, de exemplu cu o eroare de 0.01:
f

(2.5) =
f(2.5 + 0.01) −f(2.5)
0.01
= −4.443980000.
5.2.3 Probleme propuse
Exercit ¸iul 5.2.2. Calculat ¸i derivata ˆıntˆai a funct ¸iei
x −1 0 1 2
f(x) 2 1 0 −1
ˆın punctul x
0
= 0.5 folosind derivata polinomului de interpolare Lagrange.
Exercit ¸iul 5.2.3. Calculat ¸i derivata ˆıntˆai a funct ¸iei
x
π
2
π

2

f(x) 1 0 −1 0 1
ˆın punctul x
0
= π folosind derivata polinomului de interpolare al lui Newton cu diferent ¸e
divizate.
110
5.2.4 Implementare
A. Algoritmi
Funct ¸ia de interpolare a funct ¸iei tabelate f se obt ¸ine folosind unul din algoritmii
prezentat ¸i ˆın sect ¸iunile 4.2, 4.1 sau 4.3. Derivata funct ¸iei de interpolare se obt ¸ine ˆın
Maple folosind procedura diff.
B. Programe MAPLE ¸si rezultate
Exemplificˇam aplicarea acestei metode pentru funct ¸ia tabelatˇa
x 1 2 3 4 5
f(x) 1 3 −1 0 1
folosind polinomul de interpolare Lagrange.
> x:=[1,2,3,4,5]: fx:=[1,3,-1,0,1]: # functia tabelata
> f:=lagrange(x,fx,z); # polinomul de interpolare
f := −
2
3
z
4
+
17
2
z
3

112
3
z
2
+
129
2
z −34
> diff(f,z); # prima derivata

8
3
z
3
+
51
2
z
2

224
3
z +
129
2
> diff(f,z$2); # derivata a doua
−8 z
2
+ 51 z −
224
3
> diff(f,z$3); # derivata a treia
−16 z + 51
111
Capitolul 6
Integrare numericˇa
Fie f : [a, b] → R o funct ¸ie integrabilˇa Riemann-Darboux ¸si nodurile echidistante x
i
=
a + ih ale intervalului [a, b], i = 0, N, h =
b −a
N
.
6.1 Formule de tip Newton-Cotes
6.1.1 Breviar teoretic
Formula trapezelor (pentru care N = 1):

b
a
f(x)dx ≈
b −a
2
· [f(b) + f(a)] =
h
2
· [f(b) + f(a)]. (6.1)
Formula generalˇa a trapezelor (formula trapezelor aplicatˇa pe n subintervale ale
intervalului dat):

b
a
f(x)dx ≈
h
2
·
¸
f(a) + 2 ·
n−1
¸
i=1
f(x
i
) + f(b)
¸
. (6.2)
Formula lui Simpson (pentru care N = 2):

b
a
f(x)dx ≈
h
3
· [f(a) + 4f(a + h) + f(b)]. (6.3)
Observat ¸ia 6.1.1. Din teorema de medie, rezultˇa cˇa formulele de integrare de tip
Newton-Cotes sunt exacte pentru funct ¸ii polinomiale de grad maxim 2N −1.
6.1.2 Probleme rezolvate
Exercit ¸iul 6.1.1. Sˇa se calculeze

1
0
x
3
+ 1 dx
folosind:
112
a) metoda clasicˇa (formalˇa);
b) formula trapezelor;
c) formula generalˇa a trapezelor ˆımpˇart ¸ind intervalul [0, 1] ˆın 2, 4, 8 subintervale;
d) formula lui Simpson.
Rezolvare
Rezultatul exact, obt ¸inut prin metoda formalˇa, este:

1
0
x
3
+ 1 dx =
x
4
4

1
0
+ x|
1
0
=
1
4
+ 1 =
5
4
= 1.25.
Deoarece funct ¸ia consideratˇa este o funct ¸ie polinomialˇa de gradul 3, rezultˇa cˇa formula
trapezelor (pentru care N = 1) nu este exactˇa, dar formula lui Simpson (pentru care
N = 2) este exactˇa. Aceasta se poate remarca ¸si din comparat ¸ia rezultatelor obt ¸inute cu
rezultatul exact (adicˇa 1.25) obt ¸inut prin metoda formalˇa.
Folosind formula trapezelor, obt ¸inem:

1
0
x
3
+ 1 dx =
1 −0
2
[f(0) + f(1)] =
1
2
(1 + 2) =
3
2
= 1.5.
Dacˇa ˆımpˇart ¸im intervalul [0, 1] ˆın 2 subintervale ¸si aplicˇam formula generalˇa a trapezelor
avem:

1
0
x
3
+ 1 dx =
1
4
[f(0) + 2f(
1
2
) + f(1)] =
1
4
(1 +
9
4
+ 2) =
21
16
= 1.3125.
Pentru n = 4 subintervale, avem:

1
0
x
3
+ 1 dx =
1
8
[f(0) + 2
3
¸
i=1
f(0 +
i
4
) + f(1)] =
=
1
8
(1 + 2
65
64
+ 2
9
8
+ 2
91
64
+ 2) =
81
64
= 1.265625.
Pentru n = 8 subintervale avem:

1
0
x
3
+ 1 dx =
1
16
[f(0) + 2
7
¸
i=1
f(0 +
i
8
) + f(1)] =
1
16
·
321
16
=
321
256
= 1.25390625.
Folosind formula lui Simpson, obt ¸inem:

1
0
x
3
+ 1 dx =
1−0
2
3
(f(0) + 4f(
1
2
) + f(1)) =
1
6
·
15
2
=
15
12
= 1.25.
113
6.1.3 Probleme propuse
Exercit ¸iul 6.1.2. Sˇa se calculeze integralele urmˇatoare folosind formula generalˇa a
trapezelor pentru n = 4 subintervale ¸si formula lui Simpson:
a)

8
0
x
3
+ 1 dx
b)

1
0
cos πxdx
c)

2
−2
3x
2
+ 1 dx
Comparat ¸i rezultatul obt ¸inut cu solut ¸ia exactˇa.
6.1.4 Implementare
A. Algoritmi
Algoritmii folosit ¸i pentru integrarea numericˇa se bazeazˇa pe formulele de integrare
prezentate anterior.
B. Programe MAPLE ¸si rezultate
trapeze:=proc(f::algebraic, ab::range,N::numeric)
local i, a, b, h, xx;
a:=lhs(ab);
b:=rhs(ab);
h:=(b-a)/N;
xx:=op(indets(f, name));
evalf( h/2*( subs(xx=a, f) + 2*sum(subs(xx=a+i*h,f), i=1..N-1) +
subs(xx=b,f)
)
);
end:
simpson:=proc(f::algebraic, ab::range)
local i, a, b, xx;
a:=lhs(ab);
b:=rhs(ab);
xx:=op(indets(f, name));
evalf( (b-a)/6*( subs(xx=a,f) + 4*subs(xx=a+(b-a)/2,f) +
subs(xx=b,f)
)
);
end:
Exemplificˇam ˆın continuare calculul integralei

1
0
sin x + 1 dx.
114
> f:=x->sin(x)+1;
f := x →sin(x) + 1
> evalf(int(f(x),x=0..1));
1.459697694
> trapeze(f(x),0,1,1);
1.420735492
> trapeze(f(x),0,1,2);
1.450080515
> trapeze(f(x),0,1,4);
1.457300938
> trapeze(f(x),0,1,8);
1.459098974
> simpson(f(x),0,1);
1.459862190
6.2 Formule de tip Gauss
6.2.1 Breviar teoretic
Formula de integrare numericˇa de tip Gauss pentru douˇa puncte (N = 2):

1
−1
f(x)dx ≈ f



3
3

+ f


3
3

. (6.4)
Formula de integrare numericˇa de tip Gauss pentru trei puncte (N = 3):

1
−1
f(x)dx ≈
5
9
f



15
5

+
8
9
f(0) +
5
9
f


15
5

. (6.5)
Formula de integrare numericˇa de tip Gauss pentru patru puncte (N = 4):

1
−1
f(x)dx ≈
18 −

30
36
f

525 + 70

30
35

+ (6.6)
+
18 +

30
36
f

525 −70

30
35

+
+
18 +

30
36
f

525 −70

30
35

+
+
18 −

30
36
f

525 + 70

30
35

.
Deoarece ˆın formulele de integrare numericˇa de tip Gauss limitele de interpolare sunt
-1 ¸si 1, ˆın cazul ˆın care dorim sˇa integrˇam o funct ¸ie definitˇa pe un interval [a, b], facem
schimbarea de variabilˇa
x =
(b −a)t + b + a
2
(6.7)
115
care va transforma intervalul [a, b] al variabilei x ˆın intervalul [0, 1] corespunzˇator noii
variabile t. Astfel, se obt ¸ine:

b
a
f(x)dx =
b −a
2

1
−1
f

(b −a)t + a + b
2

dt. (6.8)
Observat ¸ia 6.2.1. Spre deosebire de formulele de integrare de tip Newton-Cotes, care
sunt exacte pentru polinoame de grad maxim 2N−1, formulele de integrare de tip Gauss
sunt exacte pentru polinoame de grad maxim 2N + 1.
6.2.2 Probleme rezolvate
Exercit ¸iul 6.2.1. Sˇa se calculeze

1
−1
x
2
+ 1 dx ¸si

2
0
x
3
− 1 dx folosind o formulˇa de
cuadraturˇa de tip Gauss.
Rezolvare
Folosim formula pentru 2 puncte, care dˇa rezultate exacte pentru polinoame pˆanˇa la
gradul 5. Avem:

1
−1
x
2
+ 1 dx =



3
3

2
+ 1 +


3
3

2
+ 1 =
8
3

2
0
x
3
−1 dx =



3
3
+ 1

3
−1 +


3
3
+ 1

3
−1 = 2.
6.2.3 Probleme propuse
Exercit ¸iul 6.2.2. Sˇa se calculeze integralele urmˇatoare folosind formula lui Gauss pentru
2, respectiv pentru 3 puncte:
a)

8
0
x
3
+ 1 dx
b)

1
0
cos πxdx
c)

2
−2
3x
2
+ 1 dx
Comparat ¸i rezultatul obt ¸inut cu solut ¸ia exactˇa ¸si cu rezultatele obt ¸inute ˆın urma
integrˇarii prin metodele de tip Newton-Cotes.
6.2.4 Implementare
A. Algoritmi
Algoritmii folosit ¸i pentru integrarea numericˇa se bazeazˇa pe formulele de integrare
prezentate anterior.
B. Programe MAPLE ¸si rezultate
Urmˇatorul program MAPLE ia ca argument o funct ¸ie f, capetele intervalului pe care
se integreazˇa, a ¸si b, ¸si ordinul n (care poate fi 2, 3 sau 4).
116
gauss:=proc(f::algebraic, ab::range, n::numeric)
local xx, a, b g;
xx:=op(indets(f, name));
a:=lhs(ab);
b:=rhs(ab);
g:=subs(xx=(2*yy-a-b)/(b-a), f);
if n=2 then
evalf( (b-a)/2*(subs(yy=-1/3*sqrt(3),g) +
subs(yy=1/3*sqrt(3),g)) );
# secventa de program pentru n=3 si n=4 figureaza pe lista de proiecte
else ERROR(‘Ordinul n al formulei de cuadratura trebuie sa
fie 2, 3 sau 4!‘)
fi;
end:
Exemplificˇam acest program:
> gauss(x^8+1, 0..2,4);
58.87727878
> evalf(int(x^8+1, x=0..2));
58.88888889
> f:=x->sin(x)+1;
f := x →sin(x) + 1
> gauss(f(x),0..1,2);
0.6598837714
> gauss(f(x),0..1,3);
0.6159146322
> gauss(f(x),0..1,4);
1.234908772
117
Capitolul 7
Ecuat ¸ii diferent ¸iale
Vom prezenta ˆın continuare metode numerice de rezolvare a problemelor cu date init ¸iale
pentru ecuat ¸ii diferent ¸iale de ordinul ˆıntˆai, precum ¸si metode numerice de rezolvare a
unor probleme la limitˇa liniare pentru ecuat ¸ii diferent ¸iale de ordinul al doilea.
Rezolvarea problemelor cu date init ¸iale pentru ecuat ¸ii
diferent ¸iale de ordinul ˆıntˆai
Fie problema cu date init ¸iale

y

= f(x, y)
y(x
0
) = y
0
(7.1)
unde f : (α, β) ×(γ, δ) →R
1
este o funct ¸ie de clasˇa C
1
¸si x
0
∈ (α, β), y
0
∈ (γ, δ).
Pentru rezolvarea numericˇa a acestei probleme vom trece ˆın vedere:
• metode unipas: metoda diferent ¸elor finite, metoda lui Taylor, metoda Runge-Kutta;
• metode multipas: metoda Adams-Bashforth, metoda Adams-Moulton, metoda predictor-
corector
Considerˇam punctele
x
i+1
= x
i
+ h = x
0
+ (i + 1)h , i = 0, 1, . . . , N −1 (7.2)
h > 0, ¸si admitem cˇa x
i
∈ (α, β) pentru i = 0, N −1. Notˇam cu a = x
0
¸si b = x
N
=
x
0
+ Nh.
7.1 Metoda diferent ¸elor finite
7.1.1 Breviar teoretic
Formula lui Euler cu diferent ¸e finite ˆınainte:
y(x
i+1
) = y(x
i
) + hf(x
i
, y(x
i
)), i = 0, N −1 (7.3)
118
Formula lui Euler cu diferent ¸e finite ˆınapoi:
y(x
i+1
) = y(x
i
) + h · f(x
i+1
, y(x
i+1
)), i = 0, N −1 (7.4)
Formula punctului de mijloc:
y(x
i+1
) = y(x
i−1
) + 2h · f(x
i
, y(x
i
)), i = 1, N −1 (7.5)
unde y(x
1
) trebuie gˇasitˇa cu altˇa metodˇa.
7.1.2 Probleme rezolvate
Exercit ¸iul 7.1.1. Sˇa se rezolve problema cu date init ¸iale

y

(x) = 1 + x
2
y(0) = 2
pe intervalul [0, 1], folosind una formulele lui Euler, pentru h = 0.1.
Rezolvare
Folosim formula lui Euler cu diferent ¸e finite ˆınainte. Aplicˆand formula (7.3) pentru
x
0
= 0 ¸si y
0
= y(0) = 2, obt ¸inem succesiv:
x
1
= 0.1000000000 y
1
= 2.100000000
x
2
= 0.2000000000 y
2
= 2.201000000
x
3
= 0.3000000000 y
3
= 2.305000000
x
4
= 0.4000000000 y
4
= 2.414000000
x
5
= 0.5000000000 y
5
= 2.530000000
x
6
= 0.6000000000 y
6
= 2.655000000
x
7
= 0.7000000000 y
7
= 2.791000000
x
8
= 0.8000000000 y
8
= 2.940000000
x
9
= 0.9000000000 y
9
= 3.104000000
x
10
= 1 y
10
= 3.285000000
Solut ¸ia exactˇa a problemei cu date init ¸iale consideratˇ a este
y(x) =
x
3
3
+ x + 2.
Reprezentˇam grafic punctele obt ¸inute folosind metoda lui Euler cu diferent ¸e finite
ˆınainte ¸si graficul solut ¸iei exacte a problemei considerate:
119
2
2.2
2.4
2.6
2.8
3
3.2
0 0.2 0.4 0.6 0.8 1
x
7.1.3 Probleme propuse
Exercit ¸iul 7.1.2. Folosind metoda lui Euler cu diferent ¸e finite ˆınainte, sˇa se determine
solut ¸ia aproximativˇa a problemei

y

(x) = y(x) −x
2
+ x
y(1) = 2
ˆımpˇart ¸ind intervalul [1, 2] ˆın N = 4. Comparat ¸i cu rezultatul exact.
7.1.4 Implementare
A. Algoritmi
Date de intrare: o ecuat ¸ie y

(x) = f(x, y(x)), valorile init ¸iale x
0
¸si y
0
, un interval
[a, b] ¸si numˇarul de puncte ˆın care se ˆımparte intervalul, N
Date de ie¸sire: solut ¸ia aproximativˇa a problemei cu date init ¸iale, datˇ a sub forma
unui ¸sir de puncte, rez, folosind metoda lui Euler cu diferent ¸e finite ˆınainte
Algoritmul constˇa ˆın urmˇatorii pa¸si:
1. definirea funct ¸iei f
2. aplicarea formulei lui Euler cu diferent ¸e finite ˆınainte:
adaugˇa elementul (x
0
, y
0
) la lista rez
pentru i = 0, N −1
y
i+1
= y
i
+ h f(x
i
, y
i
)
x
i+1
= x
i
+ h
adaugˇa punctul (x
i+1
, y
i+1
) la liste rez
120
B. Programe MAPLE ¸si rezultate
dfieuler:=proc(eq::equation, x0::numeric, y0::numeric, ab::range,
N::integer)
local f,varx,h,rez,x1,y1,i;
if StringTools[Has](convert(lhs(eq),string),"diff") then
f:=rhs(eq);
elif StringTools[Has](convert(rhs(eq),string),"diff") then
f:=lhs(eq);
else
ERROR (‘ecuatia trebuie sa fie de tipul diff(y(x),x)=f(x,y)‘);
fi;
varx:=[op(indets(eq, name))];
if nops(varx)=1 then varx:=[op(varx),0]; fi;
h:=(rhs(ab)-lhs(ab))/N;
rez:=[[x0,y0]];
x1:=x0; y1:=y0;
for i from 1 to N do
y1:=evalf(y1+h*subs(varx[1]=x1,varx[2]=y1,f));
x1:=evalf(x1+h);
rez:=[op(rez),[x1,y1]];
od;
RETURN(rez);
end:
debug(dfieuler):
dfieuler(diff(f(x),x)=x^2+1,0,2,0..1,10);
> dfieuler(diff(f(x),x)=x^2+1,0,2,0..1,10);
{--> enter dfieuler, args = diff(f(x),x) = x^2+1, 0, 2, 0 .. 1, 10
f := x
2
+ 1
varx := [x]
varx := [x, 0]
h :=
1
10
rez := [[0, 2]]
x1 := 0
y1 := 2
y1 := 2.100000000
x1 := 0.1000000000
rez := [[0, 2], [0.1000000000, 2.100000000]]
y1 := 2.201000000
x1 := 0.2000000000
rez := [[0, 2], [0.1000000000, 2.100000000], [0.2000000000, 2.201000000]]
y1 := 2.305000000
121
x1 := 0.3000000000
rez := [[0, 2], [0.1000000000, 2.100000000], [0.2000000000, 2.201000000],
[0.3000000000, 2.305000000]]
y1 := 2.414000000
x1 := 0.4000000000
rez := [[0, 2], [0.1000000000, 2.100000000], [0.2000000000, 2.201000000],
[0.3000000000, 2.305000000], [0.4000000000, 2.414000000]]
y1 := 2.530000000
x1 := 0.5000000000
rez := [[0, 2], [0.1000000000, 2.100000000], [0.2000000000, 2.201000000],
[0.3000000000, 2.305000000], [0.4000000000, 2.414000000],
[0.5000000000, 2.530000000]]
y1 := 2.655000000
x1 := 0.6000000000
rez := [[0, 2], [0.1000000000, 2.100000000], [0.2000000000, 2.201000000],
[0.3000000000, 2.305000000], [0.4000000000, 2.414000000],
[0.5000000000, 2.530000000], [0.6000000000, 2.655000000]]
y1 := 2.791000000
x1 := 0.7000000000
rez := [[0, 2], [0.1000000000, 2.100000000], [0.2000000000, 2.201000000],
[0.3000000000, 2.305000000], [0.4000000000, 2.414000000],
[0.5000000000, 2.530000000], [0.6000000000, 2.655000000],
[0.7000000000, 2.791000000]]
y1 := 2.940000000
x1 := 0.8000000000
rez := [[0, 2], [0.1000000000, 2.100000000], [0.2000000000, 2.201000000],
[0.3000000000, 2.305000000], [0.4000000000, 2.414000000],
[0.5000000000, 2.530000000], [0.6000000000, 2.655000000],
[0.7000000000, 2.791000000], [0.8000000000, 2.940000000]]
y1 := 3.104000000
x1 := 0.9000000000
rez := [[0, 2], [0.1000000000, 2.100000000], [0.2000000000, 2.201000000],
[0.3000000000, 2.305000000], [0.4000000000, 2.414000000],
[0.5000000000, 2.530000000], [0.6000000000, 2.655000000],
[0.7000000000, 2.791000000], [0.8000000000, 2.940000000],
[0.9000000000, 3.104000000]]
y1 := 3.285000000
x1 := 1.000000000
122
rez := [[0, 2], [0.1000000000, 2.100000000], [0.2000000000, 2.201000000],
[0.3000000000, 2.305000000], [0.4000000000, 2.414000000],
[0.5000000000, 2.530000000], [0.6000000000, 2.655000000],
[0.7000000000, 2.791000000], [0.8000000000, 2.940000000],
[0.9000000000, 3.104000000], [1.000000000, 3.285000000]]
<-- exit dfieuler (now at top level) = [[0, 2], [.1000000000,
2.100000000], [.2000000000, 2.201000000], [.3000000000, 2.305000000],
[.4000000000, 2.414000000], [.5000000000, 2.530000000], [.6000000000,
2.655000000], [.7000000000, 2.791000000], [.8000000000, 2.940000000],
[.9000000000, 3.104000000], [1.000000000, 3.285000000]]}
[[0, 2], [0.1000000000, 2.100000000], [0.2000000000, 2.201000000],
[0.3000000000, 2.305000000], [0.4000000000, 2.414000000],
[0.5000000000, 2.530000000], [0.6000000000, 2.655000000],
[0.7000000000, 2.791000000], [0.8000000000, 2.940000000],
[0.9000000000, 3.104000000], [1.000000000, 3.285000000]]
Prezentˇam ˆın continuare aproximarea solut ¸iilor problemei

y

(x) =
cos x
y(x)
y(0) = 2
a cˇarei solut ¸ie exactˇa este y(x) =

2 sinx + 4, pe intervalul [0, 5], pentru diverse valori
ale parametrului N:
> dsolve({diff(f(x),x)=cos(x)/f(x),f(0)=2},f(x));
f(x) =

2 sin(x) + 4
> p1:=plot([seq(dfieuler(diff(f(x),x)=cos(x)/f,0,2,0..5,N),N=2..52,10)]
> ):
> p2:=plot((2*sin(x)+4)^(1/2),x=0..5, color=black, thickness=2):
> display(p1,p2);
1.4
1.6
1.8
2
2.2
2.4
2.6
2.8
3
3.2
0 1 2 3 4 5
123
7.2 Metoda lui Taylor
7.2.1 Breviar teoretic
Metoda lui Taylor de ordinul n pentru rezolvarea problemei cu date init ¸iale (7.1), pre-
supune gˇasirea ¸sirului (Y
n
)
n
, unde:

Y
0
= y(x
0
)
Y
i+1
= Y
i
+ h · T
n
(x
i
, Y
i
, h) pentru i = 0, 1, . . . , N −1,
(7.6)
iar
T
n
(x
i
, y
i
, h) = f(x
i
, y
i
) +
h
2!
f

(x
i
, y
i
) + . . . +
h
n−1
n!
f
(n−1)
(x
i
, y
i
). (7.7)
Pentru n = 1, metoda lui Taylor devine metoda lui Euler.
Pentru n = 2, obt ¸inem urmˇatoarea formulˇa:
T
2
(x
i
, y
i
, h) = f(x
i
, y
i
) +
h
2
¸
∂f
∂x
(x
i
, y
i
) +
∂f
∂y
(x
i
, y
i
) · f(x
i
, y
i
)

(7.8)
iar pentru n = 3 obt ¸inem:
T
3
(x
i
, y
i
, h) =f(x
i
, y
i
) +
h
2
¸
∂f
∂x
(x
i
, y
i
) +
∂f
∂y
(x
i
, y
i
) · f(x
i
, y
i
)

+ (7.9)
+
h
2
6
¸

2
f
∂x
2
(x
i
, y
i
) + 2f(x
i
, y
i
) ·

2
f
∂x∂y
(x
i
, y
i
)+
+ f
2
(x
i
, y
i
) ·

2
f
∂y
2
(x
i
, y
i
) +
∂f
∂x
(x
i
, y
i
) ·
∂f
∂y
(x
i
, y
i
)+
+ f(x
i
, y
i
) ·

2
f
∂y
2
(x
i
, y
i
)

.
7.2.2 Probleme rezolvate
Exercit ¸iul 7.2.1. Folosind metoda lui Taylor de ordinul 2, sˇa se rezolve problema cu
date init ¸iale urmˇatoare

y

(x) = 1 + x
2
y(0) = 2
pe intervalul [0, 1], pentru h = 0.1.
Rezolvare
ˆ
In cazul nostru, f(x, y) = 1 + x
2
, ¸si deci
T
2
(x, y, h) = 1 + x
2
+
h
2
· 2x.
Astfel, termenul general are forma:
y
i+1
= y
i
+ h · (1 + x
2
i
+ hx
i
)
124
Plecˆand de la x
0
= 0 ¸si y
0
= y(0) = 2 ¸si aplicˆand formula lui Taylor de ordinul 2, obt ¸inem
succesiv:
x
1
= 0.1000000000 y
1
= 2.120000000
x
2
= 0.2000000000 y
2
= 2.232706000
x
3
= 0.3000000000 y
3
= 2.350316071
x
4
= 0.4000000000 y
4
= 2.475125294
x
5
= 0.5000000000 y
5
= 2.609481021
x
6
= 0.6000000000 y
6
= 2.755790277
x
7
= 0.7000000000 y
7
= 2.916529651
x
8
= 0.8000000000 y
8
= 3.094257797
x
9
= 0.9000000000 y
9
= 3.291630711
x
10
= 1.000000000 y
10
= 3.511419969
7.2.3 Probleme propuse
Exercit ¸iul 7.2.2. Folosind metoda lui Taylor de ordinul 2 ¸si 3, sˇa se gˇaseascˇa solut ¸ia
aproximativˇa a problemei

y

(x) = −x
2
+ x + 1
y(1) = 2
ˆımpˇart ¸ind intervalul [1, 2] ˆın N = 4. Comparat ¸i cu rezultatul exact.
7.2.4 Implementare
A. Algoritmi
Date de intrare: o ecuatie y

(x) = f(x, y(x)), valorile initiale x
0
¸si y
0
, un interval
[a, b] ¸si numˇarul de puncte ˆın care se ˆımparte intervalul, N
Date de ie¸sire: solut ¸ia aproximativˇa a problemei cu date init ¸iale, datˇ a sub forma
unui ¸sir de puncte, rez
Algoritmul constˇa ˆın urmˇatorii pa¸si:
1. definirea funct ¸iei f
2. aplicarea formulei lui Taylor de ordinul 2 sau 3:
adaugˇa elementul (x
0
, y
0
) la lista rez
pentru i = 0, N −1
y
i+1
= y
i
+ h T(x
i
, y
i
, h), unde T este dat de (7.8) sau (7.9)
x
i+1
= x
i
+ h
adaugˇa punctul (x
i+1
, y
i+1
) la liste rez
B. Programe MAPLE ¸si rezultate
125
taylor2:=proc(eq::equation, x0::numeric, y0::numeric,ab::range,
N::integer)
local h,f,varx,fx,fy,y1,x1,i,rez;
if StringTools[Has](convert(lhs(eq),string),"diff") then
f:=rhs(eq);
elif StringTools[Has](convert(rhs(eq),string),"diff") then
f:=lhs(eq);
else
ERROR (‘ecuatia trebuie sa fie de tipul diff(y(x),x)=f(x,y)‘);
fi;
varx:=[op(indets(eq, name))];
if nops(varx)=1 then varx:=[op(varx),0]; fi;
fx:=diff(f,x);
fy:=diff(f,y);
h:=(rhs(ab)-lhs(ab))/N;
y1:=y0;
x1:=x0;
rez:=[[x1,y1]];
for i from 1 to N do
y1:=evalf(
y1+
h*(
subs(varx[1]=x1,varx[2]=y1,f) +
h/2*(
subs(varx[1]=x1,varx[2]=y1,fx) +
subs(varx[1]=x1,varx[2]=y1,fy) *
subs(varx[1]=x1,varx[2]=y1,f)
)
)
);
x1:=evalf(x1+h);
rez:=[op(rez),[x1,y1]];
od;
RETURN(rez);
end:
with(plots):
p1:=plot([taylor2(diff(f(x),x)=x^2+1,0,2,0..1,2),
taylor3(diff(f(x),x)=x^2+1,0,2,0..1,2)], 0..1):
p2:=plot(1/3*x^3+x+2, x=0..1,color=black, thickness=2):
display(p1,p2);
126
2
2.5
3
3.5
4
4.5
5
0 0.2 0.4 0.6 0.8 1
ˆ
In continuare prezentˇam pe acela¸si sistem de coordonate solut ¸ia exactˇa a problemei
rezolvate anterior ¸si aproximarea solut ¸iei cu ajutorul formulei lui Taylor de ordinul 2,
respectiv 3, pentru diferite valori ale parametrului N.
pt2:=plot([seq(taylor2(diff(f(x),x)=x^2+1,0,2,0..1,N),
N=2..52,2)]):
pt3:=plot([seq(taylor3(diff(f(x),x)=x^2+1,0,2,0..1,N),
N=2..52,2)]):
display(pt2,p2);display(pt3,p2);
2
2.5
3
3.5
4
0 0.2 0.4 0.6 0.8 1
127
2
2.5
3
3.5
4
4.5
5
0 0.2 0.4 0.6 0.8 1
7.3 Metoda Runge-Kutta
7.3.1 Breviar teoretic
Metoda Runge-Kutta de ordinul n pentru rezolvarea problemei cu date init ¸iale (7.1)
presupune gˇasirea ¸sirului (Y
n
)
n
care aproximeazˇa solut ¸ia problemei date.
Pentru n = 2, obt ¸inem:
Y
i+1
= Y
i
+
h
2
[f(x
i
, Y
i
) + f(x
i+1
, Y
i
+ hf(x
i
, Y
i
))] (7.10)
cu Y
0
= y(x
0
).
Pentru n = 3, obt ¸inem
Y
i+1
= Y
i
+
1
6
· (k
1
+ 4k
2
+ k
3
) (7.11)
cu Y
0
= y(x
0
) ¸si
k
1
= h · f(x
i
, Y
i
) (7.12)
k
2
= h · f

x
i
+
h
2
, Y
i
+
k
1
2

k
3
= h · f(x
i
+ h, Y
i
−k
1
+ 2k
2
)
Pentru n = 4, obt ¸inem
Y
i+1
= Y
i
+
1
6
· (k
1
+ 2k
2
+ 2k
3
+ k
4
) (7.13)
128
cu Y
0
= y(x
0
) ¸si
k
1
= h · f(x
i
, Y
i
) (7.14)
k
2
= h · f

x
i
+
h
2
, Y
i
+
k
1
2

k
3
= h · f

x
i
+
h
2
, Y
i
+
k
2
2

k
4
= h · f(x
i
+ h, Y
i
+ k
3
)
7.3.2 Probleme rezolvate
Exercit ¸iul 7.3.1. Sˇa se rezolve problema cu date init ¸iale urmˇatoare

y

(x) = 1 + x
2
y(0) = 2
pe intervalul [0, 1], folosind una din metodele Runge-Kutta prezentate mai sus, pentru
h = 0.1.
Rezolvare
Folosim metoda Runge-Kutta de ordinul 2.
Plecˆand de la x
0
= 0 ¸si y
0
= y(0) = 2 ¸si aplicˆand formula (7.10) obt ¸inem:
x
1
= 0.1000000000 y
1
= 2.100500000
x
2
= 0.2000000000 y
2
= 2.203000000
x
3
= 0.3000000000 y
3
= 2.309500000
x
4
= 0.4000000000 y
4
= 2.422000000
x
5
= 0.5000000000 y
5
= 2.542500000
x
6
= 0.6000000000 y
6
= 2.673000000
x
7
= 0.7000000000 y
7
= 2.815500000
x
8
= 0.8000000000 y
8
= 2.972000000
x
9
= 0.9000000000 y
9
= 3.144500000
x
10
= 1.000000000 y
10
= 3.335000000.
7.3.3 Probleme propuse
Exercit ¸iul 7.3.2. Folosind metoda Runge-Kutta de ordinul 2, 3, 4, sˇa se gˇaseascˇa solut ¸ia
aproximativˇa a problemei

y

(x) = x + 1
y(1) = 2
ˆımpˇart ¸ind intervalul [1, 2] ˆın N = 4. Comparat ¸i cu solut ¸ia exactˇa.
129
7.3.4 Implementare
A. Algoritmi
Date de intrare: o ecuat ¸ie y

(x) = f(x, y(x)), valorile init ¸iale x
0
¸si y
0
, un interval
[a, b] ¸si numˇarul de puncte ˆın care se ˆımparte intervalul, N
Date de ie¸sire: solut ¸ia aproximativˇa a problemei cu date init ¸iale, datˇ a sub forma
unui ¸sir de puncte, rez, obt ¸inutˇa cu metoda Runge-Kutta
Algoritmul constˇa ˆın urmˇatorii pa¸si:
1. definirea funct ¸iei f
2. a) metoda Runge-Kutta de ordinul 2:
adaugˇa elementul (x
0
, y
0
) la lista rez
pentru i = 0, N −1
y
i+1
= y
i
+
h
2
[f(x
i
, y
i
) + f(x
i+1
, y
i
+ hf(x
i
, y
i
))]
x
i+1
= x
i
+ h
adaugˇa punctul (x
i+1
, y
i+1
) la liste rez
b) metoda Runge-Kutta de ordinul 3
adaugˇa elementul (x
0
, y
0
) la lista rez
pentru i = 0, N −1
calculeazˇa coeficient ¸ii k
1
, k
2
, k
3
pe baza formulei (7.12)
y
i+1
= y
i
+
1
6
· (k
1
+ 4k
2
+ k
3
)
adaugˇa punctul (x
i+1
, y
i+1
) la liste rez
c) metoda Runge-Kutta de ordinul 4
adaugˇa elementul (x
0
, y
0
) la lista rez
pentru i = 0, N −1
calculeazˇa coeficient ¸ii k
1
, k
2
, k
3
, k
4
pe baza formulei (7.14)
y
i+1
= y
i
+
1
6
· (k
1
+ 2k
2
+ 2k
3
+ k
4
)
adaugˇa punctul (x
i+1
, y
i+1
) la liste rez
B. Programe MAPLE ¸si rezultate
rungekutta2:=proc(eq::equation, x0::numeric, y0::numeric,
ab::range, N::integer)
local f,varx,h,rez,x1,y1,i;
if StringTools[Has](convert(lhs(eq),string),"diff") then
f:=rhs(eq);
elif StringTools[Has](convert(rhs(eq),string),"diff") then
130
f:=lhs(eq);
else
ERROR (‘ecuatia trebuie sa fie de tipul diff(y(x),x)=f(x,y)‘);
fi;
varx:=[op(indets(eq, name))];
if nops(varx)=1 then varx:=[op(varx),0]; fi;
h:=(rhs(ab)-lhs(ab))/N;
rez:=[[x0,y0]];
x1:=x0; y1:=y0;
for i from 1 to N do
y1:=evalf(y1 + h/2*(
subs(varx[1]=x1,varx[2]=y1,f) +
subs(varx[1]=x1+h,
varx[2]=y1+h*subs(varx[1]=x1,varx[2]=y1,f), f)
));
x1:=evalf(x1+h);
rez:=[op(rez),[x1,y1]];
od;
RETURN(rez);
end:
> rungekutta2(diff(f(x),x)=x^2+1,1,2,0..1,3);
[[1, 2], [1.333333333, 2.796296296], [1.666666666, 3.888888888],
[1.999999999, 5.351851850]]
> rungekutta3(diff(f(x),x)=x^2+1,1,2,0..1,3);
[[1, 2], [1.333333333, 2.790123457], [1.666666666, 3.876543210],
[1.999999999, 5.333333332]]
> rungekutta4(diff(f(x),x)=x^2+1,0,2,0..1,3);
[[0, 2], [0.3333333333, 2.345679012], [0.6666666666, 2.765432099],
[0.9999999999, 3.333333334]]
Prezentˇam ˆın continuare diferite aproximˇari obt ¸inute cu metoda Runge-Kutta de or-
dinul 4, pentru solut ¸ia problemei

y

(x) = cos x
y(0) = 2.
,
folosind diverse valori ale parametrului N. Solut ¸ia exactˇa a acestei probleme este y(x) =
sin x + 2.
131
0.5
1
1.5
2
2.5
3
0 1 2 3 4 5
7.4 Metoda Adams-Bashforth
7.4.1 Breviar teoretic
Metoda Adams-Bashforth este o metodˇa multipas de rezolvare a problemei (7.1), care
pentru calculul valorii y
i+1
folose¸ste valorile obt ¸inute ˆın punctele x
i
, ..., x
i−k
.
Pentru k = 1, se obt ¸ine metoda Adams-Bashforth de ordinul 2, a cˇarui termen general
y
i+1
se gˇase¸ste din relat ¸ia:
y
i+1
= y
i
+
h
2
· [3 f(x
i
, y
i
) −f(x
i−1
, y
i−1
)] (7.15)
unde y
0
= y(x
0
). Pentru ca relat ¸ia (7.15) sˇa aibe sens, trebuie ca indicii sˇa fie tot ¸i
pozitivi, i.e. i −1 ≥ 0 deci i ≥ 1.
ˆ
Insˇa aceasta ne permite sˇa aflˇam valorile aproximative
ale solut ¸iei ˆıncepˆand cu y
2
. Valoarea y
1
trebuie calculatˇa prin altˇa metodˇa (de exemplu,
folosind metoda lui Euler cu diferent ¸e finite ˆınainte).
Pentru k = 2, se obt ¸ine metoda Adams-Bashforth de ordinul 3, a cˇarui termen general
y
i+1
se gˇase¸ste din relat ¸ia:
y
i+1
= y
i
+
h
12
· {23 f(x
i
, y
i
) −16 f(x
i−1
, y
i−1
) + 5 f(x
i−2
, y
i−2
)}. (7.16)
unde y
0
= y(x
0
). Pentru ca relat ¸ia (7.16) sˇa aibe sens, trebuie ca indicii sˇa fie tot ¸i
pozitivi, deci i ≥ 2. Valorile y
1
¸si y
2
trebuie calculate prin altˇa metodˇa (de exemplu,
folosind metoda lui Euler cu diferent ¸e finite ˆınainte).
Pentru k = 3, se obt ¸ine metoda Adams-Bashforth de ordinul 4, a cˇarui termen general
y
i+1
se gˇase¸ste din relat ¸ia:
y
i+1
= y
i
+
h
24
· {55 f(x
i
, y
i
) −59 f(x
i−1
, y
i−1
) +37 f(x
i−2
, y
i−2
) −9 f(x
i−3
, y
i−3
)}. (7.17)
132
unde y
0
= y(x
0
). Pentru ca relat ¸ia (7.17) sˇa aibe sens, trebuie ca indicii sˇa fie tot ¸i pozitivi,
deci i ≥ 3. Valorile y
1
, y
2
¸si y
3
trebuie calculate prin altˇa metodˇa (de exemplu, folosind
metoda lui Euler cu diferent ¸e finite ˆınainte).
Pentru k = 4, se obt ¸ine metoda Adams-Bashforth de ordinul 5, a cˇarui termen general
y
i+1
se gˇase¸ste din relat ¸ia:
y
i+1
= y
i
+
h
720
· {1901 f(x
i
, y
i
) −2774 f(x
i−1
, y
i−1
) + 2616 f(x
i−2
, y
i−2
) (7.18)
−1274 f(x
i−3
, y
i−3
) + 251 f(x
i−4
, y
i−4
)}.
unde y
0
= y(x
0
). Pentru ca relat ¸ia (7.18) sˇa aibe sens, trebuie ca indicii sˇa fie tot ¸i pozitivi,
deci i ≥ 4. Valorile y
1
, y
2
, y
3
¸si y
4
trebuie calculate prin altˇa metodˇa (de exemplu, folosind
metoda lui Euler cu diferent ¸e finite ˆınainte).
7.4.2 Probleme rezolvate
Exercit ¸iul 7.4.1. Folosind una din metodele Adams-Bashforth prezentate mai sus, sˇa
se rezolve urmˇatoarea problemˇa cu date init ¸iale

y

(x) = 1 + x
2
y(0) = 2
pe intervalul [0, 1], pentru h = 0.1.
Rezolvare
Folosim metoda Adams-Bashforth de ordinul 2.
Avem x
0
= 0 ¸si y
0
= 2. Cu ajutorul formulei lui Euler cu diferent ¸e finite ˆınainte,
obt ¸inem x
1
= 0.1000000000 ¸si y
1
= 2.100000000
Aplicˆand formula (7.15) obt ¸inem:
x
2
= 0.2000000000 y
2
= 2.201500000
x
3
= 0.3000000000 y
3
= 2.307000000
x
4
= 0.4000000000 y
4
= 2.418500000
x
5
= 0.5000000000 y
5
= 2.538000000
x
6
= 0.6000000000 y
6
= 2.667500000
x
7
= 0.7000000000 y
7
= 2.809000000
x
8
= 0.8000000000 y
8
= 2.964500000
x
9
= 0.9000000000 y
9
= 3.136000000
x
10
= 1.000000000 y
10
= 3.325500000.
7.4.3 Probleme propuse
Exercit ¸iul 7.4.2. Folosind metoda Adams-Bashforth de ordinul 2 ¸si 3, sˇa se gˇ aseascˇa
solut ¸ia aproximativˇa a problemei

y

(x) = y(x) −x
2
+ x
y(1) = 2
ˆımpˇart ¸ind intervalul [1, 2] ˆın N = 4. Comparat ¸i cu solut ¸ia exactˇa.
133
7.4.4 Implementare
A. Algoritmi
Date de intrare: o ecuat ¸ie y

(x) = f(x, y(x)), valorile init ¸iale x
0
¸si y
0
, un interval
[a, b], ordinul metodei, m, ¸si numˇarul N de puncte ˆın care se ˆımparte intervalul
Date de ie¸sire: solut ¸ia aproximativˇa a problemei cu date init ¸iale, datˇ a sub forma
unui ¸sir de puncte, rez, obt ¸inutˇa cu ajutorul metodei Adams-Bashforth
Algoritmul constˇa ˆın urmˇatorii pa¸si:
1. identificarea funct ¸iei f
• h =
b −a
N
2. gˇasirea solut ¸iei aproximative
adaugˇa elementul (x
0
, y
0
) la lista rez
pentru i = 1, m−1
y
i+1
= y
i
+ h f(x
i
, y
i
)
x
i+1
= x
i
+ h
adaugˇa punctul (x
i+1
, y
i+1
) la lista rez
pentru i = m, N
obt ¸ine y
i+1
din formula corespunzˇatoare ordinului((7.15), (7.16), (7.17) sau
(7.18))
x
i+1
= x
i
+ h
adaugˇa punctul (x
i+1
, y
i+1
) la lista rez
B. Programe MAPLE ¸si rezultate
adamsbashforth:=proc(eq::equation, x0::numeric, y0::numeric,
ab::range, ordin::integer, N::integer)
local h,f,varx,y1,x1,i,rez;
if StringTools[Has](convert(lhs(eq),string),"diff") then
f:=rhs(eq);
elif StringTools[Has](convert(rhs(eq),string),"diff") then
f:=lhs(eq);
else
ERROR (‘ecuatia trebuie sa fie de tipul
diff(y(x),x)=f(x,y)‘);
fi;
if ordin>N then
WARNING(‘ordinul metodei,%1, trebuie sa fie mai mic decat
numarul de puncte ales, %2‘, ordin, N)
fi;
varx:=[op(indets(eq, name))];
if nops(varx)=1 then varx:=[op(varx),0]; fi;
134
h:=(rhs(ab)-lhs(ab))/N;
y1:=evalf(y0);
x1:=evalf(x0);
rez:=[[x1,y1]];
if evalb(ordin in {2,3,4,5}) then
for i from 1 to ordin-1 do
y1:=evalf(y1+h*subs(varx[1]=rez[nops(rez)][1],
varx[2]=rez[nops(rez)][2],f));
x1:=evalf(x1+h);
rez:=[op(rez),[x1,y1]];
od;
if ordin=2 then
for i from 2 to N do
y1:=evalf(
y1+h/2*( 3*subs(varx[1]=rez[nops(rez)][1],
varx[2]=rez[nops(rez)][2],f) -
subs(varx[1]=rez[nops(rez)-1][1],
varx[2]=rez[nops(rez)-1][2],f)
));
x1:=x1+h;
rez:=[op(rez),[x1,y1]];
od;
#secventa de program pentru n=3,4,5 constituie tema de proiect
else
ERROR(‘ordinul metodei Adams-Bashforth poate fi 2, 3 sau 4
sau 5‘);
fi;
RETURN(rez);
end:
ˆ
In continuareprezentˇam pe acela¸si sistem de coordonate solut ¸ia exactˇa a problemei
rezolvate anterior ¸si solut ¸iile obt ¸inute cu metoda Adams-Bashforth, ˆın care am variat
ordinul metodei dar am pˇastrat constant numˇarul de puncte ˆın care s-a calculat solut ¸ia.
with(plots):
p0:=plot(1/3*x^3+x+2, x=0..1,color=black, thickness=2):
p1:=plot([
adamsbashforth(diff(f(x),x)=x^2+1,0,2,0..1,2,6),
adamsbashforth(diff(f(x),x)=x^2+1,0,2,0..1,3,6),
adamsbashforth(diff(f(x),x)=x^2+1,0,2,0..1,4,6),
adamsbashforth(diff(f(x),x)=x^2+1,0,2,0..1,5,6)
]):
display(p0,p1);
135
2
2.2
2.4
2.6
2.8
3
3.2
0 0.2 0.4 0.6 0.8 1
x
7.5 Metoda Adams-Moulton
7.5.1 Breviar teoretic
Metoda Adams-Moulton folose¸ste o formulˇa implicitˇa pentru a gˇasi elementul y
i+1
al
solut ¸iei unei probleme cu date init ¸iale.
Metoda Adams Moulton de ordinul 2:
y
i+1
= y
i
+
h
2
[f(x
i
, y
i
) + f(x
i+1
, y
i+1
)]. (7.19)
Metoda Adams-Moulton de ordinul 3:
y
i+1
= y
i
+
h
12
[5 f(x
i+1
, y
i+1
) + 8 f(x
i
, y
i
) −f(x
i−1
, y
i−1
)]. (7.20)
Metoda Adams-Moulton de ordinul 4:
y
i+1
= y
i
+
h
24
[9 f(x
i+1
, y
i+1
) + 19 f(x
i
, y
i
) −5 f(x
i−1
, y
i−1
) + f(x
i−2
, y
i−2
)]. (7.21)
Metoda Adams-Moulton de ordinul 5:
Y
i+1
= Y
i
+
h
720
[251 f(x
i+1
, Y
i+1
) + 646 f(x
i
, Y
i
) −264 f(x
i−1
, Y
i−1
)+ (7.22)
+ 106 f(x
i−2
, Y
i−2
) −19 f(x
i−3
, Y
i−3
)]
Observat ¸ia 7.5.1. Formula Adams-Moulton de ordin n se folose¸ste ˆımpreunˇa cu o for-
mulˇa Adams-Bashforth de ordin egal sau superior ˆın metode de tip predictor-corector
(vezi paragraful 7.6).
136
7.6 Metoda predictor-corector
7.6.1 Breviar teoretic
Combinat ¸ia unei metode explicite folositˇa pentru predict ¸ia valorii ¸si a unei metode im-
plicite folositˇa pentru corectarea valorii, se nume¸ste metodˇa predictor-corector.
Dacˇa ordinul metodei predictor este cel put ¸in egal cu ordinul metodei corector, atunci
este suficientˇa o singurˇa iterat ¸ie pentru a pˇastra acuratet ¸ea metodei corector.
Cea mai rˇaspˆanditˇa metodˇa predictor-corector este combinat ¸ia formulei de ordinul
patru a lui Adams-Bashforth ca predictor, cu formula de ordinul patru a lui Adams-
Moulton ca ¸si corector:

y
(p)
i+1
= y
i
+
h
24
[55 f(x
i
, y
i
) −59 f(x
i−1
, y
i−1
)+
+37 f(x
i−2
, y
i−2
) −9 f(x
i−3
, y
i−3
)]
y
i+1
= y
i
+
h
24
[9 f(x
i+1
, y
(p)
i+1
) + 19 f(x
i
, y
i
)−
−5 f(x
i−1
, y
i−1
) + f(x
i−2
, y
i−2
)]
(7.23)
7.6.2 Probleme rezolvate
Exercit ¸iul 7.6.1. Folosind metoda predictor-corector, sˇa se rezolve problema cu date
init ¸iale

y

(x) = 1 + x
2
y(0) = 2
pe intervalul [0, 1], pentru h = 0.1.
Rezolvare
Avem x
0
= 0 ¸si y
0
= 2. Cu ajutorul formulei lui Euler cu diferent ¸e finite ˆınainte, obt ¸inem
x
1
= 0.1000000000 y
1
= 2.100000000
x
2
= 0.2000000000 y
2
= 2.201000000
x
3
= 0.3000000000 y
3
= 2.305000000
137
Aplicˆand formula (7.23) obt ¸inem:
x
4
= 0.4000000000 y
p
4
= 2.417333333
y
4
= 2.417333333
x
5
= 0.5000000000 y
p
5
= 2.537666666
y
5
= 2.537666666
x
6
= 0.6000000000 y
p
6
= 2.667999999
y
6
= 2.667999999
x
7
= 0.7000000000 y
p
7
= 2.810333332
y
7
= 2.810333332
x
8
= 0.8000000000 y
p
8
= 2.966666665
y
8
= 2.966666665
x
9
= 0.8000000000 y
p
9
= 3.138999998
y
9
= 3.138999998
x
10
= 1.000000000 y
p
10
= 3.329333331
y
10
= 3.329333331.
7.6.3 Probleme propuse
Exercit ¸iul 7.6.2. Folosind metoda predictor-corector, sˇa se gˇaseascˇa solut ¸ia aproxima-
tivˇa a problemei

y

(x) = y(x) + x
y(1) = 2
ˆımpˇart ¸ind intervalul [1, 2] ˆın N = 8. Comparat ¸i cu solut ¸ia exactˇa.
7.6.4 Implementare
A. Algoritmi
Date de intrare: o ecuat ¸ie y

(x) = f(x, y(x)), valorile init ¸iale x
0
¸si y
0
, un interval
[a, b] ¸si numˇarul de puncte N ˆın care se ˆımparte intervalul
Date de ie¸sire: solut ¸ia aproximativˇa a problemei cu date init ¸iale, datˇ a sub forma
unui ¸sir de puncte, rez
Algoritmul constˇa ˆın urmˇatorii pa¸si:
1. identificarea funct ¸iei f
• h =
b −a
N
2. gˇasirea solut ¸iei aproximative
adaugˇa elementul (x
0
, y
0
) la lista rez
pentru i = 1, 3
y
i+1
= y
i
+ h f(x
i
, y
i
)
138
x
i+1
= x
i
+ h
adaugˇa punctul (x
i+1
, y
i+1
) la lista rez
pentru i = 4, N
calculeazˇa y
p
i
din ecuat ¸ia (7.23)
calculeazˇa y
i
din ecuat ¸ia (7.23)
x
i+1
= x
i
+ h
adaugˇa punctul (x
i+1
, y
i+1
) la lista rez
B. Programe MAPLE ¸si rezultate
predictorcorector:=proc(eq::equation, x0::numeric, y0::numeric,
ab::range, N::integer)
local f,varx,h,y1,x1,rez,i;
if StringTools[Has](convert(lhs(eq),string),"diff") then
f:=rhs(eq);
elif StringTools[Has](convert(rhs(eq),string),"diff") then
f:=lhs(eq);
else
ERROR (‘ecuatia trebuie sa fie de tipul diff(y(x),x)=f(x,y)‘);
fi;
varx:=[op(indets(eq, name))];
if nops(varx)=1 then varx:=[op(varx),0]; fi;
h:=(rhs(ab)-lhs(ab))/N;
y1:=evalf(y0);
x1:=evalf(x0);
rez:=[[x1,y1]];
for i from 1 to 3 do
y1:=evalf(y1+h*subs(varx[1]=rez[nops(rez)][1],
varx[2]=rez[nops(rez)][2],f));
x1:=evalf(x1+h);
rez:=[op(rez),[x1,y1]];
od;
for i from 4 to N do
y1:=evalf(
y1+h/24*( 55*subs(varx[1]=rez[nops(rez)][1],
varx[2]=rez[nops(rez)][2],f) -
59*subs(varx[1]=rez[nops(rez)-1][1],
varx[2]=rez[nops(rez)-1][2],f) +
37*subs(varx[1]=rez[nops(rez)-2][1],
varx[2]=rez[nops(rez)-2][2],f) -
9*subs(varx[1]=rez[nops(rez)-3][1],
varx[2]=rez[nops(rez)-3][2],f)
));
y1:=evalf(
139
rez[nops(rez)][2]+h/24*(
9*subs(varx[1]=rez[nops(rez)][1]+h,
varx[2]=y1,f) +
19*subs(varx[1]=rez[nops(rez)][1],
varx[2]=rez[nops(rez)][2],f) -
5*subs(varx[1]=rez[nops(rez)-1][1],
varx[2]=rez[nops(rez)-1][2],f) +
subs(varx[1]=rez[nops(rez)-2][1],
varx[2]=rez[nops(rez)-2][2],f)
));
x1:=x1+h;
rez:=[op(rez),[x1,y1]];
od;
end:
ˆ
In continuare prezentˇam ˆın acela¸si sistem de coordonate solut ¸ia exactˇa a problemei
rezolvate anterior ¸si solut ¸iile obt ¸inute cu metoda predictor-corector, ˆın care am variat
ordinul metodei dar am pˇastrat constant numˇarul de puncte ˆın care s-a calculat solut ¸ia.
with(plots):
p0:=plot(1/3*x^3+x+2, x=0..1,color=black, thickness=2):
p2:=plot([seq(predictorcorector(diff(f(x),x)=x^2+1,0,2,0..1,N),
N=5..10)]):
display(p0,p1);
2
2.2
2.4
2.6
2.8
3
3.2
0 0.2 0.4 0.6 0.8 1
x
140
Rezolvarea problemelor la limitˇa liniare pentru ecuat ¸ii
diferent ¸iale de ordinul al doilea
7.7 Metoda diferent ¸elor finite pentru rezolvarea unei
probleme la limitˇa liniare
7.7.1 Breviar teoretic
Se considerˇa problema
y
′′
= p(x) · y

+ q(x) · y + r(x) x ∈ [a, b] (7.24)
cu condit ¸iile la frontierˇa mixte:

γ
1
· y(a) + γ
2
· y

(a) = α
γ
3
· y(b) + γ
4
· y

(b) = β.
(7.25)
Dacˇa γ
2
, γ
4
= 0, atunci vorbim de condit ¸ii la limitˇa Dirichlet, iar dacˇa
γ
1
, γ
3
= 0, atunci vorbim de condit ¸ii la limitˇa Neumann.
Dacˇa ˆımpˇart ¸im intervalul [a, b] ˆın N + 1 intervale de lungime h =
b −a
N + 1
¸si notˇam
Y
i
= y(x
i
), atunci determinarea valorilor Y
i
se reduce la rezolvarea sistemului
AY = B (7.26)
unde
A =

b
1

4a
1
γ
2
2hγ
1
−3γ
2
c
1
+
a
1
γ
2
2hγ
1
−3γ
2
0 ... 0 0
a
2
b
2
c
2
... 0 0
0 a
3
b
3
... 0 0
... ... ... ... ... ...
0 0 0 ... b
N−1
c
N−1
0 0 0 ... a
N

c
N
γ
4
2hγ
3
+3γ
4
b
N
+
4c
N
γ
4
2hγ
3
+3γ
4
¸
¸
¸
¸
(7.27)
Y = (Y
1
, Y
2
, ..., Y
N
)
T
(7.28)
B =

h
2
r(x
1
) −
2hαa
1
2hγ
1
−3γ
2
h
2
r(x
2
)
.
.
.
h
2
r(x
N−1
)
h
2
r(x
N
) −
2hβc
N
2hγ
3
+ 3γ
4
¸
¸
¸
¸
¸
¸
¸
¸
¸
¸
(7.29)
iar
a
i
= 1 +
h
2
p(x
i
) (7.30)
b
i
= −(2 + h
2
q(x
i
)) (7.31)
c
i
= 1 −
h
2
p(x
i
). (7.32)
141
ˆ
In capetele intervalului, valorile aproximative ale solut ¸iei sunt date de:
y(x
0
) =
hα −γ
2
y
1

1
+ γ
2
(7.33)
¸si
y(x
N+1
) =
hβ −γ
4
y
N

3
+ γ
4
(7.34)
7.7.2 Problemˇa rezolvatˇa
Exercit ¸iul 7.7.1. Sˇa se gˇaseascˇa solut ¸ia aproximativˇa a problemei urmˇatoare

y
′′
= x
y(0) = 0
y(1) = 1
pe intervalul intervalul [0, 1] (N = 3).
Rezolvare Avem:
p(x) = 0 q(x) = 0 r(x) = x
γ
1
= 1 γ
2
= 0 α = 0
γ
3
= 1 γ
4
= 0 β = 1
h =
1 −0
3 + 1
=
1
4
x
1
=
1
4
x
2
=
2
4
x
3
=
3
4
ˆ
Inlocuind aceaste valori, se obt ¸ine sistemul
Ay = b
unde
A =

¸
−2 1 0
1 −2 1
0 1 −2

b =

¸
1
64
2
64

61
64

¸si a cˇarui solut ¸ie este:
y =

¸
27
128
56
128
89
128

.
Valorile solut ¸iei aproximative ˆın capetele intervalului sunt
y(0) = 0 y(1) = 1.
Astfel, se obt ¸ine solut ¸ia aproximativˇa a problemei date sub forma unui ¸sir de puncte:
¸
(0, 0), (
1
4
,
27
128
), (
2
4
,
56
128
), (
3
4
,
89
128
), (1, 1)

.
142
7.7.3 Probleme propuse
Exercit ¸iul 7.7.2. Sˇa se gˇaseascˇa solut ¸ia aproximativˇa a problemei

y
′′
= 2y

+ 3y −1
y(0) = 1
y(1) = 2
pe intervalul intervalul [0, 1] (N = 4). Comparat ¸i cu solut ¸ia exactˇa.
Exercit ¸iul 7.7.3. Sˇa se gˇaseascˇa solut ¸ia aproximativˇa a problemei

y
′′
= 2y

+ 3y −1
2y(0) + y

(0) = 1
y

(1) = 1
pe intervalul intervalul [0, 1] (N = 4).
7.7.4 Implementare
A. Algoritmi
Date de intrare: ecuat ¸ia ec1, condit ¸iile la frontierˇa ec2, ec3, ¸si numˇarul de puncte
ˆın care se cautˇa solut ¸ia, N
Date de ie¸sire: lista rez a punctelor care definesc solut ¸ia
Algoritmul constˇa urmˇatoarele etape:
1. identificarea intervalului [a, b],a funct ¸iilor p, q, r precum ¸si a coeficient ¸ilor γ
1
, γ
2
,
γ
3
, γ
4
, α, β
2. determinarea punctelor x
i
ˆın care se calculeazˇa solut ¸ia, a matricei A ¸si a vectorului
B
3. rezolvarea sistemului AY = B
4. returnarea listei de puncte de forma [(x
i
, Y
i
)] care alcˇatuiesc solut ¸ia numericˇa a
problemei
B. Programe MAPLE ¸si rezultate
Observat ¸ia 7.7.1. Avˆand ecuat ¸ia ¸si condit ¸iile pe frontierˇa, se pot determina: intervalul
[a, b], funct ¸iile p, q, r, numele variabilei ˆın care se scrie ecuat ¸ia, x, precum ¸si coeficient ¸ii
γ
1
, γ
2
, γ
3
, γ
4
, α, β. Pentru aceasta, am construit procedura coeficienti.
coeficienti:=proc(ec1::equation, ec2::equation, ec3::equation)
local f,xx,p,q,r,m,A,B,g1,g2,g3,g4;
#ecuatia ec1
if StringTools[Has](convert(lhs(ec1),string),"$2") or
StringTools[Has](convert(lhs(ec1),string),"diff(diff")
143
then f:=rhs(ec1);
elif StringTools[Has](convert(rhs(ec1),string),"$2") or
StringTools[Has](convert(lhs(ec1),string),"diff(diff")
then f:=lhs(ec1);
else
ERROR (‘prima ecuatie trebuie sa fie de tipul \n
diff(y(x),x$2)=p(x)*diff(y(x),x)+q(x)*y(x)+r(x)‘);
fi;
if nops(indets(f,function)[1])=1 then
xx:=op(indets(f,function)[1]);
p:=coeff(f,indets(f,function)[2]);
q:=coeff(f-p*indets(f,function)[2],indets(f,function)[1]);
r:=f-p*indets(f,function)[2]-q*indets(f,function)[1];
else
xx:=op(indets(f,function)[2]);
p:=coeff(f,indets(f,function)[1]);
q:=coeff(f-p*indets(f,function)[2],indets(f,function)[2]);
r:=f-p*indets(f,function)[1]-q*indets(f,function)[2];
fi;
#capetele intervalului
m:=indets(lhs(ec2),{numeric,name});
A:=product(m[k],k=1..nops(m));
m:=indets(lhs(ec3),{numeric,name});
B:=product(m[k],k=1..nops(m));
#conditiile la frontiera
m:=[op(indets(ec2,function))];
if nops(m)=1 then m:=[op(m),0];fi;
if not StringTools[Has](convert(m[1],string),"diff") then
g1:=coeff(m[1],op(indets(m[1],function)));
if m[2]=0 then g2:=0
else g2:=coeff(m[2],op(indets(m[2],function)));
fi;
else
g2:=coeff(m[1],op(indets(m[1],function)));
if m[2]=0 then g1:=0
else g1:=coeff(m[2],op(indets(m[2],function)));
fi;
fi;
m:=[op(indets(ec3,function))];
if nops(m)=1 then m:=[op(m),0];fi;
if not StringTools[Has](convert(m[1],string),"diff") then
g3:=coeff(m[1],op(indets(m[1],function)));
if m[2]=0 then g4:=0
else g4:=coeff(m[2],op(indets(m[2],function)));
fi;
else
144
g4:=coeff(m[1],op(indets(m[1],function)));
if m[2]=0 then g3:=0
else g3:=coeff(m[2],op(indets(m[2],function)));
fi;
fi;
RETURN(A,B,xx,p,q,r,g1,g2,g3,g4,rhs(ec2),rhs(ec3));
end:
Procedura care returneazˇa ¸sirul de puncte care aproximeazˇa solut ¸ia este bvproblem.
bvproblem:=proc(ec1::equation, ec2::equation, ec3::equation,
N::integer)
local f,A,B,p,q,r,h,g1,g2,g3,g4,a,b,i,x,xx,AA,BB,yy;
f:=coeficienti(ec1,ec2,ec3);
A:=f[1];B:=f[2];xx:=f[3];
p:=f[4];q:=f[5];r:=f[6];
g1:=f[7];g2:=f[8];g3:=f[9];g4:=f[10];a:=f[11];b:=f[12];
h:=(B-A)/(N+1);
for i from 1 to N do
x[i]:=evalf(A+i*h);
od;
AA:=matrix(N,N,0);
BB:=vector(N,0);
for i from 1 to N do
AA[i,i]:=evalf(-(2+h^2*subs(xx=x[i],q)));
BB[i]:=evalf(h^2*subs(xx=x[i],r));
od;
for i from 1 to N-1 do
AA[i,i+1]:=evalf(1-h/2*subs(xx=x[i],p));
AA[i+1,i]:=evalf(1+h/2*subs(xx=x[i+1],p));
od;
AA[1,1]:=evalf(AA[1,1]-4*(1+h/2*subs(xx=x[1],p))
*g2/(2*h*g1-3*g2));
AA[1,2]:=evalf(AA[1,2]+(1+h/2*subs(xx=x[1],p))
*g2/(2*h*g1-3*g2));
AA[N,N-1]:=evalf(AA[N,N-1]-(1-h/2*subs(xx=x[N],p))
*g4/(2*h*g3+3*g4));
AA[N,N]:=evalf(AA[N,N]+4*(1-h/2*subs(xx=x[N],p))
*g4/(2*h*g3+3*g4));
BB[1]:=evalf(BB[1]-2*h*a*(1+h/2*subs(xx=x[1],p))/
(2*h*g1-3*g2));
BB[N]:=evalf(BB[N]-2*h*b*(1-h/2*subs(xx=x[N],p))/
(2*h*g3+3*g4));
evalm(AA);evalm(BB);
yy:=linsolve(AA,BB);
RETURN([
[evalf(A), evalf(( h*a-g2*yy[1] )/(h*g1+g2)) ],
145
seq([x[i],yy[i]],i=1..N),
[evalf(B), evalf(( h*b-g4*yy[N] )/(h*g3+g4)) ]
]);
end:
Testˇam aceastˇa procedurˇa pentru calculul solut ¸iei aproximative a problemei

y
′′
= −y

+ y + 1
y(0) = 1
y

(
π
2
) = 0
Pentru comparat ¸ie, am reprezentat grafic ˆın acela¸si sistem de coordonate solut ¸ia for-
malˇa a problemei, obt ¸inutˇa cu ajutorul procedurii predefinite dsolve ¸si punctele obt ¸inute
aplicˆand procedura bvproblem.
ec1:=diff(y(x),x$2)=-diff(y(x),x)+y(x)+1:
ec2:=y(0)=1:
ec3:=y(Pi/2)=0:
with(plots):
y1:=rhs(dsolve({ec1,ec2,ec3},y(x)));
p0:=plot(y1,x=0..Pi/2,thickness=2,color=black):
p1:=pointplot(bvproblem(ec1,ec2,ec3,5), symbol=circle,
symbolsize=10, color=red):
display(p0,p1);
y1 := −
e
(
(

5−1) x
2
)
(−1 + 2 e
(−
(

5+1) π
4
)
)
e
(
(

5−1) π
4
)
−e
(−
(

5+1) π
4
)
+
e
(−
(

5+1) x
2
)
(2 e
(
(

5−1) π
4
)
−1)
e
(
(

5−1) π
4
)
−e
(−
(

5+1) π
4
)
−1
0
0.2
0.4
0.6
0.8
1
0.2 0.4 0.6 0.8 1 1.2 1.4
x
146
7.8 Metoda colocat ¸iei ¸si metoda celor mai mici pˇatrate
7.8.1 Breviar teoretic
Se considerˇa problema
y
′′
+ p(x) · y

+ q(x) · y + r(x) = f(x), x ∈ [a, b] (7.35)
cu condit ¸iile la limitˇa mixte,

γ
1
· y(a) + γ
2
· y

(a) = α
γ
3
· y(b) + γ
4
· y

(b) = β
(7.36)
Cˇautˇam o solut ¸ie a ecuat ¸iei (7.35) de forma
Y
N
(x) = Φ
0
(x) +
N
¸
i=1
c
i
· Φ
i
(x) (7.37)
unde {Φ
0
, Φ
1
, . . . , Φ
N
} sunt funct ¸ii de clasˇa C
2
liniar independente, care verificˇa:
γ
1
·Φ
0
(a) + γ
2
·Φ

0
(a) = α ¸si γ
3
·Φ
0
(b) + γ
4
·Φ

0
(b) = β
(7.38)
γ
1
·Φ
i
(a) + γ
2
·Φ

i
(a) = 0 ¸si γ
3
·Φ
i
(b) + γ
4
·Φ

i
(b) = 0, i = 1, N.
Metoda colocat ¸iei presupune gˇasirea coeficient ¸ilor c
i
din sistemul de N ecuat ¸ii cu N
necunoscute
N
¸
i=1
c
i

′′
i
(x
k
) + p(x
k
)·Φ

i
(x
k
) + q(x
k
)·Φ
i
(x
k
)] =
= f(x
k
) −Φ
′′
0
(x
k
) −p(x
k
)·Φ

0
(x
k
) −q(x
k
)·Φ
0
(x
k
), k = 1, N
(7.39)
Metoda celor mai mici pˇatrate presupune gˇasirea coeficient ¸ilor c
i
din sistemul de N
ecuat ¸ii cu N necunoscute
N
¸
i=1
c
j

b
a

′′
j
(x) + p(x)·Φ

j
(x) + q(x)·Φ
j
(x)]·
·[Φ
′′
i
(x) + p(x)·Φ

i
(x)q(x)·Φ
i
(x)]dx =
= −

b
a

′′
0
(x) + p(x)·Φ

0
(x) + q(x)·Φ
0
(x) −f(x)]·
·[Φ
′′
i
(x) + p(x)·Φ

i
(x)q(x)·Φ
i
(x)]dx.
(7.40)
147
7.8.2 Probleme rezolvate
Exercit ¸iul 7.8.1. Sˇa se gˇaseascˇa solut ¸ia problemei

y
′′
+ y

= x
y(0) = 1
y(1) = 1
folosind:
a. metoda colocat ¸iei, cu N = 3
b. metoda celor mai mici pˇatrate, cu N = 3
Indicat ¸ie: se considerˇa Φ
0
(x) = 0 ¸si Φ
i
(x) = sin iπx, i = 1, 3.
Rezolvare
Se observˇa cˇa funct ¸iile Φ
0
(x) = 0 ¸si Φ
i
(x) = sin iπx, i = 1, 3 sunt funct ¸ii de clasˇa C
2
,
liniar independente, ¸si verificˇa condit ¸iile (7.38). De asemenea, avem:
p(x) = 1 q(x) = 1 f(x) = x.
¸si x
i
= 0 +
i
4
, i = 1, 3.
A. Rezolvare folosind metoda colocat ¸iei
Solut ¸ia problemei este de forma:
y
3
(x) = Φ
0
(x) + c
1
Φ
1
(x) + c
2
Φ
2
(x) + c
3
Φ
3
(x).
ˆ
Inlocuind ˆın sistemul (7.39), obt ¸inem urmˇatorul sistem:

1 −π
2

2
c
1
+ (1 −4π
2
)c
2
+
1 −9π
2

2
c
3
=
1
4
(1 −π
2
)c
1
−(1 −9π
2
)c
3
=
2
4
1 −π
2

2
c
1
−(1 −4π
2
)c
2
+
1 −9π
2

2
c
3
=
3
4
a cˇarui solut ¸ie este:
c
1
=

2 + 1
4(1 −π
2
)
c
2
= −
1
4(1 −4π
2
)
c
3
=

2 −1
4(1 −9π
2
)
De aici rezultˇa cˇa solut ¸ia aproximativˇa a problemei este:
y
3
(x) =

2 + 1
4(1 −π
2
)
sin πx −
1
4(1 −4π
2
)
sin 2πx +

2 −1
4(1 −9π
2
)
sin 3πx.
Solut ¸ia exactˇa a problemei date este
y(x) = x −
sin x
sin 1
Reprezentˇam ˆın continuare pe acela¸si sistem de coordonate, solut ¸ia exactˇa a problemei
init ¸iale (cu linie ˆıngro¸satˇa) ¸si solut ¸ia obt ¸inutˇa folosind metoda colocat ¸iei:
148
–0.07
–0.06
–0.05
–0.04
–0.03
–0.02
–0.01
0
0.2 0.4 0.6 0.8 1
x
B. Rezolvare folosind metoda celor mai mici pˇatrate
Notˇam
f
j
(x) = Φ
′′
j
(x) + p(x)·Φ

j
(x) + q(x)·Φ
j
(x) , j = 1, 3
Cu aceastˇa notat ¸ie, sistemul (7.40) devine:

c
1

1
0
f
1
(x) · f
1
(x) + c
2

1
0
f
2
(x) · f
1
(x) + c
3

1
0
f
3
(x) · f
1
(x) =

1
0
x · f
1
(x)
c
1

1
0
f
1
(x) · f
2
(x) + c
2

1
0
f
2
(x) · f
2
(x) + c
3

1
0
f
3
(x) · f
2
(x) =

1
0
x · f
2
(x)
c
1

1
0
f
1
(x) · f
3
(x) + c
2

1
0
f
2
(x) · f
3
(x) + c
3

1
0
f
3
(x) · f
3
(x) =

1
0
x · f
3
(x)
Solut ¸ia acestui sistem este:
c
1
=
2
π(1 −π
2
)
c
2
= −
1
π(1 −4π
2
)
c
3
= −
2
3π(1 −9π
2
)
.
De aici rezultˇa cˇa solut ¸ia aproximativˇa a problemei, obt ¸inutˇa cu metoda celor mai mici
pˇatrate, este:
y
3
(x) =
2
π(1 −π
2
)
sin πx −
1
π(1 −4π
2
)
sin 2πx −
2
3π(1 −9π
2
)
sin 3πx.
Reprezentˇam ˆın continuare pe acela¸si sistem de coordonate, solut ¸ia exactˇa a problemei
init ¸iale (cu linie ˆıngro¸satˇa) ¸si solut ¸ia obt ¸inutˇa folosind metoda celor mai mici pˇatrate:
149
–0.07
–0.06
–0.05
–0.04
–0.03
–0.02
–0.01
0
0.2 0.4 0.6 0.8 1
x
7.8.3 Probleme propuse
Exercit ¸iul 7.8.2. Sˇa se gˇaseascˇa solut ¸ia aproximativˇa a problemei

y
′′
+ y

= x
y(0) = 0
y(1) = 0
pe intervalul [0, 1] folosind:
a. metoda colocat ¸iei
b. metoda celor mai mici pˇatrate
folosind ca bazˇa funct ¸iile Φ
0
(x) = 0, Φ
1
(x) = x(1 −x), Φ
2
(x) = x
2
(1 −x).
150
BIBLIOGRAFIE
[1] S¸t. Balint, L. Brˇaescu, N. Bonchi¸s, Metode numerice Timi¸soara, 2007
[2] C. Berbente, S. Mitran, S. Zancu, Metode Numerice, Ed. Tehnicˇa, Bucure¸sti, 1998.
[3] T.A. Beu, Calcul numeric ˆın C, Edit ¸ia a 2-a, Ed. Alabastra, Cluj-Napoca, 2000.
[4] G. Coman, Analizˇa Numericˇa, Ed. Libris, Cluj-Napoca, 1995.
[5] M. Dinu, G. Lincˇa, Algoritmi si teme speciale de analizˇa numericˇa Ed. Matrix Rom,
Bucure¸sti, 1999.
[6] O. Dogaru, Gh. Bocsan, I. Despi, A. Ionica, V. Iordan, L. Luca, D. Petcu, P. Popovici
Informaticˇa pentru definitivare si grad, Ed. de Vest, Timisoara, 1998.
[7] W. Kelley, A. Peterson, Difference equation, An Introduction with Applications,
Academic Press, Elsevier, 2000.
[8] S¸t. Maru¸ster, Metode numerice ˆın rezolvarea ecuat ¸iilor neliniare, Ed. Tehnicˇa, Bu-
cure¸sti, 1981.
[9] P. Naslau, R. Negrea, L. Cadariu, B. Caruntu, D. Popescu, M. Balmez, C. Dumi-
trascu, Matematici asistate pe calculator, Ed. Politehnica, Timisoara, 2005.
[10] D. Petcu, Maple, un standard pentru matematica computerizatˇa, Tipografia UVT,
Timi¸soara, 1997
[11] V. A. Patel, Numerical Analysis, Humboldt State University, USA, 1994.
[12] MapleV4 - pagina de help
151

Introducere
Procesul de restructurare al ˆ a¸ˇmˆntului Superior din Romˆnia ¸i trecerea acestuia pe Invˇta a a s trei cicluri, a determinat la nivelul ˆ ıntregii ¸ˇri elaborarea de noi planuri de ˆ a¸ˇmˆnt ta ınvˇta a ¸i de programe analitice adecvate. s Metode numerice - Probleme de seminar ¸i lucrˇri de laborator este un material s a ın ¸ aditional la cursul de Metode numerice elaborat ˆ acord cu noile cerinte, pe baza pro¸ gramei analitice conceputˇ la nivelul Departamentului de Informaticˇ ¸i aprobatˇ ˆ Cona as a ın siliul Profesoral al Facultˇ¸ii de Matematicˇ ¸i Informaticˇ de la Universitatea de Vest at as a din Timi¸oara. s Problemele ¸i lucrˇrile de laborator prezentate ˆ aceastˇ carte se adreseazˇ ˆ primul s a ın a a ın rˆnd studentilor de la Facultatea de Matematicˇ ¸i Informaticˇ, fiind abordate toate a ¸ a s a temele din programa analiticˇ, la nivelul studentilor Sectiei de Informaticˇ aflati ˆ a ¸ ¸ a ¸ ın semestrul al cincilea de studiu, oferind exemple ¸i detalii referitoare la metodele numerice s prezentate ˆ curs. ın Lucrarea este structuratˇ pe ¸apte capitole, primul dintre acestea fiind rezervat pentru a s prezentarea unui set de cuno¸tinte minimale de programare ˆ Maple. Capitolele 2s ¸ ın 7 corespund capitolelor din cursul de Metode numerice ¸i sunt organizate dupˇ cum s a urmeazˇ: a • breviar teoretic • problemˇ rezolvatˇ a a • probleme propuse • implementare Prin aceastˇ lucrare, autorii pun la dispozitia cititorilor toate cuno¸tintele necesare a ¸ s ¸ ˆ vederea construirii de algoritmi ¸i proceduri capabile sˇ ia ca argument un obiect ın s a matematic ¸i sˇ returneze un rezultat final. s a

Autorii

Lista proiectelor
1. Metoda lui Gauss cu pivot total. Rezolvarea unui sistem 2. Inversa unei matrice. Rezolvarea unui sistem 3. Factorizarea LU Doolittle. Rezolvarea unui sistem 4. Factorizarea Cholesky. Rezolvarea unui sistem 5. Factorizarea Householder. Rezolvarea unui sistem 6. Metoda Gauss-Seidel. Comparatie cu metoda lui Jacobi ¸i cu solutia exactˇ ¸ s ¸ a 7. Metoda relaxˇrii succesive. Comparatie cu metoda Gauss-Seidel ¸i cu solutia exactˇ a ¸ s ¸ a 8. Metoda lui Newton simplificatˇ ˆ dimensiunea n. Comparatie cu metoda lui Newa ın ¸ ton clasicˇ ˆ dimensiunea n a ın ¸ 9. Metoda lui Newton simplificatˇ ˆ dimensiunea 1. Comparatie cu metoda lui Newa ın ton clasicˇ. Reprezentare intuitiva. a 10. Polinomul lui Newton cu diferente finite la dreapta. Comparatie pentru o functie ¸ ¸ ¸ cunoscutˇ a 11. Polinomul lui Newton cu diferente finite la stˆnga. Comparatie pentru o functie ¸ a ¸ ¸ cunoscutˇ a 12. Functia spline liniarˇ. Comparatie pentru o functie cunoscutˇ a ¸ ¸ a 13. Polinoame Bernstein. Comparati cu polinomul Lagrange pentru o functie cunos¸ ¸ cutˇ. a 14. Aproximarea derivatei prin diferente finite. Comparatie cu valoarea exactˇ ¸i ˆ ¸ ¸ a s ıntre diferite valori ale pasului h. 15. Formule de tip Gauss de ordinul 3, 4. Comparatie cu rezultatul exact. ¸ 16. Metoda lui Taylor de ordinul 3. Comparatie cu rezultatul exact. ¸ 17. Metoda Runge-Kutta de ordinul 3. Comparatie cu rezultatul exact, pentru diverse ¸ valori ale parametrilor. 18. Metoda Runge-Kutta de ordinul 4. Comparatie cu rezultatul exact, pentru diverse ¸ valori ale parametrilor. 19. Metoda Adams-Bashforth de ordinul 3. Comparatie cu rezultatul exact, pentru ¸ diverse valori ale parametrilor. 20. Metoda Adams-Bashforth de ordinul 4. Comparatie cu rezultatul exact, pentru diverse valori ale parametrilor. 21. Metoda Adams-Bashforth de ordinul 5. Comparatie cu rezultatul exact, pentru diverse valori ale parametrilor. 1

Cuprins
1 MapleV4 - scurtˇ introducere a 1.1 Reguli generale de introducere a comenzilor . 1.2 Pachete de programe . . . . . . . . . . . . . . 1.3 Constante, operatori ¸i functii des utilizate . . s ¸ 1.4 Structuri de date . . . . . . . . . . . . . . . . 1.5 Calcule cu matrice ¸i vectori. Pachetul linalg s 1.6 Grafice . . . . . . . . . . . . . . . . . . . . . . 1.7 Elemente de programare . . . . . . . . . . . . 2 Rezolvarea sistemelor liniare 2.1 Metoda lui Gauss . . . . . . 2.2 Factorizarea LU . . . . . . . 2.3 Sisteme tridiagonale . . . . 2.4 Factorizarea Cholesky . . . 2.5 Factorizarea Householder . . 2.6 Metoda Jacobi . . . . . . . 2.7 Metoda Gauss-Seidel . . . . 2.8 Metoda relaxˇrii succesive . a 4 4 6 7 8 10 13 15 21 21 33 40 47 49 54 61 64 68 68 73 83 83 92 95 104

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

3 Ecuatii ¸i sisteme de ecuatii neliniare ¸ s ¸ 3.1 Metoda punctului fix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Metoda lui Newton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Interpolare polinomialˇ. Functii spline a ¸ 4.1 Polinomul lui Newton cu diferente divizate ¸ 4.2 Polinomul de interpolare Lagrange . . . . 4.3 Interpolare spline . . . . . . . . . . . . . . 4.4 Polinoame Bernstein . . . . . . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

5 Derivare numericˇ a 107 5.1 Aproximarea derivatei prin diferente finite . . . . . . . . . . . . . . . . . 107 ¸ 5.2 Aproximarea derivatei . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 6 Integrare numericˇ a 112 6.1 Formule de tip Newton-Cotes . . . . . . . . . . . . . . . . . . . . . . . . 112 6.2 Formule de tip Gauss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 2

7 Ecuatii diferentiale ¸ ¸ 7.1 Metoda diferentelor finite . . . . . . . . . ¸ 7.2 Metoda lui Taylor . . . . . . . . . . . . . . 7.3 Metoda Runge-Kutta . . . . . . . . . . . . 7.4 Metoda Adams-Bashforth . . . . . . . . . 7.5 Metoda Adams-Moulton . . . . . . . . . . 7.6 Metoda predictor-corector . . . . . . . . . 7.7 Probleme la limitˇ liniare . . . . . . . . . a 7.8 Metoda colocatiei ¸i metoda celor mai mici ¸ s

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pˇtrate a

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

118 118 124 128 132 136 137 141 147

3

Capitolul 1 MapleV4 - scurtˇ introducere a
Maple este un sistem de calcul algebric (CAS) dezvoltat de firma Maplesoft (http://www.maplesoft.com), care poate fi utilizat ˆ ın: 1. calcule simbolice; 2. calcule numerice; 3. programarea unor metode numerice; 4. reprezentˇri grafice. a ˆ cele ce urmeazˇ, vom prezenta principalele elemente necesare ˆ programarea unor In a ın metode numerice, corespunzˇtoare softului MapleV4. a

1.1

Reguli generale de introducere a comenzilor

Un document MapleV4 poate avea patru tipuri de cˆmpuri: a 1. comenzi Maple (introduse de cˇtre utilizator); a 2. rezultate Maple (rˇspunsuri ale CAS-ului la comenzile introduse); a 3. grafice (rˇspunsuri ale CAS-ului); a 4. texte (introduse de cˇtre utilizator). a ˆ continuare, vom prezenta cˆteva reguli de introducere a comenzilor. In a 1. Orice comandˇ se terminˇ cu ; (dacˇ dorim sˇ afi¸eze rezultatul) sau : (dacˇ nu a a a a s a dorim ca rezultatul sˇ fie afi¸at). De exemplu: a s > sin(Pi); 0 > 1+3: 4

2. Asignarea se face cu := .2. 3} 6. De exemplu. [ a ]. 2. De exemplu: > x:=3. [] . Comentariile sunt precedate de caracterul #. multime:={2. iar multimile ˆ ¸ ıntre acolade. De exemplu: a > a:=2. listele ˆ ıntre paranteze pˇtrate. secv := 1. x := 3 X := 5 a := 2 5. x := 7 > x:=x+1: > x. iar dezasignarea se face prin asignarea numelui variabilei. a := 2 > b:=%+1. () .3]. 3 lista := [2. 2. 8 > x:=’x’. x 3. b:=lista[2]. Procentul. 2. % .2. putem avea secventa: ¸ > x:= 7. iar indicii ˆ ıntre paranteze pˇtrate.2. b := 3 5 . a:=X-x. face referire la ultima comandˇ executatˇ anterior.3). a > a:=cos(Pi). ( ). Argumentele unei functii se pun ˆ ¸ ıntre paranteze rotunde. Maple face diferenta ˆ ¸ ıntre litere mici ¸i litere mari: s > x:=3.1. 3] multime := {1. lista:=[2. {}. x := ′ x′ > x. De exemplu: > secv:=(1. a := −1 b := 1 a 7. X:=5.3}.1. # se atribuie lui x valoarea 3 x := 3 4. Secventele sunt scrise ˆ ¸ ıntre paranteze rotunde. 1.

# apelarea corecta a functiei arctangenta π 4 9. matrixplot. textplot3d. replot. pointplot. setoptions3d. setoptions. listcontplot. tubeplot] 6 . conformal. Apelarea ¸ ¸ lor se face cu ajutorul comenzii with(nume_pachet). display. este util ca pentru rezolvarea unei ¸ probleme noi sˇ ˆ a ıncepem cu instructiunea ¸ > restart.pentru analizˇ matematicˇ. implicitplot. a a De exemplu. 1. atunci aceasta aratˇ cˇ Maple nu poate interpreta comanda a a a introdusˇ.pentru reprezentˇri grafice. rootlocus. listdensityplot. Warning. contourplot3d. complexplot. Pentru a nu retine eventuale atribuiri anterioare. densityplot. se obtine lista tuturor functiilor apelabile: ¸ ¸ > with(plots). pointplot3d. gradplot3d.8. animate3d. complexplot3d. semilogplot. sparsematrixplot. changecoords. Pentru a remedia situatia. cylinderplot. contourplot. a a student . listplot. loglogplot. ¸ ¸ linalg . se folose¸te sintaxa: s pachet[’functie’](argumente) Printre cele mai utilizate pachete sunt: plots . odeplot. la apelarea pachetului grafic. surfdata. # o incercare de a calcula arctangenta de 1 arctg(1) > arctan(1). logplot. polygonplot3d. Dacˇ rezultatul furnizat de Maple este identic cu comanda introdusˇ (Maple rˇspunde a a a prin ecou la comandˇ). implicitplot3d. inequal. a DEtools . the name changecoords has been redefined [animate. fieldplot. textplot.pentru rezolvarea ecuatiilor diferentiale. listcontplot3d. verificati dacˇ ati introdus corect comanda a ¸ ¸ a ¸ sau dacˇ nu cumva functia utilizatˇ face parte dintr-un pachet care trebuie ˆ arcat a ¸ a ıncˇ ˆ prealabil. display3d. coordplot. sphereplot. polarplot.2 Pachete de programe Pachetele sunt colectii de functii care permit efectuarea de calcule specifice. coordplot3d. gradplot.pentru rezolvarea unor probleme de algebrˇ liniarˇ. spacecurve. pareto. polyhedraplot. fieldplot3d. Pentru a apela o anumitˇ functie a ¸ dintr-un pachet. listplot3d. polygonplot. ın > arctg(1).

and. not Sintaxˇ a a+b. implies.. or. arctan(x). ln(x)... · n maximul (minimul) dintre a. a-b a*b. c operatori booleeni operatorul de asignare f = expr ecuatia a = b ¸ a≤x≤b operatori logici Semnificatie ¸ ”fals” ”adevˇrat” a constanta lui Euler +∞ constanta lui Catalan valoare de adevˇr necunoscutˇ a a π unitatea imaginarˇ a secventa vidˇ ¸ a Functii folosite frecvent ˆ Maple: ¸ ın Functie ¸ sin. . a**b n! max(a. arccos ln.. cos.c).<> := = . * / ^.c) f:=expr a=b x=a. log10 exp sqrt abs Sintaxˇ a sin(x) ...3 Constante.b. cot arcsin. arctan. ** ! max. log10(x) exp(x).b Semnificatie ¸ suma a + b (diferenta a − b) ¸ produsul a · b..>=..1. exp(1) sqrt(x) abs(x) Semnificatie ¸ functii trigonometrice ¸ logaritmi functia exponentialˇ ¸ ¸ a radical modul 7 . sau 2a a cˆtul a b puterea ab factorialul 1 · 2 · .<=. min <. tan.=. operatori ¸i functii des utilizate s ¸ Constantele folosite de Maple sunt: Constantˇ a false true gamma infinity Catalan Fail Pi I NULL Operatorii folositi frecvent sunt: ¸ Operator +.>.b. . b. xor. min(a. 2*a a/b a^b.

t:=(a.1. 5. ll := [1.4.b. scrisˇ ˆ a ¸a a ıntre paranteze pˇtrate.e.2 Liste O listˇ este o secvent ˇ de expresii. b.ll) sau ll[n]: a s > aa:=ll[3].2. Existˇ mai multe moduri ¸a ın¸ a de a defini o secvent ˇ: ¸a a. putem a avea lista: > ll:=[1. De exemplu: s a > lista:=subsop(2=NULL. 4 t := a.ll).c].a. 2.1) Cu ajutorul functiilor min ¸i max se poate calcula minimul. 4. 3. x=2. ¸ a a a ın a ¸i f alse ˆ caz contrar: s ın > member(d. De exemplu. respectiv maximul unei ¸ s secvente.elem]. lista := [ ] Se poate adˇuga un element nou la lista ll astfel: [op(ll). ll). cu ajutorul functiei seq: ¸ > seq(3*x.4.15).3. a. 18. 2. 9. ¸iruri ¸ ¸ s de caractere Secvente ¸ O secventˇ este o ˆ siruire de expresii. 2.4 1. s := 1.2.7.2. liste.1 Structuri de date: secvente. max(s.2. 7. d. aa := 5 bb := a Functia member(elem. f ] Se poate ¸terge al n-lea element din listˇ ll astfel: subsop(n=NULL. 2. ¸ > min(s). separate prin virgule. 2. cu ajutorul unui ciclu for (vezi sectiunea 1. 8 . ll) returneazˇ true dacˇ elementul respectiv se aflˇ ˆ listˇ ll. 15. 21 ¸ c.2.2. 12. c b. lista).7.4. lista := [d. c] Putem afla numˇrul de operanzi din listˇ cu ajutorul functiei nops: a a ¸ > nops(ll).ll). bb:=op(9..5. f alse Lista vidˇ este desemnatˇ prin []: a a > lista:=[]. 11 Al n-lea element din listˇ poate fi afi¸at cu una din comenzile op(n. 6. De exemplu: a > lista:=[op(lista). direct: > s:=1. 3 15 1. e.c). 2.4.f].7).2. [ ]. multimi.

scrisˇ ˆ ¸ ¸a a ıntre acolade. putem avea: ¸ > i:=4.4 Siruri de caractere ¸ Sirurile de caractere sunt delimitate de apostrof invers. {2. b:=52. 4} Intersectia a douˇ multimi se realizeazˇ cu ajutorul operatorului intersect: ¸ a ¸ a > s intersect t. i). # afla tipul expresiei a symbol > whattype(b).2.3} : t:={2. se obtine un ¸ir de caractere. ll := {1.2. 3} Diferenta a douˇ multimi se realizeazˇ utilizˆnd operatorul minus: ¸ a ¸ a a > s minus t.7. a. {1} > s minus s.2. acesta este un sir Sirurile de caractere se pot concatena cu ajutorul comenzii cat. {1. {} 1. 4. 3.4.4.lista := [d. De exemplu.4} : > s union t. # afla tipul expresiei b integer > a+b. V aloarea lui i este 4 Atentie! La concatenarea unui ¸ir de cifre.2. 7. sau ¸tergerea elementului de pe pozitia n se a ¸ s ¸ face la fel ca la liste. a :=579 b := 52 > whattype(a). 5. c} Adˇugarea unui nou element la multime. Multimea vidˇ este desemnatˇ prin {}. a :=579+52 > whattype(a+b).3 Multimi ¸ O multime este o secventˇ de expresii. {}.2.5.3. # afla tipul expresiei a+b symbol 9 .7. De exemplu: a a a > ll:={1. dupˇ cum urmeazˇ: ¸ a a > ‘acesta este un sir‘. nu un numˇr: ¸ s s a > a:=cat(5. i := 4 > cat( ‘Valoarea lui i este ‘. 2.a. ˆ care fiecare element ın figureazˇ o singurˇ datˇ.4. f ] 1.2.c}.9).‘. 2. ¸ a a Reuniunea a douˇ multimi se face utilizˆnd operatorul union: a ¸ a > s:={1.

equal. fibonacci. b}. intbasis. inverse.2). innerprod. # evalueaza valoarea lui M 1 a 3 {} Un alt mod de a defini matrice ¸i vectori.2]:={}: > evalm(M).2. jacobian. b} v4 := 3 > evalm(v). este folosirea pachetului linalg. 1. genmatrix. exponential. hilbert. Elementele unui vector se pot defini unul cˆte unul. charmat. frobenius. issimilar. the protected names norm and trace have been redefined and unprotected [BlockDiagonal. eigenvects.1): ¸ > M:=array(1. companion. gaussjord.4).dim_vect). addrow. sau printr-un ciclu for (vezi a sectiunea 1.. entermatrix. cond. GramSchmidt. Pachetul linalg se ˆ ıncarcˇ astfel: a >with(linalg). curl. Warning.nr_rand. delrows. v[4]:=3. colspan. LUdecomp.1]:=1: M[1. col. hessian. ffgausselim.1]:=3: M[2. precum ¸i de a efectua operatii specifice cu s s ¸ aceste obiecte. bezout. extend.nr_col).. Pachetul linalg s Cu ajutorul cuvˆntului-cheie array se pot defini vectori ¸i matrice.. grad. M := array(1. 3] O matrice se define¸te astfel: s > M:=array(1. sau printr-un ciclu for (vezi a sectiunea 1. v1 := a v2 := b v3 := {a. diag. diverge. ihermite. copyinto. charpoly. indexfunc. Wronskian. JordanBlock. [ ]) > v[1]:=a. basis. gausselim. htranspose.. Elementele unei matrice se pot defini unul cˆte unul. angle.. hermite. # evalueaza valoarea lui v [a. v[3]:={a.1..5 Calcule cu matrice ¸i vectori. eigenvals. eigenvectors. concat. colspace. blockmatrix.2. [ ]) > M[1.2]:=a: M[2. 1.1. forwardsub. b. coldim.4.b}. adjoint.. addcol. adj. 10 . eigenvalues. ismith.2. hadamard. dotprod. QRdecomp. band.cholesky. definite. det. a s Un vector se define¸te ˆ urmˇtorul mod: s ın a > v:=array(1..7. delcols. augment. backsub. iszero. v[2]:=b. geneqns. {a.1): ¸ > v:=array(1. v := array(1..7. crossprod.

nr_coloane. laplacian. matadd. randvector. ˆ a ¸ ımpreunˇ cu descrierea a s ¸ lor. v := [2. pentru vectorul v din exemplul anterior. putem avea: > v[3]. se scrie v[i].4. 11] Elementul i al vectorului v. rank.1]. f := x → 2x + 1 w:=vector(5. kernel. pivot. vector. sumbasis.j]. pentru matricea a din exemplul anterior. 5 Un vector se define¸te cu ajutorul comenzii vector: s vector(nr_elem. 5.3. 8. scalarmul. toeplitz.j]=f(i.2]). submatrix. 4. putem avea: > a:=matrix(3.2. potential. row. j) → i + j > b:=matrix(2. 8 Redˇm mai jos cele mai utilizate functii din pachetul linalg. putem avea: v:=vector([2. linsolve. 7. randmatrix. rowspan. Astfel. vecpotent. rowspace. orthog. Astfel.3. swapcol. nullspace. lista_elem sau fc_generatoare) Astfel. trace. lista_elem sau fc_generatoare) Astfel. smith. vectdim.2. ratform. 2] sau f:=x-> 2*x+1.   1 2 a :=  3 4  5 6 dar ¸i s > f:=(i. sylvester. putem avea: > a[3. multiply. singularvals. norm. # functia generatoare a elem matricei f := (i. swaprow. se poate consulta pagina de help referitoare la pachetul linalg. mulcol.j) 2 3 4 b := 3 4 5 Elementul aij se scrie a[i. normalize. Pentru mai multe detalii referitoare la aceste functii. minor. vandermonde. 9. rowdim.4.6]). # adica w[i]=f(i) w := [3. rref.8.[1. matrix.f). stack. leastsqrs.f). subvector.j)->i+j. precum ¸i la celelalte functii ¸ din pachetul linalg. permanent. mulrow. 11 . minpoly.5. transpose.jordan. vi . wronskian] O matrice se define¸te cu comanda matrix: s matrix(nr_randuri. # adica b[i.

x) forwardsub(L. unde L este o matrice inferior triunghiularˇ a efectueazˇ eliminarea gaussianˇ cu a a semipivot asupra matricei A continuare pe pagina urmˇtoare a 12 .i.v) exponential(A) extend(A.c2. unde U este o matrice superior triunghiularˇ a construie¸te o matrice n x n care are s pe diagonala principalˇ elementele veca torului b. respectiv coloanele i pˆnˇ la k. iar celelalte elemente sunt nule efectueazˇ descompunerea Cholesky a a matricei A extrage coloana i.n. din matricea A a a returneazˇ numˇrul de coloane ale maa a tricei A returneazˇ produsul vectorial al vectoa rilor u ¸i v s ¸terge coloanele de la r la s din mas tricea A ¸terge liniile de la r la s din matricea A s calculeazˇ determinantul matricei A a calculeazˇ divergenta vectorului f a ¸ calculeazˇ produsul scalar al vectorilor a u ¸i v s calculeazˇ eA a adaugˇ m linii ¸i n coloane matricei A..b) gausselim(A) Descriere ˆ ınlocuie¸te coloana c2 a matricei A cu s m*c1+c2 ˆ ınlocuie¸te linia r2 a matricei A cu s m*r1+r2 calculeazˇ matricea adjunctˇ a matricei a a A calculeazˇ unghiul vectorilor u ¸i v a s concateneazˇ (alˇturˇ) matricile A ¸i B a a a s pe orizontalˇ a rezolvˇ sistemul Ux=b.n) cholesky(A) col(A.r.m.c1.Functie ¸ addcol(A.r. a s initializate cu x ¸ rezolvˇ sistemul Lx=b prin substitutie a ¸ ˆ ınainte.r2.v) augment(A.s) delrows(A. col(A.k) coldim(A) crossprod(u.m) adj(A).m) addrow(A. adjoint(A) angle(u.b) band(b.r1.v) delcols(A.B) backsub(U... prin substitutie a ¸ inversa.i).s) det(A) diverge(f) dotprod(u.

. c2 s subvector(A.continuare Functie ¸ geneqns(A.i.r1.r.r2.. respectiv liniile de la i la j.x) Descriere genereazˇ un sistem de ecuatii pornind a ¸ de la matricea A ¸i vectorul necunoss cutelor x genmatrix(sist.expr) multiplicˇ coloana c a matricei A cu exa presia expr mulrow(A.B) efectueazˇ ˆ a ınmultirea matricelor A ¸i B ¸ s norm(A) calculeazˇ norma matricei A a normalize(v) calculeazˇ versorul vectorului v a rank(A) calculeazˇ rangul matricei A a row(A.expr) multiplicˇ linia r a matricei A cu exprea sia expr multiply(A.c2) extrage o submatrice a matricei A..j) extrage linia i. ˆ ıntre liniile r1. y_min. r2.r1.. vect) calculeazˇ gradientul expresiei expr.c..x_max. in a functie de variabilele vect ¸ inverse(A) calculeazˇ inversa matricei A a matadd(A. a cˇrei sintaxˇ este ¸ a a a plot(functie.c2) calculeazˇ c1*A+c2*B a minor(r.c) calculeazˇ minorul de ordin (r. de la rangul r1 la rangul r2 swapcol(A. x=x_min. in raport cu multimea variabilelor var grad(expr.c1.c2) interschimbˇ coloanele c1 ¸i c2 ale maa s tricei A swaprow(A. ¸i coloanele c1.c) a (eliminˇ linia r ¸i coloana c) din maa s tricea A mulcol(A.r1. ale matricei A rowdim(A) returneazˇ numˇrul de linii din maa a tricea A scalarmult(A.Pachetul linalg .r2) interschimbˇ liniile r1 ¸i r2 ale matricei a s A trace(A) calculeazˇ urma matricei A a vectdim(v) returneazˇ dimensiunea vectorului v a 1.y_max) 13 .B) concateneazˇ matricele A ¸i B pe vertia s calˇ a submatrix(A. row(A.6 Grafice Graficul unei functii se realizeazˇ folosind comanda plot.c1. var) genereazˇ matricea coeficientilor sisa ¸ temului sist.B.c1.r2) extrage un subvector al vectorului A.s) ˆ ınmulte¸te toate elementele matricei A ¸ s cu scalarul s stack(A.i)..

. putem avea: > plot(sin(x)..cos(x)^2].5). x=-5. 1 0.4 0. 1 0.. x=-5.5 –4 –2 0 2 x 4 –0.y_max este optional.5 –1 > plot(cos(x)^2.8 0.2 –4 –2 0 2 x 4 > plot([sin(x).unde argumentul y_min. 14 . x=-5.5)..6 0. ¸ De exemplu.5).

putem avea secvent a: ¸ > if a<0 then -a else a fi.1 Elemente de programare Conditionarea ¸i ciclarea ¸ s A.1 0.5 –4 –2 0 2 x 4 –0. # pentru calculul modulului pentru a returna modulul numˇrului a. a ¸ De exemplu. sau la pachetul plots. 15 . # functia signum pentru a returna semnul unui numˇr (functia sgn).7. a Un alt exemplu este dat de secvent a: ¸ > if x<0 then -1 elif x=0 then 0 else 1 fi. Conditionarea ¸ Sintaxa unei instructiuni conditionale este ¸ ¸ if CONDITIE then EXPRESIE [ elif CONDITIE then EXPRESIE ] [ else EXPRESIE ] fi Instructiunile puse ˆ ¸ ıntre paranteze pˇtrate. Ciclarea O instructiune repetitivˇ poate avea una din urmˇtoarele douˇ sintaxe: ¸ a a a [ for CONTOR ] [ from EXPR ] [ by EXPR ] [ to EXPR ] [ while EXPR ] do INSTRUCTIUNI od. [ ]. ¸ 1. sunt optionale.7 1. a ¸ B.5 –1 Mai multe detalii despre grafice se pot gˇsi accesˆnd pagina de help referitoare la a a instructiunea plot.

4.3.. care trebuie sˇ poatˇ fi evaluatˇ ca adevˇratˇ sau a a a a a a a falsˇ. 16] > v:=vector(3). od. pentru a scrie toate numerele pare de la 6 la 100 putem folosi: > for i from 6 by 2 to 100 do print(i) od. 16 .while indicˇ o expresie booleanˇ.3. > evalm(M). 1. 7 > l:=[]. for i from 1 to 4 do l:=[op(l).2*i+1 od. a De exemplu.i^2] od. multimi.. 4.. [ ]) > for i from 1 to 3 do # definirea elem matricei for j from 1 to 4 do M[i. # definirea unei liste l := [ ] l := [1] l := [1.from indicˇ punctul de plecare ˆ iteratie (dacˇ este omis. 19] M:=array(1. . 5. valoarea sa implicitˇ este a ın ¸ a a 1). # definirea vectorului for i from 1 to 3 do v[i]:=i^3-i^2+1 od.1. 4] l := [1.4). # definirea matricei M := array(1. Cu ajutorul buclei for se pot defini secvent e. se considerˇ implicit cˇ are a ¸ a a a valoarea +∞ ¸i se obtine o buclˇ infinitˇ). a . [ ]) v1 := 1 v2 := 5 v3 := 19 [1.by indicˇ pasul contorului (dacˇ este omis. # vizualizarea vectorului v := array(1. 5. # definirea unei secvente s := s := 3 s := 3... for i from 1 to 3 do s:=s. a a a a . vectori sau matrice.j]:=i^j od. 5 s := 3. 9.in indicˇ elementele succesive ale expresiei EXPR.sau [ for CONTOR ] [ in EXPR ] [ while EXPR ] do INSTRUCTIUNI od. se considerˇ implicit cˇ are valoarea 1). liste.3. 4. 9] l := [1. # definirea elem vect evalm(v). ¸ ¸ > s:=NULL.to indicˇ punctul de oprire a iteratiei (dacˇ este omis. s ¸ a a . unde: .

pentru a returna un mesaj de eroare. multimi. end. Putem defini functii de o variabilˇ ¸ a sau functii de mai multe variabile.2. 1.2 Functii ¸i proceduri ¸ s ¸ a O functie poate fi definitˇ cu ajutorul operatorului ->. se s folose¸te ERROR.4. Sintaxa este: a ¸ s proc (ARGUMENTE) local VARIABILE_LOCALE. 3 Un alt exemplu de procedurˇ este urmˇtorul: a a 17 . s De exemplu. modul := proc(a) if a < 0 then −a else a end if end proc pe care o putem apela astfel: > modul(-3). f := x → x2 + 1 > g:=(x.3).7. g := (x. y) → x2 + y > f(3).y)->x^2+y. se folose¸te RETURN. O procedurˇ returneazˇ ultimul rezultat obtinut. 13 > g(4. variabile ¸i constante. end. ¸ > f:=x->x^2+1.1]: > for i in lista do print(i) od. putem defini procedura: > modul:=proc(a) if a<0 then -a else a fi. vector) astfel: s ¸ ¸ > lista:=[3. De asemenea. 10 > g(3. 19 O procedurˇ este un grup de instructiuni. matrice.  1 1 1 1  2 4 8 16  3 9 27 81 Putem afi¸a elemetele unei liste (secvente.5. description SIR_DE_CARACTERE.4). options OPTIUNI. Mai multe detalii despre instructiunile de conditionare ¸i de ciclare se pot gasi accesˆnd ¸ ¸ s a pagina de help referitoare la acestea. INSTRUCTIUNI. global VARIABILE_GLOBALE. Pentru a forta returnarea unui alt a a ¸ ¸ rezultat.

# ecuatia x^2+2*x-3=0 1.9).x2. # ecuatia x^2+2*x+9=0 ecuatia nu are solutii reale > ec2(1. to be of type matrix.b. (in determinant1) argumentul trebuie sa fie matrice!!! Se mai poate defini argumentul A ca fiind de tipul matrice: > determinant3:=proc(A::matrix) RETURN(det(A)) end: ¸i se obtine urmˇtorul rezultat: s ¸ a > determinant3(2). Error. if delta>0 then x1:=(-b+sqrt(delta))/(2*a). A. elif delta=0 then RETURN(-b/(2*a)).x2). x2:=(-b-sqrt(delta))/(2*a). Error. matrix) then ERROR(‘argumentul trebuie sa fie matrice!!!‘) fi. De exemplu. end: care produce urmˇtoarele rezultate: a > ec2(1. delta:=b^2-4*a*c. but received 2 18 . else RETURN(‘ecuatia nu ere solutii reale‘). se folose¸te sintaxa argument::tip. RETURN(x1.9).x1.2. s sˇ luˇm urmˇtoarea procedurˇ ¸i situatiile care pot apˇrea: a a a as ¸ a > # procedura care returneaza determinantul unei matrice > determinant:=proc(A) RETURN(det(A)) end: > determinant(2). fi. RETURN(det(A)) end: care produce urmˇtorul rezultat: a > determinant1(2).2.-3).c) local delta. −3 Pentru a defini tipul unui argument.> ec2:=proc(a. (in linalg:-det) expecting a matrix Procedura determinant se poate ”imbunˇtˇ¸i” astfel: a at > determinant1:=proc(A) if not type(A. # ecuatia x^2+6*x+9=0 −3 > ec2(1. description ‘Rezolvarea ecuatiei de gradul 2‘. Error.6. invalid input: determinant3 expects its 1st argument.

z. 1 Un alt exemplu este procedura rdc.z.Mai multe detalii despre tipurile existente se pot gˇsi accesˆnd pagina de help (cuvˆntul a a a cheie este type). se folose¸te debug. procedurˇ pentru calculul lui √ : a x > rdc:=proc(x) if x<0 then ERROR(‘numar negativ!‘) elif x=0 then RETURN(infinity) else simplify(x^(-1/2)). b) local y. putem avea: a s > f:=proc(a. fi. z:=1/y. iar pentru a stopa a ¸ s urmˇrirea. y:=a+b/2. y := a + 1/2 ∗ b. RETURN(y+z) end. z := 1/y RETURN(y + z) end proc > debug(f). ∞ > rdc(4).b) local y. end. f > f(2. 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). De exemplu.4). se folose¸te undebug. Error. (in rdc) numar negativ! > rdc(0). f := proc(a. 19 . 1 2 Pentru a putea urmˇri executia unei proceduri.

¸ a 20 . precum ¸i despre optiunile debug ¸i undebug.20). ¸ s s ¸ s puteti gˇsi pe paginile de help referitoare la acestea.exit f (now at 5 2 undebug(f) f > f(10. 4 top level) = 17/4} = 0.1).{--> enter f. {--> enter f. 401 20 = 2. 1 top level) = 5/2} Alte detalii despre functii ¸i proceduri. args 1 y := 2 z := 2 <-.exit f (now at 17 4 > f(0. args y := 4 1 z := 4 <-.

xn )T ...1. . s ¸ a Constructia sistemului superior triunghiular se face astfel: la pasul k se eliminˇ ¸ a xk din ecuatiile k + 1. . . . existˇ urmˇtoarele variante ale metodei lui Gauss: In ¸ a a 21 . j = 1 . + ann xn = bn ˆ care aij ¸i bi sunt numere reale date. xn sunt ın s numere reale necunoscute. n.. se impun metode directe ¸i metode s a s iterative pentru rezolvarea acestor sisteme. . .. b = (b1 ..n . .. n.j=1.. n. iar ın a s calculul matricei A−1 este dificil ¸i acumuleazˇ erori. s s ¸ ˆ functie de alegerea pivotului.. i = 1 .+ a x = b 21 1 22 2 2n n 2 (2. x2 . .. .. Deoarece ˆ cele mai multe cazuri matricea A are numˇr mare de linii ¸i coloane..... . ¸i determinantul matricei sisa ¸ a s temului este nenul):   a11 x1 + a12 x2 + ..1)  ..1 Metoda lui Gauss Breviar teoretic Metoda lui Gauss presupune transformarea sistemului Ax = b ˆ ıntr-un sistem superior triunghiular. ¸i apoi rezolvarea acestuia prin substitutie inversˇ........ .. .... b2 . .... + a1n xn = b1    a x + a x + . Sistemul (2. 2. . iar x1 . ... ...1 2. . . . .. .. bn )T . sistemul Ax = b are solutie unicˇ: a a ¸ a x = A−1 b... x = (x1 ...    an1 x1 + an2 x2 + . Dacˇ matricea A este nesingularˇ.. x2 .1) se poate scrie matriceal sub forma: Ax = b unde: A = (aij )i.Capitolul 2 Rezolvarea sistemelor liniare ˆ acest capitol vom prezenta metode de rezolvare a sistemelor liniare de tip Cramer In (numˇrul de ecuatii este egal cu numˇrul de necunoscute. prin ˆ ¸ ınmultirea ecuatiei k cu ¸ ¸ aik mik = − akk (elementul akk se nume¸te pivot) ¸i adunarea acestora la ecuatia i (i > k).

. n. 2n Bij Bij = m pentru j = 1. metoda lui Gauss cu semipivot .. metoda lui Gauss cu pivot total . .n−1 ˜ ˜ a2. j = i m1 = Bji pentru k = 1. xn−1 xn   ˜ b1   ˜2   b  =  .n ..n−2 a1. pentru i > k.1. se alege ca pivot elemenın tul aik maxim ˆ valoare absolutˇ pe coloanˇ. .. . sistemul (2.ˆ care la fiecare pas.n−1 ˜ ˜ .2) iar rezolvarea sistemului (2. metoda lui Gauss clasicˇ . permutˆndua a s a a se linia k cu linia i ¸i coloana k cu coloana j..n−2 a2. Cu ajutorul eliminˇrii gaussiene se poate determina ¸i inversa unei ¸ a s matrice. j > k.. . 1 akk ˜ Observatia 2..1.. a ın k = 1.. 2.. prin ¸tergerea primelor n coloane ale matricei B astfel transformate. .n ˜ . 2n Bjk = Bjk − m1 Bik 3. se alege ca pivot ın elementul maxim atˆt pe linie.     ˜n−1 b ˜n b       (2.n−1 an−1.3) n xk = ˜k − b j=k+1 akj · xj ˜ · 1 ....2) se face prin substitutie inversˇ: ¸ a xn = ˜n b ann ˜ (2. pivotul este elementul akk .ˆ care la fiecare pas. 3.. . pentru i = 1.n ˜ ˜ ..1... n − 2..1) se reduce la forma superior triunghiularˇ In a       a11 a12 ˜ ˜ 0 a22 ˜ . 0 an−1.. k = n − 1. pentru i > k. generarea matricei B prin concatenarea matricelor A (de dimensiune n) cu matricea In 2. a ın 1. 0 0 ann ˜       ·     x1 x2 . n. permutˆndu-se linia k ın a a a cu linia i. a2. s ˆ acest fel.... 0 0 0 0 ˜ a1.ˆ care la fiecare pas.. cˆt ¸i pe coloanˇ. . a1.. se obtine ins ¸ versa matricei A 22 .. Redˇm ˆ continuare algoritmul de aflare a inversei unei matrice A. . n m = Bii pentru j = 1.

1 4 1 12 . Sˇ se rezolve urmˇtorul sistem folosind cele trei variante ale eliminˇrii ¸ a a a Gauss:   x+y+z =6 2x − y + 3z = 9  x + 4y + z = 12. iar coloana j cu Cj .1.1. 1 4 1   ¯ iar A este matricea sa extinsˇ: a Deoarece numˇrul ecuatiilor este egal cu cel al necunoscutelor ¸i a ¸ s det A = −3 = 0. Matricea sistemului este  1 1 1 A =  2 −1 3  . a ˆ continuare.2 Probleme rezolvate Exercitiul 2. ¸i deci metoda eliminˇrii a lui Gauss s a este aplicabilˇ. pentru a efectua operatiile asupra matricei extinse a sistemului vom In ¸ nota linia i cu Li .2. Constructia sistemului superior triunghiular ¸ Pasul 1 • pivot: a11 = 1 2 • m21 = − = −2 1 1 • m31 = − = −1 1     1 1 1 6 L2 →L2 +m21 L1 1 1 1 6 L →L3 +m L  2 −1 3 9  −3− − −31−1  0 −3 1 −3  − − − −→ 1 4 1 12 0 3 0 6 Pasul 2 • pivot: a22 = −3 3 • m32 = − =1 −3     1 1 1 6 1 1 1 6 L →L3 +m L  0 −3 1 −3  −3− − −32−2  0 −3 1 −3  − − − −→ 0 3 0 6 0 0 1 3 23  1 1 1 6 ¯ A = (A. sistemul este compatibil determinat (de tip Cramer). b) =  2 −1 3 9  .1. Rezolvare utilizˆnd metoda lui Gauss clasicˇ a a A.

deci se permutˇ linia 2 cu linia 3 ¸i se fac zerouri pe a s coloana 2. ¸i a s pentru i > 1:    1 1 1 6 2 −1 L ↔L1  2 −1 3 9  −2− →  1 1 −− 1 4 1 12 1 4  coloana 1. In se fac zerouri pe coloana 1  3 9 1 6  1 12 9 3 2 15 2  L2 →L2 − 1 L1  2 2 −1 3 9 2 −1 3 L →L3 − 1 L1  1 1 1 6  −3 − − 2 →  0 3 − 1 −−− − 2 2 0 9 −1 1 4 1 12 2 2   Pasul 2 • Ca pivot se ia elementul ai2 de modul maxim de pe coloana 2. 1 z= de unde obtinem solutia sistemului: x = 1. x= y  . avem: ¸ 3 1 1 y= (−3 − 1 · z) −3 1 x = (6 − 1 · y − 1 · z). unde: ˆ care matricea A ın a       1 1 1 x 6 ˜ =  −3  . pentru i > 2:     2 −1 3 9 2 −1 3 9 L ↔L2  0 3 − 1 3  −3− →  0 9 − 1 15  −− 2 2 2 2 2 2 9 1 15 3 3 0 2 −2 2 0 2 −1 2 2  2 −1 3  0 9 −1 2 2 0 3 −1 2 2 9 15 2 3 2   2 −1 3 9  − − − −  0 9 − 1 15  −−−→ 2 2 2 1 0 0 − 3 −1 L3 →L3 − 1 L2 3  24 .ˆ acest moment am ajuns la un sistem de forma Ax = ˜ echivalent cu sistemul initial. ˆ cazul nostru. pivotul este a32 . Rezolvarea sistemului superior triunghiular Prin metoda substitutiei inverse. Constructia sistemului superior triunghiular ¸ Pasul 1 • Ca pivot se ia elementul ai1 de modul maxim de pe pivotul este a12 . deci se permutˇ linia 1 cu linia 2. z = 3. y = 2. ¸ ˜ este superior triunghiularˇ. ˜ A =  0 −3 1  . ¸ ¸ Rezolvare cu metoda lui Gauss cu semipivot A. b 0 0 1 z 3 B. ˜ In b. ˆ In cazul nostru. pentru i ≥ 2.

sˇ se permute ¸i elementele corespunzˇtoare ale a a s a vectorului x. x= y  . ori de cˆte ori se pera mutˇ coloanele matricei extinse. z = 3. y = 2. a    1 1 1 6 1 L ↔L1  2 −1 3 9  −3− →  2 −− 1 4 1 12 1  pentru i. iar: unde matricea A a       2 −1 3 x 9 ˜ =  15  . Rezolvarea sistemului superior triunghiular se face ca ¸i ˆ cazul metodei lui Gauss s ın clasice. ¸i conduce la solutia x = 1. obtinem: ın ¸  Pasul 2  L2 →L2 + 1 L1  4 4 1 1 12 4 1 L →L3 − 1 L1  −1 2 3 9  −3 − − 4 →  0 9 −−− − 4 0 3 1 1 1 6 4  12 12  3 • ca pivot se alege elementul aij de modul maxim pentru i.ˆ acest moment am ajuns la un sistem de forma Ax = ˜ echivalent cu sistemul initial. ˜ In b. Constructia sistemului superior triunghiular ¸ Pasul 1 • ca pivot se alege elementul aij de modul maxim pivotul este a32 . s ¸ Rezolvare cu metoda lui Gauss cu pivot total A. ¸ ˜ este superior triunghiularˇ. Deoarece pivotul este a23 . b 2 2 2 1 z 0 0 −3 −1 B. ˜ A =  0 9 −1  . ˆ cazul nostru In ¸i coloana 2 cu coloana 1: s  4 1 12 −1 3 9  1 1 6 • pentru corectitudinea rezultatului final este necesar ca. Astfel. se permutˇ coloana 3 cu coloana 2: a  4 1  0 9 4 0 3 4 1 13 4 3 4   12 4 C ↔C2  −3− →  0 12 −− 3 0 25 1 13 4 3 4  1 12 9 12  4 3 3 4 . j ≥ 1. j ≥ 2. deci se permutˇ linia 3 cu linia 1. avem:    x y x ↔x1 x =  y  −2− →  x  −− z z 1 13 4 3 4    1 4 1 12 4 1 1 12 C ↔C1  2 −1 3 9  −2− →  −1 2 3 9  −− 1 1 1 6 1 1 1 6  • ˆ final.

˜ In b. iar: a       4 1 1 y 12 ˜ =  12  . x= z  . z = 3. 4  0 0 1 13 4 3 4   1 12 4 3 L3 →L3 − 13 L2 9 12  − − − − →  0 −−−− 4 3 3 0 4    y y x ↔x2  x  −3− →  z  x= −− z x 1 13 4  1 9 4 3 13 0  12 12  3 13 B. ¸i conduce la solutia x = 1. 3 1 2 concatenarea matricei A cu matricea unitate  3 1 0 0 1 0 1 0 . b 4 4 3 3 x 0 0 13 13 Rezolvare Considerˇm matricea B obtinutˇ prin a ¸ a I3 :  2 2 B= 2 1 3 1 Folosind metoda eliminˇrii a  2 2 3  2 1 1 3 1 2     3 3 1 1 1 2 1 0 0 1 1 0 0 L2→L2−B21 L1 2 2 2 L3→L3−B L1  2 1 1 0 1 0  − − − −31−  0 −1 −2 −1 1 0  − − − −→ 3 1 2 0 0 1 0 −2 − 5 − 3 0 1 2 2     3 1 3 1 1 1 0 0 1 1 0 0 L2→ B1 L2 2 2 2 2  0 −1 −2 −1 1 0  − − − →  0 1 2 1 −1 0  − −22− 5 3 5 0 −2 − 2 − 2 0 1 0 −2 − 2 − 3 0 1 2     3 1 1 1 0 0 L1→L1−B12 L2 1 0 −1 −1 1 0 2 2 2 2 L3→L3−B L2  0 1 2 1 −1 0  − − − −32−  0 1 2 1 −1 0  − − − −→ 5 3 3 1 0 −2 − 2 − 2 0 1 0 0 2 −2 1 2 26 a lui Gauss. transformˇm matricea B dupˇ cum urmeazˇ: a a a    1 0 0 1 1 3 1 0 0 1 L1→ B L1 2 2 0 1 0 −−−→ 2 1 1 0 1 0  − −11− 0 0 1 3 1 2 0 0 1 . ˜ A =  0 13 9  . y = 2. Sˇ se gˇseascˇ inversa matricei ¸ a a a   2 2 3 A =  2 1 1 . s ¸ Exercitiul 2. ¸ ˜ unde matricea A este superior triunghiularˇ.2. 2 0 0 1 ˆ acest moment am ajuns la un sistem de forma Ax = ˜ echivalent cu sistemul initial. Rezolvarea sistemului superior triunghiular se face ca ¸i ˆ cazul metodei lui Gauss s ın clasice.1.

3. generarea matricei extinse a sistemului. Sˇ se rezolve urmˇtoarele sisteme.1.j=1.n.1.4 Implementare A. diferenta dintre ei apˇrˆnd (a¸a a a ¸ aa s cum se poate vedea ¸i din exemplul rezolvat) ˆ modul de rezolvare a eliminˇrii Gauss. s ın a Date de intrare: un sistem de ecuatii (scris ca multime de ecuatii) ¸ ¸ ¸ Date de ie¸ire: solutia sistemului s ¸ Algoritmul constˇ din urmˇtoarele etape: a a 1. a ¸ a 2.4.1.3 Probleme propuse Exercitiul 2. Sˇ se gˇseascˇ solutia sistemelor anterioare. ¸ Exercitiul 2.pentru k = 1.1. A = (aij )i=1.ˆ Intr-adevˇr. Algoritm Algoritmii pentru cele 3 metode sunt asemˇnˇtori. ¸i efectuˆnd ˆ s a ınmultirea A b. calculˆnd inversa matricei ¸ a a a ¸ a −1 A a sistemului. n − 1 27 . se verificˇ u¸or cˇ a a s a Inversa matricei A va fi matricea C. a) eliminarea Gauss pentru metoda lui Gauss clasicˇ a .n+1 • n= numˇrul de ecuatii (numˇrul de linii ale matricei A). folosind cele trei variante ale metodei ¸ a a lui Gauss:   x + 2y + z = 1 3x − y + 5z = 14 a)   x + y − z = −2   x+y+z+t=0  3x − 2y − z + t = −8 b)  x − 2y − z + 4t = 1   x + y − z + 2t = 1 2.    1 0 −1 −1 1 0 1 0 −1 −1 1 0 1 L3→ B L3 2 2 2 2  0 1 2 1 −1 0  − − − →  0 1 2 − −33− 1 −1 0  1 1 0 0 3 −2 1 0 0 1 −4 2 2 2 3 3 3     1 1 1 1 1 1 0 0 −3 3 1 0 −2 −2 1 0 L1→L1−B13 L3 3 L2→L2−B L3 5  0 1 2 1 −1 0  − − − −23−  0 1 0 1 − − − −→ −4  3 3 3 1 0 0 1 −4 2 0 0 1 1 −4 2 3 3 3 3 3 3  2. obtinutˇ prin ¸tergerea primelor 3 coloane ale matricei ¸ a s B:  1 1  1 −3 3 3 5 4 −3  C= 1 3 3 1 4 2 −3 3 3 A · C = C · A = I3 .

n aij = aij + m · akj . dacˇ |apr | > |akk |. . atunci se cautˇ r pentru care akr a a r = k + 1. Programe MAPLE ¸i rezultate s Deoarece diferitele variante ale metodei lui Gauss se deosebesc doar prin modul ˆ ın care se realizeazˇ eliminarea Gauss. n − 1 se cautˇ elementul de modul maxim pe linie ¸i coloanˇ. a ¸ a .pentru k = 1. unde akk = 0. p. n aik m=− .pentru k = 1.pentru j = k. ˆ cele ce urmeazˇ am implementat separat cele trei a ın a variante de eliminare. rezolvarea sistemului superior triunghiular prin substitutie inversˇ ¸ a xn = an. c) eliminarea Gauss pentru metoda lui Gauss cu pivot total a s a . n aik m=− . ¸ ın a 28 . akk .e. Aceste proceduri vor fi folosite apoi ca optiuni ˆ procedura finalˇ gauss. n atunci se returneazˇ eroare. n aik m=− . b) eliminarea Gauss pentru metoda lui Gauss cu semipivot = 0. r = k + 1. folosind procedurile cgauss.pentru i = k + 1. dacˇ a a |akr | > |akk |. akk . j=i+1 B.pentru j = k.n+1 . 3. i.. n − 1 se cautˇ elementul de modul maxim pe linie.pentru i = n − 1. 1 1 xi = aii ai. se schimbˇ linia k cu linia r a . i. se schimbˇ coloana p cu coloana k ¸i a a s linia r cu linia k .pentru i = k + 1.e. n. r = k + 1. n. tpgauss. r = k + 1. n ¸i se schimbˇ linia k cu linia r. s a . unde akk = 0. spgauss.n+1 − aij xj .dacˇ toti akr = 0. ann n . n aij = aij + m · akj .dacˇ akk = 0.pentru j = k. unde akk = 0. n aij = aij + m · akj .pentru i = k + 1. akk .

. r. mx.k. k. m.r]=0 do r=r+1 od.n+1. od.k]=0 then for r from k+1 to n while A1[k.k]/A1[k. A1:=A. RETURN(evalm(A1)). od.k])>abs(A1[k. for j from k to n+1 do A1[i. od. end: spgauss:=proc(A::matrix) local A1. for r from k to n do if (abs(A1[r.n+1. A2:=delcols(A1. if(det(A2)=0) then ERROR(‘sistemul nu are solutie unica!‘) fi.j]-m*A1[k. n. n:=rowdim(A). fi. if mx<>k then A1:=swaprow(A1. od. for i from k+1 to n do m:=A1[i. k.j]. fi.k])) then mx:=r fi. A2.k]. n:=rowdim(A). n. if(det(A2)=0) then ERROR(‘sistemul nu are solutie unica!‘) fi. for i from k+1 to n do m:=A1[i. j.r).k].k]/A1[k. od. od. r. for j from k to n+1 do A1[i. for k from 1 to n-1 do if A1[k. 29 . i.restart: with(linalg): cgauss:=proc(A::matrix) local A1. od. j.j]:=A1[i. A2..k. A1:=A. A2:=delcols(A1. i.n+1).n+1). fi.j]:=A1[i. if r>n then ERROR(‘sistemul nu are solutie unica!‘) else A1:=swaprow(A1.j]-m*A1[k. m.mx). for k from 1 to n-1 do mx:=k.j].

od. semipivot sau totalpivot‘).k. Pentru a urmˇri executia unei proceduri. De¸i mas a s tricea sistemului generatˇ cu ajutorul instructiunii indets nu este ˆ a ¸ ıntotdeauna aceea¸i s cu matricea sistemului scrisˇ pe hˆrtie.x+4*y+z=12}.x. l:=[seq(l[rez[2][i]].m. cgauss.n. a a spgauss ¸i tpgauss pentru acela¸i sistem de ecuatii. In a instructiuni: ¸ debug(cgauss): debug(spgauss): debug(gauss): Redˇm mai jos.3.2*x-y+3*z=9.j..i=1. if opt=clasic then A1:=cgauss(A). l:=[op(indets(eqn))].n)). n:=nops(l). end: gauss:=proc(eqn::set(equation).s. for i from n-1 by -1 to 1 do s:=0.j]*x[j].l. A:=genmatrix(eqn. fi. elif opt=totalpivot then rez:=tpgauss(A). se poate folosi urmˇtorul set de debug. pot apˇrea diferente ˆ ¸ a ¸ ıntre rezultatele furnizate cu ajutorul codului MAPLE ¸i rezultatele calculate pe hˆrtie. A1:=rez[1].2. else ERROR(‘optiunile sunt: clasic.1..n+1]-s).i]*(A1[i. RETURN(seq(l[i]=x[i].n]. 2*x-y+3*z = 9.A1. opt::symbol) local A.1. rezultatul urmˇririi procedurilor gauss. od. clasic 30 . end: Observatia 2. args = {x+y+z = 6.n+1]/A1[n. l. x[i]:=1/A1[i. cu titlu de exemplu.RETURN(evalm(A1)).rez. flag). x[n]:=A1[n.clasic). Deoarece ordinea elementelor acestei multimi nu este neapˇrat aceea¸i ¸ a s cu ordinea nedeterminatelor din prima ecuatie a sistemului. Instructiunea indets(set_eq) returneazˇ multimea nedeterminatelor ¸ ¸ a ¸ sistemului set_eq. se folose¸te instructiunea ¸ a ¸ s ¸ ˆ cazul programelor din exemplele de mai sus. ¸ a Observatia 2. x+4*y+z = 12}. rezultatele furnizate de program vor fi acelea¸i a a s (eventual ordinea solutiilor va fi schimbatˇ). elif opt=semipivot then A1:=spgauss(A). for j from i+1 to n do s:=s+A1[i.i. {--> enter gauss.n)].r. s s ¸ > gauss({x+y+z=6.i=1.

(2.[(3. 4 := −3 <-. 3 := 1 m := 1 A1 3. 3)=1.semipivot). 1 := 0 A1 3.(3. 4 := 3 A1 2. 2)=0.(1. 4)=6.(2. 4)=3.(2. 3 := 0 A1 3. 3)=1.(3.(1. args = A l := [x. z = 3} x = 1. 2)=-3. 2 := 3 A1 3. y = 2.(1. 2)=1. z = 3 > gauss({x+y+z=6. y = 2. 3 := 1 A1 3. 1 . 1)=0.exit gauss (now at top level) = x = 1. 1 := 0 A1 2.{--> enter cgauss. 2 := −3 A1 2. y.. 4)=-3])}   1 1 1 6 A1 :=  0 −3 1 −3  0 0 1 3 x3 := 3 s := 0 s := 3 x2 := 2 s := 0 s := 2 s := 5 x1 := 1 <-.exit cgauss (now in gauss) = array(1 . 31 . 4 := 6 m := −1 A1 3.x+4*y+z=12}.2*x-y+3*z=9. 2 := 0 A1 3. 3)=1. 1)=1.(1.(2. z] n := 3   1 1 1 6 A :=  2 −1 3 9  1 4 1 12 n := 3 A1 := A   1 1 1 A2 :=  2 −1 3  1 4 1 m := 2 A1 2. 3. 1)=0. 4..(3.

z] n := 3  1 1 1 A :=  2 −1 3 1 4 1 {--> enter spgauss.{--> enter gauss. 1 1 2 := 0  1 3  1 3 2 −1 A1 2. 1 := 0 A1 2. 2 := 0 A1 3. 2 := 9 2 −1 A1 3. 2*x-y+3*z = 9. 3 := 2 15 A1 3. args = {x+y+z = 6. semipivot l := [x. y. args = A n := 3 A1 := A  1 1 A2 :=  2 −1 1 4  6 9  12 mx := 1 mx := 2   2 −1 3 9 A1 :=  1 1 1 6  1 4 1 12 m := A1 2. 2 := 9 15 2 3 2      32 . 4 := 2 mx := 2 mx := 3  2 −1 3 9 −1   0 A1 :=  2 2  3 −1 0 2 2 1 m := 3 A1 3. 3 := 2 3 A1 2. 4 := 2 1 m := 2 A1 3. x+4*y+z = 12}.

2.(2. 4. 1)=0. [1.4) Fie sistemul compatibil determinat .exit spgauss (now in gauss) = array(1 . 6].A1 3. Pachetul linalg furnizeazˇ procedurile gausselim ¸i backsub. 4. y = 2. 1 .(3. procedura gausselim efectueazˇ eliminarea gaussianˇ cu pivot partial asupra unei a a ¸ matrice n × m. 4)=9.(2.(2. z = 3} x = 1.   1 1 1 6 A :=  2 −1 3 9  1 4 1 12 gausselim(A).2 2. 3)=-1/2. Procedura backsub ia ca argument rezultatul procedurii gausselim si furnizeazˇ solutia sistemului. 2)=9/2])}   2 −1 3 9 9 −1 15    0  A1 :=  2 2 2    −1 0 0 −1 3 x3 := 3 s := 0 −3 s := 2 x2 := 2 s := 0 s := −2 s := 7 x1 := 1 <-. 1. 3)=3. 12]]). 1)=2. pentru matricea din exemplul precedent.1 Factorizarea LU Breviar teoretic Ax = b.1. 3)=-1/3. Ast¸ a s fel. 3. 33 (2..(1. 2. 3. z = 3 Observatia 2. 4)=15/2.[(3. 1.(2. 2)=0. 2)=-1.(3. -1. 4 −1 3 := −1 <-.(1.4.(3. 3] > backsub(%).   1 1 1 6  0 −3 1 −3  0 0 1 3 [1. 1. Astfel.. y = 2.(1.(1. 9]. 4)=-1.exit gauss (now at top level) = x = 1. avem: a ¸ > > A := matrix([[1. 3 := A1 3. [2.2. 1)=0.

. . . . z 1 1 −1 1 2 −1 1 3 −2   2 b =  1 . iar dacˇ µii = 1 se nume¸te factorizare Crout. . . . Sistemul se scrie ˆ forma matricealˇ: ın a Ax = b. . . λn1 λn2 .2. .Aceastˇ descompunere este posibilˇ dacˇ toti determinantii de colt ai matricei A sunt a a a ¸ ¸ ¸ nenuli. 3.1.  . dacˇ λii = 1 atunci factorizarea LU In ¸ a a se nume¸te factorizare Doolittle. . . 5 = −3 = 0 . . . i = 2. 34 . . A =  2 −1 1 3 −2 1 = 0. µnn i−1 bi − λij yj j=1 · 1 . . . . . .4) se reduce la rezolvarea sistemelor triunghiulare Ly = b cu solutia ¸   y = b1  1   λ11  y =  i   (2. . 0    L =  21 U = (2. ˆ mod traditional. unde     λ11 0 . λnn 0 0 . . n λii (2. . trebuie precizate n elemente ale matricei L sau U. . s a s Astfel. . . . se specificˇ λii sau µii . . i = 2.2. . rezolvarea sistemului (2. .9) 2. . 3. . . . 0 µ11 µ12 . Sˇ se determine solutia sistemului urmˇtor. .6) Factorizarea LU presupune descompunerea matricei A ˆ ıntr-un produs de matrice L · U.8)  y  xn = n   µnn  xi =   n yi − µij xj j=i+1 · 1 .  Deoarece = −3 = 0 . . . 1 1 2 −1   x x= y . .2 Problemˇ rezolvatˇ a a a ¸ a Exercitiul 2. folosind factorizarea LU: ¸   x+y−z =2 2x − y + z = 1  x + 3y − 2z = 5. n. .5) . µ1n λ  0 µ22 . µii (2. .7) ¸i s cu solutia ¸ Ux = y (2. . . . Pentru a asigura unicitatea descompunerii. µ2n  λ22 . unde  1 1 −1 1 .

x= z 1 35  a cˇrui solutie este a ¸ . ujk . 0 0 1 de rezolvat douˇ sisteme triungiulare: a    y1 2 y2  =  1  . Rezolvare folosind factorizarea Crout A. folosim definitia s a a ¸ ¸ ˆ ınmultirii matricelor. avem ¸    1 0 0  2 −3 0  ·  1 2 1   1 1 −1 U =  0 1 −1  .¸i ne propunem sˇ determinˇm coeficientii lij . Rezolvarea sistemelor triunghiulare Pentru rezolvarea sistemului initial. 1 2 1   ⇒ λ11 = 1 ⇒ µ12 = 1 ⇒ µ13 = −1 ⇒ λ21 = 2 ⇒ λ22 = −3 ⇒ µ23 = −1 ⇒ λ31 = 1 ⇒ λ32 = 2 ⇒ λ33 = 1 rezultˇ cˇ matricea A este nesingularˇ ¸i are toti determinantii de a a a s ¸ ¸ poate folosi factorizarea LU pentru rezolvarea acestui sistem. y= y3 1       1 1 −1 x 2  0 1 −1  ·  y  =  1  . Factorizarea Crout Presupunem cˇ a      0 1 1 −1 λ11 0 1 µ12 1  =  λ21 λ22 0  ·  0 1 A =  2 −1 1 3 −2 λ31 λ32 λ33 0 0 colt nenuli. Pentru aceasta. y3 5 ¸i respectiv: s    2 y1  y2  =  1  . avem: ¸ a11 a12 a13 a21 a22 a23 a31 a32 a33 sau = λ11 · 1 = λ11 · µ12 = λ11 · µ13 = λ21 · 1 = λ21 · µ12 + λ22 · 1 = λ21 · µ13 + λ22 · µ23 = λ31 · 1 = λ31 · µ12 + λ32 · 1 = λ31 · µ13 + λ32 · µ23 + λ33 · 1  1 0 0 L =  2 −3 0  . 1 a cˇrui solutie este a ¸ B. Astfel. 0 0 1 z 1    x 1  y  =  2 . deci se ¸  µ13 µ23  .

µjk . y3 1       1 1 −1 x 2  0 −3 3  ·  y  =  −3  . s a a ¸ s ın Astfel avem: a11 a12 a13 a21 a22 a23 a31 = 1 · µ11 = 1 · µ12 = 1 · µ13 = λ21 · µ11 = λ21 · µ12 + 1 · µ22 = λ21 · µ13 + 1 · µ23 = λ31 · µ11 ⇒ µ11 ⇒ µ12 ⇒ µ13 ⇒ λ21 ⇒ µ22 ⇒ µ23 ⇒ λ31 ⇒ λ32 ⇒ µ33  =1 =1 = −1 =2 = −3 =3 =1 2 =− 3 =1 Rezolvare folosind factorizarea Doolittle A.¸i ne propunem sˇ determinˇm coeficientii lij . z 1 36    1 1 −1 U =  0 −3 3 . Factorizarea Doolittle Presupunem cˇ a       1 1 −1 1 0 0 µ11 µ12 µ13 1  =  λ21 1 0  ·  0 µ22 µ23  A =  2 −1 1 3 −2 λ31 λ32 1 0 0 µ33 a32 = λ31 · µ12 + λ32 · µ22 a33 = λ31 · µ13 + λ32 · µ23 + 1 · µ33 sau  1 0 0 1 0  . Rezolvarea sistemelor triunghiulare Pentru rezolvarea sistemului initial. 0 0 1 ¸i respectiv: s a cˇrui solutie este a ¸ . 0 0 1 z 1    x 1 x =  y  =  2 . 1 0 5 1 −2 1 y3 3    y1 2 y =  y2  =  −3  . avem de rezolvat douˇ sisteme triungiulare: ¸ a       y1 2 1 0 0  2  ·  y2  =  1  . L= 2 1 −2 1 3  a cˇrui solutie este a ¸ B. la fel ca ¸i ˆ exemplul precedent.

2. i − 1 1 λij = µjj aij − i i−1 aij − λik µkj k=1 b) factorizarea Doolittle λik µkj k=1 pentru j = i. ¸i a vectorului coloanˇ b s a • n = numˇrul de linii ale matricei A (numˇrul de ecuatii ale sistemului) a a ¸ 2. n 37 .2. n pentru j = 1.2. a) factorizarea Crout pentru i = 1. Sˇ se gˇseascˇ solutiile urmˇtoarelor sisteme. n µii = 1 pentru i = 1. n λii = 1 pentru i = 1. n pentru j = 1.3 Probleme propuse Exercitiul 2. folosind cele douˇ vari¸ a a a ¸ a a ante ale factorizˇrii LU: a   x + 2y + z = 1 3x − y + 5z = 14 a)   x + y − z = −2  3x + y − 2z = 1 x+y+z =6 b)  −2x − y + 4z = 7 2. generarea matricei A a sistemului.2.2. n 1 µij = λii pentru i = 1. Algoritm Date de intrare: un sistem de ecuatii ¸ Date de ie¸ire: solutia sistemului s ¸ Algoritmul constˇ din urmˇtoarele etape: a a 1. i j−1 λij = aij − λik µkj k=1 pentru j = i + 1.4 Implementare A.

if a1[1. n:=rowdim(A). fi.k]*u[k. u:=matrix(n. od. Rezolvarea celor douˇ sisteme triunghiulare a b1 y1 = λ11 pentru i = 2. od. fi. od.s.0).i]:=1. n n xi = yi − µij xj j=i+1 · 1 µii B. Programe MAPLE ¸i rezultate s Deoarece cele douˇ variante ale descompunerii LU diferˇ doar prin modul de factoa a rizare a matricei sistemului.n. dupˇ care le-am folosit ca optiuni ˆ procedura finalˇ LUsist. a1:=A. for i from 1 to n do u[i.l. 38 . for i from n by -1 to 2 do if det(a1)<>0 then a1:=delrows(delcols(a1.j]-s..i.u. l:=matrix(n.j]:=A[i. for k from 1 to j-1 do s:=s+l[i.k.i).. am implementat separat cele douˇ variante de factorizare: a LUcrout ¸i LUdoolittle.n.i−1 µij = aij − λik µkj k=1 3. od. s a ¸ ın a restart: with(linalg): LUcrout:=proc(A::matrix) local a1.i.i.n. else ERROR(‘factorizarea LU nu este aplicabila!‘). for i from 1 to n do for j from 1 to i do s:=0.0). n i−1 yi = yn xn = µnn bi − λij yj j=1 · 1 λii pentru i = 2.1]=0 then ERROR(‘factorizarea LU nu este aplicabila!‘).j.j].i). l[i.

for j from i+1 to n do s:=s+U[i.k]*u[k. Crout   −1 1 1 2 eqm :=  1 2 −1 1  −2 1 3 5 lst := {z.. if opt=Crout then lu:=LUcrout(A). U. end: debug(LUsist).j]. lst:=indets(l). rez. {--> enter LUsist. rfin..for j from i+1 to n do s:=0. b:=col(eqm. else ERROR(‘optiunile sunt: Crout sau Doolittle‘) fi.s. [op(indets(l))]. args = {x+y-z = 2. i=1.i]*(A[i. Crout). od. aux[i]:=1/L[i. U:=lu[2]. for j from 1 to i-1 do s:=s+L[i. flag). RETURN(seq(lst[i]=rez[i]. eqm.2*x-y+z=1. n:=nops(lst). end: LUsist:=proc(l::set(equation).j.j]-s). evalm(u)). od.i. for i from 1 to n do s:=0.j]:=1/l[i. RETURN(evalm(l). opt::symbol) local lst. y} n := 3   −1 1 1 A :=  1 2 −1  −2 1 3 39 .n+1. b. L:=lu[1]. n.j]*rez[j] od. for k from 1 to i-1 do s:=s+l[i. A.i]*(aux[i]-s) od.n)). A:=delcols(eqm. u[i. eqm:=genmatrix(l.n+1). 2*x-y+z = 1.i]*(b[i]-s) od.x+3*y-2*z=5}.j]*aux[j] od.aux.n+1). LUsist({x+y-z=2. rez[i]:=1/U[i. x. L. elif opt=Doolittle then lu:=LUdoolittle(A). od. x+3*y-2*z = 5}. lu. for i from n by -1 to 1 do s:=0.

an−1 bn−1 cn  .. . · · · · · · · · · · · · · · · · · ·  . 0 an bn 40 O clasˇ specialˇ de sisteme liniare a a agonalˇ.. .1 Sisteme tridiagonale Breviar teoretic este aceea ˆ care matricea A a sistemului este tridiın  0 0 . . (2.3 2.. y = 2 2... 5]   −1 0 0 1 lu :=  1 3 0 . adicˇ: a a  b1 c2  a2 b2   0 a3 A= · · · · · ·   0 .. 0 c3 0 .. ... .. . . ... . x = 1. ..3.....b := [2. 0   b3 c3 ..10) .. ... . .  0 −2 −1 1 0  −1 0 0  1 L := 3 0 −2 −1 1  1 −1 −1 U :=  0 1 0 0 0 1  s := 0 aux 1 := −2 s := 0 s := −2 aux 2 := 1 s := 0 s := 4 s := 3 aux 3 := 2 s := 0 rez 3 := 2 s := 0 s := 0 rez 2 := 1 s := 0 s := −1 s := −3 rez 1 := 1  −1 −1 1 0  0 1     <-. . 0  . 1. . .. y = 2} z = 1.. 0 . . .. x = 1. . .exit LUsist (now at top level) = z = 1.

0 0  0 1 ν3 .. a folosind un caz particular al factorizˇrii Crout. Sˇ se rezolve sistemul tridiagonal: ¸ a  =3  x +2y   2x −y +z =2 3y +2z −t = 4    −2z +t = −1. an sunt cunoscuti din matricea A. i = 2.. . . . matricea A se descompune.  1 2 0 0  2 −1 1 0   A=  0 3 2 −1  0 0 −2 1 Descompunem aceastˇ matrice astfel: a    1 2 0 0  2 −1 1 0   =   0 3 2 −1   0 0 −2 1   β1 0 0 0 1 ν2 0 0 2 β2 0 0   0 1 ν3 0 · 0 3 β3 0   0 0 1 ν4 0 0 0 1 0 0 −2 β4 41      . .2 Problemˇ rezolvatˇ a a Rezolvare Matricea sistemului este Exercitiul 2.. 0 0   U = · · · · · · · · · · · · · · · · · · .3... . i = 2. Astfel.12) Coeficientii a2 .13) 2. an βn  1 ν2 0 . . .11)    0 0 0 .. .. n (2. µj se obtin ¸ ¸ ¸ ¸ din definitia ˆ ¸ ınmultirii matricelor: ¸ β1 = b1 βi · νi+1 = ci+1 . 0 0  a2 β2 0 . n − 1 ai · νi + βi = bi . . . ˆ a ıntr-un produs L · U unde:   β1 0 0 .¸i s Pentru aceste sisteme se aplicˇ factorizarea LU. βn−1 0  0 0 0 . . 0 0   L = · · · · · · · · · · · · · · · · · · (2.. .    0 0 0 . 1 νn  0 0 0 .3..1. iar coeficientii βi .. 1  (2..

42 . 5 3 0 0 −2 13 y4 −1    y1 3  y2   4    5  y3  =  8 13 y4 1   .2.Din definitia produsului a douˇ matrice. 13 a cˇrui solutie este a ¸ B.     =    3 4 5 8 13  1  .  2. Sˇ se rezolve sistemele tridiagonale: ¸ a   x+y = 3 2x − y + z = 1 a)   3y − z = 5  2x + y = 0   x − y + 2z = −1 b)  2y − z + t = 5   z + 2t = 5.3 Probleme propuse Exercitiul 2.  ¸i respectiv: s  a cˇriu solutie este a ¸ 1  0   0 0   2 0 0 x 0   y 1 −1 5 · 5 0 1 − 13   z 0 0 1 t   x 1  y   1  =  z   1 t 1    . Rezolvarea sistemelor triunghiulare Pentru a rezolva sistemul initial. obtinem: ¸ a ¸ b1 = β1 · 1 c2 = β1 · ν2 b2 = a2 · ν2 + β2 c3 = β2 ν3 b3 = a3 ν3 + β3 c4 = β3 · ν4 b4 = a4 · ν4 + β4 ⇒ β1 = 1 ⇒ ν2 = 2 ⇒ β2 = −5 1 ⇒ ν3 = − 5 13 ⇒ β3 = 5 5 ⇒ ν4 = − 13 3 ⇒ β4 = . avem de rezolvat douˇ sisteme triunghiulare: ¸ a       1 0 0 0 y1 3  2 −5 0 0   y2   2         0 3 13 0  ·  y3  =  4  .3.3.

2. descompunerea LU aplicatˇ matricei tridiagonale A a L = (λij )i. n λi. n yi = xn = yn pentru i = n − 1.i+1 = ai+1. Algoritm Date de intrare: un sistem de ecuatii tridiagonal ¸ Date de ie¸ire: solutia sistemului s ¸ Algoritmul constˇ ˆ a ın: 1.1.i−1 λ11 = a11 pentru i = 1. U = (µij )i. este necesarˇ a a construirea unei proceduri. 1 xi = yi − µi.i−1 yi−1 · 1 λii B. Spre deosebire de metodele anterioare.n pentru i = 1.4 Implementare A. unde ordinea necunoscutelor ¸ ˆ sistem nu era esentialˇ. n − 1 ai.i · µi.j=1.n . ˆ cazul sistemelor tridiagonale.i+1 xi+1 bi − λi. atunci matricea sistemului nu va mai fi tridiagonalˇ. rezolvarea sistemelor triunghiulare b1 y1 = λ11 pentru i = 2. dacˇ se schimbˇ ordinea neın ¸ a ın a a cunoscutelor.i+1 3.j=1.i−1 = ai.3. Programe MAPLE ¸i rezultate s Observatia 2.i+1 − ai+1. De aceea. n µii = 1 pentru i = 2. care sˇ returneze necunoscutele sistemului a ˆ ordinea ˆ care apar ele ˆ ecuatii. ın ın ın ¸ 43 . generarea matricei A a sistemului (matrice tridiagonalˇ) ¸i a vectorului coloanˇ b a s a • n = numˇrul de linii ale matricei A a 2.i+1 µi. nedeterminate.i+1 = λii λi+1.3.

a1.0).l. fi. od. RETURN(evalm(l).i.j]<>0 then ERROR(‘matricea nu este tridiagonala!‘).0).i).j.i]*u[i. end: # procedura care returneaza necunoscutele sistemului # in ordinea in care apar in ecuatii nedeterminate:=proc(l::set(equation)) local n.n. for i from 1 to n-1 do u[i. for i from n by -1 to 2 do if det(a1)<>0 then a1:=delrows(delcols(a1.1]:=A[1.i]. 44 .i]:=1. od. n:=rowdim(A).i-1]:=A[i. for j from i+2 to n do if A[i.1]=0 then ERROR(‘factorizarea LU nu este aplicabila!‘)..i.i+1]:=A[i. od.j]<>0 then ERROR(‘matricea nu este tridiagonala!‘).i. fi. if a1[1.j. u:=matrix(n.i).opst. for i from 2 to n do l[i. fi. od. a1:=A. l[i+1.i+1]/l[i.u.n. fi.n.i+1]:=A[i+1.. for i from 1 to n do u[i.i+1]-A[i+1.i-1]. l:=matrix(n. evalm(u)). l[1. else ERROR(‘factorizarea LU nu este aplicabila!‘).i+1].restart: with(linalg): tridiagonal:=proc(A::matrix) local i. for i from 1 to n do for j from 1 to i-2 do if A[i.1]. od.ops. od. od.

eqm:=genmatrix(l.nops(op(l[i])[1]))].i-1]*aux[i-1]) od. n. opst.1]. od. od. U:=lu[2]. od.ops[i][j]] fi.i+1]*rez[i+1]. args = {x+2*y = 3. od. 3*y+2*z-t = 4. z. j=1.n+1). i.. n:=nops(l). for i from n-1 by -1 to 1 do rez[i]:=aux[i]-U[i.. -2*z+t=-1}). rez[n]:=aux[n]. 2*x-y+z = 2. rez. for i from 2 to n do aux[i]:=1/L[i. opst:=ops[1]. A:=delcols(eqm. b. end: tridiagonalsist:=proc(l::set(equation)) local eqm. flag).n+1).2*x-y+z=2.. aux[1]:=b[1]/L[1. opst. L:=lu[1]. for i from 1 to n do ops[i]:=[seq(op(op(l[i])[1])[j] / coeff(op(l[i])[1]. L. 3*y+2*z-t=4. s. RETURN(seq(opst[i]=rez[i]. {--> enter tridiagonalsist. RETURN(opst).op(indets(op(op(l[i] )[1])[j]))). U. aux.n+1. -2*z+t = -1} n := 4 opst := [x.n)). i=1. b:=col(eqm.n:=nops(l).i]*(b[i]-L[i. end: debug(tridiagonalsist): tridiagonalsist({x+2*y=3. lu:=tridiagonal(A). lu. t] 45 . j. A. for i from 1 to n do for j from 1 to nops(ops[i]) do if not(ops[i][j] in opst) then opst:=[op(opst). opst:=nedeterminate(l). y.

4. 1 2 0 0 3  2 −1 1 0 2   eqm :=   0 3 2 −1 4  0 0 −2 1 −1   1 2 0 0  2 −1 1 0   A :=   0 3 2 −1  0 0 −2 1 1  2   lu :=  0   0  b := [3. z = 1. t = 1 46 . t = 1} x = 1. 2. y = 1. z = 1. −1]   1 2 0 0 0 0 −5 0 0   0 1 −1   5 13   3 0 . y = 1.    0 0 1 5    3 0 −2 0 0 0 13   1 0 0 0  2 −5 0 0    13   L :=  0 3 0    5   3 0 0 −2 13   1 2 0 0 −1   0   0 1   5  U :=   −5   0 0 1   13  0 0 0 1 aux 1 := 3 4 aux 2 := 5 8 aux 3 := 13 aux 4 := 1 rez 4 := 1 rez 3 := 1 rez 2 := 1 rez 1 := 1 0    0    −5   13  1 <-.exit tridiagonalsist (now at top level) = x = 1.

.2 Problemˇ rezolvatˇ a a Exercitiul 2. λnn Coeficientii λij se obtin din definitia produsului a douˇ matrice.1. . adicˇ matricea A este simetricˇ. . . obtinem: ¸ a ¸ a11 a12 a13 a22 a23 = λ2 11 = λ11 · λ21 = λ11 · λ31 = λ2 + λ2 21 22 = λ21 · λ31 + λ22 · λ32 matricea A este pozitiv definitˇ. 0   L =  21 (2. . Deoarece a a a a 1 > 0.14) .2. 1 2 2 5 1 2 1 2 5 2 1 2 3 = 2 > 0. 0 λ λ22 .4 2. A =  2 5 2  =  λ21 λ22 1 2 3 λ31 λ32 λ33 0 0 λ33 ⇒ λ11 ⇒ λ21 ⇒ λ31 ⇒ λ22 ⇒ λ32 =1 =2 =1 =1 =0 √ = 2. Folosind definitia produsului a douˇ matrice. . . . . . λn1 λn2 . .4.4. . .  Se observˇ cˇ aij = aji . Rezolvare A. ¸ ¸ ¸ a 2. .  . . a33 = λ2 + λ2 + λ2 31 32 33 ⇒ λ33 47 . Pentru astfel as a a ¸ ¸ ¸ de sisteme putem folosi un caz particular al factorizˇrii LU: descompunem matricea A a a sistemului ˆ ıntr-un produs L · LT . Aplicˆnd factorizarea Cholesky avem: a a       1 2 1 λ11 0 0 λ11 λ21 λ31 0  ·  0 λ22 λ32  . Sˇ se rezolve sistemul: ¸ a   x + 2y + z = 5 2x + 5y + 2z = 11  x + 2y + 3z = 7.4.1 Factorizarea Cholesky Breviar teoretic Un caz particular de sisteme liniare este acela ˆ care matricea A a sistemului este simetın ricˇ ¸i pozitiv definitˇ (adicˇ toti determinantii de colt sunt strict pozitivi). Factorizarea Cholesky Matricea sistemului este  1 2 1 A= 2 5 2  1 2 3 = 1 > 0. . unde   λ11 0 . .

√0 √ z 0 0 2 2     x 2  y  =  1 . a a B. j = i. n. i = 1. z 1 ¸i s cu solutia ¸ 2. folosind factorizarea Cholesky: a a a ¸ a  ¸  3x + y + 3z = 11 x + y + 2z = 6  3x + y + 4z = 12. i = 1. i − 1 1 λij = λjj aij − j−1 λik λjk k=1 48 .4. √ y3 2      1 2 1 5 x  0 1 ·  y  =  1 . este suficient sˇ calculˇm a a a a a dezvoltˇrile corespunzˇtoare elementelor aij . avem de rezolvat douˇ sisteme triunghi¸ ¸ a ulare:       1 0 0 y1 5  2 1  ·  y2  =  11  .3 Probleme propuse Exercitiul 2. Sˇ se gˇseascˇ solutia sistemului urmˇtor. j = i. n. n. n pentru j = 1. generarea matricei A a sistemului (simetricˇ ¸i pozitiv definitˇ) ¸i a vectorului b as a s • n = numˇrul de ecuatii ale sistemului (numˇrul de linii ale matricei A) a ¸ a 2.4. factorizarea Cholesky λ11 = a11 pentru i = 2.4 Implementare A. n. Algoritm Date de intrare: un sistem de ecuatii ¸ Date de ie¸ire: solutia sistemului s ¸ Algoritm 1.2. √0 y3 7 1 0 2      5 y1  y2  =  1  . 2. Rezolvarea sistemelor triunghiulare Pentru a determina solutia sistemului initial.cu solutia ¸ Se observˇ cˇ pentru gˇsirea elementelor λij .4.

. v2 . 0) ıncˆ a (a1 este prima coloanˇ a matricei A) are proprietatea a a1 − 2v· < v. v 2 (2. . Programe MAPLE ¸i rezultate s 2. e1 = (1. . Factorizarea Householder se bazeazˇ pe urmˇtoarele rezultate.17) (2. a a Propozitia 2. Atunci solutia sistemului Ax = b este datˇ de a a ¸ a x = Uy. astfel ˆ at s a ın ıncˆ UAU = T sˇ fie o matrice tridiagonalˇ. 0. Oricare ar fi A o matrice pˇtraticˇ de ordinul n ¸i simetricˇ. ¸i constˇ ˆ determinarea unei matrice simetrice nesingulare U. .5. 1 n xi = yi − k=i+1 λki · xk · 1 λii B.i−1 λii = aii − λ2 ik k=1 3. . . existˇ ¸ a a s a a T 1 T un vector v = (v1 .5. a1 > = λ · e1 . 49 (2. ¸ unde y este solutia sistemului T y = Ub.5 2. n i−1 yi = yn xn = λnn bi − k=1 λik · yk · 1 λii pentru i = n − 1.1. rezolvarea sistemelor triunghiulare b1 y1 = λ11 pentru i = 2.1 Factorizarea Householder Breviar teoretic a Factorizarea Householder este o metodˇ de rezolvare numericˇ a sistemelor de tip Cramer a simetrice. vn ) astfel ˆ at vectorul coloanˇ a = Ae1 . .16) (2. .18) .15) Pentru evitarea ambiguitˇ¸ilor vom considera vectorul v dat de: at v = a1 + sign(a11 ) · a1 · e1 .

Matricea s U2 definitˇ prin: a   1 0 0 .. a3n   ···  (2) .3.Propozitia 2. 0 0   U1 =  (2.5. 0 )T ¸i In−1 este matricea unitate a s n−1 de ordin n − 1. 0 0 1 0 . . Matricea Hauseholder Pn−1 asociatˇ unei matrice simetrice A este ¸ a a simetricˇ ¸i are proprietatea cˇ matricea U1 definitˇ prin: as a   1 0 .. .. matricea P definitˇ prin: ¸ a a P =I− 2 · v · vT v 2 (2. n de pe prima coloanˇ a matricei as a a P A sunt nule. . .21)  Pn−1  0 este simetricˇ ¸i verificˇ relatia: as a ¸ a11  α1   = U1 A U1 =  0  · · · 0  α1 (1) a22 (1) a32 ··· (1) an2 0 (1) a23 (1) a33 ··· (1) an3  . unde vectorul v este dat de relatia (2. . ¸ Definitia 2. . . .. a3n   · · · · · · (1) . e1 = ( 1. .. .1.18). a2n   (1)  .23) U2 = 0 0   . 0   (2)  .. 0.24) . a a n−2 Cu acest vector se construie¸te o matrice Householder de ordinul n − 2. ...22) Se considerˇ vectorul coloanˇ a2 cu ultimele n−2 elemente ale coloanei matrice A(1) . . . Oricare ar fi matricea simetricˇ A. . . . ann A(2) (2. . 3. .5. . Pn−2  0 0 are proprietatea: a11 α1 0 0  α a(1) α 0  1 2 22  (2) (1) = U2 A U2 =  0 α2 a33 a(2) 34  · · · · · · · · · · · · (2) (2) 0 0 an3 an4 50   . Propozitia 2. 0 (1) . .. .5. Pn−2 . 0 . . 0     (2.20) unde: v = a1 + sign(a21 ) · a1 n−1 n−1 · e1 este vectorul format cu componentele vectorului 1 a care este prima coloanˇ a matricei A. . ann A(1) (2.19) este simetricˇ ¸i are proprietatea cˇ elementele 2.. Se nume¸te matrice Householder de ordin n − 1 asociatˇ matricei ¸ s a A ¸i se noteazˇ cu Pn−1 o matrice de ordin n − 1 de forma: s a Pn−1 = In−1 − 2 · v · vT v 2 (2.2. . .

unde:     2 2 2 1 √ A :=  2 −1 1  ¸i b :=  5  s 1 1 2 0 Generarea matricei U Calculˇm elementele vectorului a √ v = a1 + sign(a1 ) · a1 · e1 11 5 ¸i e1 = (1. Elementele matricei U sunt date de: s Uj. 2 + 5.2 Problemˇ rezolvatˇ a a Exercitiul 2. v        ¸i s Dupˇ efectuarea calculelor. a 2. Sˇ se rezolve urmˇtorul sistem folosind factorizarea Householder: ¸ a a  2  2x + 2y + z =√ 2x − y + z = 5  x + y + 2z = 0. 0)T .1. obtinem: a ¸  1 0 √ 0√  5  0 − 2 (2 + √5) − 2 + √  U = 5+2 5 5+2 5 √ √   2+ 5 2 (2 + 5) √ √ 0 − 5+2 5 5+2 5     T = UAU =      √ 5 (2 + 5) √ 2 − 5+2 5 √ 5 (2 + 5) 2 √ − 5 5+2 5 −9 0 5 51  0     2  −9  . 1)T . De aici rezultˇ s a √ v = (0. obtinem egalitatea: UAU = T ˆ care T a a ¸ ın este matrice tridiagonalˇ. deci factorizarea Householder este aplicabilˇ. a a a a unde a1 = (2.5.Matricea Pn−2 a condus la obtinerea unei noi linii ¸i coloane a matricei tridiagonale la ¸ s care vrem sˇ reducem matricea A. 1)T Se observˇ cˇ matricea A este simetricˇ. a Continuˆnd astfel prin n − 1 transformˇri. Ub =  −2   5  −1  3  5 .k = I3 − 2vj · vk . a1 = √ ¸i v = 10 + 4 5.5. Rezolvare Sistemul se poate scrie sub forma Ax = b.

y= z=− . 3 3 3    x = Uy =    √ 2+ 5 3√ 2− 5 3 2 − 3    . n pentru m = 1 . obtinutˇ folosind factorizarea Householder s ¸ ¸ a a a Algoritmul constˇ din urmˇtoarele etape: 1.4 Implementare A. n dacˇ m = l atunci uml = 1 a dacˇ m = l atunci uml = 0 a //Generˇm vectorul v a 52 .Solutia sistemului tridiagonal ¸ T y = Ub este  1 √ 20 − 10 5 21√ 5−6 5 15   iar solutia sistemului initial este ¸ ¸   y=    .3 Probleme propuse Exercitiul 2.5. .   2. . .5. . .   √ √ 2+ 5 2− 5 2 adicˇ x = a . Algoritm Date de intrare: un sistem de ecuatii ¸ Date de ie¸ire: solutia sistemului. generarea matricei tridiagonale pentru i = 1 . .5. 2. n − 2 pentru l = 1 . Sˇ se gˇseascˇ solutiile urmˇtoarelor sisteme folosind factorizarea ¸ a a a ¸ a Householder:   x + 2y + z = 5 2x − y + 3z = 6 a)   x + 3y − 2z = 3  x+y−z+t=3   x + 2y + 3z + t = 9 b)  −x + 3y + 2t = 7   x + y + 2z = 5.2.

. .n n aml = k=1 umk · dkl 2.n l = 1... 53 .n n dml = k=1 amk · ukl //A=UD=UAU m = 1. pentru descompunerea matricei tridiagonale. am folosit a ın procedura tridiagonal prezentatˇ ˆ paragraful 2. Programe MAPLE ¸i rezultate s Observatia 2.. .. gˇsirea solutiei sistemului initial: a ¸ ¸ x = Uy B.4)....n l = 1.i+1 ) · norm a · ej n norm v= j=i+1 2 vj //Generˇm matricea U a j = i + 1.n // D=AU ujk = ujk − 2 · vj · vk / norm v m = 1.3. Deoarece o conditie neceesarˇ pentru aplicarea factorizˇrii House¸ ¸ a a holder este ca sistemul sˇ fie simetric. n vj = aij + sign(ai.n norm a = j=i+1 a2 ij ei+1 = 1 pentru j = i + 2 .4): T y = Ub 3. folosim procedura nedeterminate (prezentatˇ ˆ a a ın paragraful 2.5....n k = i + 1.3.1. . n ej = 0 pentru j = i + 1 .4. .. rezolvarea sistemului tridiagonal (vezi paragraful 2. De asemenea.4.

.. (2.1 Metoda Jacobi Breviar teoretic Metoda Jacobi este o metodˇ iterativˇ de rezolvare a sistemelor liniare de forma a a Ax = b. . 0   · · · · · · . dacˇ ¸i numai dacˇ raza ¸ as a spectralˇ ρ a matricei a M = −D −1 (L + U) (2.29)  a11 0 0 .. .27) (2.n  0 0 0 . 2.. Matricea A se descompune ˆ suma ın  0  a21  L =  a31  · · · an1  L + D + U.2.30) este strict subunitarˇ. . 0 (2. . x(k+1) ale vectorului x(k+1) . . a1n  0 0 a23 . .. (2.6. a2n    ··· . . 0  D= 0   · · · · · · · · · · · · · · ·  0 0 0 .. Traiectoria Jacobi converge la solutia x(∗) a sistemului (2.. . situat pe In ¸a n 1 (0) ¸ traiectoria Jacobi a vectorului x .26) Se define¸te traiectoria Jacobi a vectorului x(0) ca fiind vectorul s x(k+1) = D −1 [b − (L + U)x(k) ] k = 0...25). 1. . aii (2. 0   . adicˇ a a max{|λ| | det(M − λIn ) = 0} < 1.25) (2. . . .. . 0  0 a22 0 . . unde 0 0 0 0 a32 0 ··· ··· an2 an3  . . ann   0 a12 a13 . . . 0    0 a33 . . 0 (2. sunt date de relatiile: n (k+1) xi = bi − j=1 j=i aij · xj (k) · 1 .6 2.31) ˆ caz de convergentˇ. k = 0. U = · · · · · · · · · · · ·    0 0 0 . an−1. 1.28) Folosind teorema de convergentˇ se studiazˇ dacˇ traiectoria Jacobi converge la solutia ¸a a a ¸ x(∗) a sistemului (2.. . . . .. i = 1...25).32) 54 . 0 .. 2. componentele x(k+1) . n. .

1460317460 y (2) = 0.2000000000 y (1) = 0. 55 Matricea A se descompune ˆ suma L + D + U cu ın       0 0 0 5 0 0 0 −2 3 0 0  . D= 0 9 0  .6. U = 0 0 1 . z = −0.2673998083 < 1. unde:     5 −2 3 −1 9 1  . y (0) = 0.6. Pentru comparatie. s Aplicˇm formulele (2. 0) pentru sistemul:   5x − 2y + 3z = −1 −3x + 9y + z = 2  2x − y − 7z = 3.32). z (0) = 0.2031746032 z (2) = −0. obtinem a ın ¸ ρ(M) = 0.1. am rezolvat acest sistem folosind procedura solve furnizatˇ de ¸ a Maple. iar rezultatele sunt: x = 0.2 Problemˇ rezolvatˇ a a Exercitiul 2.4227129338. Rezolvare Sistemul se mai poate scrie sub forma Ax = b.4285714286 x(2) = 0.2222222222 z (1) = −0.1861198738. y = 0. ¸i deci algoritmul converge. obtinem succesiv: a a ¸ x(1) = −0. plecˆnd de la x(0) = 0. L =  −3 2 −1 0 0 0 −7 0 0 0 .1917460316 y (3) = 0.2. b =  2 . A =  −3 2 −1 −7 3 Verificarea conditiei de convergentˇ a algoritmului presupune calculul valorilor proprii ale ¸ ¸a matricei   2 −3  0 5 5   1 −1  −1   M = −D (L + U) =  0 3 9   2 −1  0 7 7 Calculˆnd maximul ˆ modul al valorilor proprii ale matricei M. Calculati primii trei termeni ai traiectoriei Jacobi asociate vectorului ¸ ¸ (0.4158730159.5174603174 x(3) = 0.3312302839.3283950617 z (3) = −0. 0.

se folose¸te o variantˇ a criteriului lui Cauchy. trebuie spec¸ a a ificatˇ o conditie de oprire a algoritmului. a a ˆ cazul nostru. Comparati a a a s ¸ ¸ ¸ solutia obtinutˇ cu solutia exactˇ: ¸ ¸ a ¸ a x + 3y = −2 a) 2x + y = 6   x + 2y + z = 1 3x − y + 5z = 14 b)  x + y − z = −2 2. D.3 Probleme propuse Exercitiul 2. a ¸ Algoritmul constˇ ˆ urmˇtoarele etape: a ın a 1. Sˇ se verifice dacˇ se poate aplica metoda iterativˇ a lui Jacobi. un punct initial.33). Date de ie¸ire: solutia aproximativˇ a sistemului. ¸ s a ın ın ˆ practicˇ. Algoritmul converge dacˇ ¸irul (x(k) ) este a ¸ a s convergent. generarea matricei A a sistemului ¸i a vectorului b s • n . In a ¸ ¸ adicˇ a (k+1) (∗) (∗) xi ∈ [xi − ε. obtinutˇ ˆ urma aplicˇrii traiecs ¸ a ¸ a ın a toriei Jacobi vectorului x(0) pˆnˇ cˆnd este ˆ a a a ındeplinitˇ conditia (2. Convergenta acestui ¸ir poate fi descrisˇ ˆ mod teoretic ˆ diverse moduri.6. ¸i ˆ ¸ a a a s ın caz afirmativ sˇ se gˇseascˇ primele 3 elemente ale ¸irului de solutii partiale.2. De aici rezultˇ o conditie de oprire a algoritmului: a ¸ n (k+1) (xi i=1 √ (k) − xi ) < ε n. ¸ ¸ ¸ ¸ o eroare ε. x(0) .6.2. (2.6.1. xi + ε].numˇrul de necunoscute (numˇrul de linii ale matricei A) a a 2. U ¸i verificarea convergentei metodei: s ¸ ρ(−D −1 (L + U)) < 1 56 .33) Date de intrare: un sistem de ecuatii (o multime de ecuatii). Deoarece metoda lui Jacobi este o metodˇ iterativˇ. Algoritm Observatia 2. generarea matricelor L.6.4 Implementare A. dacˇ a x(k+1) − x(k) < ε unde ε este o constantˇ datˇ. ¸i anume: ¸irul (x(k) ) este In a s a s s convergent. vom considera cˇ solutiile sistemului au fost obtinute cu eroarea ε.

test. AA:=genmatrix(eq. n. AA. var:=[op(indets(eq))]. # conditia de convergenta m:=multiply(inverse(d).nops(lst))))>=1 then ERROR(‘Algoritmul nu converge‘). l:=matrix(n. if vectdim(init)<>n then ERROR(‘numarul de necunoscute nu este egal cu dimensiunea vectorului initial‘) fi. m. lst.-1)). test:=1.n. flag).j].0): u:=matrix(n. j. b.j]. # algoritmul propriu-zis for i from 1 to n do xo[i]:=init[i] od.j]:=A[i.. if evalf(max(seq(abs(lst[k]). xo.n. od.k=1.u. n aii pˆnˇ cˆnd a a a i=1 (xi (k+1) √ (k) − xi ) < ε n B.n+1. A:=delcols(AA. init::vector.0): d:=matrix(n. construirea traiectoriei Jacobi repetˇ a n (k+1) xi = bi − n j=1 j=i aij · xj (k) · 1 .i].-1.matadd(l. var. d[i. i.n+1). n:=nops(var).n+1).i]:=A[i. i = 1. x. 57 . l.3. lst:=[eigenvals(m)]. b:=col(AA. od.n. d.0): for i from 1 to n do for j from 1 to i-1 do l[i. for j from i+1 to n do u[i. fi. u. A.j]:=A[i. od. k. Programe MAPLE ¸i rezultate s jacobi:=proc(eq::set(equation).. eps::float) local var.

for i from 1 to n do xo[i]:=x[i]. {--> enter jacobi.0]). x+2*y=5}. x+2*y = 5}.[0.. RETURN(seq(var[i]=x[i]. od. 2 := 1 l2..(2)=0]).k]*xo[k]. 5] l := u := d := d1.i=1. 2 := 2  −1  0  3  m :=   −1 0 2 √ √ 6 6 lst := [ . end: debug(jacobi): jacobi({3*x+y=5.while test>=evalf(eps*sqrt(n)) do for i from 1 to n do x[i]:=evalf( 1/A[i.n ) )).[(1)=0. 1 := 3 u1.− ] 6 6 xo 1 := 0 58 .1e-1 var := [x. od. 1 := 1 d2.0.. test:=evalf(sqrt( sum( (x[k]-xo[k])^2. od.i]*( b[i]-sum(A[i. k=1. args = {3*x+y = 5..n)). y] n := 2 3 1 5 AA := 1 2 5 A := 3 1 1 2 0 0 0 0 0 0 0 0 0 0 0 0 b := [5. 2.i]*xo[i] ) ).01).n)+A[i. vector(2. array(1 .k=1. .

0]). x = 1. y = 2.018518519 x2 := 2.01).9998713993.002314815} x = 1.178511303 xo 1 := 0.002314815 <-. vector(2.003086420.0.003086420 x2 := 2.083333334 x1 := 0.500000000 x1 := 0.xo 2 := 0 test := 1 x1 := 1.666666666 x1 := 1.111111111 x2 := 2.500000000 test := 3. y = 2.003086420 xo 2 := 2.9722222220 xo 2 := 1.002314815 jacobi({3*x+y=5.[0.exit jacobi (now at top level) = x = 1.8333333333 x2 := 1.990740740 test := 0.003086420.003086420.002314815 Se pot compara rezultatele obtinute dacˇ eroarea ε se modificˇ: ¸ a a > jacobi({3*x+y=5.9722222220 x2 := 1.[0.013888889 x1 := 0.666666666 test := 1.9953703703 x2 := 1.018518519 xo 2 := 2.08346183593 xo 1 := 1.0]).083333334 test := 0.004626063 xo 1 := 1. x+2*y=5}.002314815 test := 0.8333333333 xo 2 := 1.001).944444444 x1 := 1.03273642604 xo 1 := 0.990740740 x1 := 1.013888889 test := 0.5007710115 xo 1 := 1. y = 2.0.9953703703 xo 2 := 1.666666667 x2 := 2. vector(2.666666667 xo 2 := 2. x = 0.999742798 > 59 . x+2*y=5}. y = 1.944444444 test := 0.1964185512 xo 1 := 0.111111111 xo 2 := 2.01391030679 xo 1 := 1.

2 1 0.6 0.0]). a cˇrui solutie exactˇ este x = 1.000001786 De asemenea.000002381.0. x+2*y=5}. se poate compara ¸irul solutiilor partiale cu solutia exactˇ obtinutˇ s ¸ ¸ ¸ a ¸ a rezolvˆnd sistemul Ax = b cu ajutorul procedurii linsolve.00001).4 1.4 0.> jacobi({3*x+y=5.[0. x = 1.6 1. y = 2. Pentru sistemul considerat a mai sus.2 0 1 2 3 4 5 6 7 8 60 . vector(2.8 0. obtinem urmˇtoarele grafice: a ¸ a ¸ a comparatie cu solutia exacta 1. y = 2.

componentele x(k+1) . ¸irul de vectori x(k) definit prin: s x(k+1) = (L + D)−1 (b − Ux(k) ) (2. a ˆ caz de convergentˇ.7.. situat pe In ¸a n 1 61 .7 2.5 0 1 2 3 4 5 6 7 8 2.5 2 1. .5 1 0. x(k+1) ale vectorului x(k+1) . unde L ¸ este matrice triunghiularˇ subdiagonalˇ.34) se nume¸te traiectoria Gauss-Seidel a vectorului x(0) .. D matrice diagonalˇ ¸i U matrice triunghiularˇ a a as a supradiagonalˇ.1 Metoda Gauss-Seidel Breviar teoretic Metoda Gauss-Seidel este o metodˇ de rezolvare numericˇ a sistemelor de tip Cramer. a Pentru un vector x(0) ∈ Rn . Matricea A a sistemului se descompune ˆ suma L+D +U.35) este strict subunitarˇ.comparatie cu solutia exacta 2.. prin a a ın aproximatii succesive. s Traiectoria Gauss-Seidel a vectorului x(0) converge dacˇ ¸i numai dacˇ raza spectralˇ as a a ρ a matricei −(L + D)−1 U (2.

aii (2. . s ˆ continuare. −1 −2 Algoritmul converge dacˇ raza spectralˇ a matricei a a M = −(L + D)−1 U = 1 0 −4 4 −3 0 este strict subunitarˇ.36)-(2.125 . obtinem a a ¸ √ 3 <1 ρ(M) = 3 ¸i deci algoritmul este convergent. In a s a obtinem: ¸ x(1) = −0. .2500000000 y (1) = −0. Efectuˆnd calculele.7. y = −0. 0) pentru sistemul urmˇtor: a 4x + y = −1 4x + 3y = −2.4814814813 x(2) = −0.1.36) (k) (k+1) xi = (k+1) xj j=1 − j=i+1 aij · xj · 1 .2 Problemˇ rezolvatˇ a a Exercitiul 2. determinˇm solutia exactˇ a sistemului considerat: ¸ a ¸ a 1 1 x=− .37) ¸i. y=− 8 2 adicˇ x = −0. y (0) = 0.1666666667 x(3) = −0. a 62 .traiectoria Gauss-Seidel a vectorului x(0) .3333333333 y (2) = −0.37) 2. unde A= 4 1 4 3 .7. Rezolvare Sistemul se poate scrie sub forma Ax = b. . . aplicˇm formulele (2. n. i = 2. D= 4 0 0 3 . b= iar matricea A se descompune ˆ suma L + D + U.4444444443 y (3) = −0. sunt date de relatiile: ¸ n x1 (k+1) = b1 − bi − j=2 i−1 a1j · xj aij · (k) · 1 a11 n (2.1388888889 Pentru comparatie. dupˇ cum urmeazˇ: ın a a L= 0 0 4 0 . plecˆnd de la punctele x(0) = 0.5. U= 0 1 0 0 . Sˇ se determine primele 3 puncte de pe traiectoria Gauss-Seidel a ¸ a T vectorului (0.

7.2.7. Date de ie¸ire: solutia aproximativˇ a sistemului. generarea matricelor L. In a ¸ s ¸ oprire a algoritmului ca ¸i cea prezentatˇ ˆ paragraful 2. aii n pˆnˇ cˆnd a a a i=1 (xi (k+1) √ (k) − xi ) < ε n 63 . generarea matricei A a sistemului ¸i a vectorului b s • n . Sˇ se verifice dacˇ se poate aplica metoda iterativˇ a lui Gauss¸ a a a Seidel. ¸ ¸ ¸ ¸ o eroare ε. Deoarece metoda Gauss-Seidel este o metodˇ iterativˇ.1. n. ¸i ˆ caz afirmativ sˇ se gˇseascˇ primele 3 elemente ale ¸irului de solutii partiale. i = 2. obtinutˇ ˆ urma aplicˇrii traiecs ¸ a ¸ a ın a (0) toriei Gauss-Seidel vectorului x pˆnˇ cˆnd este ˆ a a a ındeplinitˇ conditia (2. un punct initial. constructia traiectoriei Gauss-Seidel ¸ repetˇ a n (k+1) x1 = b1 − bi − j=2 i−1 a1j · xj aij · xj (k) · 1 a11 n xi (k+1) = (k+1) j=1 − j=i+1 aij · xj (k) · 1 . U ¸i verificarea convergentei metodei: s ¸ ρ(−(L + D)−1 U) < 1 3.3 Probleme propuse 2. a ¸ Algoritmul constˇ ˆ urmˇtoarele etape: a ın a 1. (2. s ın a a a s ¸ ¸ Comparati cu solutia exactˇ ¸i cu ¸irul de solutii partiale obtinut prin metoda lui Jacobi: ¸ ¸ as s ¸ ¸ ¸ x + 3y = −2 a)  2x + y = 6  x + 2y + z = 1 b) 3x − y + 5z = 14  x + y − z = −2 Implementare A.7. trebuie spec¸ a a ˆ continuare vom folosi aceea¸i conditie de ificatˇ o conditie de oprire a algoritmului.6.2.numˇrul de necunoscute (numˇrul de linii ale matricei A) a a 2.4 Exercitiul 2.4: s a ın n (xi i=1 (k+1) √ (k) − xi ) < ε n. Algoritm Observatia 2.38).38) Date de intrare: un sistem de ecuatii (o multime de ecuatii).7. D. x(0) .

8. (2. pentru care ω = 1.999998810 2.1. . prezentˇm rezultatele obtinute cu ajutorul metodei Gauss-Seidel pena ¸ tru acela¸i sistem ¸i vector initial al traiectoriei. 64 . .001).40) se nume¸te traiectoria vectorului x(0) obtinutˇ prin relaxˇri succesive. n. .0]). (2. a Pentru un vector x(0) ∈ Rn .. (2. x+2*y=5}. . y = 1.0]).43) Observatia 2. . Aceastˇ metodˇ se deosebe¸te de metoda Gauss¸ a a s Seidel prin aceea cˇ se introduc corectiile a ¸ ∆x(k) = x(k+1) − x(k) .999742798 gseidel({3*x+y=5. k = 0.000002381. 1. 1. Metoda Gauss-Seidel este un caz particular al metodei relaxˇrii suc¸ a cesive.999957133 gseidel({3*x+y=5.0]). y = 1. x+2*y=5}. prin aproximatii succesive.1 Metoda relaxˇrii succesive a Breviar teoretic Metoda relaxˇrii succesive este o metodˇ de rezolvare numericˇ a sistemelor de tip a a a Cramer. unde L este matrice ın triunghiularˇ subdiagonalˇ.000514403.. x(k+1) ale vectorului x(k+1) situat pe In ¸a n 1 traiectoria vectorului x(0) obtinutˇ prin relaxˇri succesive sunt date de relatiile: ¸ a a ¸ (k+1) x1 = (1 − ω) · = (1 − ω) · (k) x1 ω + a11 ω + aii n b1 − bi − j=1 i−1 a1j · xj (k) (2. vector(2.0.. x = 1. vector(2. i = 2. 2. a ˆ caz de convergentˇ.42) n (k) (k+1) xi (k) xi j=1 aij · (k+1) xj − j=i aij · xj .01).. dar pentru diferite valori ale erorii: s s ¸ > > > gseidel({3*x+y=5.8. .00001).0. ¸irul de vectori x(k) definit prin: s x (k+1) = 1 L+ D ω −1 b− 1− 1 ω D + U x(k) .41) este strict subunitarˇ. x = 1.B.. y = 1. D matrice diagonalˇ ¸i U matrice triunghiularˇ supradiagoa a as a nalˇ. k = 0.[0.[0.000085734.8 2. s ¸ a a (0) Traiectoria vectorului x obtinutˇ prin relaxˇri succesive converge dacˇ ¸i numai ¸ a a a s dacˇ raza spectralˇ ρ a matricei a a − L+ 1 D ω −1 1− 1 ω D+U (2. Programe MAPLE ¸i rezultate s Comparativ. x+2*y=5}. . 2. vector(2.39) Matricea A a sistemului se descompune ˆ suma L + D + U.[0. .0. . componentele x(k+1) . x = 1.

43). unde A= 4 1 4 3 . Algoritmul converge dacˇ raza spectralˇ a matricei a a M =− L+ 1− D+U = 0.2. Comparati rezultatele obtinute cu solutia exactˇ: s ¸ ¸ ¸ a x + 3y = −2 a)  2x + y = 6  x + 2y + z = 1 3x − y + 5z = 14 b)  x + y − z = −2 65 . Sˇ se gˇseascˇ primele 3 elemente ale traiectoriei vectorului (0.125 0. Sˇ se verifice dacˇ se poate aplica metoda relaxˇrii succesive. U= . folosind o a a a s ¸ ¸ subrelaxare ¸i o suprarelaxare.1250000000 y (1) = −0. determinˇm solutia exactˇ a sistemului considerat: ¸ a ¸ a x = −0. Rezolvare Sistemul se poate scrie sub forma Ax = b.3 Probleme propuse Exercitiul 2. cu ın L= 0 0 4 0 1 D ω −1 −1 −2 .125 .7500000000 y (3) = −0.75 < 1 ¸i deci algoritmul este convergent. 0)T ¸ a a a folosind metoda relaxˇrii succesive cu ω = 0. Efectuˆnd calculele.2 Problemˇ rezolvatˇ a a Exercitiul 2.42)-(2. y (0) = 0.500 −0. obtinem a a ¸ ρ(M) = 0. 2. aplicˇm formulele a x(0) = 0. plecˆnd a de la punctele x(1) = −0.583 este strict subunitarˇ.8.5000000000 y (2) = −0.333 0.8.9166666667 x(2) = −0. .8. D= 4 0 0 3 1 ω 0 1 0 0 . ¸i obtinem: s ¸ (2. b= Matricea A se descompune ˆ suma L + D + U.1250000000 x(3) = −0.5.5. pentru sistemul: a 4x + y = −1 4x + 3y = −2.8.1.2. y = −0. ¸i ˆ ¸ a a a s ın caz afirmativ sˇ se gˇseascˇ primele 3 elemente ale ¸irului de solutii partiale. s ˆ In continuare.0937500000 Pentru comparatie.

un punct initial. Algoritmul constˇ ˆ urmˇtoarele etape: a ın a s 1.8.44). constructia traiectoriei relaxˇrilor succesive ¸ a repetˇ a 1 D ω −1 1− 1 ω D+U <1 x1 (k+1) = (1 − ω) · x1 + = (1 − ω) · (k) xi (k) ω a11 n b1 − bi − j=1 i−1 a1j · xj (k) (2.2. n (2. Date de ie¸ire: solutia aproximativˇ a sistemului.46) n pˆnˇ cˆnd a a a i=1 (xi (k+1) √ (k) − xi ) < ε n 66 . ω. ¸i anume: a ın s n (k+1) (xi i=1 √ (k) − xi ) < ε n.numˇrul de necunoscute (numˇrul de linii ale matricei A) a a 2. x(0) .45) n (k) (k+1) xi ω + aii j=1 aij · (k+1) xj − j=i aij · xj . (2.4 Implementare A.8. generarea matricei A a sistemului ¸i a vectorului b • n . Algoritm Observatia 2. U ¸i verificarea convergentei metodei: s ¸ ρ − L+ ¸i s 0<ω<2 3. generarea matricelor L.2. Deoarece metoda relaxˇrii succesive este o metodˇ iterativˇ. ¸ ¸ ¸ ¸ o relaxare. Aceastˇ conditie este similarˇ cu cea a ¸ a ¸ a folositˇ ˆ paragrafele anterioare. o eroare ε. obtinutˇ ˆ urma aplicˇrii traiecs ¸ a ¸ a ın a toriei vectorului x(0) obtinutˇ prin relaxˇri succesive pˆnˇ cˆnd este ˆ ¸ a a a a a ındeplinitˇ conditia a ¸ (2.44) Date de intrare: un sistem de ecuatii (o multime de ecuatii). trebuie ¸ a a a specificatˇ o conditie de oprire a algoritmului. D. i = 2.

9091141587. x+2*y=5}. x = 1. 0.01.007912178. x+2*y=5}.976281288 relsucc({3*x+y=5. 0. x+2*y=5}. vector(2. x+2*y=5}.[0. 0. x = 0.[0. 0. 1. 1. vector(2. x = 1.[0.0]).[0. 1. x+2*y=5}. 0. vector(2.6250722364.0]).999992856 67 . vector(2. x = 1.0001).0]).1. x = 0. 0. 1. y = 1. y = 2.0001).0]).272710330 relsucc({3*x+y=5.0001).0]).176464330.071425885.0]). 0.B.470600344 relsucc({3*x+y=5.0001).[0. y = 2. vector(2.0]). 0. x = 0. 0.0001).785716899 relsucc({3*x+y=5.000014289.9919288541.[0.7. 0. y = 1.3. Programe MAPLE ¸i rezultate s Prezentˇm comparativ rezultatele aplicˇrii metodei relaxˇrii succesive pentru diferite a a a valori ale lui ω: > > > > > > > > relsucc({3*x+y=5. y = 1. x+2*y=5}.0001). x+2*y=5}. y = 3.124921273 relsucc({3*x+y=5. y = 1. vector(2. vector(2.024277742 relsucc({3*x+y=5.[0.0001).99.9. # gauss-seidel x = 1.

.Capitolul 3 Rezolvarea ecuatiilor ¸i a sistemelor ¸ s de ecuatii neliniare ¸ Fie sistemul neliniar F (x) = 0 (3. ∀ x(0) ∈ S(x(∗) . xn ) este necunoscut.1 3.2) obtinut din sistemul initial prin alegerea ¸ ¸ G(x) = x − [F ′ (x)]−1 · F (x) (3. r) ¸irul x(k) definit de (3. r) = {x ∈ R | x − x < r} cu urmˇtoarele proprietˇ¸i: a at 1.. 3..1) unde F (x) este vectorul (f1 (x).1. .1...4) x(∗) . fn (x))T . a as a Presupunem cˇ operatorul G are un punct fix x(∗) .. matrice despre care s-a presupus a cˇ este continuˇ ¸i inversabilˇ. Vom spune cˇ x(∗) este un punct de atractie dacˇ existˇ o sferˇ deschisˇ ¸ a ¸ a a a a (∗) n (∗) S(x . . S(x(∗) . s s ¸ s 2. fn : D ∈ Rn → R1 sunt con¸ T siderate cunoscute. .. r).3) unde F ′ (x) este matricea Jacobi asociatˇ vectorului F . .1 Metoda punctului fix Breviar teoretic Solutiile sistemului neliniar (3. a Definitia 3.1.1) se cautˇ printre punctele fixe x(∗) . r) ⊂ D ¸i x(k) generat de s x(k+1) = G(x(k) ) este un ¸ir bine definit pentru ∀ x(0) ∈ S(x(∗) . iar vectorul x = (x1 .. adicˇ printre solutiile ¸ a a ¸ sistemului G(x) = x (3.4) apartine lui D ¸i x(k) 68 −−→ −− k→∞ (3. functiile f1 ..

(Unicitatea punctului fix) Fie G : D ⊂ Rn → Rn un operator neliniar. 2] 6 2  x1 + x2  − x2 = 0 8 Rezolvare Sistemul se mai scrie G(x) = x. x2 )T Calculˇm jacobianul lui G.6) x(0) ∈ D (3. |x1 | 8 4 6 3 69 . 1] × [1. ¸i dacˇ norma µ a matricei Jacobi asociatˇ operatorului a a s a a G este strict subunitarˇ (µ < 1) pentru orice x ∈ D. unde G= x2 + x2 x1 + x2 1 2 . 1.1.1. ¸i obtinem: a s ¸ G′ = a cˇrui normˇ este: a a max x1 3 1 8 1 6 x2 4 1 1 1 1 . converge la un unic punct fix x(∗) ∈ D. 2. Teorema 3. . pentru sistemul urmˇtor: a  2  x1 + x2  − x1 = 0 pe domeniul D = [0. Fie G : D ⊂ Rn → Rn un operator neliniar ¸i x(∗) ∈ D un punct fix al s 1 lui G. Observatia 3. Fie G : D ⊂ Rn → Rn un operator neliniar ¸i x(∗) ∈ D un punct fix al s 1 lui G.2 Problemˇ rezolvatˇ a a Exercitiul 3.2.3. Dacˇ G este de clasˇ C pe D ¸i raza spectralˇ ρ a matricei Jacobi a lui G ˆ x(∗) a a s a ın este strict subunitarˇ (ρ < 1). x = (x1 .Teorema 3.1. .1.1. Dacˇ G este de clasˇ C 1 pe D.1. Dacˇ G este de clasˇ C pe D ¸i norma µ a matricei Jacobi a lui G ˆ x(∗) este a a s ın strict subunitarˇ (µ < 1). Norma unei matrice este datˇ de: ¸ a A = max Ax x (3.1. k = 0. .5) x =0 3. Sˇ se gˇseascˇ primii trei termeni ai ¸irului de aproximatii succesive ¸ a a a s ¸ folosind metoda punctului fix. Teorema 3. . atunci x(∗) este punct de atractie ¸i a ¸ s lim sup x(k) − x(∗) k→∞ 1/k = µ.1. 6 8 T . atunci pentru orice x0 ¸irul de a s aproximatii succesive ¸ x(k+1) = G(xk ). |x2 | .1. atunci x(∗) este un punct de atractie ¸i a ¸ s lim sup x(k) − x(∗) k→∞ 1/k = ρ.

2.0015767415 x1 = 0.0468750000 x1 = 0.5. algoritmul converge. ¸ Algoritmul constˇ ˆ urmˇtorii pa¸i: a ın a s 1.4 Implementare A. cu eroarea ε.n (k+1) (k) − xi | < ε B. generarea matricei G ¸i verificarea conditiei ca norma matricei G′ sˇ fie strict subs ¸ a unitarˇ a 2. obtinem valorile pentru primii trei a ¸ termeni ai ¸irului de aproximatii succesive: s ¸ x1 = 0. 2]. plecˆnd s ¸ ¸ a a de la punctul initial x0 .1. eqn. gˇsirea solutiei aproximative a ¸ repetˇ a x(k+1) = G(xk ) pˆnˇ cˆnd max |xi a a a i=1. un punct ¸ ¸ ¸ initial. determinˇm solutia exactˇ a sistemului: x1 = 0. rezultˇ cˇ norma matricei G′ este s a a 2 < 1.0000354201 Pentru comparatie.orice punct initial x(0) ∈ D. ¸ a ¸ a (∗) (∗) (3) (3) (2) (2) (1) (1) Deoarece x1 ∈ [0.0104166666 x2 = 0. Sˇ se gˇseascˇ o conditie ˆ care se poate aplica metoda punctului fix ¸ a a a ¸ ın asupra sistemului urmˇtor. 0.5).1. x2 = 0.0002808747 x2 = 0. Algoritmi Date de intrare: un sistem de ecuatii (dat ca multime de ecuatii). Aplicˆnd formula (3. 1] ¸i x2 ∈ [1.5)T . Programe MAPLE ¸i rezultate s 70 . precum ¸i primii 3 termeni ai ¸irului de aproximatii succesive a s s ¸ ale solutiei: ¸ x2 + y 2 − 1 = 0 x3 − y = 0 3.3 Probleme propuse Exercitiul 3. x0 ¸i o eroare ε ¸ s Date de ie¸ire: solutia sistemului eqn obtinutˇ prin metoda punctului fix.1250000000 x2 = 0. ¸i deci pentru s 3 3. ¸ (0) Fie x = (0.1.

od. if nops(eqn) <> vectdim(x0) then ERROR(‘problema nu este bine pusa!‘) fi..n. g:=vector(n. j.x)[i. y. if test>10^10 then ERROR(‘Algoritmul nu converge!‘).k=1. RETURN(seq(x[k]=y[k]. eig:=max(op(jac1)). if abs(y[i]-yo[i])>test then test:=abs(y[i]-yo[i]). y[i]:=evalf(subs(seq(x[k]=yo[k]. name))]. jac1:=[]. for i from 1 to n do g[i]:=x[i]+lhs(eqn[i])-rhs(eqn[i]).j]:=jacobian(g. eps::float) local x. if nops(x) <> n then ERROR(‘numarul de ecuatii nu coincide cu numarul de necunoscute!‘) fi.0).n). for i from 1 to n do for j from 1 to n do jac[i. yo[i]:=y[i]. jac:=Matrix(n.g[i])). g.fi. i. k. jac1. yo:=x0. od. fi.fixedpoint:=proc(eqn::set(equation).0). x0::vector. test:=1.jacobian(g. k:=k+1. while test>=eps and k<50 do for i from 1 to n do test:=0.eig). n. for i from 1 to n do for j from 1 to n do jac1:=[op(jac1). x:=[op(indets(eqn. n:=nops(eqn). evalm(g).j]. jac.od. od. WARNING(‘punctul de plecare trebuie ales astfel incat expresia \%1 sa fie strict subunitara‘. end: debug(fixedpoint): 71 . test. od. if k>=50 then ERROR(‘sunt necesare mai mult de 50 de iteratii pentru gasirea solutiei‘) fi.. od.k=1. k:=1.x)[i.j]].n)). eig. yo. od.

] 3 6 8 4 1 x y eig := max( . .3750000000 yo 1 := 0.5.(2)=.1/3*x. 0.[0. 0] x2 y + 6 6 x y2 g2 := + 8 8 2 x y x y2 + .5. y] g := [0.. 2 := 4 jac1 := [] x jac1 := [ ] 3 x 1 jac1 := [ . + 6 6 8 8 g1 := 0 0 0 0 x jac 1.1e-3 n := 2 x := [x. 1 := 3 1 jac 1. args = {1/6*x^2+1/6*y-x = 0. 1/8*x+1/8*y^2-y = 0}. . array(1 . 2.fixedpoint({(x^2+y)/6-x=0. . 1 := 8 y jac 2.1250000000 test := 0 72 .5] test := 1 k := 1 test := 0 y1 := 0.1/4*y) sa fie strict subunitara jac := yo := [0. ] 3 6 x 1 1 jac1 := [ . 0.5.5]).0001). 2 := 6 1 jac 2.vector(2.[(1)=. . punctul de plecare trebuie ales astfel incat expresia max(1/6. . ) 6 3 4 Warning.1250000000 test := 0.5]). {--> enter fixedpoint. (x+y^2)/8-y=0}.0. ] 3 6 8 x 1 1 y jac1 := [ .

k = 0.001576741537 k := 3 test := 0 y1 := 0. 2.8) Solutia x(∗) a sistemului neliniar (3. unde: ¸ a s ˆ cazul ¸irului de iteratii succesive clasic al lui Newton.5916499705 10−5 .00003542010761 k := 4 test := 0 y1 := 0.00003468038832 yo 2 := 0.001541321429 yo 2 := 0.5916499705 10−5 test := 0 y2 := 0.7397192861 10−6 test := 0. . 2.01041666667 test := 0 y2 := 0. 73 k = 0.00003542010761 test := 0.1145833333 yo 1 := 0.1 Metoda lui Newton Breviar teoretic x(k+1) = x(k) − [F ′ (x(k) )]−1 · F (x(k) ).y2 := 0.5916499705e-5. (3.2 3. respectiv ın s ¸ .7) (3. y = 0. 1.1) este datˇ de limita ¸irului x(k) .2.0002808747470 test := 0.01013579192 yo 1 := 0. y = . x(k+1) = x(k) − [F ′ (x(0) )]−1 · F (x(k) ). .001576741537 test := 0.7397192861e-6} x = 0. . .7397192861 10−6 3.5916499705 10−5 test := 0. 1. .0002808747470 test := 0 y2 := 0.04529825846 yo 2 := 0. .01041666667 test := 0.04687500000 k := 2 test := 0 y1 := 0.0002749582473 yo 1 := 0.7397192861 10−6 k := 5 <-.4531250000 yo 2 := 0.04687500000 test := 0.exit fixedpoint (now at top level) = x = .

ˆ conditiile teoremei precedente.1.9) ¸irul de iteratii succesive clasic al lui Newton se scrie s ¸ x(k+1) = x(k) − f (x(k) ) . (3. Rezolvare folosind metoda lui Newton clasicˇ a Determinˇm produsul: a [F (x)] F (x) = ′ −1 (x2 + y 2 − 1) y(x3 − y) 3x(x2 + y 2 − 1) (x3 − y) + . x(∗) este un punct a ın a fix atractiv. ˆ cazul metodei lui Newton a s a ın (∗) clasice.1) devine ¸ f (x) = 0. 0. − 2x(1 + 3yx) x(1 + 3yx) 2 + 6yx 1 + 3yx 74 T . Dacˇ existˇ o sferˇ deschisˇ S(x(∗) . 2. y)T .10) iar ¸irul de iteratii succesive simplificat al lui Newton se scrie s ¸ x(k+1) = x(k) − f (x(k) ) . . ˆ acest caz In ecuatia (3.7.2. cu x = (0. 2. . . Rezolvare Sistemul se mai scrie F (x) = 0.11) 3. . x3 − y)T . .2. Un caz particular al metodei lui Newton este acela pentru care n = 1. 1. ¸ Teorema 3.2. Jacobianul operatorului F este: F ′ (x) = 2x 2y 3x2 −1 A. 1.2. f ′ (x(k) ) k = 0.4) pentru sistemul: s x2 + y 2 − 1 = 0 x3 − y = 0. r) = {x ∈ Rn | x − x(∗) < r} ¸ a a a a pe care F este de clasˇ C 1 ¸i F ′ (x(∗) ) este nesingularˇ atunci. (3. x = (x. Sˇ se gˇseascˇ primii 3 termeni ai ¸irului de iteratii succesive (clasic ¸ a a a s ¸ (0) T ¸i simplificat) al lui Newton. ın s ¸ Teorema 3. f ′ (x(0) ) k = 0. (3. x este un punct de atractie.ˆ cazul ¸irului de iteratii succesive simplificat al lui Newton. unde F (x) = (x2 + y 2 − 1.1.2. dacˇ raza spectralˇ ρ a matricei In ¸ a a I − [F ′ (x(0) )]−1 · F ′ (x(∗) ) este strict subunitarˇ atunci.2 Probleme rezolvate Exercitiul 3. Fie F : D ⊂ Rn → Rn ¸i ecuatia F (x) = 0. despre care presupunem cˇ s ¸ a are o solutie x(∗) ∈ D. ˆ cazul metodei lui Newton simplificatˇ. .

considerˆnd s a a x(0) = 0.0591943762 x(4) = 0.8535714287 y (1) = 0. a Rezolvare Se observˇ cˇ o solutie a ecuatiei este x(∗) = 0. atunci f ′ (x) = cos(x) − 1. Astfel.0888032392 x(3) = 0.8297474476 y (3) = 0.7 y (0) = 0. Rezolvare folosind metoda lui Newton simplificatˇ a Aplicˆnd formula (3.2.7).2. obtinem: a s a ¸ x(1) = 0.1332443177 x(2) = 0.5841767661 x(2) = 0. 75 .2.8).8535714286 y (1) = 0. Exercitiul 3. pentru aflarea ¸ a as a solutiei ecuatiei ¸ ¸ sin(x) − x = 0. obtinem primii 3 termeni ai ¸irului de iteratii succesive clasic al lui Newton: ¸ s ¸ x(1) = 0.0263064006 etc. plecˆnd de la punctul x(0) = 0.10).8267993467 y (2) = 0. Sˇ se aplice metoda lui Newton (clasicˇ ¸i simplificatˇ).5653470981.5800885499 x(2) = 0.2 ¸i aplicˆnd formula (3.5636241719.¸i aplicˇm formula (3.5577269491 x(3) = 0. obtinem primii 3 termeni ai ¸irului de iteratii succesive sima ¸ s ¸ plificat al lui Newton: x(1) = 0.8260319270 y (3) = 0.5637617094 x(3) = 0. B. Plecˆnd de la x(0) = 0.4.8147421666 y (2) = 0. a a ¸ ¸ Dacˇ notˇm a a f (x) = sin(x) − x.0394606157 x(5) = 0.

0859570495 etc.1 0.15 0.2 –0.1134824727 x(3) = 0.0012 76 . obtinem: a ¸ a ¸ x(1) = 0.001: a ¸ ¸ ¸ a ¸ x(13) = 0.001814907756. raportate la graficul functiei f .1012708415 x(4) = 0.0002 –0.1332443177 x(2) = 0.001539688244. prezentˇm comparativ ¸irurile aproximatiilor In ¸ a a s ¸ succesive clasicˇ ¸i respectiv simplificatˇ ale lui Newton. as a ¸ 0. Dupˇ 18147 iteratii se obtine o solutie aproximativˇ a ecuatiei. ˆ continuare. cu eroarea ε = 0.11).0925912882 x(5) = 0.Dupˇ 13 iteratii se obtine o solutie aproximativˇ a ecuatiei. pentru ecuatia consideratˇ.001 –0.00000005: x(18147) = 0. Aplicˆnd iteratia datˇ de formula (3. cu eroarea ε = a ¸ ¸ ¸ a ¸ 0.0006 –0.0008 –0.0004 –0.05 0 metoda lui Newton clasica x 0.

2.001 –0.2.05 0 metoda lui Newton simplificata x 0.4 Implementare A. x0 ¸i o eroare ε ¸ ¸ s Date de ie¸ire: solutia aproximativˇ a sistemului. obtinutˇ folosind metoda lui s ¸ a ¸ a Nexton clasicˇ.3.5.1 0.0008 –0. Pornind de la punctul (x0 .0012 3. un punct initial.5).2. sˇ se gˇseascˇ primii 3 ¸ a a a termeni ai ¸irului de solutii partiale. Pornind de la punctul x0 = 0. folosind cele douˇ variante ale metodei lui Newton: s ¸ ¸ a x3 + x = 0 Exercitiul 3.0002 –0. respectiv metoda lui Newton simplificatˇ a a Algoritmul constˇ ˆ urmˇtorii pa¸i: a ın a s 77 .0006 –0. sˇ se gˇseascˇ primii 3 termeni ai ¸ a a a ¸irului de solutii partiale. Algoritmi A1.3 Probleme propuse   x + y2   − y = 0. 0.4. Cazul n-dimensional Date de intrare: un sistem de ecuatii eqn. folosind metoda lui Newton clasicˇ ¸i metoda lui s ¸ ¸ a s Newton simplificatˇ: a  2  x +y  −x= 0   6 3.0.2.0004 –0. y0 ) = (0.15 0. 8 Exercitiul 3.2 –0.5.

y0.c. generarea functiei f ¸ 2.x. obtinutˇ folosind metoda lui Nexton s ¸ a ¸ ¸ a clasicˇ.jc0.. n:=nops(eqn). am construit a a ın procedurile cnewton. respectiv metoda lui Newton simplificatˇ a a Algoritmul constˇ ˆ urmˇtorii pa¸i: a ın a s 1. a) metoda lui Newton clasicˇ a repetˇ a x(k+1) = x(k) − [F ′ (x(k) )]−1 · F (x(k) ) pˆnˇ cˆnd max |xi a a a i=1. Cazul unidimensional Date de intrare: o ecuatie eqn.0).y. x0::vector. y0:=vector(n.jc.n (k+1) − xi | < ε (k) b) metoda lui Newton simplificatˇ a repetˇ a x(k+1) = x(k) − [F ′ (x(0) )]−1 · F (x(k) ) pˆnˇ cˆnd max |xi a a a i=1. Programe MAPLE ¸i rezultate s Pentru metoda lui Newton clasicˇ.[seq(x0[i]+1. eps::float) local n.1.n)]). a) metoda lui Newton clasicˇ a repetˇ a x(k+1) = x(k) − f (x(k) ) f ′ (x(k) ) b) metoda lui Newton simplificatˇ a repetˇ a x(k+1) = x(k) − f (x(k) ) f ′ (x(0) ) pˆnˇ cˆnd |x(k+1) − x(k) | < ε a a a pˆnˇ cˆnd |x(k+1) − x(k) | < ε a a a B.n (k+1) − xi | < ε (k) A2. respectiv snewton. f:=vector(n. respectiv simplificatˇ ˆ n dimensiuni. x0 ¸i o eroare ε ¸ ¸ s Date de ie¸ire: solutia aproximativˇ a ecuatiei. generarea functiei F ¸ 2. 78 .i=1. un punct initial.test.i.f. cnewton:=proc(eqn::set(equation).j.

x)).) 1. y x) x (1.0. (x3 − 1. > cnewton({x^2+y^2-1=0. + 3. y x c := 1 test := 1. y] y := [0. y[i]:=y[i]-jc0[i]. y:=x0. {--> enter cnewton. + 3. od. name))].1e-3 n := 2 f := [0. 0] y0 := [1.8535714287 y0 2 := 0.f)).i=1. jc0[i]:=evalf(subs(seq(x[k]=y[k]. . i=1.5000000000 (x2 + y 2 − 1.4] x := [x.0.[0.4]). y x) jc := 1. test:=max(seq(abs(jc0[i]). 2.k=1.7.7. args = {x^2+y^2-1 = 0.x^3-y=0}.1800885499 y2 := 0. while test>eps do if c>1000 then ERROR(‘algoritmul nu converge‘) fi. + 3.. i=1.x:=[op(indets(eqn. y) + .[(1)=. jc:=evalf(multiply(inverse(jacobian(f.1535714287 y1 := 0.(2)=. x (1.. 1.0.4]).vector(2. for i from 1 to n do y0[i]:=y[i]. c:=1.7.jc[i])).[0. end: debug(cnewton): cnewton({x^2+y^2-1=0. y) − 1.vector(2.x^3-y=0}.500000000 x (x2 + y 2 − 1.0001).4]).7. 0. y x 1.0 y0 1 := 0.n)). od.4] f1 := x2 + y 2 − 1 f2 := x3 − y 0.) y (x3 − 1.4 jc0 2 := −0. test:=max(seq(abs(y0[i]-y[i]). c:=c+1. + 3. RETURN(seq(x[i]=y[i]..0001).. x^3-y = 0}.0. od.5800885499 79 .7 jc0 1 := −0.7.n)).n)..n)). array(1 . for i from 1 to n do f[i]:=lhs(eqn[i])-rhs(eqn[i]).

8260313576.test := 0.c.vector(2. x0::numeric.01632684047 y2 := 0. y = . cnewton1d:=proc(eqn::equation.1800885499 c := 2 y0 1 := 0.y0.4]). respectiv snewton1d.0007674197500 y1 := 0. y:=x0. 80 .5636241621 snewton({x^2+y^2-1=0.exit cnewton (now at top level) = x = .0001). c:=1.02677208199 y1 := 0.5693512518 10−6 y1 := 0.5636241621 test := 0.8260165866.5693512518 10−6 c := 5 <-. eps::float) local f. name)).8267993467 y0 2 := 0.8260319270 jc0 1 := 0.0.test.5637617094 jc0 2 := 0.x.5636182992 Pentru metoda lui Newton clasicˇ.02677208199 c := 3 y0 1 := 0. y = 0.5637617094 test := 0.5636241621} x = 0.8260313576 y0 2 := 0.5800885499 jc0 2 := 0.[0.8260319270 y0 2 := 0. y = 0.8267993467 jc0 1 := 0.9765710647 10−8 y2 := 0. test:=1.0.x).0001375374562 y2 := 0.8535714287 jc0 1 := 0. fp:=diff(f.fp.y.5636241719 jc0 2 := 0.0007674197500 c := 4 y0 1 := 0.8260313576. f:=lhs(eqn)-rhs(eqn).7. x = 0.5636241719 test := 0. respectiv simplificatˇ ˆ a a ıntr-o dimensiune. x:=op(indets(eqn. am construit procedurile cnewton1d.x^3-y=0}.

.00876901120 81 .0.02630640064 y := 0.01315421511 c := 6 y0 := 0.0667556823 c := 2 y0 := 0.2 y := 0.1332443177 y := 0. c:=c+1.001). 0. test:=abs(y-y0).2.05919437624 y := 0. . end: debug(cnewton1d): cnewton1d(sin(xx)-xx=0.fp)).02630640064 test := 0. args = sin(xx)-xx = 0. {--> enter cnewton1d. y0:=y. RETURN(x=y).1332443177 test := 0.04444107848 c := 3 y0 := 0.2. y:=evalf(y-subs(x=y.while test>eps do if c>1000 then ERROR(‘Algoritmul nu converge!‘) fi.0.05919437624 test := 0.03946061575 test := 0.001).02960886298 c := 4 y0 := 0.f)/subs(x=y.01973376049 c := 5 y0 := 0.1e-2 x := xx f := sin(xx ) − xx fp := cos(xx ) − 1 y := 0.08880323922 y := 0.03946061575 y := 0.08880323922 test := 0.2 c := 1 test := 1 y0 := 0.2. od. > cnewton1d(sin(xx)-xx=0. 0.01753738944 test := 0.

005196191723 y := 0.007794289520 test := 0.003464143309 test := 0.001732048414 c := 11 y0 := 0.01169155254 y := 0.c := 7 y0 := 0.001154647423 c := 12 y0 := 0.005196191723 test := 0.001539688244 test := 0.007794289520 y := 0.00584583690 c := 8 y0 := 0.01169155254 test := 0.002309495886 y := 0.1539688244e-2} xx = 0.003464143309 y := 0.001539688244 82 .000769807642 c := 13 <-.002598097797 c := 10 y0 := 0.exit cnewton1d (now at top level) = xx = .002309495886 test := 0.01753738944 y := 0.003897263020 c := 9 y0 := 0.

Capitolul 4 Interpolare polinomialˇ.1 Polinomul lui Newton cu diferente divizate ¸ Breviar teoretic Fie functia f : X → R1 datˇ prin: yi = f (xi ).3) m=0 m=i (xr+i − xr+m ) 83 . De exemplu. se pune problema ca. m.30.1) xr+1 − xr Diferenta divizatˇ de ordinul al doilea a functiei f relativ la punctul xr este prin ¸ a ¸ definitie numˇrul: ¸ a (D 2 f )(xr ) = (D 1 f )(xr+1 ) − (D 1 f )(xr ) [xr+1 . ¸ a Diferenta divizatˇ de ordinul ˆ ai a lui f relativ la punctul xr este numˇrul definit ¸ a ıntˆ a de fractia: ¸ f (xr+1 ) − f (xr ) (D 1 f )(xr ) = . xr+1 . i = 0.2) Prin calcul se gˇse¸te cˇ diferenta divizatˇ de ordin k a lui f ˆ xr este: a s a ¸ a ın k (D f )(xr ) = i=0 k f (xr+i ) k (4. cunoscˆndu-se temperaturile aerului luate din a orˇ ˆ orˇ. xr+2 . Interpolarea ¸ a a a se nume¸te polinomialˇ atunci cˆnd se cautˇ functii polinomiale avˆnd proprietˇ¸ile s a a a ¸ a at mentionate. ¸ 4.1.1 4. yi) sˇ se determine o a a functie de interpolare al cˇrei grafic sˇ treacˇ prin toate punctele date. (4. . se poate cere valoarea temperaturii aerului la ora 14. plecˆnd de la punctele date (xi . f ] − [xr . . . . 1. Functii a ¸ spline ˆ practicˇ este des ˆ alnitˇ situatia ˆ care se cunoa¸te valoarea unei functii f ˆ diferite In a ıntˆ a ¸ ın s ¸ ın puncte xi ¸i se cere valoarea sa ˆ s ıntr-un punct intermediar. f ] = xr+2 − xr xr+2 − xr (4. a ın a Astfel.

(x − x1 ). dupˇ cum urmeazˇ: ¸ a a △n f (xk ) = △n−1f (xk+1 ) − △n−1 f (xk ) ▽n f (xk ) = ▽n−1f (xk ) − ▽n−1 f (xk−1) Legˇtura dintre diferentele divizate ¸i diferentele finite este urmˇtoarea: a ¸ s ¸ a (D m f )(x0 ) = △m f (x0 ) .5) (4. iar s ¸a a ▽f (xk ) = f (xk ) − f (xk−1 ) se nume¸te diferentˇ finitˇ la stˆnga. m!hm (4. . obtinem polinomul lui Newton cu diferente finite la dreapta: In ¸ ¸ pm (x) =f (x0 ) + △f (x0 ) △2 f (x0 ) (x − x0 ) + (x − x0 )(x − x1 ) + . functia f se poate aproxima dupˇ cum urmeazˇ: ¸ a a f (x) = Pm (x) + Rm (x). + (D m f )(x0 )(x − x0 )(x − x1 ) . + h 2!h2 △m f (x0 ) + (x − x0 ) . (x − xm−1 )(x − xm ) (m + 1)! (4.4) (4. . m!hm 84 (4.Polinomul lui Newton cu diferente divizate se define¸te ca fiind polinomul: ¸ s Pm (x) =f (x0 ) + (D 1 f )(x0 )(x − x0 ) + (D 2 f )(x0 )(x − x0 )(x − x1 ) + .11) (4. (x − xm−1 ) Astfel. . ¸ △f (xk ) = f (xk+1 ) − f (xk ) se nume¸te diferentˇ finitˇ la dreapta. . m!hm (4. (x − xm−1 ). . Astfel.6) este restul sau eroarea de aproximare la interpolarea polinomialˇ. . unde Rm (x) = f (m+1) (ξ) (x − x0 )(x − x1 ) . . . . .13) .12) respectiv polinomul lui Newton cu diferente finite la stˆnga: ¸ a pm (x) =f (xm ) + ▽f (xm ) ▽2 f (xm ) (x − xm ) + (x − xm )(x − xm−1 ) + . h 2!h2 ▽m f (xm ) + (x − xm ) .e.10) (4.8) (4. m!hm (D m f )(xm ) = ▽m f (xm ) . .7) ˆ acest fel. se pot In ın introduce diferentele finite. . . s ¸a a a Diferentele finite de ordin superior se definesc recursiv. .9) (4. a ˆ cazul ˆ care xi+1 − xi = h = const (i. nodurile xi sunt echidistante).

1. 0.4.1. Sˇ se gˇseascˇ polinomul de interpolare pentru urmˇtorul set de date: ¸ a a a a x 1 2 3 4 5 f (x) 2 5 10 17 26 folosind a) diferente divizate ¸ b) diferente finite la dreapta ¸ c) diferente finite la stˆnga. i = 1. 0]. Obtinerea diferentelor divizate: ¸ ¸ x 1 f (x) 2 5−2 =3 2−1 10 − 5 =5 3−2 17 − 10 =7 4−3 26 − 17 =9 5−4 5−3 =1 3−1 7−5 =1 4−2 9−7 =1 5−3 D 1 f (x) D 2 f (x) D 3 f (x) D 4 f (x) 2 5 3 10 1−1 =0 4−1 1−1 =0 5−2 0−0 =0 5−1 4 17 5 26 Sirul diferentelor divizate este ¸irul primelor valori de pe fiecare coloanˇ. ˆ ¸ ¸ s a ıncepˆnd cu a valorile functiei. Obtinerea polinomului de interpolare ¸ P (x) =2 + 3 · (x − 1) + 1 · (x − 1)(x − 2) + 0 · (x − 1)(x − 2)(x − 3)+ + 0 · (x − 1)(x − 2)(x − 3)(x − 4) = =2 + 3x − 3 + x2 − 3x + 2 = =x2 + 1. Polinomul lui Newton cu diferente divizate ¸ 1.2 Probleme rezolvate Exercitiul 4. 1. Polinomul lui Newton cu diferente finite la dreapta ¸ not Aceastˇ metodˇ este aplicabilˇ. 3. ¸ a Rezolvare A. a a a 1. Obtinerea diferentelor finite la dreapta ¸ ¸ 85 . B. 2. adicˇ: ¸ a [2. 4.1. deoarece xi+1 − xi = 1 = h.

Obtinerea polinomului de interpolare ¸ 3 2 0 P (x) =2 + (x − 1) + (x − 1)(x − 2) + (x − 1)(x − 2)(x − 3)+ 2 1 2! · 1 3! · 13 0 + (x − 1)(x − 2)(x − 3)(x − 4) = 4! · 14 =2 + 3x − 3 + x2 − 3x + 2 = =x2 + 1. 86 . deoarece xi+1 − xi = 1 = h. 3. ˆ ¸ ¸ s ıncepˆnd a cu valorile functiei. 9. a a a 1.x f (x) 1 2 3 4 5 2 5 10 17 26 △1 f (x) 5−2=3 10 − 5 = 5 △2 f (x) △3 f (x) △4 f (x) 5−3= 2 2−2 =0 0−0= 0 7−5= 2 2−2 =0 − − − − − − − 17 − 10 = 7 9 − 7 = 2 26 − 17 = 9 − − − Sirul diferentelor finite la dreapta este ¸irul rezultatelor de pe prima linie. Polinomul lui Newton cu diferente finite la stˆnga ¸ a not Aceastˇ metodˇ este aplicabilˇ. 0]. Obtinerea diferentelor finite la stˆnga ¸ ¸ a x f (x) 1 2 3 4 5 2 5 10 17 26 ▽1 f (x) − 5−2=3 10 − 5 = 5 ▽2 f (x) − − 5−3=2 ▽3 f (x) − − − ▽4 f (x) − − − − 17 − 10 = 7 7 − 5 = 2 2 − 2 = 0 26 − 17 = 9 9 − 7 = 2 2 − 2 = 0 0 − 0 = 0 Sirul diferentelor finite la stˆnga este ¸irul rezultatelor de pe ultima linie. adicˇ: ¸ a [26. 2. 0]. i = 1. C. 2. 0. ˆ ¸ ¸ a s ıncepˆnd a cu valorile functiei. 2. adicˇ: ¸ a [2. 0. 4.

¸ a a a ¸ diferente finite la stˆnga ¸i diferente finite la dreapta pentru urmˇtoarele seturi de date: ¸ a s ¸ a x −1 0 1 2 a) f (x) 2 1 0 −1 x π π 3π 2π 2 2 b) f (x) 1 0 −1 0 1 4. n − 1 calculeazˇ elementele listei dd. ¸i ¸ ¸ s o variabilˇ z a Date de ie¸ire: valoarea polinomului de interpolare ˆ acel numˇr. lista valorilor f x ale functiei.2.1. xk+s−1 −xk−1 k = 2. respectiv expresia polinomului de interpolare. naux adaugˇ elementul dd1 la lista dif div a aux = dd 2.3 Probleme propuse Exercitiul 4. Obtinerea polinomului de interpolare ¸ 9 2 0 P (x) =26 + (x − 5) + (x − 5)(x − 4) + (x − 5)(x − 4)(x − 3)+ 2 1 2! · 1 3! · 13 0 + (x − 5)(x − 4)(x − 3)(x − 2) = 4! · 14 =26 + 9x − 45 + x2 − 9x + 20 = =x2 + 1.1. 4.4 Implementare A.1. obtinerea diferentelor divizate ¸ ¸ aux = f x dif div = [f x1 ] n = numˇrul de elemente ale listei x a naux = numˇrul de elemente ale listei aux a pentru s = 1. Sˇ se gˇseascˇ polinomul de interpolare folosind diferente divizate. obtinerea polinomului de interpolare ¸ P = dif divn pentru i de la n − 1 la 1 P = P · (z − xi ) + dif divi 87 . astfel: ddk = a auxk −auxk−1 . dacˇ z este o nedeterminatˇ a a a Algoritm pentru diferente divizate ¸ 1. dacˇ z este un s ın a a numˇr.2. Algoritmi Date de intrare: lista argumentelor x ale functiei.

k auxi = auxi+1 − auxi n=n−1 eliminˇ elementul auxn din lista aux a adaugˇ elementul aux1 la lista df d a 2. obtinerea diferentelor finite la stˆnga ¸ ¸ a aux = f x n = numˇrul de elemente ale listei aux a df s = [f xn ] pentru k = 1.Algoritm pentru diferente finite la dreapta ¸ 1. obtinerea polinomului de interpolare ¸ h = x2 − x1 df dn P = (n − 1)! · hn−1 pentru i de la n − 1 la 1 P = P · (z − xi ) + df di (i − 1)! · hi−1 Algoritm pentru diferente finite la stˆnga ¸ a 1. obtinerea diferentelor finite la dreapta ¸ ¸ aux = f x df s = [f x1 ] n = numˇrul de elemente ale listei aux a pentru k = n − 1. 1 pentru i = 1. n − k pentru i = 1. obtinerea polinomului de interpolare ¸ h = x2 − x1 df sn P = (n − 1)! · hn−1 pentru i de la n − 1 la 1 P = P · (z − xi ) + df si (i − 1)! · hi−1 88 . k auxi = auxi+1 − auxi eliminˇ elementul auxn−k+1 din lista aux a adaugˇ elementul auxn−k la lista df s a 2. n − 1 pentru i = 1.

fx). 0] Pentru calculul polinomului de interpolare. 3. dd. [2. x:=[1.3. d1.. dd:=[fx[1]]. 1.10. RETURN(simplify(pol)).5. dd:=[op(dd). if evalb(type(xx. x[1]. ¸i ddinterp care construie¸te polinos s ¸ s s mul de interpolare.2. difdiv:=proc(x::list. if nops(x)<>nops(fx) then ERROR(‘primul si al doilea argument trebuie sa aibe acelasi numar de elemente‘).fx).17.%2]‘.x[nops(x)]). k=2.4. end: Testˇm acest program pentru calculul diferentelor divizate de la problema rezolvatˇ a ¸ a anterior. pol:=dd[nops(dd)].B. k. fi. pol. for s from 1 to n-1 do d1:=[seq((aux[k]-aux[k-1])/(x[k+s-1]-x[k-1]).5]: fx:=[2. n. end: ddinterp:=proc(x::list. od.numeric) and (xx<x[1] or xx>x[nops(x)])) then WARNING (‘Polinomul de interpolare da rezultate corecte doar pentru x in intervalul [%1.xx) local dd. n:=nops(x). d1[1]]. fi. i. 0. s. od.26]: difdiv(x. dd:=difdiv(x.nops(aux))]. fx::list) local aux. aux:=d1. avem douˇ variante: a 89 . fx::list. for i from nops(dd)-1 by -1 to 1 do pol:=pol*(xx-x[i])+dd[i]. aux:=fx. Programe MAPLE ¸i rezultate s Pentru polinomul lui Newton cu diferente divizate. am folosit urmˇtoarele proceduri: ¸ a difdiv care construie¸te ¸irul diferentelor divizate. RETURN(dd).

x2 .10). t=-2..fx. Pentru o vizualizare mai bunˇ. f := 8(z 2 − 3zπ + 2π 2 )z 3π 3 90 .p2. color=green): display(p1. ¸i construim polinomul a ¸ s de interpolare cu diferente divizate. symbol=circle): p3:=plot(sin(t).fx.. .3*Pi/2.nops(x))]. functia sin x ¸i polinomul de interpolare..i=1. fn ]. datˇ prin lista ordonatˇ a variabilelor [x1 = ¸ ¸ a a a min.1.2. ¸i lista valorilor sale [f1 .ddinterp(x.2*Pi]: fx:=[0.1. xn = max]. Polinomul de interpolare da rezultate corecte doar pentru x in intervalul [1. f2 .. color=red): p2:=pointplot([seq([x[i]. Warning. Fie o functie tabelatˇ.-1.5] 101 sau ddinterp(x.fx. ¸ s Avem astfel: x:=[0.1...z).z).8. a Observatia 4. xn ]. Polinomul de interpolare dˇ s a rezultate apropiate de valoarea functiei doar pentru x ˆ intervalul [x1 . z2 + 1 Observatia 4... considerˇm functia sin x pe intervalul [0.1.p3).0]: f:=ddinterp(x.Pi. .Pi/2.0.fx[i]].. am reprezentat grafic ¸ a punctele de interpolare. Polinomul de interpolare dˇ rezultate exacte pentru functii polinomi¸ a ¸ ale de grad maxim n. 2π]. p1:=plot(f. z=-2.8. unde n este numˇrul de puncte ˆ care se cunoa¸te valoarea functiei a ın s ¸ cˇutate. Pentru a ¸ ın ilustra acest fapt.

color=black. p1d:=plot(f. xn ]...fx[i]].0.p2.Pi/2.p2. Fie o functie tabelatˇ. .1]: f:=dfdinterp(x.0. ¸ Observatia 4..fx.fx. f2 ..p3). color=red): p2:=pointplot([seq([x[i].z). x2 . Un exemplu intuitiv ˆ acest sens ˆ constituie urmˇtoarea secventˇ de program: ın ıl a ¸a x:=[0.Pi. datˇ prin lista ordonatˇ a variabilelor.7.8.1 –2 0 2 z 4 6 8 –1 –2 Pentru polinomul lui Newton cu diferente finite la dreapta.p3).3*Pi/2... ¸i lista valorilor sale.5. al cˇrei rezultat este: a f := − 8 z 4 − 32 z 3 π + 34 z 2 π 2 − 4 z π 3 − 3 π 4 3 π4 8 z 4 − 16 z 3 π + 10 z 2 π 2 − 8 z π 3 − 3 π 4 3 π4 91 g := − . am ¸ a folosit proceduri similare celor folosite pentru polinomul lui Newton cu diferente divizate. fn ]..7.3. xn = max]. thickness=2): display(p1d.-1.5.. respectiv la stˆnga. z=-1.5.z).2*Pi]: fx:=[1.5.. [x1 = ¸ ¸ a a a min. symbol=circle): p3:=plot(cos(t). t=-2. g:=dfsinterp(x. pentru valori ale lui x ˆ afara intervalului ¸ a ¸ ın [x1 . . Polinomul de interpolare cu s diferente finite nu aproximeazˇ bine functia.1.. [f1 .i=1. display(p1s. color=red): p1s:=plot(f.nops(x))]. z=-1.

. (xi − xi−1 )(xi − xi+1 ) . . fm ]. x1 . a datˇ a prin lista ordonatˇ a a [x0 = min. (x − xm ) ..14) unde li (x) = (x − x0 ) . i = 0. . . . xm = max].2 4.15) . . m (xi − x0 ) . s Polinomul de interpolare Lagrange care aproximeazˇ functia f este a ¸ m (Lm f )(x) = i=0 li (x) · fi (4. . f1 .1 Polinomul de interpolare Lagrange Breviar teoretic variabilelor Fie o functie ¸ tabelatˇ.. . ¸i lista valorilor sale [f0 .. (xi − xm ) 92 (4. .Polinomul de interpolare cu diferente finite la dreapta 1 –2 0 2 z 4 6 8 –1 –2 –3 Polinomul de interpolare cu diferente finite la stanga 1 –2 0 2 z 4 6 8 –1 –2 –3 4.. .. (x − xi−1 )(x − xi+1 ) .2. .

lista valorilor functiei. 4. respectiv expresia polinomului de interpolare.4 Implementare A.se numesc polinoame de interpolare Lagrange fundamentale.2. 4.2. dupˇ efectuarea calculelor. polinomul de interpolare Lagrange este: (L4 f )(x) = 2l0 (x) + 5l1 (x) + 10l2 (x) + 17l4 (x) + 26l5 (x) ceea ce.2 Probleme rezolvate x 1 2 3 4 5 f (x) 2 5 10 17 26 Exercitiul 4. Sˇ se gˇseascˇ polinomul de interpolare Lagrange pentru urmˇtoarele ¸ a a a a seturi de date ¸i sˇ se compare cu rezultatul obtinut ˆ paragraful anterior: s a ¸ ın x −1 0 1 2 a) f (x) 2 1 0 −1 π x 2 π 3π 2π 2 b) f (x) 1 0 −1 0 1 4.2. dacˇ z este un s ın a a numˇr.2. dacˇ z este o nedeterminatˇ a a a 93 .3 Probleme propuse Exercitiul 4.2. ¸i o ¸ ¸ s variabilˇ z a Date de ie¸ire: valoarea polinomului de interpolare ˆ acel numˇr. x. f x.2. Algoritm Date de intrare: lista argumentelor functiei. Sˇ se gˇseascˇ polinomul de interpolare Lagrange pentru functia ¸ a a a ¸ Rezolvare Polinoamele de interpolare Lagrange fundamentale sunt: l0 (x) = l1 (x) = l2 (x) = l3 (x) = l4 (x) = (x − 2)(x − 3)(x − 4)(x − 5) (1 − 2)(1 − 3)(1 − 4)(1 − 5) (x − 1)(x − 3)(x − 4)(x − 5) (2 − 1)(2 − 3)(2 − 4)(2 − 5) (x − 1)(x − 2)(x − 4)(x − 5) (3 − 1)(3 − 2)(3 − 4)(3 − 5) (x − 1)(x − 2)(x − 3)(x − 5) (4 − 1)(4 − 2)(4 − 3)(4 − 5) (x − 1)(x − 2)(x − 3)(x − 4) (5 − 1)(5 − 2)(5 − 3)(5 − 4) Astfel. devine a (L4 f )(x) = 1 + x2 .1.

x[1]. if nops(x)<>nops(f) then ERROR(‘primul si al doilea argument trebuie sa aibe acelasi numar de elemente‘).3.numeric) and (xx<x[1] or xx>x[nops(x)])) then WARNING (‘Polinomul de interpolare da rezultate corecte doar pentru x in intervalul [%1. n:=nops(x).s. s:=0. fi. fi.4. n z − xj dacˇ i = j atunci p = p · a xi − xj s = s + fi · p returneazˇ s a B.Algoritm n = numˇrul de elemente ale listei x a s=0 pentru i = 1. Polinomul de interpolare dˇ rezultate exacte pentru functii polinomi¸ a ¸ ale de grad maxim n. a Observatia 4. for i from 1 to n do p:=1. end: x:=[1. unde n este numˇrul de puncte ˆ care se cunoa¸te valoarea functiei a ın s ¸ cˇutate. s:=s+f[i]*p.fx. od.z). f::list.10. Programe MAPLE ¸i rezultate s lagrange:=proc(x::list.17. ¸ ¸ 94 . Si ˆ acest caz este valabilˇ observatia cˇ.x[nops(x)]).2.p. if evalb(type(xx. 1 + z2 Observatia 4. od. RETURN(simplify(s)).26]:lagrange(x.5. n p=1 pentru j = 1.2.5]:fx:=[2.%2]‘. polinomul ¸ ¸ ın a ¸ a ın ın de interpolare nu dˇ rezultate corecte pentru valori ale parametrului z situate ˆ afara a intervalului care contine argumentele functiei.j. ˆ general.2.2.i. xx) local n.1. for j from 1 to n do if i<>j then p:=p*(xx-x[j])/(x[i]-x[j]) fi.

3 4. i = 0. xn ] (de exemplu.2. ¸i lista valorilor sale. n.2 (x − xi )2 . (4. s Deoarece interpolarea polinomialˇ globalˇ pe tot intervalul [x1 . xn ] definim un alt polinom de interpolare.18) (4. respectiv cel mai mare dintre nodurile de ina a s terpolare. . Din punct de vedere a a s ¸ al calculului numeric.. i = 0. xi ] a ¸ unde coeficientii sik se determinˇ din conditiile: ¸ S(xi ) = yi . n − 1.. dacˇ se considerˇ aceea¸i retea de noduri. Functia spline polinomialˇ de ordinul al doilea are expresia ¸ a S(x) = Si (x) = si. la care pe fiecare subdiviziune a a ¸ intervalului [x0 .0 + si. a a ¸ ¸a Necesarul de memorie este acela¸i pentru ambii algoritmi.1 Interpolare spline Breviar teoretic Fie o functie ¸ tabelatˇ.17) Si (xi ) = Si+1 (xi ). i = 1. x ∈ [xi−1 . Polinoamele Newton ¸i Lagrange diferˇ numai prin formˇ. pentru a determina ˆ mod unic ¸ s ¸ ın functia spline polinomialˇ de ordinul al doilea mai avem nevoie de o conditie suplimentarˇ. sunt convenabile urmˇtoarele ¸ a polinoame de interpolare: pentru x apropiat de α este convenabilˇ utilizarea polia nomului Newton cu diferente la dreapta (forward). xn = max]. x ∈ [xi−1 .Observatia 4.3. n − 2..19) Deoarece avem 3n coeficienti ¸i 3n − 1 conditii.1 (x − xi ). [x1 = min. polia a noamele de interpolare Newton ¸i Lagrange) nu converge ˆ s ıntotdeauna. pentru x apropiat de β este ¸ convenabilˇ utilizarea polinomului Newton cu diferente la stˆnga (backward).16) (4. (4. ′ Si′ (xi ) = Si+1 (xi ). atunci din punct de vedere computational. a ¸ a 4. Dacˇ notˇm cu α ¸i β cel mai mic. f2 . s 2. [f1 .1 (x − xi ) + si. a datˇ a prin lista ordonatˇ a a variabilelor. i = 1. Aspecte practice ale interpolˇrii polinomiale: ¸ a 1. fn ]. ¸ a ¸ a Aceastˇ conditie suplimentarˇ se referˇ la prima derivatˇ. este preferatˇ folosirea polinomului Newton deoarece acesta a necesitˇ un numˇr de operatii aritmetice mai mic fatˇ de polinomul Lagrange.3.. xi ] unde coeficientii sik se determinˇ din conditiile: ¸ a ¸ S(xi ) = yi . restul este acela¸i ˆ s a a s ın ambele cazuri.. Si (xi ) = Si+1 (xi ). n. apare ideea de interpolare polinomialˇ pe portiuni (interpolare spline). . i = 1.0 + si. ¸i are urmˇtoarea seminficatie: a ¸ a a a s a ¸ 95 .. Functia spline polinomialˇ de ordinul ˆ ai are expresia ¸ a ıntˆ S(x) = Si (x) = si. n − 1. x2 .

2π]. A. . 3π ] 2 x ∈ [ 3π . se obtin diferite functii spline.3. n − 1. ¸ ¸ ¸ Functia spline polinomialˇ cubicˇ (de ordinul al treilea) are expresia ¸ a a S(x) = Si (x) = si. i = 1.3. ın ¸ a a . deci n = 4 intervale. ′′ Si′′ (xi ) = Si+1 (xi ). doi ¸i ¸ a a a ¸ ıntˆ s trei pentru urmˇtorul set de date (functia sinus): a ¸ 0 π π 3π 2π x 2 2 f (x) 0 1 0 −1 0 Rezolvare Avem 5 puncte. xi ] unde coeficientii sik se determinˇ din conditiile: ¸ a ¸ S(xi ) = yi .libere (sau naturale): ′′ ′′ S1 (x0 ) = Sn−1 (xn−1 ) = 0 (4. n − 1. i = 0. Functia spline de ordinul ˆ ai ¸ ıntˆ Functia cˇutatˇ va avea expresia: ¸ a a   s10 + s11 (x − 0)   s20 + s21 (x − π ) 2 S(x) =  s30 + s31 (x − π)   s40 + s41 (x − 3π ) 2 Notˇm: a   S1   S2  S3   S4 . x ∈ [0.2 Probleme rezolvate Exercitiul 4. se alege a S0 ′ (x0 ) = 0. n.0 + si. (4.1 (x − xi ) + si. Aceste ¸ a ¸ conditii suplimentare pot fi ¸ . . (4. i = 1. . n − 1.23) caz ˆ care vorbim de o functie spline cubicˇ naturalˇ.20) Pentru diferite conditii suplimentare.1. x ∈ [xi−1 . ′ Si′ (xi ) = Si+1 (xi ).21) Deoarece avem 4n coeficienti ¸i 4n − 2 conditii. ¸ a De regulˇ. (4. 2 = s10 + s11 (x − 0) = s20 + s21 (x − π ) 2 = s30 + s31 (x − π) = s40 + s41 (x − 3π ) 2 96 . π] 2 x ∈ [π.2 (x − xi )2 + si.24) 4. π ] 2 x ∈ [ π .unul din capetele functiei spline de ordinul al doilea trebuie sˇ fie punct de extrem local. Si (xi ) = Si+1 (xi ).3 (x − xi )3 . i = 1. pentru determinarea ˆ mod unic ¸ s ¸ ın a functiei spline polinomiale cubice este nevoie de douˇ conditii suplimentare. Sn−1 (xn−1 ) = yn−1 .”clamped”: ′ ′ ′ ′ S1 (x0 ) = y0 . Sˇ se gˇseascˇ functiile spline de interpolare de ordinul ˆ ai.22) (4.

Conditiile care se pun sunt urmˇtoarele: ¸ a • functia trece prin puncte ¸ S1 (0) = 0 π S2 ( ) = 1 2 S3 (π) = 0 3π S4 ( ) = −1 2 S4 (2π) = 0 • functia este continuˇ ¸ a π π S1 ( ) = S2 ( ) 2 2 S2 (π) = S3 (π) ⇒ s10 = 0 ⇒ s20 = 1 ⇒ s30 = 0 ⇒ s40 = −1 ⇒ s41 = ⇒ s11 = 2 π 2 π

ˆ figura urmˇtoare am reprezentat graficul functiei spline S ˆ raport cu functia In a ¸ ın ¸ initialˇ (sin x): ¸ a

2 π 3π 3π 2 S3 ( ) = S4 ( ) ⇒ s31 = − 2 2 π Cu acestea, dupˇ efectuarea calculelor, functia cˇutatˇ devine: a ¸ a a  2 , x ∈ [0, π ]  πx 2      2   − x + 2 , x ∈ [ π , π]  π 2 S(x) =  2  − x + 2 , x ∈ [π, 3π ]  π  2      2 x−4 , x ∈ [ 3π , 2π]. π 2 ⇒ s21 = −

1 0.5 –1 0 –0.5 –1 1 2 3 x 4 5 6 7

97

Notˇm: a

B. Functia spline de ordinul al doilea ¸ Functia cˇutatˇ va avea expresia: ¸ a a   s10 + s11 (x − 0) + s12 (x − 0)2   s20 + s21 (x − π ) + s22 (x − π )2 2 2 S(x) =  s30 + s31 (x − π) + s32 (x − π)2   s40 + s41 (x − 3π ) + s42 (x − 3π )2 2 2   S1   S2  S3   S4

, , , ,

x ∈ [0, π ] 2 x ∈ [ π , π] 2 x ∈ [π, 3π ] 2 x ∈ [ 3π , 2π]. 2

Conditiile care se pun sunt urmˇtoarele: ¸ a • functia trece prin puncte ¸ S1 (0) = 0 π S2 ( ) = 1 2 S3 (π) = 0 3π S4 ( ) = −1 2 S4 (2π) = 0 • functia este continuˇ ¸ a π π S1 ( ) = S2 ( ) 2 2 S2 (π) = S3 (π) 3π 3π S3 ( ) = S4 ( ) 2 2 • derivata este continuˇ a π π S1 ′ ( ) = S2 ′ ( ) 2 2 ′ ′ S2 (π) = S3 (π) 3π 3π S3 ′ ( ) = S4 ′ ( ) 2 2 • conditie suplimentarˇ ¸ a ′ S1 (0) = 0

= s10 + s11 (x − 0) + s12 (x − 0)2 = s20 + s21 (x − π ) + s22 (x − π )2 2 2 = s30 + s31 (x − π) + s32 (x − π)2 = s40 + s41 (x − 3π ) + s42 (x − 3π )2 2 2

⇒ s10 = 0 ⇒ s20 = 1 ⇒ s30 = 0 ⇒ s40 = −1

⇒ s11 = 0

ˆ Inlocuind valorile cunoscute ˆ celelalte ecuatii, obtinem urmˇtorul sistem liniar ın ¸ ¸ a   −1 + s41 π + s42 ( π )2 = 0 2 2    s21 π + s22 ( π )2 = −1  2 2    s31 π + s32 ( π )2 = −1  2 2 2s12 π − s21 = 0 2   s12 ( π )2 = 1   2   s21 + 2s22 π − s31 = 0   2  s31 + 2s32 π − s41 = 0 2 98

cu solutia ¸ s12 = 12 12 4 4 8 4 4 , s22 = − 2 s32 = 2 , s42 = − 2 , s21 = , s31 = − , s41 = . π2 π π π π π π

ˆ acest fel, am determinat functia spline polinomialˇ de ordinul al doilea care aproIn ¸ a ximeazˇ functia sinus pe intervalul [0, 2π]: a ¸  , x ∈ [0, π ]  π42 x2 2      12 2 16   − 2 x + x − 4 , x ∈ [ π , π]  π π 2 S(x) =  12 2 32  2 x − x + 20 , x ∈ [π, 3π ]  π π 2       − π42 x2 + 16 x − 16 , x ∈ [ 3π , 2π]. π 2

ˆ figura urmˇtoare am reprezentat graficul functiei spline S ˆ raport cu functia In a ¸ ın ¸ initialˇ (sin x): ¸ a

1 0.5 –1 0 –0.5 –1 1 2 3 x 4 5 6 7

Notˇm: a

C. Functia spline cubicˇ ¸ a Functia cˇutatˇ va avea expresia: ¸ a a   s10 + s11 (x − 0) + s12 (x − 0)2 + s13 (x − 0)3   s20 + s21 (x − π ) + s22 (x − π )2 + s23 (x − π )3 2 2 2 S(x) =  s30 + s31 (x − π) + s32 (x − π)2 + s33 (x − π)3   s40 + s41 (x − 3π ) + s42 (x − 3π )2 + s43 (x − 3π )3 2 2 2   S1   S2 S(x) =  S3   S4

, , , ,

x ∈ [0, π ] 2 x ∈ [ π , π] 2 x ∈ [π, 3π ] 2 x ∈ [ 3π , 2π]. 2

= s10 + s11 (x − 0) + s12 (x − 0)2 + s13 (x − 0)3 = s20 + s21 (x − π ) + s22 (x − π )2 + s23 (x − π )3 2 2 2 = s30 + s31 (x − π) + s32 (x − π)2 + s33 (x − π)3 = s40 + s41 (x − 3π ) + s42 (x − 3π )2 + s43 (x − 3π )3 2 2 2 99

dupˇ efectuarea simplificˇrilor.Conditiile care se pun sunt urmˇtoarele: ¸ a • functia trece prin puncte ¸ S1 (0) = 0 π S2 ( ) = 1 2 S3 (π) = 0 3π S4 ( ) = −1 2 S4 (2π) = 0 • functia este continuˇ ¸ a π π S1 ( ) = S2 ( ) 2 2 S2 (π) = S3 (π) 3π 3π S3 ( ) = S4 ( ) 2 2 • derivata este continuˇ a π π S1 ′ ( ) = S2 ′ ( ) 2 2 ′ ′ S2 (π) = S3 (π) 3π 3π S3 ′ ( ) = S4 ′ ( ) 2 2 • derivata a doua este continuˇ a π π S1 ′′ ( ) = S2 ′′ ( ) 2 2 S2 ′′ (π) = S3 ′′ (π) 3π 3π S3 ′′ ( ) = S4 ′′ ( ) 2 2 • conditii suplimentare ¸ ′′ S1 (0) = 0 S4 ′′ (2π) = 0 Solutia acestui sistem va fi: ¸ s10 = 0 s20 = 1 s11 = 3 π s12 = 0 s22 = − 3 π 6 π2 s13 = s23 4 π3 4 = 3 π 4 π3 s21 = 0 s30 = 0 s40 = −1 s31 = − s41 = 0 s32 = 0 s42 = 6 π2 s13 = s13 = − 4 π3 de unde. rezultˇ cˇ expresia functiei spline cubice naturale a a a a ¸ 100 .

3.5 –4 –2 0 2 4 z 6 8 10 –0. a ın ¸ ¸ Date de intrare lista argumentelor functiei. Sˇ se gˇseascˇ functia spline de ordinul ˆ ai si functia spline cubicˇ ¸ a a a ¸ ıntˆ ¸ a naturalˇ pentru urmˇtoarele seturi de date: a a x −1 0 1 2 a) f (x) 2 1 0 −1 π x 2 π 3π 2π 2 b) f (x) 1 0 −1 0 1 4.3 Probleme propuse Exercitiul 4. 2 Redˇm ˆ figura urmˇtoare graficul functiei spline cubice S ˆ raport cu functia initialˇ a ın a ¸ ın ¸ ¸ a (sin x): 2 1. 3π ] 2 . lista valorilor functiei. atunci returneazˇ valoarea functiei spline ˆ acel s a a a ¸ ın numˇr. Algoritmi Prezentˇm ˆ continuare algoritmul pentru obtinerea functiei spline cubice naturale. x. si variabila ¸ ¸ z Date de ie¸ire dacˇ z este numˇr.5 –1 4.3. a a a ¸ 101 . f . dacˇ z este simbol.3. x ∈ [ π . atunci returneazˇ expresiile pe subintervale ale functiei spline. x ∈ [π. x ∈ [ 3π . 2π]. x ∈ [0.care interpoleazˇ setul de date initial este: a ¸  2 2  − x(−3π + 4x )    π3   (−π 3 − 12πx2 + 9xπ 2 + 4x3 )    π3 S(x) =  (x − π)(π 2 + 4x2 − 8xπ)     π3   (−26π 3 − 24πx2 + 45xπ 2 + 4x3 )   − π3 .4 Implementare A. π] 2 .2. π ] 2 .5 1 0.

n − 1 hi = xi+1 − xi pentru i = 1.i.matrice pˇtraticˇ de ordinul n − 2.c. f::list. n-2. n − 1 si0 = fi fi+1 − fi 2hi ci + hi ci+1 − si1 = hi 6 ci si2 = 2 ci+1 − ci si3 = 6hi B. A:=matrix(n-2. for i from 1 to n-1 do h[i]:=x[i+1]-x[i]. for i from 1 to n-2 do A[i.h.i = hi pentru i = 1.i]:=2*(h[i]+h[i+1]).dd. b:=vector(n-2).i−1 = hi Ai−1. n − 2 Ai.i-1]:=h[i]. n − 2 Ai. n − 2 fi+2 − f i + 1 fi+1 − fi bi = 6 − hi+1 hi c1 = 0 cn = 0 pentru i = 2. 0). A .vector cu n − 2 a a a linii pentru i = 1.aa. A[i-1. od. od.i = 2(hi + hi+1 ) pentru i = 2. od. xx) local n.cc. 102 . for i from 1 to n-2 do b[i]:=6*( (f[i+2]-f[i+1])/h[i+1] .i]:=h[i]. Programe MAPLE ¸i rezultate s Programul Maple pentru determinarea functiei spline cubice naturale este urmˇtorul: ¸ a cubicspline:=proc(x::list.Algoritm n = numˇrul de puncte. n − 1 ci = a i − 1-a solutie a sistemului tridiagonal Ac = b ¸ pentru i = 1.(f[i+1]-f[i])/h[i] ). for i from 2 to n-2 do A[i. b. A. b . od.bb. n:=nops(x).

x. while evalb(evalf(x[i])<=evalf(xx) and i<n) do i:=i+1. fi.Pi.x[i+1]).3).%2]‘.x[i]. RETURN(seq(simplify(f[i]+bb[i]*(xx-x[i])+cc[i]*(xx-x[i])^2+ dd[i]*(xx-x[i])^3).n-2). end: Testˇm aceastˇ procedurˇ pe exemplul rezolvat anterior. f).0]: x1:=cubicspline(x.fx.0]. dd[i]:=(c[i+1]-c[i])/(6*h[i]). i=1. xx. a a a x:=[0.. aa[i].xx. x2:=cubicspline(x. fi.Pi/2. od. else i:=1. pentru %a in intervalul [%a.x[i]. c:=[0. else i:=i-1.2*Pi] 103 . od. Warning. cc[i]:=c[i]/2. if type(xx. cubicspline(x.x[n]) fi. rezultatele interpolarii nu sunt exacte decat pentru x in intervalul [0. bb[i]:=(f[i+1]-f[i])/h[i]-(2*c[i]*h[i]+c[i+1]*h[i])/6. for i from 1 to n-1 do aa[i]:=f[i].fx.seq(c[i]. RETURN(aa[i]+bb[i]*(xx-x[i])+cc[i]*(xx-x[i])^2+dd[i]*(xx-x[i])^3).10).c:=linsolve(A.z). od.x[i]. x[1].xx.fx.%a] \n‘. if i>=n then RETURN(aa[n-1]+bb[n-1]*(xx-x[n-1])+cc[n-1]*(xx-x[n-1])^2+ dd[n-1]*(xx-x[n-1])^3). fi. fi. for i from 1 to n-1 do printf(‘ %a+%a*(%a-%a)+%a*(%a-%a)^2+%a*(%a-%a)^3 .xx.1.numeric) then if evalb(evalf(xx)<evalf(x[1]) or evalf(xx)>evalf(x[n])) then WARNING(‘rezultatele interpolarii nu sunt exacte decat pentru x in intervalul [%1.3*Pi/2.-1. name) then printf(‘Functia spline cubice care interpoleaza datele x=%a si f(x)=%a este\n‘.cc[i].dd[i]. if type(xx.i=1.0.x[i]..n-1)).bb[i].b). if (evalf(xx)<evalf(x[1])) then RETURN(aa[1]+bb[1]*(xx-x[1])+cc[1]*(xx-x[1])^2+dd[1]*(xx-x[1])^3).2*Pi]: fx:=[0.

Pi] 0+-3/Pi*(z-Pi)+0*(z-Pi)^2+4/Pi^3*(z-Pi)^3 . Pi.26) y(t) = i=0 · t (1 − t) i n−i yi . 104 .4.1. Aceasta este datˇ prin ecuatiile parametrice: a ¸ n x(t) = i=0 n i Cn · ti (1 − t)n−i xi . 0).− π3 π3 − 4. 0] este 0+3/Pi*(z-0)+0*(z-0)^2+-4/Pi^3*(z-0)^3 .2*Pi] z (−3 π 2 + 4 z 2 ) −π 3 − 12 π z 2 + 9 z π 2 + 4 z 3 . 1]. 4. Gˇsiti curba Bezier determinatˇ de punctele P1 (0. 1/2*Pi. 1). pentru z in intervalul [3/2*Pi.4. i = 0. t ∈ [0. P2 (1. x ∈ [0. π3 π3 (z − π) (π 2 + 4 z 2 − 8 z π) −26 π 3 − 24 π z 2 + 45 z π 2 + 4 z 3 . yi). 0. 4). P5 (2. P3 (2. . 1. 2).25) (Bm f )(x) = Cm · xk · (1 − x)m−k · f m k=0 Cu ajutorul polinoamelor Bernstein se poate construi curba Bezier asociatˇ punctelor a Pi (xi . pentru z in intervalul [Pi.2 Probleme rezolvate Exercitiul 4. -1.4. (4. i Cn (4.3/2*Pi] -1+0*(z-3/2*Pi)+6/Pi^2*(z-3/2*Pi)^2+-4/Pi^3*(z-3/2*Pi)^3 . 2). pentru z in intervalul [1/2*Pi. n.1 Polinoame Bernstein Breviar teoretic Polinomul Bernstein de grad m de aproximare a functiei f pe intervalul [0. 3/2*Pi.1/2*Pi] 1+0*(z-1/2*Pi)+-6/Pi^2*(z-1/2*Pi)^2+4/Pi^3*(z-1/2*Pi)^3 . pentru z in intervalul [0.x1 := −1 + 6 10 − π2 6 3− 3π 2 π 2 2 2 x2 := 1 + π2 π3 π 4 3− 2 + π3 − 4 10 − 3π 2 3 3 Functia spline cubice care interpoleaza datele x=[0. 1] este dat de ¸ relatia: ¸ m k k . 1]. 2*Pi] si f(x)=[0.4 4. ¸ a ¸ a P4 (3.

4. Sˇ se scrie ecuatia curbei Bezier determinatˇ de punctele (1. 8t(1 − t)3 + 6t2 (1 − t)2 + 8t3 (1 − t) + 4t4 105 .[1.1]. n a ın Date de ie¸ire ecuatiile parametrice ale curbei Bezier determinatˇ de aceste puncte s ¸ a Algoritm pentru i = 0. a a a pct:=[[0. Algoritmi Date de intrare o listˇ de puncte ˆ plan.4]].4. 0). Programe MAPLE ¸i rezultate s Testˇm aceastˇ procedurˇ pe exemplul rezolvat anterior.[2.symbol=circle): p2:=plot([bezier(pct)[1].bezier(pct)[2]. n i x = x + Cn · ti (1 − t)n−i xi+1 i y = y + Cn · ti (1 − t)n−i yi+1 B. (0. 0). i = 1. (2. 1). ¸ a ¸ a (2. 2). (2. 1). 2).Rezolvare Ecuatiile parametrice ale curbei Bezier sunt date de: ¸ 5 x(t) = i=0 i 0 1 Cn · ti (1 − t)n−i xi = C4 t0 (1 − t)4 · 0 + C4 t1 (1 − t)3 · 1+ 2 3 4 + C4 t2 (1 − t)2 · 2 + C4 t3 (1 − t)1 · 3 + C4 t4 (1 − t)0 · 2 = =4t(1 − t)3 + 12t2 (1 − t)2 + 12t3 (1 − t) + 2t4 5 y(t) = i=0 i 0 1 Cn · ti (1 − t)n−i xi = C4 t0 (1 − t)4 · 0 + C4 t1 (1 − t)3 · 2+ 2 3 4 + C4 t2 (1 − t)2 · 1 + C4 t3 (1 − t)1 · 2 + C4 t4 (1 − t)0 · 4 = =8t(1 − t)3 + 6t2 (1 − t)2 + 8t3 (1 − t) + 4t4 4. bezier(pct).4. with(plots): p1:=pointplot(pct. 4t(1 − t)3 + 12t2 (1 − t)2 + 12t3 (1 − t) + 2t4 . (3. t=0.2]. Sˇ se scrie ecuatia curbei Bezier determinatˇ de punctele (0. 1).4 Implementare A. Exercitiul 4.2]. ¸ a ¸ a (1. yi ). 0). p2).[3.1].2.4. Pi (xi . 2). 4. thickness=2): display(p1.. (0.[2.3.0].3 Probleme propuse Exercitiul 4.

4 3 2 1 0 0.5 1 1.5 3 106 .5 2 2.

ξ ∈ (x − h. x + h) h2 12 (5. functia f este datˇ tabelat). ξ ∈ (x.4) .Capitolul 5 Derivare numericˇ a Necesitatea derivˇrii numerice apare ˆ practicˇ ˆ urmˇtoarele douˇ situatii: a ın a ın a a ¸ a) expresia analiticˇ a functiei date f conduce la o derivare formalˇ dificilˇ.2) Aproximarea derivatei a doua: a) cu diferente finite la dreapta: ¸ f ′′ (x) = f (x + h) − 2f (x) + f (x − h) h2 (4) − f (ξ). a ¸ b) expresia analiticˇ a functiei f nu este cunoscutˇ (i. x) h 2 ′ ′′ (5. ξ ∈ (x − h.1 Aproximarea derivatei prin diferente finite ¸ Breviar teoretic Aproximarea derivatei ˆ ai: ıntˆ a) cu diferente finite la dreapta: ¸ f (x + h) − f (x) f (ξ) f (x) = − h. ξ ∈ (x − 2h. caz ˆ care a ¸ a a ın derivata se aproximeazˇ prin diferente finite.e.1. a ¸ a ¸ a caz ˆ care derivata se aproximeazˇ prin derivata unui polinom de interpolare ın a 5.1 5. x + h) h 2 ′ ′′ (5. x) h2 12 107 (5.3) b) cu diferente finite la stˆnga: ¸ a f ′′ (x) = f (x) − 2f (x − h) + f (x − 2h) h2 (4) + f (ξ).1) b) cu diferente finite la stˆnga: ¸ a f (x) − f (x − h) f (ξ) f (x) = + h.

1.2 Probleme rezolvate Exercitiul 5.1) − f (2) f ′ (2) = = 7. ˆ punctul x0 = 2. 0. a a Pentru a exemplifica acest lucru. folosind varianta clasicˇ cu formula de derivare calculˇm a a valoarea derivatei ˆ punctul x0 = 2 .4 Implementare A. s s Se observˇ cˇ.5. respectiv la stˆnga.01) = 6. f (x) = x2 + 3x + 2 ¸ a a a a ¸ cu diferente finite la stˆnga ¸i la dreapta.1 0. avem: f (2 + 0.2. ¸ a s ın Rezolvare Precizia cu care este returnatˇ valoarea derivatei este legatˇ de valoarea pasului h. punctul x0 ˆ care dorim sˇ calculˇm ¸ ın a a derivata (respectiv a doua derivatˇ) ¸i precizia h cu care dorim sˇ calculˇm aceastˇ a s a a a derivatˇ.01 ¸i a¸a mai departe.1 iar pentru h = 0.1. ¸i apoi o comparˇm cu diversele valori obtinute ın s a ¸ pentru diferite valori ale lui h. rezultatele numerice obtinute diferˇ de rezultatul exact cu ±h. 0. folosind formula de derivare avem: f ′ (x) = 2x + 3 de unde rezultˇ cˇ f ′ (2) = 7.01) − f (2) = 7. avem f ′ (2) = respectiv f ′ (2) = f (2) − f (2 − 0. respectiv valoarea lui f (x0 ) calculatˇ cu diferente finite la dreapta a a ¸ 108 .99.1. a Date de ie¸ire valoarea f ′ (x0 ) calculatˇ cu diferente finite la dreapta (respectiv la s a ¸ ′′ stˆnga).3 Probleme propuse Exercitiul 5. ın Comparati cu valorile exacte. a a ¸ a 5.1. a a Folosind aproximarea derivatei ˆ ai cu diferente finite la dreapta. Sˇ se calculeze prima ¸i a doua derivatˇ folosind diferente finite la ¸ a s a ¸ stˆnga. ¸i apoi la dreapta pentru urmˇtoarele functii: a s a ¸ 3 a) f (x) = x + 2 ˆ punctul x0 = 2 cu eroarea h = 0.1.1. ıntˆ ¸ a pentru h = 0. Algoritmi Date de intrare expresia unei functii.01. f .9.1. Astfel. ¸ 5. Sˇ se gˇseascˇ prima derivatˇ a functiei f : R → R.01.01 f (2 + 0.1 respectiv f (2) − f (2 − 0.1) f ′ (2) = = 6.01 0.1 ın b) f (x) = sin x ˆ punctul x0 = π cu eroarea h = 0.

x + 10. derivdr(sin(x).Algoritm a) derivata ˆ ai cu diferente finite la dreapta: ıntˆ ¸ f (x + h) − f (x) h b) derivata ˆ ai cu diferente finite la stˆnga: ıntˆ ¸ a f ′ (x) = f (x) − f (x − h) h c) derivata a doua cu diferente finite la dreapta: ¸ f ′ (x) = f ′′ (x) = f (x + h) − 2f (x) + f (x − h) h2 B.x. 7. Programe MAPLE ¸i rezultate s Toate cele trei variante de program iau ca argument o expresie algebricˇ. derivata functiei se mai poate obtine prin derivarea unui polinom de interpolare ¸ ¸ ¸ (Newton sau Lagrange).0.100000000 6.2.0.01).2.00001).1 Aproximarea derivatei prin derivata unei functii ¸ de interpolare Breviar teoretic ˆ cazul ˆ care expresia analiticˇ a functiei f nu este cunoscutˇ (functia f este datˇ In ın a ¸ a ¸ a tabelat).0.2.0.0. o variabilˇ a a x (care poate sˇ fie un numˇr. derivst(x^2+3*x+2. derivst(x^2+3*x+2.2 5. f .01). sau un simbol) ¸i o eroare. a a s Testˇm aceste programe astfel: a derivdr(x^2+3*x+2. 6. ¸ 109 .010000000 6. derivdr(x^2+3*x+2. 0. 6.2. Derivata acestui polinom de interpolare se poate obtine fie formal.900000000 7.9999998333 5.00001). fie folosind diferente finite (vezi paragraful anterior).01).0.1).001). derivdr(x^2+3*x+2.0.2. h.990000000 7. derivdoi(x^3+5*x^2+1.0.2.2. derivst(x^2+3*x+2.1).0.

443980000. ın Aceastˇ valoare se poate obtine ¸i dacˇ folosim derivata cu diferente finite la dreapta a ¸ s a ¸ a functiei f . Calculati derivata ˆ ai a functiei ¸ ¸ ıntˆ ¸ x −1 0 1 2 f (x) 2 1 0 −1 ˆ punctul x0 = 0.2.3 Probleme propuse Exercitiul 5. de exemplu cu o eroare de 0.01) − f (2.2.5 este −4. Rezolvare Cu ajutorul polinomului de interpolare Lagrange.2. 3 2 3 2 Derivata sa formalˇ este: a 8 51 224 129 f ′ (z) = − z 3 + z 2 − z+ .3. obtinem o valoare aproximativˇ ¸ a pentru functia f : ¸ 2 17 112 2 129 f (z) = − z 4 + z 3 − z + z − 34. Calculati derivata ˆ ai a functiei ¸ ¸ ıntˆ ¸ x π π 3π 2π 2 2 f (x) 1 0 −1 0 1 ˆ punctul x0 = π folosind derivata polinomului de interpolare al lui Newton cu diferente ın ¸ divizate.01: ¸ f ′ (2.5) = f (2.5 folosind derivata polinomului de interpolare Lagrange. Se dˇ functia tabelatˇ ¸ a ¸ a x 1 2 3 4 5 f (x) 1 3 −1 0 1 a) folosind un polinom de interpolare. 110 . sˇ se gˇseascˇ derivata ˆ ai a functiei f ˆ a a a ıntˆ ¸ ın punctul x0 = 2.1.2. 0. sˇ se gˇseasca functia f precum ¸i derivata a a ¸ s acesteia b) folosind un polinom de interpolare.2 Probleme rezolvate Exercitiul 5.01 5.2.5 + 0.45833340.5) = −4.2.5.5. 3 2 3 2 iar valoarea derivatei ˆ punctul x0 = 2. ın Exercitiul 5.

4. # derivata a treia −16 z + 51 111 .-1.0.2.2. > > > > > x:=[1.1 sau 4.z).2.3. # polinomul de interpolare 2 17 3 112 2 129 f := − z 4 + z − z + z − 34 3 2 3 2 diff(f. Programe MAPLE ¸i rezultate s Exemplificˇm aplicarea acestei metode pentru functia tabelatˇ a ¸ a x 1 2 3 4 5 f (x) 1 3 −1 0 1 folosind polinomul de interpolare Lagrange.fx.3.z$2).5. B.z). # derivata a doua 224 −8 z 2 + 51 z − 3 diff(f. 4.4 Implementare A.z$3). Derivata functiei de interpolare se obtine ˆ ¸ ın ¸ ¸ ¸ ın Maple folosind procedura diff. # prima derivata 51 2 224 129 8 z − z+ − z3 + 3 2 3 2 diff(f.1]: # functia tabelata f:=lagrange(x. Algoritmi Functia de interpolare a functiei tabelate f se obtine folosind unul din algoritmii ¸ ¸ ¸ prezentati ˆ sectiunile 4.5]: fx:=[1.3.

2) Formula lui Simpson (pentru care N = 2): b a f (x)dx ≈ h · [f (a) + 4f (a + h) + f (b)].1. rezultˇ cˇ formulele de integrare de tip ¸ a a Newton-Cotes sunt exacte pentru functii polinomiale de grad maxim 2N − 1. i=1 (6.1. 3 (6.1.3) Observatia 6. h = .2 Probleme rezolvate 1 Exercitiul 6. Sˇ se calculeze ¸ a x3 + 1 dx 0 folosind: 112 . N 6. b] → R o functie integrabilˇ Riemann-Darboux ¸i nodurile echidistante xi = ¸ a s b−a a + ih ale intervalului [a. 2 2 (6.Capitolul 6 Integrare numericˇ a Fie f : [a. b]. Din teorema de medie. i = 0. N.1.1.1 6. ¸ 6.1) Formula generalˇ a trapezelor (formula trapezelor aplicatˇ pe n subintervale ale a a intervalului dat): b a h f (x)dx ≈ · f (a) + 2 · 2 n−1 f (xi ) + f (b) .1.1 Formule de tip Newton-Cotes Breviar teoretic b a Formula trapezelor (pentru care N = 1): f (x)dx ≈ b−a h · [f (b) + f (a)] = · [f (b) + f (a)].

4 2 4 4 16 Pentru n = 4 subintervale.25. 4 4 Deoarece functia consideratˇ este o functie polinomialˇ de gradul 3. 2 2 2 ın s a a Dacˇ ˆ artim intervalul [0. 8 64 8 64 64 Pentru n = 8 subintervale avem: 1 0 1 x + 1 dx = [f (0) + 2 16 3 7 i=1 i 1 321 321 f (0 + ) + f (1)] = · = = 1.5.3125. a ¸ a Folosind formula trapezelor. obtinem: ¸ 1 x3 + 1 dx = 0 1 3 1−0 [f (0) + f (1)] = (1 + 2) = = 1. obtinem: ¸ 1 x3 + 1 dx = 0 1−0 2 1 1 15 15 (f (0) + 4f ( ) + f (1)) = · = = 1. 3 2 6 2 12 113 . a a b) formula trapezelor. a ımpˇ ¸ ın d) formula lui Simpson.25) obtinut prin metoda formalˇ. 1] ˆ 2 subintervale ¸i aplicˇm formula generalˇ a trapezelor a ımpˇ ¸ avem: 1 0 1 1 1 9 21 x3 + 1 dx = [f (0) + 2f ( ) + f (1)] = (1 + + 2) = = 1. 8 16 16 256 Folosind formula lui Simpson.25390625. avem: 1 0 1 x + 1 dx = [f (0) + 2 8 3 3 i=1 i f (0 + ) + f (1)] = 4 1 65 9 91 81 = (1 + 2 + 2 + 2 + 2) = = 1. este: ¸ a 1 0 x4 x + 1 dx = 4 3 1 + x|1 = 0 0 1 5 + 1 = = 1.25.265625. 4. Rezolvare Rezultatul exact. dar formula lui Simpson (pentru care a N = 2) este exactˇ. obtinut prin metoda formalˇ. Aceasta se poate remarca ¸i din comparatia rezultatelor obtinute cu a s ¸ ¸ rezultatul exact (adicˇ 1. rezultˇ cˇ formula ¸ a ¸ a a a trapezelor (pentru care N = 1) nu este exactˇ. 8 subintervale. c) formula generalˇ a trapezelor ˆ artind intervalul [0.a) metoda clasicˇ (formalˇ). 1] ˆ 2.

b. xx.4 Implementare A. end: simpson:=proc(f::algebraic. a:=lhs(ab). h. Algoritmi Algoritmii folositi pentru integrarea numericˇ se bazeazˇ pe formulele de integrare ¸ a a prezentate anterior.2. a. h:=(b-a)/N. evalf( (b-a)/6*( subs(xx=a.N::numeric) local i. b:=rhs(ab). i=1.f). ab::range. b.f) + subs(xx=b. a:=lhs(ab). 0 114 .1. name)).f) ) ). xx.. Sˇ se calculeze integralele urmˇtoare folosind formula generalˇ a ¸ a a a trapezelor pentru n = 4 subintervale ¸i formula lui Simpson: s 8 a) 0 1 x3 + 1 dx cos πx dx 0 2 b) c) −2 3x2 + 1 dx Comparati rezultatul obtinut cu solutia exactˇ. a. Programe MAPLE ¸i rezultate s trapeze:=proc(f::algebraic.6. b:=rhs(ab).1.f) + 4*subs(xx=a+(b-a)/2. xx:=op(indets(f. f) + 2*sum(subs(xx=a+i*h. xx:=op(indets(f.3 Probleme propuse Exercitiul 6.N-1) + subs(xx=b. end: Exemplificˇm ˆ continuare calculul integralei a ın 1 sin x + 1 dx. name)).1. evalf( h/2*( subs(xx=a. ab::range) local i. ¸ ¸ ¸ a 6. B.f) ) ).

>

f:=x->sin(x)+1; evalf(int(f(x),x=0..1)); trapeze(f(x),0,1,1); 1.420735492 trapeze(f(x),0,1,2); 1.450080515 trapeze(f(x),0,1,4); 1.457300938 trapeze(f(x),0,1,8); 1.459098974 simpson(f(x),0,1); 1.459862190 f := x → sin(x) + 1 1.459697694

>

>

>

>

>

>

6.2
6.2.1

Formule de tip Gauss
Breviar teoretic

Formula de integrare numericˇ de tip Gauss pentru douˇ puncte (N = 2): a a √ √ 1 3 3 f (x)dx ≈ f − +f . 3 3 −1 Formula de integrare numericˇ de tip Gauss pentru trei puncte (N = 3): a √ √ 1 5 15 8 5 15 f (x)dx ≈ f − + f (0) + f . 9 5 9 9 5 −1 Formula de integrare numericˇ de tip Gauss pentru patru puncte (N = 4): a √ √ 1 525 + 70 30 18 − 30 f (x)dx ≈ f − + 36 35 −1 √ √ 18 + 30 525 − 70 30 + f − + 36 35 √ √ 18 + 30 525 − 70 30 + f + 36 35 √ √ 18 − 30 525 + 70 30 + f . 36 35

(6.4)

(6.5)

(6.6)

Deoarece ˆ formulele de integrare numericˇ de tip Gauss limitele de interpolare sunt ın a -1 ¸i 1, ˆ cazul ˆ care dorim sˇ integrˇm o functie definitˇ pe un interval [a, b], facem s ın ın a a ¸ a schimbarea de variabilˇ a (b − a)t + b + a x= (6.7) 2 115

care va transforma intervalul [a, b] al variabilei x ˆ intervalul [0, 1] corespunzˇtor noii ın a variabile t. Astfel, se obtine: ¸
b

f (x)dx =
a

b−a 2

1

f
−1

(b − a)t + a + b dt. 2

(6.8)

Observatia 6.2.1. Spre deosebire de formulele de integrare de tip Newton-Cotes, care ¸ sunt exacte pentru polinoame de grad maxim 2N − 1, formulele de integrare de tip Gauss sunt exacte pentru polinoame de grad maxim 2N + 1.

6.2.2

Probleme rezolvate
1 2

Exercitiul 6.2.1. Sˇ se calculeze ¸ a cuadraturˇ de tip Gauss. a
−1

x2 + 1 dx ¸i s
0

x3 − 1 dx folosind o formulˇ de a

Rezolvare Folosim formula pentru 2 puncte, care dˇ rezultate exacte pentru polinoame pˆnˇ la a a a gradul 5. Avem: √ 2 √ 2 1 8 3 3 2 +1+ +1= x + 1 dx = − 3 3 3 −1
2 0

x − 1 dx =

3

3 − +1 3

3

−1+

3 +1 3

3

− 1 = 2.

6.2.3
8

Probleme propuse

Exercitiul 6.2.2. Sˇ se calculeze integralele urmˇtoare folosind formula lui Gauss pentru ¸ a a 2, respectiv pentru 3 puncte: a)
0 1

x3 + 1 dx cos πx dx
0 2

b) c)
−2

3x2 + 1 dx

Comparati rezultatul obtinut cu solutia exactˇ ¸i cu rezultatele obtinute ˆ urma ¸ ¸ ¸ a s ¸ ın integrˇrii prin metodele de tip Newton-Cotes. a

6.2.4

Implementare

A. Algoritmi Algoritmii folositi pentru integrarea numericˇ se bazeazˇ pe formulele de integrare ¸ a a prezentate anterior. B. Programe MAPLE ¸i rezultate s Urmˇtorul program MAPLE ia ca argument o functie f , capetele intervalului pe care a ¸ se integreazˇ, a ¸i b, ¸i ordinul n (care poate fi 2, 3 sau 4). a s s 116

gauss:=proc(f::algebraic, ab::range, n::numeric) local xx, a, b g; xx:=op(indets(f, name)); a:=lhs(ab); b:=rhs(ab); g:=subs(xx=(2*yy-a-b)/(b-a), f); if n=2 then evalf( (b-a)/2*(subs(yy=-1/3*sqrt(3),g) + subs(yy=1/3*sqrt(3),g)) ); # secventa de program pentru n=3 si n=4 figureaza pe lista de proiecte else ERROR(‘Ordinul n al formulei de cuadratura trebuie sa fie 2, 3 sau 4!‘) fi; end: Exemplificˇm acest program: a
>

gauss(x^8+1, 0..2,4); 58.87727878 evalf(int(x^8+1, x=0..2)); 58.88888889 f:=x->sin(x)+1; gauss(f(x),0..1,2); gauss(f(x),0..1,3); 0.6159146322 gauss(f(x),0..1,4); 1.234908772 f := x → sin(x) + 1 0.6598837714

>

>

>

>

>

117

¸ • metode multipas: metoda Adams-Bashforth.1) s a a s h > 0. β). 1. ¸ a s Pentru rezolvarea numericˇ a acestei probleme vom trece ˆ vedere: a ın • metode unipas: metoda diferentelor finite. metoda Adams-Moulton. i = 0. Notˇm cu a = x0 ¸i b = xN = x0 + Nh. y) y(x0 ) = y0 unde f : (α. N − 1 (7. . N − 1 118 (7. δ). N − 1. metoda Runge-Kutta. δ) → R1 este o functie de clasˇ C 1 ¸i x0 ∈ (α. i = 0.1 Metoda diferentelor finite ¸ Breviar teoretic Formula lui Euler cu diferente finite ˆ ¸ ınainte: y(xi+1 ) = y(xi ) + hf (xi . metoda predictorcorector Considerˇm punctele a xi+1 = xi + h = x0 + (i + 1)h . . .2) (7. y0 ∈ (γ. ¸i admitem cˇ xi ∈ (α. 7. metoda lui Taylor.1 7. β) pentru i = 0. β) × (γ.1.Capitolul 7 Ecuatii diferentiale ¸ ¸ Vom prezenta ˆ continuare metode numerice de rezolvare a problemelor cu date initiale ın ¸ pentru ecuatii diferentiale de ordinul ˆ ai. .3) . precum ¸i metode numerice de rezolvare a ¸ ¸ ıntˆ s unor probleme la limitˇ liniare pentru ecuatii diferentiale de ordinul al doilea. y(xi)). a ¸ ¸ Rezolvarea problemelor cu date initiale pentru ecuatii ¸ ¸ diferentiale de ordinul ˆ ai ¸ ıntˆ Fie problema cu date initiale ¸ y′ = f (x.

y(xi+1)).8000000000 x9 = 0. folosind una formulele lui Euler.201000000 y3 = 2.530000000 y6 = 2.5) (7. i = 1. 1].940000000 y9 = 3. i = 0.285000000 Solutia exactˇ a problemei cu date initiale consideratˇ este ¸ a ¸ a y(x) = x3 + x + 2. a a a a (7. obtinem succesiv: s ¸ x1 = 0.414000000 y5 = 2.1000000000 x2 = 0. N − 1 Formula punctului de mijloc: y(xi+1 ) = y(xi−1 ) + 2h · f (xi . pentru h = 0.2 Probleme rezolvate Exercitiul 7. N − 1 unde y(x1 ) trebuie gˇsitˇ cu altˇ metodˇ. Sˇ se rezolve problema cu date initiale ¸ a ¸ y ′ (x) = 1 + x2 y(0) = 2 pe intervalul [0. Aplicˆnd formula (7.104000000 y10 = 3.1.9000000000 x10 = 1 y1 = 2. y(xi)).2000000000 x3 = 0.791000000 y8 = 2.5000000000 x6 = 0.1. Rezolvare Folosim formula lui Euler cu diferente finite ˆ ¸ ınainte.3000000000 x4 = 0.3) pentru a x0 = 0 ¸i y0 = y(0) = 2.655000000 y7 = 2.4000000000 x5 = 0.1.7000000000 x8 = 0.100000000 y2 = 2.1.4) 7.Formula lui Euler cu diferente finite ˆ ¸ ınapoi: y(xi+1 ) = y(xi ) + h · f (xi+1 . 3 Reprezentˇm grafic punctele obtinute folosind metoda lui Euler cu diferente finite a ¸ ¸ ˆ ınainte ¸i graficul solutiei exacte a problemei considerate: s ¸ 119 .305000000 y4 = 2.6000000000 x7 = 0.

Comparati cu rezultatul exact.4 x 0. b] ¸i numˇrul de puncte ˆ care se ˆ s a ın ımparte intervalul. un interval ¸ ¸ s [a. yi) . ımpˇ ¸ ın ¸ 7. Folosind metoda lui Euler cu diferente finite ˆ ¸ ¸ ınainte. y(x)).2.6 2.4 Implementare A. 2] ˆ N = 4.8 2.6 0. folosind metoda lui Euler cu diferente finite ˆ s ¸ ınainte Algoritmul constˇ ˆ urmˇtorii pa¸i: a ın a s 1. sˇ se determine a solutia aproximativˇ a problemei ¸ a y ′(x) = y(x) − x2 + x y(1) = 2 ˆ artind intervalul [1. valorile initiale x0 ¸i y0 . datˇ sub forma s ¸ a ¸ a unui ¸ir de puncte.2 0.3.8 1 7. rez.2 3 2. Algoritmi Date de intrare: o ecuatie y ′(x) = f (x.3 Probleme propuse Exercitiul 7.2 2 0 0. definirea functiei f ¸ 2. yi+1 ) la liste rez a 120 yi+1 = yi + h f (xi .4 2. y0 ) la lista rez a pentru i = 0.1.1. N Date de ie¸ire: solutia aproximativˇ a problemei cu date initiale. aplicarea formulei lui Euler cu diferente finite ˆ ¸ ınainte: adaugˇ elementul (x0 .1. N − 1 xi+1 = xi + h adaugˇ punctul (xi+1 .

1.10). y1:=y0.varx. y0::numeric. x1:=evalf(x1+h).y0]].i.0.0. f := x2 + 1 varx := [x] varx := [x.string). 0. 0] 1 h := 10 rez := [[0. varx:=[op(indets(eq. fi.x)=f(x. rez:=[[x0. od. 0 . for i from 1 to N do y1:=evalf(y1+h*subs(varx[1]=x1.100000000]. [0. RETURN(rez).rez.y1. 2.string). else ERROR (‘ecuatia trebuie sa fie de tipul diff(y(x). name))].B.h..x1.2000000000.."diff") then f:=rhs(eq).1. if nops(varx)=1 then varx:=[op(varx).305000000 {--> enter dfieuler. elif StringTools[Has](convert(rhs(eq).100000000]] y1 := 2. [0. fi.0]. 2."diff") then f:=lhs(eq). 1. x0::numeric.x)=x^2+1. 2. [0. end: debug(dfieuler): dfieuler(diff(f(x).0.201000000]] y1 := 2. 2]] x1 := 0 y1 := 2 y1 := 2. 10 121 . 2.. 2].f)).1000000000 rez := [[0. h:=(rhs(ab)-lhs(ab))/N. if StringTools[Has](convert(lhs(eq). > dfieuler(diff(f(x).2. Programe MAPLE ¸i rezultate s dfieuler:=proc(eq::equation. 2].x) = x^2+1.2000000000 rez := [[0. args = diff(f(x).y1]].varx[2]=y1.1000000000.100000000 x1 := 0.x)=x^2+1.0.10).[x1. ab::range.201000000 x1 := 0. x1:=x0.2.y)‘). rez:=[op(rez).1000000000. N::integer) local f.

2. 2.5000000000. [0.530000000]. [0.414000000]. 2.1000000000.414000000]. 2.4000000000. [0. 2. 2]. 2.530000000].530000000]. 2.6000000000 rez := [[0. [0. [0. 2]. [0.9000000000. 2].3000000000.4000000000.1000000000. 2.3000000000. [0. [0.530000000 x1 := 0. 2.100000000].100000000].305000000].1000000000.3000000000.000000000 122 . [0. [0.6000000000. 2]. [0.5000000000.4000000000. [0. [0. 2. [0. [0.6000000000.2000000000. 2.414000000].100000000]. [0. 2.305000000]] y1 := 2. 2.2000000000. [0. 2. 2.201000000]. [0. 2. 2. [0. [0. 2. 2. 2.305000000].8000000000.655000000].2000000000. [0. 2. [0. 2.305000000].201000000]. 2].791000000 x1 := 0.3000000000. [0.100000000].530000000]] y1 := 2. [0.7000000000.655000000]] y1 := 2.8000000000 rez := [[0.4000000000.3000000000 rez := [[0.414000000]] y1 := 2. [0. 2.9000000000 rez := [[0. 2.3000000000.305000000].305000000]. [0. [0.201000000].791000000].104000000]] y1 := 3.940000000]. 2.4000000000.1000000000. [0. [0. 2.201000000].414000000]. 3. 2. [0.5000000000.5000000000.5000000000 rez := [[0.201000000]. [0. [0.201000000]. [0.305000000]. [0.100000000].940000000]] y1 := 3.3000000000. 2.2000000000.940000000 x1 := 0.4000000000.5000000000.7000000000. [0. 2.655000000]. [0.100000000]. [0. 2. 2.3000000000. 2].530000000].7000000000. [0.655000000 x1 := 0. 2. [0.x1 := 0. 2.6000000000. [0. 2.104000000 x1 := 0.201000000].2000000000.1000000000. 2.8000000000.100000000]. [0.791000000]] y1 := 2.6000000000. 2.7000000000 rez := [[0.655000000]. 2. 2.4000000000 rez := [[0. 2.1000000000.414000000]. 2]. 2.791000000].414000000 x1 := 0.285000000 x1 := 1.1000000000. 2.2000000000.2000000000. [0.

x)=cos(x)/f.f(0)=2}. 2.0. [0.p2).414000000]. 2.f(x)). 5].6 2.000000000.6000000000. pe intervalul [0.8 1.414000000].285000000]] Prezentˇm ˆ continuare aproximarea solutiilor problemei a ın ¸ cos x y ′(x) = y(x) y(0) = 2 √ a cˇrei solutie exactˇ este y(x) = 2 sin x + 4.9000000000. 3.791000000]. 2. 2. > > > > 3.305000000]. [0.5000000000. [.4 2.940000000]. 3.305000000]. [1. 2.N=2.201000000]. 2.940000000].2000000000. [0.3000000000.2.5000000000..3000000000. 2.791000000]..N). 2.0.5. 3.2000000000. 2]. [0.100000000].201000000].x=0.1000000000.1000000000.6 1. [0.100000000]. [0. 2. 2. 2.rez := [[0. 2.6000000000.940000000]. f(x) = 2 sin(x) + 4 p1:=plot([seq(dfieuler(diff(f(x). [.414000000]. color=black. [0. 2. [0. [.2 2 1.4000000000. [0. [0. 2. [.8000000000.9000000000.6000000000.4000000000. [0. 2]. [0. [0. [1. [0. [0.8000000000.104000000].3000000000.9000000000.285000000]] <-.655000000].655000000]. [. 2. 2. [. 2.2 3 2.7000000000. 3. 3.5.000000000. pentru diverse valori a ¸ a ale parametrului N: > dsolve({diff(f(x). 2. [1.104000000]. 2.791000000].655000000]. 2. 2.5000000000.530000000]. 2].000000000. 3. [0.exit dfieuler (now at top level) = [[0.8000000000. [0.4000000000. 2. thickness=2): display(p1.x)=cos(x)/f(x).100000000]. 2. [.7000000000.52.530000000]. [.285000000]]} [[0.530000000].. [.2000000000.4 0 1 2 3 4 5 123 .305000000].8 2.7000000000.104000000].201000000].1000000000.10)] ): p2:=plot((2*sin(x)+4)^(1/2). 2. [0.

yi ) + 2f (xi .2. yi. Yi. obtinem urmˇtoarea formulˇ: ¸ a a Tn (xi . yi.7) (7. pentru h = 0. yi)+ ∂y ∂x ∂y ∂2f + f (xi . yi ) + T2 (xi . . . yi)+ 6 ∂x2 ∂x∂y ∂2f ∂f ∂f 2 + f (xi . iar hn−1 (n−1) h ′ f (xi . yi. y) = 1 + x2 . yi) · (xi . pre¸ supune gˇsirea ¸irului (Yn )n . yi) + iar pentru n = 3 obtinem: ¸ T3 (xi . yi) · 2 (xi . yi ) + 2 ∂x ∂y h2 ∂ 2 f ∂2f + (xi .1). yi) + . + f (xi . . yi ) · 2 (xi .2 Probleme rezolvate Exercitiul 7. h) = f (xi . ∂y (7. yi ).1.2. yi) · f (xi .7. yi) + (xi .8) 7.6) (7. h) =f (xi . yi) . yi) + (xi . . yi ) · f (xi .9) h ∂f ∂f (xi . sˇ se rezolve problema cu ¸ a date initiale urmˇtoare ¸ a y ′ (x) = 1 + x2 y(0) = 2 pe intervalul [0.2.2 7. N − 1. h) = 1 + x2 + Astfel. h) = f (xi .1. Folosind metoda lui Taylor de ordinul 2. yi) + ∂f h ∂f (xi . yi) 2 ∂x ∂y (7. 1]. . 2! n! Pentru n = 1. y. Pentru n = 2. 2 . yi ) + (xi . ¸i deci In s T2 (x. h) pentru i = 0. unde: a s Y0 = y(x0 ) Yi+1 = Yi + h · Tn (xi . metoda lui Taylor devine metoda lui Euler. termenul general are forma: yi+1 = yi + h · (1 + x2 + hxi ) i 124 h · 2x. Rezolvare ˆ cazul nostru. f (x. yi ) · (xi . . 1.1 Metoda lui Taylor Breviar teoretic Metoda lui Taylor de ordinul n pentru rezolvarea problemei cu date initiale (7.

5000000000 x6 = 0. sˇ se gˇseascˇ solutia ¸ s a a a ¸ aproximativˇ a problemei a y ′(x) = −x2 + x + 1 y(1) = 2 ˆ artind intervalul [1.232706000 y3 = 2. un interval s [a.8) sau (7. rez s Algoritmul constˇ ˆ urmˇtorii pa¸i: a ın a s 1. Folosind metoda lui Taylor de ordinul 2 ¸i 3.350316071 y4 = 2.6000000000 x7 = 0. ımpˇ ¸ ın ¸ 7.916529651 y8 = 3. 2] ˆ N = 4. b] ¸i numˇrul de puncte ˆ care se ˆ s a ın ımparte intervalul.3 Probleme propuse Exercitiul 7.000000000 y1 = 2.7000000000 x8 = 0.291630711 y10 = 3.609481021 y6 = 2.475125294 y5 = 2. aplicarea formulei lui Taylor de ordinul 2 sau 3: adaugˇ elementul (x0 . Programe MAPLE ¸i rezultate s 125 yi+1 = yi + h T (xi .4 Implementare A. Comparati cu rezultatul exact.3000000000 x4 = 0.1000000000 x2 = 0.2. h).2000000000 x3 = 0.2.755790277 y7 = 2.4000000000 x5 = 0.2. y(x)). definirea functiei f ¸ 2. N − 1 xi+1 = xi + h adaugˇ punctul (xi+1 . obtinem a s s a ¸ succesiv: x1 = 0. valorile initiale x0 ¸i y0 .Plecˆnd de la x0 = 0 ¸i y0 = y(0) = 2 ¸i aplicˆnd formula lui Taylor de ordinul 2.120000000 y2 = 2.9) . yi+1 ) la liste rez a B.094257797 y9 = 3. datˇ sub forma s ¸ a ¸ a unui ¸ir de puncte. y0 ) la lista rez a pentru i = 0.8000000000 x9 = 0.9000000000 x10 = 1. unde T este dat de (7. Algoritmi Date de intrare: o ecuatie y ′(x) = f (x.511419969 7. yi.2. N Date de ie¸ire: solutia aproximativˇ a problemei cu date initiale.

x).1): p2:=plot(1/3*x^3+x+2. h:=(rhs(ab)-lhs(ab))/N. fy:=diff(f. y1:=y0.x)=f(x. end: with(plots): p1:=plot([taylor2(diff(f(x).ab::range.0. name))]. 126 .y)‘).y). fi.x)=x^2+1. else ERROR (‘ecuatia trebuie sa fie de tipul diff(y(x).color=black. fi.1.varx[2]=y1.2. elif StringTools[Has](convert(rhs(eq). od.2).x)=x^2+1. for i from 1 to N do y1:=evalf( y1+ h*( subs(varx[1]=x1.fy.taylor2:=proc(eq::equation..fx.[x1.f.2..0. x1:=x0.f) ) ) ).p2)..y1]]. if StringTools[Has](convert(lhs(eq).0.varx[2]=y1.y1.fy) * subs(varx[1]=x1.. taylor3(diff(f(x).0. thickness=2): display(p1. x=0. fx:=diff(f.2)]."diff") then f:=lhs(eq).rez.varx.string). varx:=[op(indets(eq. 0. RETURN(rez).f) + h/2*( subs(varx[1]=x1. rez:=[[x1. y0::numeric.0].x1. x0::numeric.1.string).1. N::integer) local h.y1]]."diff") then f:=rhs(eq). x1:=evalf(x1+h). if nops(varx)=1 then varx:=[op(varx).i.varx[2]=y1. rez:=[op(rez).varx[2]=y1.fx) + subs(varx[1]=x1.

x)=x^2+1.5 2 0 0. s ¸ respectiv 3.2 0.1.x)=x^2+1.2 0.2.4 0. N=2.2)]): display(pt2.N).4 0.5 4 3. pentru diferite valori ale parametrului N.0.0.5 3 2.1. N=2.display(pt3.p2).8 1 127 ..5 2 0 0..8 1 ˆ continuare prezentˇm pe acela¸i sistem de coordonate solutia exactˇ a problemei In a s ¸ a rezolvate anterior ¸i aproximarea solutiei cu ajutorul formulei lui Taylor de ordinul 2.2)]): pt3:=plot([seq(taylor3(diff(f(x).2.5 4.N).52.52. pt2:=plot([seq(taylor2(diff(f(x)...0.p2).6 0.5 3 2.6 0. 4 3.0.

Yi + hf (xi .5 2 0 0.6 0.1) ¸ presupune gˇsirea ¸irului (Yn )n care aproximeazˇ solutia problemei date. Pentru n = 3. obtinem ¸ Yi+1 = Yi + cu Y0 = y(x0 ) ¸i s k1 = h · f (xi .12) 1 · (k1 + 4k2 + k3 ) 6 (7.10) h k1 xi + .4 0.3 7.3.8 1 7. Yi + 2 2 k3 = h · f (xi + h.2 0. Yi))] 2 (7.13) .11) h [f (xi .1 Metoda Runge-Kutta Breviar teoretic Metoda Runge-Kutta de ordinul n pentru rezolvarea problemei cu date initiale (7. obtinem: ¸ Yi+1 = Yi + cu Y0 = y(x0 ). obtinem ¸ Yi+1 = Yi + 1 · (k1 + 2k2 + 2k3 + k4 ) 6 128 (7.5 3 2. a s a ¸ Pentru n = 2. Yi) + f (xi+1 . Yi ) k2 = h · f (7.5 4 3. Yi − k1 + 2k2 ) Pentru n = 4.5 4.

14) h k1 xi + . Folosind metoda Runge-Kutta de ordinul 2.3.144500000 y10 = 3. Yi + 2 2 k4 = h · f (xi + h.335000000. 3. Comparati cu solutia exactˇ.1. Yi + 2 2 k2 h k3 = h · f xi + .673000000 y7 = 2.3 Probleme propuse Exercitiul 7.203000000 y3 = 2. Plecˆnd de la x0 = 0 ¸i y0 = y(0) = 2 ¸i aplicˆnd formula (7.1. 1].10) obtinem: a s s a ¸ x1 = 0.309500000 y4 = 2.422000000 y5 = 2.542500000 y6 = 2. folosind una din metodele Runge-Kutta prezentate mai sus. Yi + k3 ) 7.972000000 y9 = 3.8000000000 x9 = 0. pentru h = 0.3. 4.2 Probleme rezolvate Exercitiul 7.000000000 y1 = 2.815500000 y8 = 2.5000000000 x6 = 0.100500000 y2 = 2. Sˇ se rezolve problema cu date initiale urmˇtoare ¸ a ¸ a y ′ (x) = 1 + x2 y(0) = 2 pe intervalul [0.3000000000 x4 = 0.6000000000 x7 = 0. 2] ˆ N = 4.1000000000 x2 = 0.cu Y0 = y(x0 ) ¸i s k1 = h · f (xi . ımpˇ ¸ ın ¸ ¸ a 129 .7000000000 x8 = 0.2000000000 x3 = 0.4000000000 x5 = 0.2. 7.9000000000 x10 = 1.3. Yi ) k2 = h · f (7. sˇ se gˇseascˇ solutia ¸ a a a ¸ aproximativˇ a problemei a y ′(x) = x + 1 y(1) = 2 ˆ artind intervalul [1. Rezolvare Folosim metoda Runge-Kutta de ordinul 2.3.

x1. un interval ¸ ¸ s [a. definirea functiei f ¸ 2. y0 ) la lista rez a pentru i = 0.y1.7. yi) + f (xi+1 . datˇ sub forma s ¸ a ¸ a unui ¸ir de puncte. Programe MAPLE ¸i rezultate s rungekutta2:=proc(eq::equation. ab::range.4 Implementare A.string).12) a ¸ 1 yi+1 = yi + · (k1 + 4k2 + k3 ) 6 adaugˇ punctul (xi+1 .3. elif StringTools[Has](convert(rhs(eq). yi + hf (xi . b] ¸i numˇrul de puncte ˆ care se ˆ s a ın ımparte intervalul. N − 1 h yi+1 = yi + [f (xi .string).i. y0::numeric. a) metoda Runge-Kutta de ordinul 2: adaugˇ elementul (x0 . k3 pe baza formulei (7. valorile initiale x0 ¸i y0 . k2 . x0::numeric. if StringTools[Has](convert(lhs(eq). yi+1 ) la liste rez a b) metoda Runge-Kutta de ordinul 3 adaugˇ elementul (x0 .rez. yi+1 ) la liste rez a c) metoda Runge-Kutta de ordinul 4 adaugˇ elementul (x0 . y(x)). k4 pe baza formulei (7. yi))] 2 xi+1 = xi + h adaugˇ punctul (xi+1 . k2 ."diff") then f:=rhs(eq). N − 1 calculeazˇ coeficientii k1 . k3 ."diff") then 130 .14) a ¸ 1 yi+1 = yi + · (k1 + 2k2 + 2k3 + k4 ) 6 adaugˇ punctul (xi+1 .varx. yi+1 ) la liste rez a B.h. rez. y0 ) la lista rez a pentru i = 0. N::integer) local f. N − 1 calculeazˇ coeficientii k1 . obtinutˇ cu metoda Runge-Kutta s ¸ a Algoritmul constˇ ˆ urmˇtorii pa¸i: a ın a s 1. y0 ) la lista rez a pentru i = 0. Algoritmi Date de intrare: o ecuatie y ′(x) = f (x. N Date de ie¸ire: solutia aproximativˇ a problemei cu date initiale.

fi. 2]. 3. varx:=[op(indets(eq.1. 2.y1]].1. varx[2]=y1+h*subs(varx[1]=x1. for i from 1 to N do y1:=evalf(y1 + h/2*( subs(varx[1]=x1. ¸ a folosind diverse valori ale parametrului N.796296296].2.351851850]] > rungekutta3(diff(f(x).varx[2]=y1.999999999. fi.f). 2].999999999. end: > rungekutta2(diff(f(x).x)=x^2+1.f) + subs(varx[1]=x1+h.2.333333333.3). od..varx[2]=y1.x)=f(x.0. name))]. f) )). 5.0.. rez:=[op(rez). [1. 2.f:=lhs(eq). [0.666666666. [1. [[1.2. RETURN(rez).x)=x^2+1. pentru solutia problemei ¸ y ′(x) = cos x . h:=(rhs(ab)-lhs(ab))/N.3). else ERROR (‘ecuatia trebuie sa fie de tipul diff(y(x).333333332]] > rungekutta4(diff(f(x).y0]]. [1.1.[x1.6666666666.9999999999.333333333.0. x1:=evalf(x1+h). Solutia exactˇ a acestei probleme este y(x) = sin x + 2.888888888].0].3).790123457].333333334]] Prezentˇm ˆ continuare diferite aproximˇri obtinute cu metoda Runge-Kutta de ora ın a ¸ dinul 4. rez:=[[x0. [1.1. y(0) = 2. 3.666666666.3333333333.345679012]. 2].765432099]. [1. 3. [[1. [0.876543210].0. y1:=y0. [[0.x)=x^2+1. if nops(varx)=1 then varx:=[op(varx). 2. [1. 2. x1:=x0. [0.y)‘).. 5. 131 .1.

1). yi−1) + 5 f (xi−2 . yi−1)] 2 (7.15) unde y0 = y(x0 ). yi−1) + 37 f (xi−2 .5 2 1. a cˇrui termen general ¸ a yi+1 se gˇse¸te din relatia: a s ¸ yi+1 = yi + h · {23 f (xi. se obtine metoda Adams-Bashforth de ordinul 2. a cˇrui termen general ¸ a yi+1 se gˇse¸te din relatia: a s ¸ yi+1 = yi + h · [3 f (xi . yi−3 )}. se obtine metoda Adams-Bashforth de ordinul 4. Pentru k = 2. Valoarea y1 trebuie calculatˇ prin altˇ metodˇ (de exemplu.15) sˇ aibe sens. 12 (7. yi−2 )}. ˆ a aceasta ne permite sˇ aflˇm valorile aproximative Insˇ a a ale solutiei ˆ ¸ ıncepˆnd cu y2 . se obtine metoda Adams-Bashforth de ordinul 3. yi ) − f (xi−1 . deci i ≥ 2. yi ) − 59 f (xi−1 . (7.. trebuie ca indicii sˇ fie toti ¸ a a ¸ pozitivi. i − 1 ≥ 0 deci i ≥ 1.4 7. Pentru ca relatia (7. yi) − 16 f (xi−1 ..1 Metoda Adams-Bashforth Breviar teoretic Metoda Adams-Bashforth este o metodˇ multipas de rezolvare a problemei (7. xi−k .4. care a pentru calculul valorii yi+1 folose¸te valorile obtinute ˆ punctele xi .16) unde y0 = y(x0 ).e. a a a a folosind metoda lui Euler cu diferente finite ˆ ¸ ınainte). a cˇrui termen general ¸ a yi+1 se gˇse¸te din relatia: a s ¸ yi+1 = yi + h · {55 f (xi. s ¸ ın Pentru k = 1. Pentru k = 3. . folosind metoda lui Euler cu diferente finite ˆ ¸ ınainte)..3 2.17) 24 132 . trebuie ca indicii sˇ fie toti ¸ a a ¸ s a a pozitivi. yi−2 ) − 9 f (xi−3 .5 1 0. Valorile y1 ¸i y2 trebuie calculate prin altˇ metodˇ (de exemplu.16) sˇ aibe sens.5 0 1 2 3 4 5 7. Pentru ca relatia (7. i.

2. folosind s a a metoda lui Euler cu diferente finite ˆ ¸ ınainte).1.1.325500000. yi) − 2774 f (xi−1. yi−1 ) + 2616 f (xi−2. y2 .unde y0 = y(x0 ).1000000000 ¸i y1 = 2.4.4. yi−3 ) + 251 f (xi−4.3000000000 x4 = 0.18) unde y0 = y(x0 ).667500000 y7 = 2. sˇ ¸ a se rezolve urmˇtoarea problemˇ cu date initiale a a ¸ y ′ (x) = 1 + x2 y(0) = 2 pe intervalul [0.4. yi−4 )}. obtinem x1 = 0. ¸ a a ¸ deci i ≥ 3. Valorile y1 .809000000 y8 = 2.2 Probleme rezolvate Exercitiul 7. y3 ¸i y4 trebuie calculate prin altˇ metodˇ (de exemplu. trebuie ca indicii sˇ fie toti pozitivi.2000000000 x3 = 0.000000000 y2 = 2. Rezolvare Folosim metoda Adams-Bashforth de ordinul 2.9000000000 x10 = 1. Cu ajutorul formulei lui Euler cu diferente finite ˆ s ¸ ınainte. Pentru ca relatia (7.3 Probleme propuse Exercitiul 7.7000000000 x8 = 0.17) sˇ aibe sens. Pentru ca relatia (7.15) obtinem: a ¸ x2 = 0.6000000000 x7 = 0. Folosind una din metodele Adams-Bashforth prezentate mai sus. 2] ˆ N = 4. yi−2 ) 720 − 1274 f (xi−3.18) sˇ aibe sens.4. Valorile y1 .8000000000 x9 = 0. folosind s a a metoda lui Euler cu diferente finite ˆ ¸ ınainte).418500000 y5 = 2.136000000 y10 = 3. a cˇrui termen general yi+1 se gˇse¸te din relatia: a s ¸ yi+1 = yi + h · {1901 f (xi. sˇ se gˇseascˇ ¸ s a a a solutia aproximativˇ a problemei ¸ a y ′(x) = y(x) − x2 + x y(1) = 2 ˆ artind intervalul [1.538000000 y6 = 2. Avem x0 = 0 ¸i y0 = 2.5000000000 x6 = 0. ımpˇ ¸ ın ¸ ¸ a 133 .201500000 y3 = 2.307000000 y4 = 2.4000000000 x5 = 0. 1]. 7. trebuie ca indicii sˇ fie toti pozitivi. ¸ a a ¸ deci i ≥ 4. ¸ a Pentru k = 4. se obtine metoda Adams-Bashforth de ordinul 5. pentru h = 0.100000000 ¸ s Aplicˆnd formula (7. Folosind metoda Adams-Bashforth de ordinul 2 ¸i 3. (7.964500000 y9 = 3. 7. Comparati cu solutia exactˇ. y2 ¸i y3 trebuie calculate prin altˇ metodˇ (de exemplu.

134 yi+1 = yi + h f (xi . y0 ) la lista rez a pentru i = 1.0]. datˇ sub forma s ¸ a ¸ a unui ¸ir de puncte.17) sau ¸ a (7. identificarea functiei f ¸ b−a •h= N 2. ordin::integer."diff") then f:=rhs(eq). ¸i numˇrul N de puncte ˆ care se ˆ s a ın ımparte intervalul Date de ie¸ire: solutia aproximativˇ a problemei cu date initiale. x0::numeric.y)‘).16).4. %2‘.7. ordinul metodei. m.i. (7. yi+1 ) la lista rez a pentru i = m. if StringTools[Has](convert(lhs(eq).4 Implementare A. rez. Algoritmi Date de intrare: o ecuatie y ′(x) = f (x.f.%1."diff") then f:=lhs(eq). (7. ab::range. N obtine yi+1 din formula corespunzˇtoare ordinului((7. valorile initiale x0 ¸i y0 . elif StringTools[Has](convert(rhs(eq).string).rez. yi+1 ) la lista rez a B.string). ordin. obtinutˇ cu ajutorul metodei Adams-Bashforth s ¸ a a ın a s Algoritmul constˇ ˆ urmˇtorii pa¸i: 1. yi) . un interval ¸ ¸ s [a. trebuie sa fie mai mic decat numarul de puncte ales. name))]. else ERROR (‘ecuatia trebuie sa fie de tipul diff(y(x). m − 1 xi+1 = xi + h adaugˇ punctul (xi+1 . fi.y1.18)) xi+1 = xi + h adaugˇ punctul (xi+1 . y0::numeric.varx. N) fi.15). y(x)). fi.x1.x)=f(x. N::integer) local h. b]. if nops(varx)=1 then varx:=[op(varx). if ordin>N then WARNING(‘ordinul metodei. gˇsirea solutiei aproximative a ¸ adaugˇ elementul (x0 . Programe MAPLE ¸i rezultate s adamsbashforth:=proc(eq::equation. varx:=[op(indets(eq.

f) )). x1:=evalf(x1+h).0.f)). if evalb(ordin in {2. x1:=evalf(x0). #secventa de program pentru n=3.0. x=0.[x1.x)=x^2+1. od. adamsbashforth(diff(f(x)..x)=x^2+1. od. rez:=[op(rez).0. RETURN(rez).. varx[2]=rez[nops(rez)][2].0. adamsbashforth(diff(f(x).2. rez:=[op(rez).p1). end: ˆ continuareprezentˇm pe acela¸i sistem de coordonate solutia exactˇ a problemei In a s ¸ a rezolvate anterior ¸i solutiile obtinute cu metoda Adams-Bashforth. a a ın ¸ with(plots): p0:=plot(1/3*x^3+x+2.1.6) ]): display(p0. if ordin=2 then for i from 2 to N do y1:=evalf( y1+h/2*( 3*subs(varx[1]=rez[nops(rez)][1].1.5}) then for i from 1 to ordin-1 do y1:=evalf(y1+h*subs(varx[1]=rez[nops(rez)][1].1.color=black. x1:=x1+h. fi.6). varx[2]=rez[nops(rez)][2].2.y1]].4.h:=(rhs(ab)-lhs(ab))/N. ˆ care am variat s ¸ ¸ ın ordinul metodei dar am pˇstrat constant numˇrul de puncte ˆ care s-a calculat solutia.6).0.2.4.. varx[2]=rez[nops(rez)-1][2].x)=x^2+1.[x1.0.5 constituie tema de proiect else ERROR(‘ordinul metodei Adams-Bashforth poate fi 2. adamsbashforth(diff(f(x).2. 135 .3...0.f) subs(varx[1]=rez[nops(rez)-1][1].y1]]. thickness=2): p1:=plot([ adamsbashforth(diff(f(x).3.0.2.4.y1]].6). y1:=evalf(y0).x)=x^2+1.1. 3 sau 4 sau 5‘). rez:=[[x1.5.1.

22) Observatia 7.19) Metoda Adams-Moulton de ordinul 3: yi+1 = yi + h [5 f (xi+1 . 2 (7. 136 . yi) + f (xi+1 . 24 (7. Formula Adams-Moulton de ordin n se folose¸te ˆ ¸ s ımpreunˇ cu o fora mulˇ Adams-Bashforth de ordin egal sau superior ˆ metode de tip predictor-corector a ın (vezi paragraful 7.1 Metoda Adams-Moulton Breviar teoretic Metoda Adams-Moulton folose¸te o formulˇ implicitˇ pentru a gˇsi elementul yi+1 al s a a a solutiei unei probleme cu date initiale. yi+1 ) + 8 f (xi.6 2.1.4 x 0. Yi−1 )+ 720 + 106 f (xi−2 . yi ) − f (xi−1 .8 1 7. yi+1 ) + 19 f (xi.6).4 2. Yi−3 )] (7. yi−1 )]. Yi) − 264 f (xi−1.2 3 2. 12 (7.5 7. yi−1 ) + f (xi−2 .5. yi+1 )].5.2 0.8 2.3. yi−2 )]. yi ) − 5 f (xi−1 .2 2 0 0. Yi+1 ) + 646 f (xi.21) Metoda Adams-Moulton de ordinul 5: Yi+1 = Yi + h [251 f (xi+1 .6 0.20) Metoda Adams-Moulton de ordinul 4: yi+1 = yi + h [9 f (xi+1 . Yi−2) − 19 f (xi−3. ¸ ¸ Metoda Adams Moulton de ordinul 2: yi+1 = yi + h [f (xi .

7.6
7.6.1

Metoda predictor-corector
Breviar teoretic

Combinatia unei metode explicite folositˇ pentru predictia valorii ¸i a unei metode im¸ a ¸ s plicite folositˇ pentru corectarea valorii, se nume¸te metodˇ predictor-corector. a s a Dacˇ ordinul metodei predictor este cel putin egal cu ordinul metodei corector, atunci a ¸ este suficientˇ o singurˇ iteratie pentru a pˇstra acuratetea metodei corector. a a ¸ a ¸ Cea mai rˇspˆnditˇ metodˇ predictor-corector este combinatia formulei de ordinul a a a a ¸ patru a lui Adams-Bashforth ca predictor, cu formula de ordinul patru a lui AdamsMoulton ca ¸i corector: s   y (p) = y + h [55 f (x , y ) − 59 f (x , y )+  i+1  i i i−1 i−1 i  24        + 37 f (xi−2, yi−2 ) − 9 f (xi−3, yi−3 )]    h (p)  y  i+1 = yi + [9 f (xi+1 , yi+1 ) + 19 f (xi, yi )−   24       − 5 f (xi−1 , yi−1 ) + f (xi−2 , yi−2 )]

(7.23)

7.6.2

Probleme rezolvate

Exercitiul 7.6.1. Folosind metoda predictor-corector, sˇ se rezolve problema cu date ¸ a initiale ¸ y ′ (x) = 1 + x2 y(0) = 2 pe intervalul [0, 1], pentru h = 0.1.

Rezolvare Avem x0 = 0 ¸i y0 = 2. Cu ajutorul formulei lui Euler cu diferente finite ˆ s ¸ ınainte, obtinem ¸ x1 = 0.1000000000 x2 = 0.2000000000 x3 = 0.3000000000 137 y1 = 2.100000000 y2 = 2.201000000 y3 = 2.305000000

Aplicˆnd formula (7.23) obtinem: a ¸ x4 = 0.4000000000 x5 = 0.5000000000 x6 = 0.6000000000 x7 = 0.7000000000 x8 = 0.8000000000 x9 = 0.8000000000 x10 = 1.000000000
p y4 = 2.417333333 y4 = 2.417333333 p y5 = 2.537666666 y5 = 2.537666666 p y6 = 2.667999999 y6 = 2.667999999 p y7 = 2.810333332 y7 = 2.810333332 p y8 = 2.966666665 y8 = 2.966666665 p y9 = 3.138999998 y9 = 3.138999998 p y10 = 3.329333331 y10 = 3.329333331.

7.6.3

Probleme propuse

Exercitiul 7.6.2. Folosind metoda predictor-corector, sˇ se gˇseascˇ solutia aproxima¸ a a a ¸ tivˇ a problemei a y ′ (x) = y(x) + x y(1) = 2 ˆ artind intervalul [1, 2] ˆ N = 8. Comparati cu solutia exactˇ. ımpˇ ¸ ın ¸ ¸ a

7.6.4

Implementare

A. Algoritmi Date de intrare: o ecuatie y ′(x) = f (x, y(x)), valorile initiale x0 ¸i y0 , un interval ¸ ¸ s [a, b] ¸i numˇrul de puncte N ˆ care se ˆ s a ın ımparte intervalul Date de ie¸ire: solutia aproximativˇ a problemei cu date initiale, datˇ sub forma s ¸ a ¸ a unui ¸ir de puncte, rez s Algoritmul constˇ ˆ urmˇtorii pa¸i: a ın a s 1. identificarea functiei f ¸ b−a •h= N 2. gˇsirea solutiei aproximative a ¸ adaugˇ elementul (x0 , y0 ) la lista rez a pentru i = 1, 3 yi+1 = yi + h f (xi , yi) 138

xi+1 = xi + h adaugˇ punctul (xi+1 , yi+1 ) la lista rez a pentru i = 4, N calculeazˇ yi din ecuatia (7.23) a p ¸ calculeazˇ yi din ecuatia (7.23) a ¸ xi+1 = xi + h adaugˇ punctul (xi+1 , yi+1 ) la lista rez a B. Programe MAPLE ¸i rezultate s predictorcorector:=proc(eq::equation, x0::numeric, y0::numeric, ab::range, N::integer) local f,varx,h,y1,x1,rez,i; if StringTools[Has](convert(lhs(eq),string),"diff") then f:=rhs(eq); elif StringTools[Has](convert(rhs(eq),string),"diff") then f:=lhs(eq); else ERROR (‘ecuatia trebuie sa fie de tipul diff(y(x),x)=f(x,y)‘); fi; varx:=[op(indets(eq, name))]; if nops(varx)=1 then varx:=[op(varx),0]; fi; h:=(rhs(ab)-lhs(ab))/N; y1:=evalf(y0); x1:=evalf(x0); rez:=[[x1,y1]]; for i from 1 to 3 do y1:=evalf(y1+h*subs(varx[1]=rez[nops(rez)][1], varx[2]=rez[nops(rez)][2],f)); x1:=evalf(x1+h); rez:=[op(rez),[x1,y1]]; od; for i from 4 to N do y1:=evalf( y1+h/24*( 55*subs(varx[1]=rez[nops(rez)][1], varx[2]=rez[nops(rez)][2],f) 59*subs(varx[1]=rez[nops(rez)-1][1], varx[2]=rez[nops(rez)-1][2],f) + 37*subs(varx[1]=rez[nops(rez)-2][1], varx[2]=rez[nops(rez)-2][2],f) 9*subs(varx[1]=rez[nops(rez)-3][1], varx[2]=rez[nops(rez)-3][2],f) )); y1:=evalf( 139

1. thickness=2): p2:=plot([seq(predictorcorector(diff(f(x).2 3 2. x=0. rez:=[op(rez). varx[2]=rez[nops(rez)-1][2].10)]): display(p0.. end: ˆ continuare prezentˇm ˆ acela¸i sistem de coordonate solutia exactˇ a problemei In a ın s ¸ a rezolvate anterior ¸i solutiile obtinute cu metoda predictor-corector.p1). ˆ care am variat s ¸ ¸ ın ordinul metodei dar am pˇstrat constant numˇrul de puncte ˆ care s-a calculat solutia.y1]].1.8 2.4 2.2 0.color=black. 3. varx[2]=y1. od.0. x1:=x1+h.2 2 0 0. varx[2]=rez[nops(rez)][2]. a a ın ¸ with(plots): p0:=plot(1/3*x^3+x+2.0.N)..[x1.f) + 19*subs(varx[1]=rez[nops(rez)][1]..f) )).6 0. varx[2]=rez[nops(rez)-2][2]. N=5.4 x 0.6 2.rez[nops(rez)][2]+h/24*( 9*subs(varx[1]=rez[nops(rez)][1]+h.f) + subs(varx[1]=rez[nops(rez)-2][1].x)=x^2+1.2.8 1 140 .f) 5*subs(varx[1]=rez[nops(rez)-1][1].

7 7. YN )T   2hαa1 2 h r(x1 ) −  2hγ1 − 3γ2    2   h r(x2 )   .24) Dacˇ γ2 . c  A=  a2 0 . . ¸ a b−a ¸i notˇm s a Dacˇ ˆ artim intervalul [a..28) (7... b] cu conditiile la frontierˇ mixte: ¸ a γ1 · y(a) + γ2 · y ′ (a) = α γ3 · y(b) + γ4 · y ′(b) = β..1 Metoda diferentelor finite pentru rezolvarea unei ¸ probleme la limitˇ liniare a Breviar teoretic Se considerˇ problema a y ′′ = p(x) · y ′ + q(x) · y + r(x) x ∈ [a.   ... .26) 0 0 0 ....29) (7.. ...31) (7.Rezolvarea problemelor la limitˇ liniare pentru ecuatii a ¸ diferentiale de ordinul al doilea ¸ 7.. γ4 = 0. . γ3 = 0.. iar dacˇ a ¸ a a γ1 .25) (7..27) (7.. B= .7. 2     (7... Y2 . 0 0 bN−1 γ 3 4 cN−1 bN + 2hγ N 4 +3γ 3 4c γ 4 4 0 . (7... atunci vorbim de conditii la limitˇ Dirichlet. b] ˆ N + 1 intervale de lungime h = a ımpˇ ¸ ın N +1 Yi = y(xi ).. 0 0 0 .. atunci vorbim de conditii la limitˇ Neumann.. 0 0 2 0 . 0 . aN − 2hγN+3γ iar Y = (Y1 . .32) bi = −(2 + h2 q(xi )) ci = 1 − 141 .. c2 b3 ..30) (7. atunci determinarea valorilor Yi se reduce la rezolvarea sistemului AY = B unde  b1 − 2hγ 4a1 γ2 1 −3γ2 2 c1 + 2hγ 1−3γ 1 b2 a3 a γ (7.    h2 r(xN −1 )    2hβcN  2 h r(xN ) − 2hγ3 + 3γ4 ai = 1 + h p(xi ) 2 h p(xi ).

( . se obtine solutia aproximativˇ a problemei date sub forma unui ¸ir de puncte: ¸ ¸ a s 1 27 2 56 3 89 (0. ). ( . 0). (1. 1] (N = 3).2 Problemˇ rezolvatˇ a a Exercitiul 7.34) 7.7.7. se obtine sistemul ¸ Ay = b unde  −2 1 0 A =  1 −2 1  0 1 −2 y=  27 128 56 128 89 128 q(x) = 0 γ2 = 0 γ4 = 0 r(x) = x α=0 β=1 x2 = 2 4 x3 = 3 4  ¸i a cˇrui solutie este: s a ¸ b=  . ). Rezolvare Avem: p(x) = 0 γ1 = 1 γ3 = 1 1−0 1 = h= 3+1 4 1 x1 = 4 ˆ Inlocuind aceaste valori. ). Astfel. 1) .  1 64 2 64 − 61 64   Valorile solutiei aproximative ˆ capetele intervalului sunt ¸ ın y(0) = 0 y(1) = 1.1.ˆ capetele intervalului. Sˇ se gˇseascˇ solutia aproximativˇ a problemei urmˇtoare ¸ a a a ¸ a a  ′′  y =x y(0) = 0  y(1) = 1 pe intervalul intervalul [0. ( .33) (7. 4 128 4 128 4 128 142 . valorile aproximative ale solutiei sunt date de: In ¸ y(x0 ) = ¸i s y(xN +1 ) = hα − γ2 y1 hγ1 + γ2 hβ − γ4 yN hγ3 + γ4 (7.

q.xx.p.3 Probleme propuse Exercitiul 7.4 Implementare A. b]. ¸ s ¸ γ3 . coeficienti:=proc(ec1::equation. r. q. precum ¸i coeficientii ¸ ın ¸ s ¸ γ1 . b].g2. ec3::equation) local f. rezolvarea sistemului AY = B 4. γ4 . Sˇ se gˇseascˇ solutia aproximativˇ a problemei ¸  ′′  y = 2y ′ + 3y − 1 2y(0) + y ′(0) = 1  ′ y (1) = 1 pe intervalul intervalul [0. N ın a ¸ Date de ie¸ire: lista rez a punctelor care definesc solutia s ¸ Algoritmul constˇ urmˇtoarele etape: a a 1. a matricei A ¸i a vectorului ın a ¸ s B 3. Yi )] care alcˇtuiesc solutia numericˇ a a ¸ a problemei B. Programe MAPLE ¸i rezultate s Observatia 7. γ2 .7. α.1.7."diff(diff") 143 .7.string).m. se pot determina: intervalul ¸ a ¸ s ¸ a [a. x.2. 1] (N = 4). Algoritmi Date de intrare: ecuatia ec1."$2") or StringTools[Has](convert(lhs(ec1). returnarea listei de puncte de forma [(xi . ¸i numˇrul de puncte ¸ ¸ a s a ˆ care se cautˇ solutia. ¸ ¸ a a a a ¸ a Exercitiul 7.3.7. 1] (N = 4). α. Pentru aceasta. ec2::equation. γ4 . γ3 .string).q. r precum ¸i a coeficientilor γ1 .A. #ecuatia ec1 if StringTools[Has](convert(lhs(ec1).g1. functiile p. β 2. γ2 . conditiile la frontierˇ ec2. Comparati cu solutia exactˇ.g3. determinarea punctelor xi ˆ care se calculeazˇ solutia. Sˇ se gˇseascˇ solutia aproximativˇ a problemei ¸ a a a ¸ a  ′′  y = 2y ′ + 3y − 1 y(0) = 1  y(1) = 2 pe intervalul intervalul [0. Avˆnd ecuatia ¸i conditiile pe frontierˇ. ec3.r. β.a functiilor p.7. numele variabilei ˆ care se scrie ecuatia.7.g4. 7. am construit procedura coeficienti.B. identificarea intervalului [a.

function)[1])."$2") or StringTools[Has](convert(lhs(ec1).. if nops(m)=1 then m:=[op(m).x)+q(x)*y(x)+r(x)‘).function))).{numeric.op(indets(m[2]. fi.indets(f.function))).nops(m)).{numeric."diff(diff") then f:=lhs(ec1).k=1. else xx:=op(indets(f. elif StringTools[Has](convert(rhs(ec1). if nops(m)=1 then m:=[op(m).function)[2]). m:=[op(indets(ec3.0].0].name}). fi.function)[1]).function))].name})..string).string).fi. if m[2]=0 then g4:=0 else g4:=coeff(m[2].op(indets(m[1].op(indets(m[2].op(indets(m[1].fi.indets(f.nops(m)). m:=indets(lhs(ec3).function)[1].indets(f. q:=coeff(f-p*indets(f.function))].k=1. q:=coeff(f-p*indets(f.indets(f.x$2)=p(x)*diff(y(x).string).op(indets(m[1].function))). B:=product(m[k]. fi. fi.function)[2].then f:=rhs(ec1). fi. if not StringTools[Has](convert(m[1]. A:=product(m[k]. if nops(indets(f. p:=coeff(f. p:=coeff(f.function)))."diff") then g1:=coeff(m[1].function)[1]). #capetele intervalului m:=indets(lhs(ec2).function)[2].function)[1]-q*indets(f.function))). if not StringTools[Has](convert(m[1].function)[2]. if m[2]=0 then g1:=0 else g1:=coeff(m[2]. r:=f-p*indets(f.function)[1])=1 then xx:=op(indets(f. fi.function)[2]). else ERROR (‘prima ecuatie trebuie sa fie de tipul \n diff(y(x). else 144 .function))). r:=f-p*indets(f. else g2:=coeff(m[1]. if m[2]=0 then g2:=0 else g2:=coeff(m[2]."diff") then g3:=coeff(m[1].op(indets(m[2]. #conditiile la frontiera m:=[op(indets(ec2.string).function)[2]).function)[2]-q*indets(f.

rhs(ec2).yy.i]:=evalf(1+h/2*subs(xx=x[i+1].1]-4*(1+h/2*subs(xx=x[1]. evalf(( h*a-g2*yy[1] )/(h*g1+g2)) ]. ec3::equation. g1:=f[7]. p:=f[4]. od.function))).xx.N]:=evalf(AA[N.2]+(1+h/2*subs(xx=x[1]. od.b.N]+4*(1-h/2*subs(xx=x[N].g1.B:=f[2]. fi.i]:=evalf(-(2+h^2*subs(xx=x[i].A.g3.function))). BB:=vector(N. for i from 1 to N do x[i]:=evalf(A+i*h). RETURN([ [evalf(A).r. evalm(AA).i+1]:=evalf(1-h/2*subs(xx=x[i].N-1]-(1-h/2*subs(xx=x[N].ec2.g4. BB[N]:=evalf(BB[N]-2*h*b*(1-h/2*subs(xx=x[N].BB.N-1]:=evalf(AA[N. fi.xx:=f[3]. ec2::equation.p.1]:=evalf(AA[1.rhs(ec3)).q. N::integer) local f.0).2]:=evalf(AA[1.evalm(BB). AA[N. f:=coeficienti(ec1.q:=f[5].p))/ (2*h*g1-3*g2)).op(indets(m[1].B.ec3).p)) *g4/(2*h*g3+3*g4)). h:=(B-A)/(N+1).g4:=f[10].g2. AA[1.q))). end: Procedura care returneazˇ ¸irul de puncte care aproximeazˇ solutia este bvproblem.g4.0).p)) *g2/(2*h*g1-3*g2)).AA.g2.a. BB[1]:=evalf(BB[1]-2*h*a*(1+h/2*subs(xx=x[1].B.g2:=f[8].b:=f[12].g1.r:=f[6]. 145 . od.q.p))/ (2*h*g3+3*g4)).p)) *g4/(2*h*g3+3*g4)).N. if m[2]=0 then g3:=0 else g3:=coeff(m[2]. RETURN(A.r)). yy:=linsolve(AA.p)).xx. AA[1. as a ¸ bvproblem:=proc(ec1::equation.BB). for i from 1 to N-1 do AA[i.g3.p)).p)) *g2/(2*h*g1-3*g2)).i.p.r.h.op(indets(m[2]. AA:=matrix(N. AA[i+1. for i from 1 to N do AA[i.g4:=coeff(m[1].g3:=f[9].x. AA[N. A:=f[1].a:=f[11]. BB[i]:=evalf(h^2*subs(xx=x[i].

p1). color=red): display(p0.8 x 1 1.x=0.6 0.6 0. e ( ( √ 5−1) x ) 2 √ ( 5−1) π ( ) 4 y1 := − (−1 + 2 e − e(− (− √ √ ( 5+1) π ) 4 ) e ( 5+1) π ) 4 + e (− ( e 5+1) x ) 2 √ ( 5−1) π ( ) 4 √ (2 e ( ( −e 5−1) π ) 4 √ ( 5+1) π (− ) 4 √ − 1) −1 1 0.2 0 0.x$2)=-diff(y(x).4 146 . [evalf(B). p0:=plot(y1.4 0. symbolsize=10. a ec1:=diff(y(x).5)..2 1.ec3}.x)+y(x)+1: ec2:=y(0)=1: ec3:=y(Pi/2)=0: with(plots): y1:=rhs(dsolve({ec1.8 0.y(x))).i=1.ec2.2 0. symbol=circle.4 0.Pi/2.color=black): p1:=pointplot(bvproblem(ec1.N).seq([x[i].ec3.yy[i]]. end: Testˇm aceastˇ procedurˇ pentru calculul solutiei aproximative a problemei a a a ¸  ′′  y = −y ′ + y + 1 y(0) = 1  ′ π y (2) = 0 Pentru comparatie.thickness=2.ec2.. am reprezentat grafic ˆ acela¸i sistem de coordonate solutia for¸ ın s ¸ malˇ a problemei. evalf(( h*b-g4*yy[N] )/(h*g3+g4)) ] ]). obtinutˇ cu ajutorul procedurii predefinite dsolve ¸i punctele obtinute a ¸ a s ¸ aplicˆnd procedura bvproblem.

8. Φ1 .40) =− a [Φ′′ (x) + p(x)·Φ′0 (x) + q(x)·Φ0 (x) − f (x)]· 0 ·[Φ′′ (x) + p(x)·Φ′i (x)q(x)·Φi(x)]dx. . N. ΦN } sunt functii de clasˇ C 2 liniar independente.36) YN (x) = Φ0 (x) + i=1 ci · Φi (x) (7. (7. cu conditiile la limitˇ mixte. .1 Metoda colocatiei ¸i metoda celor mai mici pˇtrate ¸ s a Breviar teoretic Se considerˇ problema a y ′′ + p(x) · y ′ + q(x) · y + r(x) = f (x). ¸ a γ1 · y(a) + γ2 · y ′ (a) = α γ3 · y(b) + γ4 · y ′ (b) = β Cˇutˇm o solutie a ecuatiei (7. . N Metoda celor mai mici pˇtrate presupune gˇsirea coeficientilor ci din sistemul de N a a ¸ ecuatii cu N necunoscute ¸ N b cj i=1 a [Φ′′ (x) + p(x)·Φ′j (x) + q(x)·Φj (x)]· j ·[Φ′′ (x) + p(x)·Φ′i (x)q(x)·Φi(x)]dx = i b (7.35) (7.38) Metoda colocatiei presupune gˇsirea coeficientilor ci din sistemul de N ecuatii cu N ¸ a ¸ ¸ necunoscute N ci [Φ′′ (xk ) + p(xk )·Φ′i(xk ) + q(xk )·Φi(xk )] = i i=1 (7. .7.35) de forma a a ¸ ¸ N x ∈ [a.39) = f (xk ) − Φ′′ (xk ) 0 − p(xk )·Φ′0 (xk ) − q(xk )·Φ0 (xk ). care verificˇ: ¸ a a γ1 ·Φ0 (a) + γ2 ·Φ′0 (a) = α ¸i γ3 ·Φ0 (b) + γ4 ·Φ′0 (b) = β s γ1 ·Φi (a) + γ2 ·Φ′i(a) = 0 ¸i γ3 ·Φi(b) + s γ4 ·Φ′i(b) = 0. k = 1. i 147 . b] (7.8 7.37) unde {Φ0 . i = 1.

Rezolvare folosind metoda colocatiei ¸ Solutia problemei este de forma: ¸ y3 (x) = Φ0 (x) + c1 Φ1 (x) + c2 Φ2 (x) + c3 Φ3 (x). 3 sunt functii de clasˇ C 2 . cu N = 3 a Indicatie: se considerˇ Φ0 (x) = 0 ¸i Φi (x) = sin iπx. s A.2 Probleme rezolvate Exercitiul 7. solutia exactˇ a problemei a ın s ¸ a initiale (cu linie ˆ ¸ ıngro¸atˇ) ¸i solutia obtinutˇ folosind metoda colocatiei: s a s ¸ ¸ a ¸ 148 . obtinem urmˇtorul sistem: ın ¸ a  2 − 2  1 √ π c + (1 − 4π 2 )c + 1 − 9π c = 1  √  1 2 3  4  2 2      2 (1 − π 2 )c1 − (1 − 9π 2 )c3 =  4       1 − π2  1 − 9π 2 3   √ c1 − (1 − 4π 2 )c2 + √ c3 = 4 2 2 a cˇrui solutie este: a ¸ 2+1 c1 = 4(1 − π 2 ) √ 1 c2 = − 4(1 − 4π 2 ) c3 = 2−1 4(1 − 9π 2 ) √ De aici rezultˇ cˇ solutia aproximativˇ a problemei este: a a ¸ a √ √ 2+1 1 2−1 y3 (x) = sin πx − sin 2πx + sin 3πx.7. metoda colocatiei.38). i = 1. ¸i verificˇ conditiile (7. i ¸i xi = 0 + 4 . a a ¸ s liniar independente. i = 1.8. ˆ Inlocuind ˆ sistemul (7. Sˇ se gˇseascˇ solutia problemei ¸ a a a ¸  ′′  y + y′ = x y(0) = 1  y(1) = 1 folosind: a. cu N = 3 ¸ b.8. De asemenea.39). ¸ a s Rezolvare ¸ a Se observˇ cˇ functiile Φ0 (x) = 0 ¸i Φi (x) = sin iπx. i = 1. avem: s a ¸ p(x) = 1 q(x) = 1 f (x) = x.1. metoda celor mai mici pˇtrate. 3. 2) 2) 4(1 − π 4(1 − 4π 4(1 − 9π 2 ) Solutia exactˇ a problemei date este ¸ a y(x) = x − sin x sin 1 Reprezentˇm ˆ continuare pe acela¸i sistem de coordonate. 3.

04 –0.6 0. 2) 2) π(1 − π π(1 − 4π 3π(1 − 9π 2 ) Solutia acestui sistem este: ¸ 2 c1 = π(1 − π 2 ) c2 = − c3 = − 2 .05 –0.07 B. Rezolvare folosind metoda celor mai mici pˇtrate a Notˇm a fj (x) = Φ′′ (x) + p(x)·Φ′j (x) + q(x)·Φj (x) .03 –0.2 0 0. este: a 2 1 2 y3 (x) = sin πx − sin 2πx − sin 3πx.40) devine: a ¸  1 1   c1 f1 (x) · f1 (x) + c2 f2 (x) · f1 (x) + c3    0 0       1 1 c  1           c1 0 1 0 1 0 1 1 f3 (x) · f1 (x) = f3 (x) · f2 (x) = f3 (x) · f3 (x) = 0 1 0 1 0 x · f1 (x) x · f2 (x) x · f3 (x) f1 (x) · f2 (x) + c2 f1 (x) · f3 (x) + c2 0 f2 (x) · f2 (x) + c3 f2 (x) · f3 (x) + c3 1 π(1 − 4π 2 ) 1 0 0 1 0 Reprezentˇm ˆ continuare pe acela¸i sistem de coordonate.8 1 –0. solutia exactˇ a problemei a ın s ¸ a initiale (cu linie ˆ ¸ ıngro¸atˇ) ¸i solutia obtinutˇ folosind metoda celor mai mici pˇtrate: s a s ¸ ¸ a a 149 De aici rezultˇ cˇ solutia aproximativˇ a problemei.01 –0.4 0. 3 j Cu aceastˇ notatie. sistemul (7.06 –0.x 0. j = 1. obtinutˇ cu metoda celor mai mici a a ¸ a ¸ a pˇtrate.02 –0. 3π(1 − 9π 2 ) .

07 7.01 –0. Φ1 (x) = x(1 − x).8.05 –0. metoda celor mai mici pˇtrate a folosind ca bazˇ functiile Φ0 (x) = 0. Sˇ se gˇseascˇ solutia aproximativˇ a problemei ¸ a a a ¸ a  ′′  y + y′ = x y(0) = 0  y(1) = 0 pe intervalul [0.02 –0.2 0 0.06 –0.4 0. 1] folosind: a.04 –0.8.8 1 –0. metoda colocatiei ¸ b.2.6 0. a ¸ 150 .3 Probleme propuse Exercitiul 7.03 –0.x 0. Φ2 (x) = x2 (1 − x).

1997 s [11] V. Tehnicˇ. Cadariu. A. S. Metode numerice Timi¸oara. Tipografia UVT. 2007 ¸ a s s [2] C. Kelley. Difference equation. Petcu. C. un standard pentru matematica computerizatˇ. [10] D. Ionica. Coman. V. de Vest. Timisoara.A. G.BIBLIOGRAFIE [1] St. Politehnica. Ed. D. Academic Press. 1999. Alabastra. Balint. a Timi¸oara. 2000. a a a Bucure¸ti. I. Beu. L. A. USA. D. Numerical Analysis. 1998. 1995. Maru¸ter. Elsevier. Despi. Bonchi¸.pagina de help 151 . [8] St. N. Dinu. P. Ed. Ed. B. Matrix Rom. Iordan. 1981. L. Mitran. Maple. Ed. Timisoara. 1994. Analizˇ Numericˇ . Caruntu. Metode numerice ˆ rezolvarea ecuatiilor neliniare. Ed. Peterson. a s [3] T. Dogaru. Editia a 2-a. A. a [7] W. An Introduction with Applications. s [6] O. Balmez. Calcul numeric ˆ C. Luca. [12] MapleV4 . L. Libris. Bu¸ s ın ¸ a cure¸ti. Bocsan. Popescu. Cluj-Napoca. S. Brˇescu. Matematici asistate pe calculator . Naslau. Lincˇ. Ed. M. Zancu. s [9] P. Tehnicˇ. Petcu. R. Patel. Negrea. Bucure¸ti. Algoritmi si teme speciale de analizˇ numericˇ Ed. 2000. 1998. Berbente. Gh. Dumitrascu. Metode Numerice. 2005. Cluj-Napoca. ın ¸ [4] G. Humboldt State University. Popovici Informaticˇ pentru definitivare si grad . a a [5] M.

Sign up to vote on this title
UsefulNot useful