Sunteți pe pagina 1din 158

Universitatea de Vest din Timioara Facultatea de

Matematica i Informatica
METODE NUMERICE
PROBLEME DE SEMINAR I LUCRARI DE
LABORATOR
Simina Mari Liliana Braescu
Timioara
2007
Introducere
Procesul de restructurare al nvmntului Superior din Romnia i trecerea acestuia pe trei
cicluri, a determinat la nivelul ntregii tri elaborarea de noi planuri de nvatamant si de
programe analitice adecvate.
Metode numerice - Probleme de seminar i lucrri de laborator este un material
aditional la cursul de Metode numerice elaborat n acord cu noile cerinte, pe baza programei
analitice conceput la nivelul Departamentului de Informatica si aprobata n Consiliul Profesoral
al Faculti de Matematica si Informatica de la Universitatea de Vest din Timisoara.
Problemele si lucrarile de laborator prezentate n aceasta carte se adreseaz n primul rnd
studentilor de la Facultatea de Matematica si Informatica, fiind abordate toate temele din
programa analitica, la nivelul studentilor Sedpei de Informatic aflati n semestrul al cincilea de
studiu, oferind exemple si detalii referitoare la metodele numerice prezentate n curs.
Lucrarea este structurata pe sapte capitole, primul dintre acestea fiind rezervat pentru
prezentarea unui set de cunostinte minimale de programare n Maple. Capitolele 27 corespund
capitolelor din cursul de Metode numerice si sunt organizate dupa cum urmeaza:
breviar teoretic
problema rezolvata
probleme propuse
implementare
Prin aceast lucrare, autorii pun la dispozitia cititorilor toate cunostintele necesare n
vederea construirii de algoritmi si proceduri capabile s ia ca argument un obiect matematic si
sa returneze un rezultat final.
Autorii
1

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. Comparaie cu metoda lui Jacobi si cu solutia exact
Metoda relaxrii succesive. Comparatie cu metoda Gauss-Seidel
si cu solutia exacta
7. Metoda lui Newton simplificata n
dimensiunea n. Comparatie cu metoda lui New
ton clasica n dimensiunea n
8. Metoda lui Newton simplificata n dimensiunea 1. Comparatie cu metoda lui Newton
clasica. Reprezentare intuitiva.
9. Polinomul lui Newton cu diferente finite la dreapta. Comparatie pentru o fundpe
cunoscuta
10. Polinomul lui Newton cu diferente finite la stanga. Comparatie pentru o fundpe
cunoscuta
11. Functia spline
liniar. Comparatie pentru o fundpe cunoscuta
12. Polinoame
Bernstein. Comparat cu polinomul Lagrange pentru o functie cunos-
cuta.
13. Aproximarea derivatei prin diferente finite. Comparatie cu valoarea exact si ntre diferite
valori ale pasului h.
14. Formule de tip Gauss de ordinul 3, 4. Comparatie cu rezultatul exact.
15. Metoda lui
Taylor de ordinul 3. Comparatie cu rezultatul exact.
Metoda Runge-Kutta de ordinul 3. Comparatie cu rezultatul
exact, pentru diverse
valori ale parametrilor.
16. Metoda Runge-Kutta de ordinul 4. Comparatie cu rezultatul exact, pentru diverse valori
ale parametrilor.
17. Metoda Adams-Bashforth de ordinul 3. Comparatie cu rezultatul exact, pentru diverse
valori ale parametrilor.
18. Metoda Adams-Bashforth de ordinul 4. Comparatie cu rezultatul exact, pentru diverse
valori ale parametrilor.
2

19. Metoda Adams-Bashforth de ordinul 5. Comparatie cu rezultatul exact, pentru diverse
valori ale parametrilor.
Cuprins
1 MapleV4 - scurta introducere 4
1.1 Reguli generale de introducere a comenzilor ................................................................ 4
1.2 Pachete de programe .................................................................................................... 6
1.3 Constante, operatori i functii 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 relaxarii succesive .......................................................................................... 64
3 Ecuaii si sisteme de ecuaii neliniare 68
3.1 Metoda punctului fix .................................................................................................. 68
3.2 Metoda lui Newton ...................................................................................................... 73
4 Interpolare polinomiala. Functii spline 83
4.1 Polinomul lui Newton cu diferente divizate ................................................................. 83
4.2 Polinomul de interpolare Lagrange ................................................................. 92
4.3 Interpolare spline ....................................................................................................... 95
4.4 Polinoame Bernstein ................................................................................................. 104
5 Derivare numerica 107
5.1 Aproximarea derivatei prin diferente finite .......................................................... 107
5.2 Aproximarea derivatei .............................................................................................. 109
6 Integrare numerica 112
6.1 Formule de tip Newton-Cotes ................................................................................... 112
6.2 Formule de tip Gauss ............................................................................................... 115
7 Ecuaii difereniale 118
7.1 Metoda diferenelor finite ....................................................................................... 118
7.2 Metoda lui Taylor .................................................................................................... 124
7.3 Metoda Runge-Kutta ............................................................................................... 128
3

7.4 Metoda Adams-Bashforth ........................................................................................ 132
7.5 Metoda Adams-Moulton .......................................................................................... 136
7.6 Metoda predictor-corector ....................................................................................... 137
7.7 ..............................................................................................................................................................
Probleme la limita liniare ................................................................................................. 141
7.8 Metoda colocatiei i metoda celormai mici
patrate 147
Capitolul 1 MapleV4 - scurt
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. reprezentari grafice.
In cele ce urmeaz, vom prezenta principalele elemente necesare n programarea unor metode
numerice, corespunzatoare softului MapleV4.
1.1 Reguli generale de introducere a comenzilor
Un document MapleV4 poate avea patru tipuri de campuri:
1. comenzi Maple (introduse de ctre utilizator);
2. rezultate Maple (raspunsuri ale CAS-ului la comenzile introduse);
3. grafice (raspunsuri ale CAS-ului);
4. texte (introduse de catre utilizator).
In continuare, vom prezenta cateva reguli de introducere a comenzilor.
1. Orice comanda se termina cu ; (daca dorim s afiseze rezultatul) sau : (daca nu dorim ca
rezultatul sa fie afisat). De exemplu:
> sin(Pi);
0
> 1+3:
2. Asignarea se face cu := , iar dezasignarea se face prin asignarea numelui variabilei. De
4

exemplu, putem avea secvena:
> x:= 7;
x := 7
> x:=x+1:
> x;
8
> 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 diferenta ntre litere mici si litere mari:
> x:=3; X:=5; a:=X-x;
x := 3 X := 5
a := 2
5. Secventele sunt scrise ntre paranteze rotunde, ( ), listele ntre paranteze patrate, [ ], iar
mulfimile 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 functii se pun ntre paranteze rotunde, () , iar indicii ntre paranteze
patrate, [] .
> a:=cos(Pi); b:=lista[2];
a := 1 b := 1
7. Procentul, % , face referire la ultima comanda executat anterior. De exemplu:
> a:=2;
a := 2
> b:=%+1;
b := 3
8. Dac rezultatul furnizat de Maple este identic cu comanda introdus (Maple rspunde prin
ecou la comanda), atunci aceasta arata ca Maple nu poate interpreta comanda introdus.
Pentru a remedia situaia, verificai daca ai introdus corect comanda sau daca nu cumva
functia utilizata face parte dintr-un pachet care trebuie ncarcat n prealabil.
5

> arctg(1); # o ncercare de a calcula arctangenta de 1
arctg(1)
> arctan(1); # apelarea corecta a functe arctangenta
n
4
9. Pentru a nu retine eventuale atribuiri anterioare, este util ca pentru rezolvarea unei
probleme noi sa ncepem cu instructiunea
> restart;
1.2 Pachete de programe
Pachetele sunt colectii de functii care permit efectuarea de calcule specifice. Apelarea lor se face
cu ajutorul comenzii with(nume_pachet). Pentru a apela o anumita fundpe dintr-un pachet, se
foloseste sintaxa: pachet['functie'](argumente)
Printre cele mai utilizate pachete sunt: plots - pentru reprezentri grafice;
DEtools - pentru rezolvarea ecuatiilor diferentiale; lnalg - pentru rezolvarea unor probleme de
algebra liniara; student - pentru analiza matematica.
De exemplu, la apelarea pachetului grafic, se obtine lista tuturor fundpilor apelabile:
> wth(plots);
Warnng, the name changecoords has been redefned
[animate, animate3d, changecoords, complexplot, complexplot3d, conformal, contourplot,
contourplot3d, coordplot, coordplot3d, cylnderplot, denstyplot, display, display3d,
feldplot, fieldplot3d, gradplot, gradplot3d, implicitplot, implicitplot3d, nequal,
lstcontplot, listcontplot3d, lstdenstyplot, listplot, listplot3d, loglogplot, logplot,
matrixplot, odeplot, pareto, pontplot, pointplot3d, polarplot, polygonplot,
polygonplot3d, polyhedraplot, replot, rootlocus, semlogplot, setoptions, setoptions3d,
spacecurve, sparsematrixplot, sphereplot, surfdata, textplot, textplot3d, tubeplot]
1.3 Constante, operatori si funcii des utilizate
Constantele folosite de Maple sunt:

Constanta Semnificaie
false fals
true adevrat
gamma constanta lui Euler
infinity +00
Catalan constanta lui Catalan
Fail valoare de adevr necunoscut
Pi 7r
I unitatea imaginar
NULL secvena vid
6

Operatorii folosii frecvent sunt:

Funcii folosite frecvent n Maple:

1.4 Structuri de date: secvente, liste, multimi, siruri de caractere
1.4.1 Secvente
O secvena este o nsiruire de expresii, separate prin virgule. Exist mai multe moduri de a defini o
secventa:
a. direct:
> s:=1,2,3,4; t:=(a,b,c);
s := 1, 2, 3, 4 t := a, b, c
b. cu ajutorul functiei seq:
> seq(3*x, x=2..7);
6, 9,12,15,18, 21
c. cu ajutorul unui ciclu for (vezi sectiunea 1.7.1)
Cu ajutorul functiilor min si max se poate calcula minimul, respectiv maximul unei secvente.
> min(s); max(s,2,15);
3
15
Operator Sintax Semnificaie
+ , - a+b, a-b suma a + b (diferena a b)
* a*b, 2*a produsul a b, sau 2a
/ a/b
/V 1 CI
catul
b
puterea a
~, ** a~b, a**b
! n! factorialul 1-2 n
max, min
max(a,b,c),
min(a,b,c)
maximul (minimul) dintre a, b, c

operatori booleeni
: = f:=expr operatorul de asignare / = expr
= a=b ecuaia a = b

x=a..b a < x < b
and, or, xor,
implies, not

operatori logici
Funcie Sintax Semnificaie
sin, cos, tan, cot sin(x) , ... funcii trigonometrice
arcsin, arctan, arccos arctan(x), ...

ln, loglO ln(x), log10(x) logaritmi
exp exp(x), exp(1) funcia exponenial
sqrt sqrt(x) radical
abs abs(x) modul
7

1.4.2 Liste
O list este o secventa de expresii, scrisa ntre paranteze patrate, [ ]. 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 numrul de operanzi din lista cu ajutorul functiei nops:
> nops(ll);
11
Al n-lea element din lista poate fi afisat cu una din comenzile op(n,ll) sau ll [n]:
> aa:=ll[3]; bb:=op(9,ll);
aa := 5 bb := a
Functia member(elem, ll) returneaza true dac elementul respectiv se afl n list ll, si false n caz
contrar:
> member(d, ll);
false
Lista vida este desemnata prin [] :
> lista: = [] ;
lista := [ ]
Se poate adauga 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 lista ll astfel: subsop(n=NULL,ll). De exemplu:
> lista:=subsop(2=NULL, lista);
lista := [d, f]
1.4.3 Multimi
O mulime este o secven de expresii, scris ntre acolade, {}, n care fiecare element figureaz o
singura dat. De exemplu:
> ll:={1,2,5,2,4,2,7,2,a,2,c};
ll := {1, 2, 4, 5, 7, a, c}
Adaugarea unui nou element la multime, sau stergerea elementului de pe pozitia n se face la fel
ca la liste.
Multimea vida este desemnata prin {}.
Reuniunea a doua multimi se face utilizand operatorul union:
> s:={1,2,3} : t:={2,3,4} :
> s union t;
{1,2,3,4}
Intersecta a dou multimi se realizeaza cu ajutorul operatorului intersect:
> s intersect t;
{2,3}
Diferenta a doua multimi se realizeaza utilizand operatorul minus:
> s minus t;
{1}
> s minus s;
{}
8

1.4.4 iruri de caractere
irurile de caractere sunt delimitate de apostrof invers,', dupa cum urmeaz:
> 'acesta este un sir';
acesta este un sir
irurile de caractere se pot concatena cu ajutorul comenzii cat. De exemplu, putem avea:
> i:=4;
i := 4
> cat( 'Valoarea lui i este ', i);
Valoarea lui i este 4
Atentie! La concatenarea unui sir de cifre, se obtine un sir de caractere, nu un numar:
> 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
1.5 Calcule cu matrice si vectori. Pachetul linalg
Cu ajutorul cuvantului-cheie array se pot defini vectori i matrice.
Un vector se definete n urmtorul mod:
> v:=array(1..dim_vect);
Elementele unui vector se pot defini unul cte unul, sau printr-un ciclu for (vezi sectiunea
1.7.1):
> v:=array(1..4);
v := array(1..4, [ ])
> v[1]:=a; v[2]:=b; v[3]:={a,b}; v[4]:=3;
vi := a
V2 := b
V3 := {a,b}
v4 := 3
> evalm(v); # evalueaza valoarea lui v
[a, b, {a, b}, 3]
O matrice se defineste astfel:
> M:=array(1..nr_rand, 1..nr_col);
Elementele unei matrice se pot defini unul cate unul, sau printr-un ciclu for (vezi sectiunea
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
1a 3 {}
9

Un alt mod de a defini matrice si vectori, precum si de a efectua operaii specifice cu aceste
obiecte, este folosirea pachetului linalg. Pachetul linalg se ncarca 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 definete 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]);
" 1 2
3 4 5 6
dar si
> f:=(i,j)->i+j; # functia generatoare a elem matricei
/
:
= (
i,j
) ^
i
+
j

> b:=matrix(2,3,f); # adica b [ i , j ] = f ( i , j )
2 3 4 3 4 5
Elementul ai j se scrie a[i,j]. Astfel, pentru matricea a din exemplul anterior, putem avea:
> a[3,1];
5
Un vector se definete 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;
/ := x ^ 2x +1 w:=vector(5,f); # adica
w[i]=f(i)
w := [3, 5, 7, 9,11]
Elementul i al vectorului v, vi, se scrie v[i]. Astfel, pentru vectorul v din exemplul anterior, putem
avea:
> v[3];
8
Redm mai jos cele mai utilizate functii din pachetul linalg, mpreun cu descrierea lor. Pentru
mai multe detalii referitoare la aceste functii, precum si la celelalte functii din pachetul linalg, se
poate consulta pagina de help referitoare la pachetul linalg.
a :=
b
11

Descriere
addcol(A,c1,c2,m)
addrow(A,r1,r2,m)
adj(A), adjoint(A)
angle(u,v) augment(A,B)
backsub(U,b)
band(b,n)
cholesky(A)
col(A,i), col(A,i..k)
coldim(A)
crossprod(u,v)
delcols(A,r..s)
delrows(A,r..s) det(A)
diverge(f) dotprod(u,v)
exponential(A)
extend(A,m,n,x)
f orwardsub(L,b)
gausselim(A) nlocuiete
coloana c2 a matricei A cu m*c1+c2
nlocuiete linia r2 a matricei A cu
m*r1+r2
calculeaza matricea adjuncta a matricei A
calculeaz unghiul vectorilor u i v
concateneaz (altur) matricile A i B pe
orizontala
rezolva sistemul Ux=b, prin substitute
inversa, unde U este o matrice superior
triunghiulara
construieste o matrice n x n care are pe
diagonala principala elementele vectorului
b, iar celelalte elemente sunt nule
efectueaza descompunerea Cholesky a
matricei A
extrage coloana i, respectiv coloanele i
pana la k, din matricea A returneaza
numarul de coloane ale matricei A
returneaza produsul vectorial al vecto-
rilor u si v
sterge coloanele de la r la s din matricea A
sterge liniile de la r la s din matricea A
calculeaza determinantul matricei A
calculeaz divergena vectorului f
calculeaza produsul scalar al vectorilor u
si v
calculeaza e
A

adaug m linii si n coloane matricei A,
initializate cu x
rezolva sistemul Lx=b prin substitute
nainte, unde L este o matrice inferior
triunghiulara
efectueaza eliminarea gaussiana cu
semipivot asupra matricei A

continuare pe pagina urmtoare
Funcie
12

Pachetul linalg - continuare
Descriere
geneqns(A,x)
genmatrix(sist, var)
grad(expr, vect)
inverse(A) matadd(A,B,c1,c2)
minor(r,c)
mulcol(A,c,expr)
mulrow(A,r,expr)
multiply(A,B) norm(A)
normalize(v) rank(A)
row(A,i), row(A,i..j) rowdim(A)
scalarmult(A,s) stack(A,B)
submatrix(A,r1..r2,c1.. c2)
subvector(A,r1..r2)
swapcol(A,c1,c2)
swaprow(A,r1,r2)
trace(A) vectdim(v)
genereaz un sistem de ecuaii
pornind de la matricea A si
vectorul necunoscutelor x
genereaza matricea coeficientilor sis-
temului sist, in raport cu multimea
variabilelor var
calculeaza gradientul expresiei expr, in
functie de variabilele vect calculeaz
inversa matricei A calculeaza c1*A+c2*B
calculeaz minorul de ordin (r,c) (elimin
linia r si coloana c) din matricea A
multiplica coloana c a matricei A cu ex-
presia expr
multiplica linia r a matricei A cu expre-
sia expr
efectueaza nmultirea matricelor A si B
calculeaza norma matricei A calculeaza
versorul vectorului v calculeaza rangul
matricei A extrage linia i, respectiv liniile
de la i la j, ale matricei A
returneaza numarul de linii din ma-
tricea A
nmulteste toate elementele matricei A cu
scalarul s
concateneaza matricele A si B pe verti-
cala
extrage o submatrice a matricei A, ntre
liniile r1, r2, si coloanele c1, c2 extrage
un subvector al vectorului A, de la rangul
r1 la rangul r2 interschimba coloanele ci
si c2 ale matricei A
interschimba liniile ri si r2 ale matricei A
calculeaza urma matricei A returneaza
dimensiunea vectorului v

1.6 Grafice
Graficul unei functii se realizeaza folosind comanda plot, a crei sintax este
plot(functie, x=x_min..x_max, y_min..y_max)
Funcie
13

unde argumentul y_min. .y_max este optional.
De exemplu, putem avea:
> plot(sin(x), x=-5..5);


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


14


Mai multe detalii despre grafice se pot gasi accesnd pagina de help referitoare la
instruciunea plot, sau la pachetul plots.
1.7 Elemente de programare
1.7.1 Condiionarea si ciclarea
A. Condiionarea
Sintaxa unei instructiuni conditionale este
if CONDIIE then EXPRESIE
[ elif CONDIIE then EXPRESIE ]
[ else EXPRESIE ]
fi
Instructiunile puse ntre paranteze patrate, [ ], sunt optionale.
De exemplu, putem avea secventa:
> if a<0 then -a else a fi; # pentru calculul
modulului
pentru a returna modulul numrului a.
Un alt exemplu este dat de secventa:
> if x<0 then -1 elif x=0 then 0 else 1 fi; # functia
signum
pentru a returna semnul unui numar (functia sgn).
B. Ciclarea
O instructiune repetitiva poate avea una din urmatoarele doua sintaxe:
[ for CONTOR ] [ from EXPR ] [ by EXPR ] [ to EXPR ]
[ while EXPR ]
do INSTRUCTIUNI od;
sau
[ for CONTOR ] [ in EXPR ] [ while EXPR ] do

15

INSTRUCIUNI od;
unde:
- from indica punctul de plecare n iteratie (daca este omis, valoarea sa implicit este
1);
- by indica pasul contorului (dac este omis, se consider implicit ca are valoarea 1);
- to indica punctul de oprire a iteratiei (daca este omis, se consider implicit c are valoarea
+TO si se obtine o bucla infinita);
- while indica o expresie booleana, care trebuie sa poat fi evaluat ca adevarat sau falsa;
- in indica 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 secvente, liste, multimi, 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, [ ])
vi := 1
v2 := 5 v3 := 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] :=ij od; od;
> evalm(M);
1 1 1 1
2 4 8 16
3 9 27 81
Putem afisa elemetele unei liste (secvente, multimi, matrice, vector) astfel:
> lista:=[3,2,4,5,1]:
> for i in lista do print(i) od;
Mai multe detalii despre instruciunile de conditionare si de ciclare se pot gasi accesnd pagina
de help referitoare la acestea.
16

Functii si proceduri
O functie poatefi definita cu ajutorul operatorului ->. Putem defini functii de o variabila
sau functii de mai multe variabile.
> f:=x->x~2+1;
f := x ^ x
2
+ 1
> g:=(x,y)->x~2+y;
g
:
=
(x,
y
)
^
x2
+ y
> f(3) ;
10
> g(3,4) ;
13
> g(4,3);
19
O procedura este un grup de instructiuni, variabile si constante. Sintaxa este:
proc (ARGUMENTE)
local VARIABILE_LOCALE; global VARIABILE_GLOBALE; options
OPTIUNI; description SIR_DE_CARACTERE;
INSTRUCTIUNI;
end;
O procedura returneaza ultimul rezultat obtinut. Pentru a forta returnarea unui alt rezultat, se
foloseste RETURN. De asemenea, pentru a returna un mesaj de eroare, se foloseste 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 procedura este urmatorul:
> 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 urmatoarele 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 so/utii rea/e
> ec2(1,2,-3); # ecuatia x~2+2*x-3=0
17

1, -3
Pentru a defini tipul unui argument, se foloseste sintaxa argument: :tip. De exemplu, sa luam
urmatoarea procedura si situatiile care pot aparea:
> # 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
imbunatti astfel:
> determinant1:=proc(A)
if not type(A, matrix)
then ERROR('argumentul trebuie sa fie matrice!!!') fi;
RETURN(det(A)) end:
care produce urmatorul 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: s i se ob ine
urmatorul rezultat:
> determinant3(2);
Error, invalid input: determinant3 expects its 1st argument, A, to be of type matrix,
but received 2
Mai multe detalii despre tipurile existente se pot gasi accesand pagina de help (cuvntul
cheie este type).
Un alt exemplu este procedura rdc, procedur pentru calculul lui
y/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(nwmar negativV) elif x = 0
then RETURN(to) else simplify(1/(x" (1/2))) end if end
proc
> rdc(-1);
Error, (in rdc) numar negativ!
> rdc(0);
TO
> rdc(4);
1
18

2
Pentru a putea urmari executia unei proceduri, se folosete debug, iar pentru a stopa
urmarirea, se foloseste 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);
{> enter f, args = 2, 4
y :=
4
1
Z
4
< exit f (now at top level) = 17/4}
17
T
> f(0,1);
{> enter f, args =0, 1
1
V
'-=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 i proceduri, precum s i despre op t iunile debug s i undebug,
puteti gsi pe paginile de help referitoare la acestea.
Capitolul 2 Rezolvarea
sistemelor liniare
In acest capitol vom prezenta metode de rezolvare a sistemelor liniare de tip Cramer (numarul
de ecuatii este egal cu numarul de necunoscute, si determinantul matricei sistemului este
nenul):
auxi + ai2X2 + ... + a\nxn = b\
a
21
x
1 +
a
22
x
2 + +
a
2n
x
n =
b
2 (2 1)
19

(
Z.I
)


a
n1
x
1 +
a
n2
x
2 + +
a
nn
x
n =
b
n
n care ai j i bi sunt numere reale date, i = 1.. . n, j = 1... n, iar x1, x2,..., xn sunt numere reale
necunoscute.
Sistemul (2.1) se poate scrie matriceal sub forma:
Ax = b
unde: A = (a,ij)ii j=j^ , b = (G, b2,..., bn)
T
, x = (xi,x2, ,xn)
T
.
Daca matricea A este nesingulara, sistemul Ax = b are solutie unica:
x = A
-1
b.
Deoarece n cele mai multe cazuri matricea A are numr mare de linii si coloane, iar calculul
matricei A
-1
este dificil si acumuleaz erori, se impun metode directe i 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 substitutie invers.
Constructia sistemului superior triunghiular se face astfel: la pasul k se elimina xk din
ecuaiile k + 1, ..., n, prin nmultirea ecuaiei k cu
a
ik
mik = --------
a
kk
(elementul akk se numeste pivot) si adunarea acestora la ecuatia i (i > k).
In functie de alegerea pivotului, exista urmtoarele variante ale metodei lui Gauss:
20

1. metoda lui Gauss clasic - n care la fiecare pas, pivotul este elementul akk, k = 1,77.;
2. metoda lui Gauss cu semipivot - n care la fiecare pas, se alege ca pivot elementul aik maxim
n valoare absoluta pe coloana, pentru i > k, permutandu-se linia k cu linia i;
3. metoda lui Gauss cu pivot total - n care la fiecare pas, se alege ca pivot elementul maxim
atat pe linie, cat si pe coloana, pentru i > k, j > k, permutandu- se linia k cu linia i si coloana
k cu coloana j;








(2.3)

bk T ki Xj ] , k = n 1, n 2, . . . , 1 *
a k k

Observaia 2.1.1. Cu ajutorul eliminarii gaussiene se poate determina si inversa unei matrice.
Redam n continuare algoritmul de aflare a inversei unei matrice A.
1. generarea matricei B prin concatenarea matricelor A (de dimensiune n) cu matricea In.
2. pentru i = 1, n
m = Bn
pentru j = 1, 2n
Bij
JD __________
L
J_
->ij
m
pentru j = 1, n, j ^ %
mi = Bji
pentru k = 1,2n
B
jk
B
jk
m
i
B
ik
3. prin tergerea primelor n coloane ale matricei B astfel transformate, se obine inversa
matricei A
/
a
ll
a
l2

0
a
2
2

0 0
V
0 0
( xi \
x2
x
n-1
\ n /
( bl \
b2
b
n-1 V bn )
a
l,n
a
2,n
(2.2)
In acest fel, sistemul (2.1) se reduce la forma superior triunghiular
\
0
a
n- l,n-1
a
n-l,n
0
0 a
nn
a
l,n-2
a
l,n-l
a
2,n-2
a
2,n-l
iar rezolvarea sistemului (2.2) se face prin substituie invers:
b
n
Xn
Xk
21

2.1.2 Probleme rezolvate
Exerciiul 2.1.1. Sa se rezolve urmtorul sistem folosind cele trei variante ale eliminrii Gauss:
x + y + z = 6 2x
y + 3z = 9 x +
4y + z = 12.
Matricea sistemului este
1 1 1
2 -13 1 4 1
iar A este matricea sa extinsa:
1 1 1 6
A= (A,b) = ( 2 1 3 9
1 4 1 12
Deoarece numarul ecuaiilor este egal cu cel al necunoscutelor si
det A = 3 = 0,
sistemul este compatibil determinat (de tip Cramer), si deci metoda eliminarii a lui Gauss este
aplicabila.
In continuare, pentru a efectua operabile asupra matricei extinse a sistemului vom nota linia
i cu Li; iar coloana j cu Cj.
Rezolvare utiliznd metoda lui Gauss clasica
A. Constructia sistemului superior triunghiular






Pasul 2
pivot: a22 = 3
- = i
-3


A
Pasul 1
pivot: an - 2
1
-2
1
m-
21
1
1
mu
1
1
2
1
1
1
13
6
9
1 12
4
L2^L2+m2i
Li
Ls^Ls+msi
Li
1 1 1 6
0 -
3 1 -
3 0 3
0 6
m,32
1 1 1 6
0 -
3 1 -
3
0 3 0 6
1 1 1 6
0 -
3 1 -
3
0 0 1 3
L'i^L'i+m32L
2
In acest moment am ajuns la un
sistem de forma Ax
n care matricea A este superior
triunghiulara, unde:
22


b, echivalent cu sistemul iniial,


B. Rezolvarea sistemului superior triunghiular
Prin metoda substitutiei inverse, avem:
3
Z=

S/= 3g(-3 - l-z)
1/
x =-(6 1 y 1 z), de unde obinem soluia
sistemului: x =1, y = 2, z = 3.
Rezolvare cu metoda lui Gauss cu semipivot
A. Constructia sistemului superior triunghiular
Pasul 1

Ca pivot se ia elementul an de modul maxim de pe coloana 1. In cazul nostru, pivotul
este ai2, deci se permuta linia 1 cu linia 2, si se fac zerouri pe coloana 1 pentru i > 1:
' 1 1 1 6 \ / 2 -13 9
2 -13 9
La
~
Ll
> 1 1 1 6
1 4 1 1 2 / \ 1 4 1 1 2
1 1 1
0 -3 1
0 0 1
6
-3
3
x
y
A
x
In acest moment am ajuns la un sistem de forma Ax = b, echivalent cu sistemul iniial,
unde matricea A este superior triunghiulara, iar:
23



2 -1 3 9
0 3 _1 3
u
2 2 2
n _i i
U
2 2 2

Pasul 2
Ca pivot se ia elementul ai2 de modul maxim de pe coloana 2, pentru i > 2. In cazul
nostru, pivotul este a32, deci se permuta linia 2 cu linia 3 si se fac zerouri pe coloana 2,
pentru i > 2:




Z/2Z/2
-

2-^1
Ls^-Ls
^Li
2 - 1 3 9
1 1 1 6
1 4 1
1 2
2 -1
0 -
w
2
0 I
3 9
3
2
15
2 2
2 -13 9
n I !
U
2 2 2
0 3 _1 3
}
2 2 2
2 -1
0 ^
w
2
0 |
9
1 15
' 2 2 1 3
' 2 2
2
0
0
-1
9
2
0
3 9
15
2
1
3
In acest moment am ajuns la un sistem de forma Ax = b, echivalent cu sistemul iniial,
unde matricea A este superior triunghiulara, iar:
24



B. Rezolvarea sistemului superior triunghiular se face ca si n cazul metodei lui Gauss
clasice, si conduce la solutia x =1, y = 2, z = 3.
Rezolvare cu metoda lui Gauss cu pivot total
A. Constructia sistemului superior triunghiular
Pasul 1
ca pivot se alege elementul aj de modul maxim pentru i, j > 1. In cazul nostru pivotul
este a32, deci se permuta linia 3 cu linia 1, si coloana 2 cu coloana 1:
/ 1 1 1 6 \ / 1 4 1 12 \
2 -13 9 --R 2 -13 9
y 1 4 1 12 J \ 1 1 16/
/ 1 4 1 12 \/ 4 1 1 12 \
2 -13 9 ----RI -12 3 9
\ 1 1 1 ^ /\ 1 1 1 6 /
pentru corectitudinea rezultatului final este necesar ca, ori de cate ori se permut
coloanele matricei extinse, sa se permute si elementele corespunzatoare ale vectorului x.
Astfel, avem:

n final, obtinem:


Pasul 2
ca pivot se alege elementul aj de modul maxim pentru i, j > 2. Deoarece pivotul este a23,
se permuta coloana 3 cu coloana 2:



x
y

z
y

x
z
x
L2^L2 +
JLI
L's^L's
JLI
4 4 1 1
0 2 ^
w
4 4
0 3 3
w
4 4
12
12
3
1
1 1 12
1 2 3 9
1 1 6
4 1 1 12
0 f f 12
0 f f 3
4 1 1 12
0 f f 12
0 | | 3
C3~C2
25







In acest moment am ajuns la un sistem de forma Ax = b, echivalent cu sistemul iniial, unde
matricea A este superior triunghiulara, iar:


B. Rezolvarea sistemului superior triunghiular se face ca si n cazul metodei lui Gauss
clasice, si conduce la solutia x =1, z = 3, y = 2.
Exerciiul 2.1.2. Sa se gaseasca inversa matricei
223
211
312
Rezolvare
Considerm matricea B obtinut prin concatenarea matricei A cu matricea unitate
I3:


Folosind metoda eliminarii a lui Gauss, transformam matricea B dup cum urmeaz:












Ls>Ls~ g
L2
4 1 1 12
O f f 12
4 1 1
O ^ 5
w
4 4
O O
" " 13 13
3

A
x
y
z
x
A
223
211
312
1 0 0 0
1 0 001
B
I 0 0 0
1 0 001
2 2
co

1 0 0
2 1 1 0 1 0
c
o

1 2 0 0 1
11
1 1
2
2 1 1
312
Ll^-U
LI
B
n
1 0 0
\
01 0

00 1
!
1
2 0 0
-1
1 0
3
2
0 1
1
2 0 0
1
-1
0
3
2 0 1
11
1 1
2
211
312
3

2
0 -1 -2
0 -2 -|
3
2
2
L2>L2
B21L1 L3
L3B31L1
L2>
AL2
b
22
3

2
0 -1 -2
0 -2 - |
1
2
-1 1 0 -I 0
1
11 00
3
2
2
11 1
0
5
0 0

1 -1 0
-I o 1
o -2 1 o
_
1
2
1 -1 0 I - 2
1
11
01
10 L1LI
B12L2 L3
L3B32L2
01
00
0 -2
26







Inversa matricei A va fi matricea C, obinut prin tergerea primelor 3 coloane ale matricei B:
_ 1 1
3 3
I
3 3
1

3
Intr-adevar, se verifica uor c
A-C = C-A = I3.
2.1.3 Probleme propuse
Exerciiul 2.1.3. Sa se rezolve urmatoarele sisteme, folosind cele trei variante ale metodei
lui Gauss:
x + 2y + z = 1
3x y + 5z = 14 x +
y z = 2
x + y + z + t = 0 3x
2y z + t = 8
x 2y z + 4t =
1 x + y z + 2t =
1
Exerciiul 2.1.4. Sa se gseasca solufia sistemelor anterioare, calculnd inversa matricei A a
sistemului, si efectuand nmultirea A
1
b.
2.1.4 Implementare
A. Algoritm
Algoritmii pentru cele 3 metode sunt asemantori, diferenta dintre ei aprnd (asa cum se
poate vedea si din exemplul rezolvat) n modul de rezolvare a eliminarii Gauss. Date de intrare:
un sistem de ecuatii (scris ca multime de ecuatii)
Date de ieire: solutia sistemului
Algoritmul consta din urmatoarele etape:
1. generarea matricei extinse a sistemului, A = (Qp-)i=praj=i,ra+i n= numarul de ecuatii
(numarul de linii ale matricei A);
2. a) eliminarea Gauss pentru metoda lui Gauss clasica
- pentru k = 1, n 1
0
0
L3->-JL3
B
33
L1L1
B13L3 L2
L2B23L3
2
1
3
1 o -
0 1 2 O
O |
1 O
01
00
4 1 O
1 -1 0 i -2
1
| 1 O
-1 0
4 2
3 3
100 010
0 0 1
01
00
1 o
_
1
2
1 -1
1 _ 4 2
3 33
1
3
3
4
C


27


dac cikk = O, atunci se caut r pentru care cikr 7^ O,
r = k + 1, n i se schimb linia k cu linia r;
dac toi cikr = 0, r = k + l,n atunci se returneaz eroare;
pentru i = k + 1, n
m =, unde 7^ 0;
a
kk

- pentru j = k,n
a
ij
a
ij +
m
'
a
kj
;

b) eliminarea Gauss pentru metoda lui Gauss cu semipivot

pentru k = l,n 1 se caut elementul de modul maxim pe linie, i.e. dac \cikr| >
\cikk\, r = k + l,n, se schimb linia k cu linia r
pentru i = k + 1, n
m = unde akk 7^ 0;
a
kk

- 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 elementul de modul maxim pe linie i coloan,
i. e. dac |apr| > \cikk\, p,r = k + l,n, se schimb coloana p cu coloana k i
linia r cu linia k
pentru i = k + 1, n
m = ------ , unde akk 7^ 0;
a
kk

- pentru j = k,n
a
ij
a
ij +
m
'
a
kj
;

3. rezolvarea sistemului superior triunghiular prin substitutie inversa
a
n,n+1
x,
a
pentru i = n 1,1
aii
\ j=i+l
B. Programe MAPLE s i rezultate
Deoarece diferitele variante ale metodei lui Gauss se deosebesc doar prin modul n care se
realizeaza eliminarea Gauss, n cele ce urmeaza am implementat separat cele trei variante de
eliminare, folosind procedurile cgauss, spgauss, tpgauss. Aceste proceduri vor fi folosite apoi ca
optiuni n procedura final gauss.
n
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;
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:
Observaia 2.1.2. Instruciunea indets(set_eq) returneaz mulimea nedeterminatelor sistemului
set_eq. Deoarece ordinea elementelor acestei multimi nu este neaparat aceeasi cu ordinea
29


nedeterminatelor din prima ecuatie a sistemului, pot aprea diferente ntre rezultatele furnizate
cu ajutorul codului MAPLE si rezultatele calculate pe hartie. Desi matricea sistemului generata
cu ajutorul instructiunii indets nu este ntotdeauna aceeasi cu matricea sistemului scrisa pe
hartie, rezultatele furnizate de program vor fi aceleasi (eventual ordinea solurilor va fi
schimbata).
Observaia 2.1.3. Pentru a urmari executia unei proceduri, se foloseste instructiunea debug. In
cazul programelor din exemplele de mai sus, se poate folosi urmtorul set de instructiuni:
debug(cgauss):
debug(spgauss):
debug(gauss):
Redm mai jos, cu titlu de exemplu, rezultatul urmaririi procedurilor gauss, cgauss,
spgauss si tpgauss pentru acelasi sistem de ecuatii.
> 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





4 1 1 2
{> enter cgauss, args = A
n := 3 A1 := A 1 1 1
2 -13 1
4 1
m := 2
A12,1 :=0 A12,2 := 3 A12,3 := 1 A!2,4 := 3 m := 1

< 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])}

x3 := 3 s := 0 s := 3
x2 :=
2 s :=
0 s :=
2 s :=
5
x1 := 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);
l := [x, y, z] n
:= 3 1 1 1
2 - 1 3
6
9
A :=
1
3, 1
:= 0
3, 2 := 3
3, 3
:= 0
3, 4
:= 6
m := 1
3, 2
:= 0
3, 3
:= 1
3, 4 := 3

1 1 1 6
A! := 0 3 1

3
0 0 1
3
B2


= {x+y+z = 6, 2*x-y+3*z = 9, x+4*y+z = 12},





A : =
{> enter spgauss, args = A



A
l2,2:=l
Al 2,3 '= ~

mx := 2
mx := S
2 -l S Q
9 -1 15
2 2
0 ? =1 2 2
l
m - Al3,2 := 0
{> enter gauss, args
semipivot
l := [x, y, z] n :=
S
1 l l 6
2 -l S
Q
l 4 l l2
n := S Al := A
l l l
2
-l S
l 4 l
mx
:
=l

mx
:
=2

2 -l S Q
l ll 6
l 4l l2
m
:=
1

A2 :=
Al :=
Al 2, i := 0
2
Al2

4
' -2
l
m -
Al
3, i := 0

9
Al
3, 2
2

-l
Al 3,
3 :


15
Al 3,
4 :
_
~2
Al :=
33



X3 := 3 s := 0 -3 2~
X2 :=
2 s :=
0 s :=
-2 s :=
7 x\ :
= 1
< exit gauss (now at top level) = x = 1 , y = 2 , z = 3 }
x = 1, y = 2, z = 3
Observaia 2.1.4. Pachetul linalg furnizeaz procedurile gausselim i backsub. Astfel, procedura
gausselim efectueaz eliminarea gaussiana cu pivot partial asupra unei matrice n x m.
Procedura backsub ia ca argument rezultatul procedurii gausselim si furnizeaza solutia
sistemului. Astfel, pentru matricea din exemplul precedent, avem:
> A := matrix([[1, 1, 1, 6], [2, -1, 3, 9], [1, 4, 1, 12]]);
1 116 2 - 1 3
9
1 4 1 1 2
> 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.
4)=-1,(2, 3)=-1/2,(1, 4)=9,(1, 1) =2,(3, 1) =0,(2, 1)=
4)=15/2,(3, 2)=0,(1, 2)=-1,(3, 3) =-1/3, (2, 2)=9/2])}

2 -1 3 9


0
9
-1
15

A1 : =
2
~2
~
~2


0 0
-1
"3~
-1

**
:=
T
A1
3, 4
:
=

1
< exit spgauss (now in gauss) = array(1
3, 1 .. 4, [(3, s :
A : =
(2.4)
1 1 -1
2 -1 1
1 3 -2
34


































Factorizarea LU presupune descompunerea matricei A ntr-un produs de matrice L U, unde
(A11 0 ... 0 \ (^11 ^12 . . . ^1n\
A21 A 0 0
^22
00
^2r, 22
(2.5) L U
\
A
n1
A
n2
A
nn /
Aceasta descompunere este posibila daca toti determinani de colt ai matricei A sunt nenuli.
Pentru a asigura unicitatea descompunerii, trebuie precizate n elemente ale matricei L sau U. In
mod traditional, se specifica An sau ^a; dac An = 1 atunci factorizarea LU se numeste factorizare
Doolittle, iar daca ^ii = 1 se numeste factorizare Crout. Astfel, rezolvarea sistemului (2.4) se reduce la
rezolvarea sistemelor triunghiulare
(2.6) Ly = b
cu solua
h_
An
y
1
(2.7) i-i
b
i
-
^
A
ij
y
j j=1
, i = 2, 3,..., n
A
ii
yi
s
i

cu solua
(2.8) Ux = y
y
n
x
n =
f^nn
x
i (
y
i ^ ^ij
x
j
(2.9)
j=i+1
2.2.2 Problema rezolvata
Exerciiul 2.2.1. Sa se determine solua sistemului urmator, folosind factorizarea LU:
x + y-z = 2 2x - y
+ z =1 x + 3y - 2z
= 5.
Sistemul se scrie n forma matriceala:
Ax = b,
unde
1 1 -1
2 -1 1
1 3 -2
2
1
5
x
y

z
A
x
Deoarece
11
21
= -3 = 0 1=0 -3 = 0
x
35






































rezult c matricea A este nesingular i are toi determinanii de col nenuli, deci se poate folosi
factorizarea LU pentru rezolvarea acestui sistem.
Rezolvare folosind factorizarea Crout A.
Factorizarea Crout Presupunem ca
A11
0
0

1
h12
h1
3
A21 A2
2
0
0 1
h2
3
A31
A3
2
A33 )
0
0 1
1 1 -1
2 -1 1
1 3 -2
A
si ne propunem sa determinam coeficientii lj, Ujk. nmultirii
matricelor. Astfel, avem:
Pentru aceasta, folosim definita
a
11
=
- A11 1
A
1
1
a
12
=
=
A11
h1
2

h1
2
a
13
=
=
A
11
h1
3

h1
3
a
21
=
C
M

1

1

1
A
2
1
a
22
=
C
M

1

1

h1
2
+
A
2
2
1
A
2
2
a
23
=
C
M

1

1

h1
3
+
A
2
2
h23

h2
3
a
31
=
A
31 1
A
3
1
a
32
=
A
31
h1
2
+
A
3
2
1
A
3
2
a
33
=
A
31 h1
3
+
A
3
2
h23 +
A
33 1
A
3
3

/
1

00

1
1 -1


L =
2
-
3 0 \ ,
U = 0
1
-1 .

l
1 21

0 0 1

1
1
-1
2
-3
-1
1
2
1
sau
B. Rezolvarea sistemelor triunghiulare
Pentru rezolvarea sistemului initial, avem de rezolvat doua sisteme triungiulare:

1 0 0
2 -3 0
1 2 1
2
1
5
a crui soluie este

2
1
1
y
si respectiv:
11
01
00
x
y
z
a crui soluie este
1
2
1
x
y

z
x
36




































Rezolvare folosind factorizarea Doolittle
A. Factorizarea Doolittle
Presupunem ca
1 0
0

( ^11
^12
^1
3
A
21 1
0

0
^22
^2
3
A
31
A
32 1

0
0
^3
3
1 1 -1
2 -1 1
1 3 -2
A
si ne propunem sa determinam coeficieni Uj, ^jk, la fel ca si n exemplul precedent. Astfel avem:
a
ii =
1
^11
a
12 =
1
' ^12
a
13 =
1
' ^13
a
21 =
A
21 ^11
a
22 =A21 ^12 +
1
^22
a
23 =
A
21 ^13 +
1
^23
a
31 =A31^11
a
32 =
A
31 ' ^12 +
A
32 ' ^22
a
33 =
A
31 ' ^13 +
A
32 ' ^23 +
1
' ^33
^ ^11 =
1
^
^12 =
1
^
^13 =
1

^ A21 = 2
^ ^22 =
3
^
^23 =
3

^ A31 = 1
2
'
3
^ ^33 =
1

A
32
sau
0 0
1 0
1 1 -1 0 -3 3
0 0 1
L U
B. Rezolvarea sistemelor triunghiulare
Pentru rezolvarea sistemului iniial, avem de rezolvat doua sisteme triungiulare:
2
1
5
a carui solutie este
2
-3
1
si respectiv:

00
10
1 -- 1
x
3



y
1 1 -1
0 -3 3
0 0 1
2
-3
1
x
y
z
a carui solutie este
1
2
1
x
y
z
37


2.2.3 Probleme propuse
Exerciiul 2.2.2. Sa se gseasc soluiile urmtoarelor sisteme, folosind cele dou variante ale
factorizarii LU:

2.2.4 Implementare
A. Algoritm
Date de intrare: un sistem de ecuatii Date de ieire: solutia
sistemului
Algoritmul consta din urmatoarele etape:
1. generarea matricei A a sistemului, si a vectorului coloana b
n = numrul de linii ale matricei A (numarul de ecuatii ale sistemului)
2. a) factorizarea Crout pentru i = 1, n


pentru j = i + 1, n

b) factorizarea Doolittle
pentru i = 1, n
^ii
1

pentru i = 1, n
pentru j = 1, i 1

pentru j = i,n
^ii
1

pentru i = 1, n pentru j = 1, i

i-l
38


y
ij =
a
ij -E ^ik hkj
k=l
3. Rezolvarea celor dou sisteme triunghiulare
h
Vl =
Y~
A11
pentru i = 2, n
Vi = ( bi ~ ^2 '^7
j=l
ii

y
n
X.
n
I^nn
pentru i = 2, n
(yi ^ ^
V j=i+i /
yii

B. Programe MAPLE si rezultate
Deoarece cele doua variante ale descompunerii LU difera doar prin modul de facto- rizare a
matricei sistemului, am implementat separat cele dou variante de factorizare: LUcrout si
LUdoolittle, dupa care le-am folosit ca optiuni n procedura finala 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;
-1 1 1
1 2 -1
2 1 3
39


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
' -11 12
eqm := 12 -11
|_ -2 1 3 5
1st := {z, x, y} n := 3
A :=
40



s : = 0
auxi := 2 s := 0 s := 2 aux2 := 1 s := 0 s := 4 s := 3 aux3 := 2 s := 0 rez3 := 2 s := 0 s := 0 rez2
:= 1 s := 0 s := 1 s := 3 rezi := 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 clasa speciala de sisteme liniare este aceea n care matricea A a sistemului este tridi- agonala,
adica:
b := [2, 1, 5]

O

o

T
-
H

I


1 -1 -1
lu : = 1 3 0
, 0 10

. -2 - 11

0 01

-1
00

L : =
1
30


-2 -1 1


1 1
-1

U : =
0 1 0


0 0 1


(A
C2
0 0 . .. ... ... 0

0,2
b2
C3 0 . .. ... ... 0
A = 0
03 b3 C3 .
.. ... ... 0

0

. .
a
n-1
b
n-1
c
n

0


. .
0 a
n
b
n J
2 1 1 0
0 3 2 1
0 0 2 1
4 1


Pentru aceste sisteme se aplic factorizarea LU. Astfel, matricea A se descompune, folosind un
caz particular al factorizarii Crout, ntr-un produs L U unde:

i


Coeficienii a2, ..., an sunt cunoscuti din matricea A, iar coeficienii $, y,j se obtin din
definita nmultirii matricelor:
Pi b\
Pi Vi+i = Ci+i, i = 2,n-l
ca ^ + Pi = bi, i = 2, n
2.3.2 Problem rezolvat
Exerciiul 2.3.1. Sa se rezolve sistemul tridiagonal:


Rezolvare
Matricea sistemului este
/Pi
0 0 . . . 0 0
a
2
P2 0 . . . 0 0
0 0 0.
P
n-1 0
0
0 0.
.
a
n
P
n
L
(2.11)
1
V2
0 . 0 0
0 1 V3 0 0
0 0 0 . 1 Vn
0
0
0

1

(2.12) U
(2.13)
x +2y 2x
y
3y
= 3
+z =2
+2z t =4
A
Descompunem aceasta matrice astfel:
+t

A.

0 0

1 0

2
1

2
1


0 0

1 V2 0 0
0 0

0 1
V
3
0
P3
0

0 0 1
V4
2
P
4

0
0 0
1

2 1
0 3
42


Din definitia produsului a doua matrice, obtinem:
b
i = A 1 ^ A = 1
43


C2 = iV2







B. Rezolvarea sistemelor triunghiulare
Pentru a rezolva sistemul initial, avem de rezolvat doua sisteme triunghiulare: / 1 0
0 0 \/ y i \ ( 3 \














2.3.3 Probleme propuse
Exerciiul 2.3.2. S se rezolve sistemele tridiagonale:
x + y = 3 2x y + z =1 3y z = 5 2x + y = 0 x y +
2z = 1 2y z + t = 5 z + 2t = 5.
C2 = iV2
62 =2 V2
+2
C3 = 2V3
63 =
3V3 + 3 C4 =
3 V4
b4 = a4 v4 + 4
^ V2 = 2
^ 2 = 5 1
=>- Dl = -3
5
5
^"
4 =
-l3
=*
A
= -
2
5
0 3
V 0 0
00
o
2
1
Z
13
/
2
4

1
y
2
y
3
y
4
3
4
3
_8
_
1
3
1

x
y

z
v
t

y
1
1
1
1

a crui soluie este
/ y i \
y 2
y 3 V
y 4 )
si respectiv:
1

0

0

0

0
0

0
3
4
5
_8_
13
_
5
_ '
1
3
1
0
1

1

a criu solutie este
(
x \
y
z
V
t
)
a)
b)
44


2.3.4 Implementare
A. Algoritm
Date de intrare: un sistem de ecuatii tridiagonal Date
de ieire: solutia sistemului
Algoritmul const n:
1. generarea matricei A a sistemului (matrice tridiagonala) si a vectorului coloana b n =
numrul de linii ale matricei A
2. descompunerea LU aplicata matricei tridiagonale A L = (
A
ij)i j=gr> U = {Hij)ij=~n
pentru i = 1, n hii
1

pentru i = 2, n
A
i,i 1
a
i,i 1
A
11 =
a
11
pentru i = 1, n - 1
&i,i+1
A
ii
A
i+1,i+1
a
i+1,i+1
a
i+1,i ' fti,i+1
3. rezolvarea sistemelor triunghiulare bi
Vl =
Y~
A
11
pentru i = 2, n
1
Vi ( bi
A
j; j_ij/j_i ]
A
ii
xn = yn
pentru i = n - 1, 1
x
i (
y
i ^i,i+1
x
i+1
B. Programe MAPLE si rezultate
Observaia 2.3.1. Spre deosebire de metodele anterioare, unde ordinea necunoscutelor n sistem
nu era esential, n cazul sistemelor tridiagonale, daca se schimba ordinea necunoscutelor,
atunci matricea sistemului nu va mai fi tridiagonala. De aceea, este necesara construirea unei
proceduri, nedeterminate, care s returneze necunoscutele sistemului n ordinea n care apar ele
n ecuatii.
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
45


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;
n:=nops(l);
for i from 1 to n do
ops [i] : = [seq(op(op(l [i])[l])[j] I
coeff (op(l [i] ) [1] ,op(indets(op(op(l [i] ) [1]) [j]))),
j=l..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+l..n+1); b:=col(eqm,n+l); lu :=tridiagonal(A);
L:=lu [1] ;
U:=lu [2];
aux[l] : =b [1] /L [1, 1] ; for i from 2 to n do
aux[i] :=l/L[i,i]*(b[i]-L[i,i-l]*aux[i-l]) od;
rez[n]:=aux[n];
for i from n-1 by -1 to 1 do
rez[i] :=aux[i]-U[i,i+l]*rez[i+l] ; od;
RETURN(seq(opst[i]=rez[i] , i =l . . n) ) ; end:
debug(tridiagonalsist):
46


tridiagonalsist({x+2*y=3,2*x-y+z=2, 3*y+2*z-t=4, -2*z+t=-l});
{> 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]
47






auxi := 3
4
aux2 := -
5
_8_
13
aux4 := 1 rez4 := 1
rez3 := 1 rez2 := 1 rezi := 1
< exit tridiagonalsist (now at top level) = x = 1, y 1}
x = 1, y = 1, z = 1, t = 1
1 2 0 0
C
O

2
-1
1 0 2
0
3
2
-1 4
0 0 2 1 1
eqm :=
1 2 0 0
2
-1
1 0
0
3
2
-1
0 0 2 1
A :=

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

1 0 0 0

1 2 0 0
2 -5 0 0

0 1
-1
0

13

IT

0
3
T 0

0 0 1
-5

3

T3"
0 0 -2


13
-

0 0 0 1
lu :
=

1 0 0 0

2
-5
0 0
L : = 0 3
13
~5
0

0 0 -2
3
13
-
1 2 0
0 '

0 1
-1
5
0
U : =
0 0 1
-5
13"

0 0 0 1
aux3 :=
= 1, z = 1, t =
4 8


2.4 Factorizarea Cholesky
2.4.1 Breviar teoretic
Un caz particular de sisteme liniare este acela n care matricea A a sistemului este simetric i
pozitiv definita (adica toti determinani de col sunt strict pozitivi). Pentru astfel de sisteme
putem folosi un caz particular al factorizarii LU: descompunem matricea A a sistemului ntr-un
produs L L
T
, unde
/An 0 ... 0 \
A21 A22 0
(2.14)

\
A
n1 A-

Coeficieni Aij se obn din definitia produsului a dou
matrice.
2.4.2 Problem rezolvat
Exerciiul 2.4.1. S se rezolve sistemul:
x + 2y + z = 5 2x +
5y + 2z = 11 x + 2y
+ 3z = 7.
Rezolvare
A. Factorizarea Cholesky
Matricea sistemului este
/ 1 2 1
A =12 5 2
\ 1 2 3
adica matricea A este simetrica. Deoarece


matricea A este pozitiv definita. Aplicand factorizarea Cholesky avem:









L
A
nn )
n2
Se observ c a.
1 2 1
2 5 2
1 2 3
12
25
1 > 0 = 1 > 0 = 2 > 0
A
1
1
A
21
A
3
1
0
A
22
A
3
2
0 0
A
3
3

A11
= 1

A21
=
2
^
A
31 =
1

^ A22 = 1 ^
A32 = 0
^
A
33 = V
A
Folosind definitia produsului a dou matrice, obinem:
a
11
a
12
a
13
A
32
1 2
1


A11
0 0
2
5 2

=
A
21
A
22 0
1 2
c
o

f 1
A
31
A
32
A
3
3
\
2
A
1
1
a22 A21 + A
a23 = A21 A31 + A22
a
33
A
31 +
A
32 +
A
33
2

22
A
11
A
21
A
11
A
31
4 9




































Se observ c pentru gsirea elementelor i = l,n, j = i,n, este suficient s calculm dezvoltrile
corespunztoare elementelor ciij, i = l,n, j = i,n.
B. Rezolvarea sistemelor triunghiulare
Pentru a determina soluia sistemului initial, avem de rezolvat doua sisteme triunghiulare:

1
2
1
0
0
y/2
5
11
7
cu solutia

5
1
s
i

12
01
00
1
0
5
1
y/2
x
y

z
cu solutia
x
y
z
2.4.3 Probleme propuse
Exerciiul 2.4.2. Sa se gaseasca solutia sistemului urmtor, 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 ecuatii Date de
ieire: solutia sistemului
Algoritm
1. generarea matricei A a sistemului (simetrica s i pozitiv definita) s i a vectorului b n =
numrul de ecuat ii ale sistemului (numrul de linii ale matricei A)
2. factorizarea Cholesky
Aii =
a
ii
pentru i = 2, n
pentru j = 1, i 1
^ ^
^ik'Xjk
k=i
a
ij

-v
A
jj
5 0




3. rezolvarea sistemelor triunghiulare
bi
yi






B. Programe MAPLE si rezultate
2.5 Factorizarea Householder
2.5.1 Breviar teoretic
Factorizarea Householder este o metoda de rezolvare numerica a sistemelor detip Cramer
simetrice, si consta ndeterminarea unei matrice simetrice nesingulare U,astfel ncat
UAU = T sa fie o matrice tridiagonala. Atunci soluia sistemului Ax = b este data de
x = Uy, (2.15)
unde y este solutia sistemului
Ty = Ub. (2.16)
Factorizarea Householder se bazeaza pe urmatoarele rezultate.
Propoziia 2.5.1. Oricare ar fi A o matrice ptratic de ordinul n i simetric, exist un
vector v = (vi, . . . , vn)
T
astfel nct vectorul coloan a
1
= Aei, ei = (1, 0, . . . , 0)
T

( a
1
este prima coloana a matricei A) are proprietatea
2v < v, a
1
>
a ^ ------------------- = X - e 1 . (2.17)
||v||
2

Pentru evitarea ambiguitatilor vom considera vectorul v dat de:
v = a
1
+ sign(aii ) ||a
l
|| ei. (2-18)
Ai a
ii ~
\
i-1
A

k=1
A
11
pentru i = 2, n
y
i I
b
i ^ ^
A
ik '
y
k
k=1
i- 1
Vn
A
n,
pentru i = n 1,1
1
A
i
x
n
n
E
k=i+1
Aki ^
A
ii
x
i I Vi
5o







































Propoziia 2.5.2. Oricare ar fi matricea simetric A, matricea P definit prin:
P - !
2
' "
t , T

(2.19)
v
este simetric i are proprietatea c elementele 2, 3,..., n de pe prima coloan a matricei PA
sunt nule, unde vectorul v este dat de relaia (2.18).
Definiia 2.5.1. Se numete matrice Householder de ordin n 1 asociata matricei A i se
noteaz cu Pra-1 o matrice de ordin n 1 de forma:
2 v v
T

(2.2o)
P
n1
I
n1
2
v
unde: v = a^-i + sign(a21) a
1
care este prima coloan a matricei A, e\ = (1, 0,..., 0 )
T
i i este
matricea unitate
n-1
de ordin n 1.
Propoziia 2.5.3. Matricea Hauseholder Pn-1 asociat unei matrice simetrice A este simetric si
are proprietatea ca matricea U1 definit prin:
e1 este vectorul format cu componentele vectorului
n
11
1o
o
o

o
(2.21) U1
P
n 1
este simetric i verific relaia:
A
(l)
UI A UI
a
11
a1
o
a
1
a(1)
a
22
a(1)
a
32
o.
a(1) .
a
23
.
a(1) .
a
33
.

. . o
a(
l
)
. .
a
2n
a(
l
)
. .
a
3n

o

a(1)
a
n2
a(1) .
a
n3
.


a
rnri
J
(2.22)
Se consider vectorul coloana a);_2
cu
ultimele n2 elemente ale coloanei matrice A
(1)
. Cu acest
vector se construiete o matrice Householder de ordinul n 2, Pn-2. Matricea U2 definit prin:
Zi oo ... o\
o 1 o oo
o
(2.23) U2
P
n
n
2
oo
are proprietatea:
o. . o ^
o. . . o
(2). . . a
(2)

34
.

. . a
3n
(2).
n4 .
a
n.ri y
a
1
(l)
a
1
a
22
a
2
(2)
a
2
a
33
n
3
a
o a
11
A
(2)
U2 A
(l)
U2
(2.24)
o
o

0
X 5 /
51


Matricea Pn-2 a condus la obinerea unei noi linii i coloane a matricei tridiagonale la care vrem sa
reducem matricea A.
Continuand astfel prin n 1 transformari, obtinem egalitatea: UAU = T n care T este matrice
tridiagonal.
2.5.2 Problem rezolvat
Exerciiul 2.5.1. S se rezolve urmtorul sistem folosind factorizarea Householder:
2x + 2y + z = 2 2
x y + z = v/5 x
+ y + 2z = 0.
Rezolvare
Sistemul se poate scrie sub forma Ax = b, unde:

Se observa ca matricea A este simetric, deci factorizarea Householder este aplicabila.
Generarea matricei U
Calculam elementele vectorului
v = a
1
+ sign(a
]
i 1) Ha
1
)) ei unde
a
1
= (2,1)
T
, Ha
1
1| = v/5 i ei = (1,0)
T
. De aici rezult
v= (0, 2 + v/5,1)
T

si ||v|| = 10 + 4+5. Elementele matricei U sunt date de:

Dupa efectuarea calculelor, obinem:
(
1 0 0
^ 2 (2 + v/) 2 + u ------- ;=
5 + 2 5 + 2 \fb
_ 2 + V5 2 (2 + 1/5)
U -------------- ;= ----------
V 5 + 2^ 5 + 2^ /


U
Soluia sistemului tridiagonal
52


2




2

T = UAU = 5 (2 + y/5)
5
-9
5 + 2
5 (2 + y/f)) 0 \
5 + 2 \/5
2
2
n
53


Ty = Ub

este

( 1 \
20- 10-s/5
21 5 61/5
15

iar solutia sistemului initial este

( 2 +
3
2 1/5
3
2
3 /

2.5.3 Probleme propuse
Exerciiul 2.5.2. Sa se gaseasc soluiile urmtoarelor sisteme folosind factorizarea
Householder:
x + 2y + z = 5
2x y + 3z = 6 x + 3y 2z =3 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 ecuatii
Date de ieire: solutia sistemului, obtinuta folosind factorizarea Householder
Algoritmul consta din urmatoarele etape:
1. generarea matricei tridiagonale pentru i = 1... n 2 pentru l = 1... n
pentru m = 1... n
daca m = l atunci = 1 dac m
= l atunci = 0 //Generm vectorul v
y

x = U y =
. 2 + 1/5
adica X = ----- , y
3
y

2 1/5 2
3
Z

_
3
a)
b)
Soluia sistemului tridiagonal
54




e
i+1 1
pentru j = i + 2 .. .n
e
j =
0

pentru j = i + 1.. .n
Vj = aij + sign(ai>i+1) norm a ej
n
,2
norm v= vj
j=i+1
//Generm matricea U
j = i +1... n
k = i + 1... n
Ujk = Ujk 2 Vj / norm v
// D=AU m =
1... n l = 1.. .n
n
dm = amk Uki
k=1
//A = UD=UAU
m = 1... n l = 1..
.n
n
aml = umk d
k=1
2. rezolvarea sistemului tridiagonal (vezi paragraful 2.3.4):
Ty = Ub
3. gsirea soluiei sistemului initial:
x = Uy
B. Programe MAPLE si rezultate
Observaia 2.5.1. Deoarece o conditie neceesar pentru aplicarea factorizarii Householder este ca
sistemul sa fie simetric, folosim procedura nedeterminate (prezentat n paragraful 2.4.4). De
asemenea, pentru descompunerea matricei tridiagonale, am folosit procedura tridiagonal prezentata
n paragraful 2.3.4.
a
h norm a
\
E
j=i+i
55


2.6 Metoda Jacobi
2.6.1 Breviar teoretic
Metoda Jacobi este o metoda iterativ de rezolvare a sistemelor liniare de forma


Se definete traiectoria Jacobi a vectorului x
(0)
ca fiind vectorul x
(fc+1)
= D
-1
[b (L + U)x
(k)
] k =
0,1, 2,...
Folosind teorema de convergent se studiaz dac traiectoria Jacobi converge la soluia
x
(
*'
)
a sistemului (2.25).
Traiectoria Jacobi converge la solutia x
(+)
a sistemului (2.25), daca si numai dac raza spectrala p
a matricei
M = D
-1
(L + U) (2.30)
este strict subunitar, adic
max(|A| | det(M XIn) = 0} < 1.
In caz de convergenta, componentele x1
k+1)
, ..., xi
fc+1)
ale vectorului x
(fc+1)
, situat pe
traiectoria Jacobi a vectorului x
(0)
, sunt date de relatiile:
n


Ax = b.

descompune n suma L + D + U, unde

0 0 0. .. 0

a
2i 0 0. .. 0
L =
a
3i
a
3
2
0. .. 0

a
ni
a
n
2
an3 . .. 0

(
a
ii 0 0. .. 0

0
a
2
2
0. .. 0
D =
0 0 a33 . .. 0

0
0 0.
. . a
nn

0 ai2 ai3 . . .
a
in

0
0 a23 . . .
a
2n
U =


0 0 0 ...
a
n- i,n

V
0 0 0 ...
0

(2.25)
(2.26)
(2.27)
(2.28)
(2.29)
(2.31)
(k+i) _ bi ^ aij xf
j=i
j=i
(2.32) ... ,n; k = 0,1, , i = 1,2
a
ii
x.
56


2.6.2 Problem rezolvata
Exerciiul 2.6.1. Calculati 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:

217
Matricea A se descompune n suma L + D + U cu


Verificarea conditiei de convergenta a algoritmului presupune calculul valorilor proprii ale matricei
< o H z?\
5 5.
I
M = D~
l
{L + U)
/
Calculand maximul n modul al valorilor proprii ale matricei M, obtinem
p(M) = 0.2673998083 < 1,
si deci algoritmul converge.
Aplicm formulele (2.32), plecand de la x
(0)
= 0, y
(0)
= 0, z
(0)
= 0, obtinem 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 comparatie, am rezolvat acest sistem folosind procedura solve furnizat de
Maple, iar rezultatele sunt:
x = 0.1861198738, y = 0.3312302839, z = 0.4227129338.
1
A b 2
5 2
39
3
0 0 0
3 0 0
2 - 1 0
5 0
0 9
0
0
L D
0 0 7
0
2 3 , U
= | 0 0 1
0 0
0
1 1
I ^
T

V 7 7
0

57


2.6.3 Probleme propuse
Exerciiul 2.6.2. Sa se verifice daca se poate aplica metoda iterativ a lui Jacobi, i n caz afirmativ sa se
gaseasca primele 3 elemente ale irului de solutii partiale. Comparati solutia obinuta cu soluia exacta:
i
x
+ % =

2
a)
\ 2x + y = 6
x + 2y + z =1 3x
y + 5z =14 x + y
z = 2
2.6.4 Implementare
A. Algoritm
Observaia 2.6.1. Deoarece metoda lui Jacobi este o metoda iterativ, trebuie specificata o conditie de
oprire a algoritmului. Algoritmul converge dac sirul (x
(k)
) este convergent. Convergenta acestui sir poate
fi descrisa n mod teoretic n diverse moduri. In practica, se foloseste o variant a criteriului lui Cauchy,
si anume: sirul (x
(k)
) este convergent, daca
||x
(fc+1)
x
(fc)
|| < e
unde e este o constanta data.
In cazul nostru, vom considera ca solutiile sistemului au fost obtinute cu eroarea e, adica
x?
+1)
e [x
(+)
e,x
(+)
+ e].
De aici rezulta o conditie de oprire a algoritmului:
n

- x
k)
) < ey/n. (2.33)



Date de intrare: un sistem de ecuatii (o multime de ecuatii), un punct initial, x
(0)
, o eroare e.
Date de iesire: solutia aproximativa a sistemului, obtinut n urma aplicrii traiectoriei Jacobi
vectorului x
(0)
pana cand este ndeplinit conditia (2.33).
Algoritmul const n urmtoarele etape:
1. generarea matricei A a sistemului si a vectorului b
n - numarul de necunoscute (numrul de linii ale matricei A)
2. generarea matricelor L, D, U si verificarea convergentei metodei:
p(D
-1
(L + U)) < 1


\
i=1
58


3. construirea traiectoriei Jacobi
repet
(k+i)
x-
j=i
j = i


^2(4
k+1)
~4
k]
) <

Vn
i=1


B. Programe MAPLE s i rezultate
j acobi:=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;
pn cnd
\
59


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]), .le-
1
var := [x, y] n
:= 2 S 1 5
AA :=
1 2 5
Sl 1 2
b := [5,
5] OO
l : =
OO
OO
OO
u :=
OO
OO
di, i := S
u
1, 2
:
=
1

l
2, 1
:
=
1

d2, 2 := 2
d :=
0
I
1
"
1

0 2
lst
'
xo 1 := O
A : =
m :=
60


xo2 := 0 test := 1 x1 := 1.666666667 X2 := 2.500000000 test := 3.004626063 xo1 :=
1.666666667 xo2 := 2.500000000 xi := 0.8333333333 x2 := 1.666666666 test :=
1.178511303 xo 1 := 0.8333333333 xo2 := 1.666666666 x1 := 1.111111111 x2 :=
2.083333334 test := 0.5007710115 xo1 := 1.111111111 xo2 := 2.083333334 x1 :=
0.9722222220 x2 := 1.944444444 test := 0.1964185512 xo 1 := 0.9722222220 xo2 :=
1.944444444 x1 := 1.018518519 x2 := 2.013888889 test := 0.08346183593 xo1 :=
1.018518519 xo2 := 2.013888889 x1 := 0.9953703703 x2 := 1.990740740 test :=
0.03273642604 xo1 := 0.9953703703 xo2 := 1.990740740 x1 := 1.003086420 x2 :=
2.002314815 test := 0.01391030679 xo1 := 1.003086420 xo2 := 2.002314815
< exit jacobi (now at top level) = x = 1.003086420, y = 2.002314815}
x = 1.003086420, y = 2.002314815
Se pot compara rezultatele obinute dac eroarea e se modifica:
> 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
> 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 irul soluiilor pariale cu soluia exacta obinut rezolvnd
sistemul Ax = b cu ajutorul procedurii linsolve. Pentru sistemul considerat mai sus, a carui solutie
exacta este x =1, y = 2, obtinem urmatoarele grafice:
61






62


2.7 Metoda Gauss-Seidel
2.7.1 Breviar teoretic
Metoda Gauss-Seidel este o metod de rezolvare numeric a sistemelor de tip Cramer, prin
aproximaii succesive. Matricea A a sistemului se descompune n suma L + D + U, unde L este
matrice triunghiulara subdiagonal, D matrice diagonala si U matrice triunghiulara supradiagonal.
Pentru un vector x
(0)
irul de vectori x
(k)
definit prin:
x
(fc+1)
= (L + D)
-1
(b - Ux
(k)
) (2.34)
se numeste traiectoria Gauss-Seidel a vectorului x
(0)
.
Traiectoria Gauss-Seidel a vectorului x
(0)
converge dac si numai dac raza spectrala p a matricei
-(L + D)
-1
U (2.35)
este strict subunitara.
In caz de convergenta, componentele x1
fc+1)
, ..., xi
fc+1)
ale vectorului x
(fc+1)
, situat pe
x =
63


traiectoria Gauss-Seidel a vectorului x
(0)
, sunt date de relaiile:
x'i^ = (bi
X
P^\ ' (2.36)
j=2 '
a11

i 1 n \ i
x-
fc+1
'
)
= ( h ^ xf
+1
^ ^ j , % = 2,..., n.
(2.37)
1 -li /
a
ii
j=1 J=i+1
2.7.2 Problem rezolvat
Exerciiul 2.7.1. Sa se determine primele 3 puncte de pe traiectoria Gauss-Seidel a vectorului (0, 0)
T

pentru sistemul urmtor:
4x + y = 1 4x
+ 3y = 2.
Rezolvare
Sistemul se poate scrie sub forma Ax = b, unde
A
= ( 4 3) " = (

2
iar matricea A se descompune n suma L + D + U, dup cum urmeaza:
l - ( ) ' D = ( 00) ' p o ;
Algoritmul converge daca raza spectrala a matricei
M= - ( L + D) ~ ' U= ( _4 A
este strict subunitara. Efectuand calculele, obfinem
p ( M) = A < j
si deci algoritmul este convergent.
In continuare, aplicm formulele (2.36)-(2.37) si, plecand de la punctele x
(0)
= 0, y
(0)
= 0, obtinem:

Pentru comparafie, determinam solufia exacta a sistemului considerat:
11
x
(1)
= 0.2500000000
y
(1)
= 0.3333333333
x
(2)
= 0.1666666667
y(2) = 0.4444444443
x
(3)
= 0.1388888889
y
(3)
= 0.4814814813
x = , y
8 2
adic x = 0.125 , y = 0.5.
64


2.7.3 Probleme propuse
Exerciiul 2.7.2. Sa se verifice daca se poate aplica metoda iterativa a lui Gauss- Seidel, si n caz
afirmativ sa se gseasc primele 3 elemente ale sirului de solutii partiale. Comparai cu solutia exacta
si cu sirul de solutii pariale obinut prin metoda lui Jacobi:
i
x
+ % = 2
a) \ 2x + y = 6 x +
2y + z =1
b) ^ 3x y + 5z =14
x + y z = 2
2.7.4 Implementare
A. Algoritm
Observaia 2.7.1. Deoarece metoda Gauss-Seidel este o metod iterativa, trebuie specificata o conditie
de oprire a algoritmului. In continuare vom folosi aceeasi conditie de oprire a algoritmului ca si cea
prezentat n paragraful 2.6.4:
n

- x\
k)
) < e^/n. (2.38)

Date de intrare: un sistem de ecuatii (o multime de ecuatii), un punct initial, x
(0)
, o eroare e.
Date de iesire: solutia aproximativa a sistemului, obtinuta n urma aplicrii traiectoriei Gauss-
Seidel vectorului x
(0)
pana cand este ndeplinita conditia (2.38).
Algoritmul const n urmtoarele etape:
1. generarea matricei A a sistemului si a vectorului b
n - numarul de necunoscute (numarul de linii ale matricei A)
2. generarea matricelor L, D, U si verificarea convergentei metodei:
p((L + D)
-1
U) < 1
3. constructia traiectoriei Gauss-Seidel repeta
n
(k+1) 1 (k)
x1 = ( b1 > a1j xj
j=2
i 1 n\ i
(
f c
+! ) - I h J
k
+
l
) ST r, JA '
1

bi a,ij Xj a,ij Xj j , % = 2, n.
j=1 j=i+1
1 a

pna cnd
\
\
i=1
1
a
11
i=1
65


B. Programe MAPLE si rezultate
Comparativ, prezentm rezultatele obinute cu ajutorul metodei Gauss-Seidel pentru acelai
sistem si vector initial 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 relaxrii succesive
2.8.1 Breviar teoretic
Metoda relaxarii succesive este o metod de rezolvare numerica a sistemelor de tip Cramer, prin
aproximatii succesive. Aceasta metod se deosebeste de metoda Gauss- Seidel prin aceea ca se introduc
corectiile
Ax
(k)
= x
(fc+1)
- x
(k)
, k = 0,1, 2,...
Matricea A a sistemului se descompune n suma L + D + U, unde L este matrice
triunghiular subdiagonal, D matrice diagonala si U matrice triunghiular supradiago- nal.
Pentru un vector x
(0)
G R
n
, irul de vectori x
(k)
definit prin:

se numeste traiectoria vectorului x
(0)
obtinuta prin relaxari succesive.
Traiectoria vectorului x
(0)
obtinut prin relaxari succesive converge dac si numai daca raza
spectral p a matricei
-1

este strict subunitara.
n caz de convergent, componentele x1
fc+1)
, ..., xi
fc+1)
ale vectorului x
(fc+1)
situat pe traiectoria
vectorului x
(0)
obfinut prin relaxri succesive sunt date de relafiile:
n



Observaia 2.8.1. Metoda Gauss-Seidel este un caz particular al metodei relaxarii succesive, pentru
care u =1.
(2.39)
-i
(k)
1- - ) D +
U
u
(2.40) b- , k = 0,1, 2,
x
(fc+b = l L -\ D
u
1
- [ L + - D
u
1 -- ) D +
U u
(2.41)
(k+1) _
(k)
(2.42)
.,n. (2.43)
x x
1
(k+1) (k+1)
aij xj -
(k)
E
i = 2,
x a
ij
X
j
j=i
(k)
u

(1 - U) X\ +
an
= (1 - cu) x[
k)
+
a
ii
u
b
i
_ a
ij
j=1
i-i
bi -
Y^
j=i
66















M = - [ L + - D u
1 - - ) D+ U
u






Pentru comparatie, determinam solutia exacta a sistemului considerat:
x = 0.125 , y = 0.5.
2.8.3 Probleme propuse
Exerciiul 2.8.2. S se verifice daca se poate aplica metoda relaxrii succesive, si n caz afirmativ sa se
gaseasc primele 3 elemente ale sirului de solutii partiale, folosind o subrelaxare si o suprarelaxare.
Comparati rezultatele obtinute cu solutia exacta:
a) i
x
+
3
y =
2

a) \ 2x + y = 6
x + 2y + z =1 3x
y + 5z =14 x
+ y z = 2
A
01
00
L , U =
2.8.2 Problem rezolvat
Exerciiul 2.8.1. S se gseasc primele 3 elemente ale traiectoriei vectorului (0, 0)
T
folosind metoda
relaxrii succesive cu u = 0.5, pentru sistemul:
4x + y = 1 4x
+ 3y = 2.
Rezolvare
Sistemul se poate scrie sub forma Ax = b, unde
4 3) -
b
= (

2
Matricea A se descompune n suma L + D + U, cu
00
D = (
4 0

4 0 )
D
t 0 3
Algoritmul converge daca razaspectrala a matricei
-i
0.500 0.125
0.333 0.583
formulele (2.42)-(2.43),
x
(1)
= 0.1250000000
y
(1)
= 0.5000000000
x
(2)
= 0.1250000000
y
(2)
= 0.7500000000
x
(3)
= 0.0937500000
y
(3)
= 0.9166666667
plecand de la punctele
este strict subunitara. Efectuand calculele, obinem
p(M) = 0.75 < 1
si deci algoritmul este convergent.
In continuare, aplicam x
(0)
= 0, y
(0)
= 0,
si obtinem:


67


2.8.4 Implementare
A. Algoritm
Observat ia 2.8.2. Deoarece metod relaxrii succesive este o metod iterativ, trebuie specificat o
condiie de oprire algoritmului. Aceast conditie este similar cu cea folosit n paragrafele
anterioare, si anume:
n

Date de intrare: un sistem de ecuatii (o multime de ecuatii), un punct initial, x
(0)
, o relaxare, u, o
eroare e.
Date de ie s ire: solutia aproximativ sistemului, obtinut n urma aplicrii traiectoriei
vectorului x
(0)
obtinut prin relaxri succesive pn cnd este ndeplinit conditi (2.44).
Algoritmul const n urmtoarele etape:
1. generarea matricei A sistemului si a vectorului b
n - numrul de necunoscute (numrul de linii ale matricei A)
2. generarea matricelor L , D, U si verificarea convergentei metodei:
-i
p[-[L + -D
s
i

0 < u < 2
3. constructi traiectoriei relaxrilor succesive
repeta
n



n
J^(xf
+1)
- x f
]
) < e V n
i=1
(k)>
\
i=1
(2.44)
< 1
x(
k
+b
i
(k)
(2.45)
x
(k+1)
(k+1)
aij xj -
(k)
E
i = 2, n (2.46)
x] a
ij *
X
j
j=i
(1 - u) xf
]
+
a
11
n \ (
fc
) i
u

(1 - u) x\
1
+
a
ii
u
b
1 -^2
a
1j j=1
i-1
bi -
E
j=1
pana cand
\
68


B. Programe MAPLE si rezultate
Prezentam comparativ rezultatele aplicarii metodei relaxarii succesive pentru diferite valori ale lui
w:
> 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
69


Capitolul 3
Rezolvarea ecuatiilor si a sistemelor
de ecuatii neliniare
Fie sistemul neliniar
F (x) = 0 (3.1)
unde F (x) este vectorul (f1(x),fn(x))
T
, functiile /1,...,/n : D R
n
^ R
1
sunt considerate cunoscute, iar
vectorul x = (x1, ...,xn)
T
este necunoscut.
3.1 Metoda punctului fix
3.1.1 Breviar teoretic
Solutiile sistemului neliniar (3.1) se cauta printre punctele fixe x
(+)
, adica printre solutiile sistemului
G(x) = x (3.2)
obtinut din sistemulinitial prin alegerea
G(x) = x [F'(x)]
-1
F (x) (3.3)
unde F'(x) estematricea Jacobi asociat vectorului F, matrice despre care s-a presupus
ca este continua si inversabila.
Presupunem c operatorul G are un punct fix x
(+)
.
Definiia 3.1.1. Vom spune c x
(+)
este un punct de atracie daca exist o sfer deschis
S(x
w
, r) = {x R
n
| ||x x
(+)
| < r} cu urmtoarele proprietai:
1. S(x
(+)
,r) C D i x
(k)
generat de
x
(k+1)
= G(x
(k)
) (3.4)
este un ir bine definit pentru V x
(0)
S(x
(+)
, r);
2. V x
(0)
S(x
w
, r) irul x
(k)
definit de (3.4) aparine lui D i x
(k)
k_^oo> x
(+)
.
max
( g4 l
X2
l 6 3 ^
70


Teorema 3.1.1. Fie G : D C R
n
^ R
n
un operator neliniar i x
(+)
G D un punct fix al
lui G. Daca G este de clas C
1
pe D i raza spectral p a matricei Jacobi a lui G n x
(+)
este
strict subunitara (p < 1), atunci x
(+)
este un punct de atracie i
limsup ||x
(k)
- x
w
||
1/k
= p.
k^tt
Teorema 3.1.2. Fie G : D C un operator neliniar si x
(+)
G D un punct fix al
lui G. Dac G este de clas C
1
pe D si norma p a matricei Jacobi a lui G n x
(+)
este
strict subunitar (p < 1), atunci x
(+)
este punct de atracie i
limsup ||x
(k)
x
w
||
1/k
= p.
k^-tt
Teorema 3.1.3. (Unicitatea punctului fix) Fie G : D C ^ un operator neliniar. Daca G este de
clas C
1
pe D, i dac norma p a matricei Jacobi asociata operatorului G este strict
subunitara (p < 1) pentru orice x G D, atunci pentru orice x
0
sirul de aproximaii succesive
x
(k
+
1)
= G(x
k
), k = 0,1,2,... x
(0)
G D (3.5)
converge la un unic punct fix x
(+)
G D.
Observaia 3.1.1. Norma unei matrice este data de:
MII = max J- (3.6)
IMI=o ||x||
3.1.2 Problema rezolvata
Exerciiul 3.1.1. Sa se gaseasc primii trei termeni ai s irului de aproximat ii succesive folosind
metoda punctului fix, pentru sistemul urmator:
^x
2
I x0
Xi = 0 pe domeniul D = [0,1] x [1, 2]
6
2 x1 +
x2
~
X 2
-
Rezolvare
Sistemul se mai scrie G(x) = x, unde
/ 2 2 \ T
f xf + x2 x1 + x2 \ t
G=( -,-I , x = { x i , x
2
)
Calculam jacobianul lui G, i ob inem:
/ *i I
C' 3 6
^ I 1 2
V 8 4
a carui norma este: /
Deoarece x\ G [0,1] i X2 G [1,2], rezult c norma matricei G' este - < 1, i deci pentru
3
orice punct ini t ial x
(0)
G D, algoritmul converge.
Fie x
(0)
= (0.5, 0.5)
t
. Aplicnd formula (3.5), obtinem valorile pentru primii trei termeni ai sirului de
aproximai succesive:
x
(
1
1)
= 0.1250000000
x2
1)
= 0.0468750000
x1
2)
= 0.0104166666
71


x2
2)
= 0.0015767415
x1
3)
= 0.0002808747
x2
3)
= 0.0000354201
Pentru comparare, determinm solua exacta a sistemului: x^ = 0, x2*
)
= 0.
3.1.3 Probleme propuse
Exerciiul 3.1.2. Sa se gseasca o condi t ie n care se poate aplica metoda punctului fix asupra
sistemului urmator, precum si primii 3 termeni ai sirului de aproxima tii succesive ale solut iei:
i x
2
+ y
2
1 = 0
x
3
y = 0
3.1.4 Implementare
A. Algoritmi
Date de intrare: un sistem de ecuai (dat ca mult ime de ecuat ii), eqn, un punct ini t ial, x0 s i o
eroare e
Date de iesire: solua sistemului eqn obnuta prin metoda punctului fix, plecnd de la punctul
ini t ial x0, cu eroarea e.
Algoritmul consta n urmtorii pasi:
1. generarea matricei G s i verificarea condi t iei ca norma matricei G' sa fie strict sub- unitara
2. gasirea solu tiei aproximative repeta
x
(fc+1)
= G(x
k
) pn cnd max
|a^
fc+1
'
)
x[\ <
i=l,n
B. Programe MAPLE si rezultate
fixedpoint:=proc(eqn::set(equation), x0::vector, eps::float) local x, n, g, i, j, jac, yo, test, k, y,
jacl, eig; if nops(eqn) <> vectdim(xO) 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]:=j acobian(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;
72


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):
73


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] x
2
y
91 :=
f
+
6
x y
2

52 :=
8
+

22 x
2
y x y
2

~6~
+
6 8
+
~8~


jac
1,1
:
=
jac
1, 2
:
=
jac
2,1
:
=
jac
2, 2
:
=
jacl := [-] jac : = ||, 1]
m := If. 1, 1]
. ^ rx 11 y,
jacl := , -
j l3> g, g, 4j
/1 x y
eiq := maxi-, ,
6 3 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
y1 := 0.1250000000
test := 0.3750000000
yo1 := 0.1250000000
test := 0
00
00
x
3
1

6

1

8

V
4
jacl := []
x
jac :
74


y2 := 0.04687500000 test := 0.4531250000 yo2 := 0.04687500000 k := 2 test := 0 y1 :=
0.01041666667 test := 0.1145833333 yo1 := 0.01041666667 test := 0 y2 := 0.001576741537 test :=
0.04529825846 yo2 := 0.001576741537 k := 3 test := 0 y1 := 0.0002808747470 test :=
0.01013579192 yo1 := 0.0002808747470 test := 0 y2 := 0.00003542010761 test :=
0.001541321429 yo2 := 0.00003542010761 k := 4 test := 0 y1 := 0.5916499705 10
5
test :=
0.0002749582473 yo1:= 0.591649970510
5
test := 0 y2 := 0.7397192861 10
6
test :=
0.00003468038832 yo2 := 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.739719286110
6

3.2 Metoda lui Newton
3.2.1 Breviar teoretic
Solutia x
w
a sistemului neliniar (3.1) este dat de limita sirului x
(k)
, unde:
x
(k
+
1)
= x
(k)
[F
,
(x
(fc)
)]
1
F (x
(k)
), k = 0,1, 2,... (3.7)
n cazul sirului de iteratii succesive clasic al lui Newton, respectiv
x
(k
+
1)
= x
(k)
[F'(x
(0)
)]
1
F (x
(k)
), k = 0,1, 2,... (3.8)
Teorema 3.2.1. Fie F : D C R
n
^ R
n
i ecuaia F(x) = 0, despre care presupunem c are o
soluie x
(+)
G D. Dac exist o sfer deschis S(x
(+)
,r) = {x G R
n
| ||x x
(+)
|| < r} pe care F
este de clas C
1
.i F' (x
(
*'
)
) este nesingulara atunci, n cazul metodei lui Newton clasice,
x
(
*
)
este un punct de atracie.
Teorema 3.2.2.

n condiiile teoremei precedente, daca raza spectrala p a matricei


I [F(x
(0)
)]
-1
F
/
(x
(
*
)
)
este strict subunitara atunci, n cazul metodei lui Newton simplificat, x
(+)
este un punct
fix atractiv.
Un caz particular l metodei lui Newton este acela pentru care n =1. In acest caz ecuati (3.1)
devine
f (x) = 0, (3.9)
sirul de iteratii succesive clasic l lui Newton se scrie
x(
k
+i) = x(k) _ k = 0,1,2,... (3.10)
f '(x
(k)
)
iar sirul de iteratii succesive simplificat l lui Newton se scrie
x(k+1) = x(k) _ k = 0,1,2,... (3.11)
f/(x(0))

3.2.2 Probleme rezolvate
Exercit iul 3.2.1. S se gseasc primii 3 termeni i sirului de iteratii succesive (clasic si simplificat)
l lui Newton, cu x
(0)
= (0.7, 0.4)
T
pentru sistemul:
x
2
+ y
2
1 = 0 x
3

y = 0.
Rezolvare
75


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) = (
22

y
! )
A. Rezolvare folosind metod lui Newton clasic Determinam produsul:
= f(
x
'
2
+
y2
~
x
) i
v
~
v
^ M^ + y
2
-
1
) ( x
3
- y ) \
T

\ 2x(l + 3yx) x(l + 3yx) 2 + 6yx 1 + 3yx)
76


si aplicm formula (3.7), considernd
x
(0)
= 0.7
y
(0)
= 0.4.
Astfel, obtinem primii 3 termeni ai sirului de iteratii 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
Aplicnd formula (3.8), obtinem primii 3 termeni ai sirului de iterat ii succesive simplificat 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.
Exercitiul 3.2.2. Sa se aplice metoda lui Newton (clasica si simplificata), pentru aflarea solu tiei ecua
tiei
sin(x) x = 0,
plecand de la punctul x
(0)
= 0.2.
Rezolvare
Se observ ca o solutie a ecuatiei este x
(+)
= 0.
Daca notam
/ (x) = sin(x) x,
atunci /'(x) = cos(x) 1.
Plecnd de la x
(0)
= 0.2 s i aplicand formula (3.10), ob t inem:
x
(1)
= 0.1332443177 x
(2)

= 0.0888032392 x
(3)
=
0.0591943762 x
(4)
=
0.0394606157 x
(5)
=
0.0263064006 etc.
Dupa 13 iteratii se obtine o solutie aproximativa a ecuatiei, cu eroarea e = 0.001:
x
(13)
= 0.001539688244.
77


Aplicnd iteratia data de formula (3.11), obtinem:
x
(1)
= 0.1332443177
x
(2)
= 0.1134824727
x
(3)
= 0.1012708415
x
(4)
= 0.0925912882
x
(5)
= 0.0859570495
etc.
Dup 18147 iteratii se obtine o solutie aproximativa a ecuatiei, cu eroarea e =
0.00000005:
x
(18147)
= 0.001814907756.
In continuare, pentru ecuatia considerata, prezentam comparativ sirurile aproximailor succesive
clasic si respectiv simplificata ale lui Newton, raportate la graficul functiei f.

78



3.2.3 Probleme propuse
Exerciiul 3.2.3. Pornind de la punctul (x0,y0) = (0.5, 0.5), s se gseasc primii 3 termeni ai s irului
de solut ii part iale, folosind metoda lui Newton clasic s i metoda lui Newton simplificata:
' x
2
+ y
x = 0
6

x + y
8
Exerciiul 3.2.4. Pornind de la punctul x0 = 0.5, s se gaseasca primii 3 termeni ai sirului de solutii
partiale, folosind cele doua variante ale metodei lui Newton:
x + x = 0
3.2.4 Implementare
A. Algoritmi
A1. Cazul n-dimensional
Date de intrare: un sistem de ecuat ii eqn, un punct ini t ial, x0 si o eroare e Date de ieire: solu
ia aproximativa a sistemului, ob inuta folosind metoda lui Nexton clasic, respectiv metoda lui
Newton simplificata
Algoritmul consta n urmatorii pasi:

0.
y
79


1. generarea funct iei F
2. a) metoda lui Newton clasica
repeta
x
(k
+
1)
= x
(k)
[F'(x
(k)
)]
-1
F (x
(k)
) pn
cnd max |a^
fc+1
'
)
\ < e
i=l,n
b) metoda lui Newton simplificata
repeta
x
(k
+
1)
= x
(k)
[F'(x
(0)
)]
-1
F (x
(k)
) pn
cnd max |^
fc+1
'
)
< e
i=l,n
A2. Cazul unidimensional
Date de intrare: o ecuat ie eqn, un punct ini t ial, x0 s i o eroare e Date de iesire: solutia
aproximativ a ecuat iei, ob t inuta folosind metoda lui Nexton clasica, respectiv metoda lui Newton
simplificata
Algoritmul consta n urmatorii pasi:
1. generarea funct iei f
2. a) metoda lui Newton clasica
repet
x(k+1) = x(k)
f '(x
(k)
)
pan cand |x
(fc+1)
x
(k)
| < e
b) metoda lui Newton simplificata
repeta
^+1) = x,t) _ /(*)
f '(x
(0)
)
pn cand |x
(fc+1)
x
(k)
| < e
B. Programe MAPLE s i rezultate
Pentru metoda lui Newton clasica, respectiv simplificata 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)]);
f (
x
(k))

80


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] fi := x
2
+ y
2
- 1 f2 := x
3
- y
. _ [0.5000000000 (x
2
+y
2
- 1.) y (x
3
- l.y)

?C
_ x(l. + 3.yx) x(l. + 3.yx)
1.500000000x(x
2
+y
2
- 1.) l.(x
3
- l.y)"
1. + 3. y x 1. + 3. y x
c := 1 test := 1.0 y01 := 0.7 jc01 := -0.1535714287 yi := 0.8535714287 y02 := 0.4 jc02 := -
0.1800885499 y2 := 0.5800885499
test := 0.1800885499 c := 2 y0i := 0.8535714287 jc0i := 0.02677208199 yi := 0.8267993467 y02 :=
0.5800885499 jc02 := 0.01632684047 y2 := 0.5637617094 test := 0.02677208199 c := 3 y0i :=
0.8267993467 jc0i := 0.0007674197500 yi := 0.8260319270 y02 := 0.5637617094 jc02 :=
0.0001375374562 y2 := 0.5636241719 test := 0.0007674197500 c := 4 y0i := 0.8260319270 jc0i :=
0.5693512518 10
-6
yi := 0.8260313576 y02 := 0.5636241719
jc02 := 0.976571064710
-8
y2 := 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, respectiv simplificata ntr-o dimensiune, am construit
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;
while test>eps do
if c>1000 then ERROR('Algoritmul nu converge!') fi; yO:=y;
81


y:=evalf(y-subs(x=y,f)/subs(x=y,fp)); test:=abs(y-yO);
c:=c+1; od;
RETURN(x=y); end:
debug(cnewtonld):
cnewton1d(sin(xx)-xx=0, 0.2,0.001);
> cnewton1d(sin(xx)-xx=0, 0.2,0.001);
{> enter cnewtonld, args = sin(xx)-xx =0, .2, .1e-2
/y> ----- rr-rr-
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 c := T y0 := 0.01T53T38944 y :=
0.01169155254 test := 0.00584583690 c := 8 y0 :=
0.01169155254 y := 0.00TT94289520 test := 0.00389T263020 c
:= 9 y0 := 0.00TT94289520 y := 0.005196191T23 test :=
0.00259809TT9T c := 10 y0 := 0.005196191T23 y :=
0.003464143309 test := 0.001T32048414 c := 11 y0 :=
0.003464143309 y := 0.002309495886 test := 0.00115464T423 c
:= 12 y0 := 0.002309495886 y := 0.001539688244 test :=
0.000T6980T642 c := 13
< exit cnewton1d (now at top level) = xx = .1539688244e-2}
xx = 0.001539688244
82


Capitolul 4 Interpolare
polinomial. Functii spline
In practic este des ntlnit situaia n care se cunoate valoarea unei funcii f n diferite puncte xi si
se cere valoarea sa ntr-un punct intermediar. De exemplu, se poate cere valoarea temperaturii
aerului la ora 14.30, cunoscandu-se temperaturile aerului luate din ora n ora.
Astfel, se pune problema ca, plecand de la punctele date (xi,yi) sa se determine o functie de
interpolare al crei grafic sa treac prin toate punctele date. Interpolarea se numeste polinomial
atunci cand se caut functii polinomiale avand proprietatile mentionate.
4.1 Polinomul lui Newton cu diferente divizate
j
4.1.1 Breviar teoretic
Fie functia f : X ^ R
1
data prin: yi = f (xi), i = 0,1,..., m.
Diferenta divizat de ordinul ntai a lui f relativ la punctul xr este numrul definit de fractia:
(V
1
f ) (xr ) = f (
x
r+i )~f (
x
r) ' ( 41)
xr+1 xr
Diferenta divizat de ordinul al doilea a fundpei f relativ la punctul xr este prin definire
numrul:
('V
2
f ) ( x ) = (
T>1
f')(
Xr
+
1
') ~ = i
X
r + l X r + 2 , f ] ~ [ X r , X r + l , f ] ^ ^
xr+2 xr xr+2 xr
Prin calcul se gaseste c diferenta divizat de ordin k a lui f n xr este:
f (x
r+i
)

(V
k
f )(xr ) = k
J K +t J
( 4-3)
|
(x
r+i
x
r+m
)

m=0
m=i
i=0
83


Polinomul lui Newton cu diferen te divizate se define ste ca fiind polinomul:
Pm(x) =/(x0) + (D
1
/)(x0)(x x0) + (D
2
/)(x0)(x x0)(x x1) + ... (4.4)
+ (D
m
/)(x0)(x x0)(x x1)... (x xm-1)
Astfel, functia / se poate aproxima dupa cum urmeaz:
/ (x) = Pm(x) + Rm(x), (4.5)
unde
/
(m
+
1)
()
R
m(
x
) = 7 rTVT^ - x0 )(x - X i ) . . . ( x - xm- i )(x - xm) (4.6)
(m + 1)!
este restul sau eroarea de aproximare la interpolarea polinomiala.
In cazul n care xi+1 x* = h = const (i.e. nodurile x* sunt echidistante), se pot
introduce diferen tele finite. Astfel,
A/(x
fc
)
=
/ (x
fc+1
) / (x
fc
) (4
.
7)

se numeste diferent finit la dreapta, iar
V
/(x
fc
)
=
/ (x
fc
) / (x
fc-1
) (4
.
8)

se numeste diferent a finita la stanga.
Diferentele finite de ordin superior se definesc recursiv, dupa cumurmeaza:
A
n
/ (xfc) = A
n-1
/(xfc+1) A
n-1
/(xfc) (4.9)
V
n
/(xfc) = V
n-1
/(xfc) V
n-1
/(xfc-1) (4.10)
Legtura dintre diferent ele divizate si diferent ele finite este urmatoarea:
{V
m
f ) {x 0) = = V
m
f (
X
rn) ( 4n)
v 0
m!h
m v m
m!h
m v
'

In acest fel, ob tinem polinomul lui Newton cu diferen te finite la dreapta:


Pm(x) =f (x0) + ^-Jp^-(x - x0) + - x0 )(x - Xi ) + . . . +
(4.12)
,
A
"7M, , , ,
4 m \ f r m'
X
~
X
' ' ' ' \
X
~
X
m-l ),
respectiv polinomul lui Newton cu diferen te finite la stanga:
Pm(x) =f (xm) + (
x
_
Xm
) _|_
V
^ ~
Xm
^
X
~
Xm+
" '

(
'
4
'
13
^
, V"70O, ^ ^
84


+
m\h (
x
~
x
m ) - - - (
x
-
x
i ) -
Exerciiul 4.1.1. Sa se gseasc polinomul
de interpolare pentru urmtorul set de
date:
85


4.1.2 Probleme rezolvate



folosind
a) diferent e divizate
b) diferen e finite la dreapta
c) diferent e finite la stanga.
Rezolvare
A. Polinomul lui Newton cu diferente divizate
1. Ob t inerea diferent elor divizate:


Sirul diferentelor divizate este sirul primelor valori de pe fiecare coloana, ncepand cu valorile
funciei, adica:
[2, 3,1, 0, 0].
2. Ob t 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 diferente finite la dreapta
Aceast metoda este aplicabil, deoarece xi+1 x,
1. Ob tinerea diferen telor finite la dreapta
X 1 2 3 4 5
/(z) 2 5 10 17 26

l
n
= h , i = 1,4.
86



irul diferenelor finite la dreapta este irul rezultatelor de pe prima linie, ncepnd cu valorile
functiei, adica:
[2, 3, 2, 0, 0].
2. Obtinerea polinomului de interpolare
3 2 0
P { x ) =2 + - { x - 1) + _ ^ 2 { x - l)(x - 2) + ^ _ ^3(x - l)(x - 2 ) ( x - 3) +
+ 4TT4 (
x
3 ) (
x
~ 4) =
=2 + 3x 3 + x
2
3x + 2 =
=x
2
+ 1.
C. Polinomul lui Newton cu diferente finite la stnga
Aceast metod este aplicabil, deoarece Xi+\ Xi = 1 == h, % = 1, 4.
1. Obtinerea diferentelor finite la stanga

irul diferentelor finite la stnga este irul rezultatelor de pe ultima linie, ncepand cu valorile
functiei, adic:
[26, 9, 2, 0, 0].
X f ( x ) A
1
f ( x ) A
2
/(x) A
3
/(x) A
4
/(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


2. Ob t inerea polinomului de interpolare
87


9 2 0
P(x) =26 + -(x 5) + {x 5 ) ( x 4) + { x 5 ) ( x 4)(x 3) +
+ ~ 5)( - 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. Sa se gaseasca polinomul de interpolare folosind diferent e divizate, diferene finite
la stnga i diferene finite la dreapta pentru urmtoarele seturi
de date:
a)
b)
4.1.4 Implementare
A. Algoritmi
Date de intrare: lista argumentelor x ale funct iei, lista valorilor fx ale funct iei, s i o variabila z
Date de ies ire: valoarea polinomului de interpolare n acel numar, daca z este un numr,
respectiv expresia polinomului de interpolare, daca z este o nedeterminata
Algoritm pentru diferent e divizate
1. ob tinerea diferen telor divizate aux = f x dif div = [f x1]
n = numarul de elemente ale listei x nauT = numrul de elemente ale listei aux
pentru s = 1, n 1
calculeaz elementelelistei dd, astfel: ddk =
awXk
~
awXk
-
1
k = 2, na

k
xfc+s_l-xfc_l
a

adauga elementul dd1 la lista dif div aux
= dd
2. ob t inerea polinomului de interpolare P = dif divn pentru i de la n 1 la 1 P = P (z xj) +
dif div
X -1 0 1
2
f { x )
2 1 0 -1
X
n 3n
5 * ~
2TT
f { x )
1 0 -1
0 1


Algoritm pentru diferente finite la dreapta
1. ob t inerea diferent elor finite la dreapta au x = f x
d f s
= [
fx
i]
n = numarul de elemente ale listei au x
pentru k = n 1,1 pentru i = 1, k
auxi = auxi+1 auxi
elimina elementul auxn din lista aux
n=n1
adauga elementul aux1 la lista dfd
2. obtinerea polinomului de interpolare
h = x2 x1 = dfdn (n 1)! h
a
~
l
pentru i
de la n 1 la 1
df di
Algoritm pentru diferente finite la stanga
1. ob t inerea diferent elor finite la stanga
aux = fx
n = numarul de elemente ale listei aux
df s
=
[f x
n
]

pentru k = 1, n 1
pentru i = 1, n k pentru i = 1, k auxi = auxi+1
auxi elimina elementul auxn-k+1 din lista
aux adauga elementul auxn-k la lista dfs
2. ob tinerea polinomului de interpolare
h = x2 x1 = dfsn (n 1)! h
n
~
l
pentru i
de la n 1 la 1
df Si
P = P (z - Xi) +
(i 1)! h
i-1
B. Programe MAPLE si rezultate
Pentru polinomul lui Newton cu diferent e divizate, am folosit urmtoarele proceduri: difdiv care
construie s te s irul diferent elor divizate, s i ddinterp care construie s te polinomul de interpolare.
difdiv:=proc(x::list, fx::list) local aux, dd,
n, s, dl, 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-l do
dl:=[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:
89


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:
Testam acest program pentru calculul diferen elor divizate de la problema rezolvata 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 doua variante:
Warning, Polinomul de interpolare da rezultate corecte doar pentru x in intervalul
[1,5]
101
sau
ddinterp(x,fx,z);
z
2
+ 1
Observaia 4.1.1. Polinomul de interpolare d rezultate exacte pentru functii polinomi- ale de grad
maxim n, unde n este numarul de puncte n care se cunoaste valoarea functiei cautate.
Observatia 4.1.2. Fie o functie tabelata, data prin lista ordonat a variabilelor [x1 = min, x2,..., xn =
max], i lista valorilor sale [f1, f2,..., fn]. Polinomul de interpolare da rezultate apropiate de valoarea
functiei doar pentru x n intervalul [x1,xn]. Pentru a ilustra acest fapt, consideram functia sin x pe
intervalul [0, 2n], i construim polinomul de interpolare cu diferente divizate. Pentru o vizualizare mai
buna, am reprezentat grafic punctele de interpolare, functia 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,
90


color=green): display(p1,p2,p3);
8 ( z
2
3z7r + 27r
2
)z 37T
3


Pentru polinomul lui Newton cu diferene finite la dreapta, respectiv la stnga, am folosit proceduri
similare celor folosite pentru polinomul lui Newton cu diferent e divizate.
Observaia 4.1.3. Fie o functie tabelata, data prin lista ordonata a variabilelor, [x = mm, x2,..., xn =
max], si lista valorilor sale, [fi, f2,..., fn]. Polinomul de interpolare cu diferent e finite nu aproximeaz
bine functia, pentru valori ale lui x n afara intervalului [x1,xn]. Un exemplu intuitiv n acest sens l
constituie urmtoarea secventa 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 carei rezultat este:
8 z
4
- 32 z
3
n + 34 z
2
n
2
- 4 zn
3
- 3 n
4
/
----------------------------
3 n
4

8 z
4
16 z
3
n +10 z
2
n
2
8 z n
3
3 n
4

9:=
37*

91



4.2 Polinomul de interpolare Lagrange
4.2.1 Breviar teoretic
Fie o funcie tabelata, data prin lista ordonata a [X0 = mm, xi, ...,xm = max], s i lista
valorilor sale [f0, /i,..., /m].
Polinomul de interpolare Lagrange care aproximeaza functia / este
m
(L
m
/)(x)
=
l
i
(x)

f

i=0
unde
(x - x
0
)... (x - Xj_i)(x - x
i +
i ) . . . (x - X
m
) .

h ( x ) = r r r , l = 0,m

variabilelor
(4.14)
(4.15)
92


( X i - Xo) ... ( X i - Xi-i)(Xi - Xi+i) ... ( X i - Xm)
se numesc polinoame de interpolare Lagrange fundamentale.
93


4.2.2 Probleme rezolvate
Exercit iul 4.2.1. S se gseasc polinomul de interpolare Lagrange pentru funcia

Rezolvare
Polinoamele de interpolare Lagrange fundamentale sunt:

lo(x) =
li(x) =
12 (x) =
13 (x) = /4(x) =
5 3)(5 4)
(5 - 1)(5 - 2)(
Astfel, polinomul de interpolare Lagrange este:
(L4/ )(x) = 2/0(x) + 5/i(x) + 10/2(x) + 17/4(x) + 26/5(x) ceea ce,
dupa efectuarea calculelor, devine
(L4/)(x) = 1 + x
2
.
4.2.3 Probleme propuse

Exercit iul 4.2.2. Sa se gseasca polinomul de interpolare Lagrange pentru urmatoarele seturi de date
i s se compare cu rezultatul obinut n paragraful anterior:
a)
b)
4.2.4 Implementare
A. Algoritm
Date de intrare: lista argumentelor funcfiei, x, lista valorilor funcfiei, /x, si o variabila z
Date de ies ire: valoarea polinomului de interpolare n acel numar, daca z este un numr,
respectiv expresia polinomului de interpolare, daca z este o nedeterminata
X 1 2 3 4 5
/(z) 2 5 10 17 26
(x 2)(x 3) x 4)(x 5)
(1 2)(1 3)
(x 1)(x 3)
1 4)(1 5)
x 4)(x 5) (2 1)(2 3)
(x 1)(x 2)
2 4)(2 5)
x 4)(x 5)
(3 1)(3 2)
(x 1)(x 2)
3 4)(3 5)
x 3)(x 5)
(4 1)(4 2)
(x 1)(x 2)
4 3)(4 5)
x 3)(x 4)
X -1 0 1 2
/(z)
2 1 0
-1
X
n _ 3n
2 ^ T
2TT
/(z) 1 0 -1
0 1

94


Algoritm
n = numrul de elemente ale listei x s =
0
pentru i = 1, n
p =1
pentru j = 1, n
i / Z X j
daca i j atunci p = p ------------
X i X/ j
s = s + f i p
returneaz s
B. Programe MAPLE s i 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 rezultate exacte pentru functii polinomi- ale de grad
maxim n, unde n este numarul de puncte n care se cunoate valoarea functiei cautate.
Observat ia 4.2.2. i n acest caz este valabila observaia ca, n general, polinomul de interpolare nu
da rezultate corecte pentru valori ale parametrului z situate n afara intervalului care contine
argumentele functiei.
Observatia 4.2.3. Aspecte practice ale interpolarii polinomiale:
1. Polinoamele Newton si Lagrange difera numai prin form; restul este acelasi n ambele cazuri,
dac se considera aceeasi retea de noduri. Din punct de vedere al calculului numeric, este
preferata folosirea polinomului Newton deoarece acesta necesit un numar de operatii
aritmetice mai mic fat de polinomul Lagrange. Necesarul de memorie este acelasi pentru
ambii algoritmi.
2. Daca notam cu a si P cel mai mic, respectiv cel mai mare dintre nodurile de interpolare, atunci
95


din punct de vedere computational, sunt convenabile urmatoarele polinoame de interpolare:
pentru x apropiat de a este convenabila utilizarea poli- nomului Newton cu diferente la dreapta
(forward); pentru x apropiat de P este convenabila utilizarea polinomului Newton cu diferente la
stanga (backward).
Interpolare spline
4.3.1 Breviar teoretic
Fie o funcpe tabelata, data prin lista ordonat a variabilelor,
[x1 = min,x2, ...,xn = max], i lista valorilor sale, [f1, f2,..., fn].
Deoarece interpolarea polinomial global pe tot intervalul [x1,xn] (de exemplu, polinoamele de
interpolare Newton si Lagrange) nu converge ntotdeauna, apare ideea de interpolare polinomiala pe
porpuni (interpolare spline), la care pe fiecare subdiviziune a intervalului [x0, xn] definim un alt
polinom de interpolare.
Functia spline polinomiala de ordinul ntai are expresia
S(x) = Si(x) = Si,o + Si,1 (x xi), x e [xi-1, xi] (4.16)
unde coeficienpi sik se determina din conditiile:
S(xi) = y i , i = 0, n - ,
(4.17)
Si( xi) = Si +i( xi) , i = l , n - 2.
Functia spline polinomiala de ordinul al doilea are expresia
S(x) = Si(x) = Si,o + Si,1 (x xi) + Si,2(x xi)
2
, x e [xi-1,xi] (4.18)
unde coeficienpi sik se determina din conditiile:
S ( x i ) = yi, i = 0, n-,
Si(xi) = Si+i(xi), i = 1, n - 1; (4.19)
S' iixi) = S'i+l{xi), % = l,n 1.
Deoarece avem 3ncoeficienti si 3n 1 conditii, pentru adetermina n mod unic
functia spline polinomiala de ordinul al doilea mai avem nevoie de o conditie
suplimentara.
Aceasta conditie suplimentara se refer la prima derivata, si are urmatoarea seminficatie:
96


unul din capetele funciei spline de ordinul al doilea trebuie sa fie punct de extrem local. De regul, se
alege
So\xo) = 0. (4.20)
Pentru diferite conditii suplimentare, se obtin diferite functii spline.
Funcia spline polinomial cubica (de ordinul al treilea) are expresia
S (x) = Si(x) = Si,o + Si,i(x - Xi) + Si, 2(x - Xi)
2
+ Si,3 (x - Xi)
3
,
x e [Xi-i,Xi] (4.21)
unde coeficientii sik se determina din conditiile:
S(xi) = y i , i = 0, n\
Si(xi) = S
i+
i(xi), i = 1, n - 1;
SHxi) = S' i +1(xi), i = 1, n - 1;
S ' i i x i ) = S"+l{xi), % = 1, n 1.
Deoarece avem 4n coeficienti si 4n 2 conditii, pentru determinarea n mod unic a functiei
spline polinomiale cubice este nevoie de dou conditii suplimentare. Aceste conditii suplimentare pot
fi

libere (sau naturale):
Sl'(xo) = Sn_i(xn_i) = 0 caz n care vorbim de o functie spline
cubic naturala;
clamped:
S
1
(x
0
)
=
y
0,
1
n_ 1
(x
n_ 1
)
= Vn_1-

1
1 =
s
10 +
s
11
(x 0)

52 =
S20 +
S 2 l { x
|)
53 =
s30 + s31 (x
n)
54 =
S40 +
S/iiix ^-)
(4.22)
(4.23)
(4.24)
97



4.3.2 Probleme rezolvate
Exerciiul 4.3.1. Sa se gaseasc functiile spline de interpolare de ordinul ntai, doi si trei pentru
urmatorul set de date (functia sinus):

Rezolvare
Avem 5 puncte, deci n = 4 intervale.
A. Funcia spline de ordinul ntai
Functia cutat va avea expresia:



X
0 2
71
f 27T
f { x )
0
1 0
-1 0
s
10 +
s
11
(x 0)
^20
+ S 2 l { x |)
S30 + S31 (x n)
S40 + S4i(x %-)
x e [0,
l \ x e
[|, 7r]
2
S(x)
x E [7r,
Condi iile care se pun sunt urmtoarele:
98
















Cu acestea, dup efectuarea calculelor, funcia cutat devine:

In figura urmatoare am reprezentat graficul functiei spline S n raport cu initiala (sin x):

^
s
10 =
0
^
S20 = 1 ^
S30 = 0
^
s
40 =
1
2
=r>- S41
n
2
=> Su = - n
2
=> s21 = -----
n
2
=> s31 = -----
n
funcia trece prin puncte
Si(0) = 0
&<) = i
S3(n) = 0
Si() = -1
S4(2n) = 0
functia este continua
n n
Sl(l) = s2(f)
S2(n) = S3(n)
s3() = SA f)
S (x)
4

|
t
o


, x e [0, f ]
1

4

|
t
o

+ 2 , x e
[ f
-

1

4

|
t
o

+ 2 ,x e
[^,

3TT
1
2 J
4

|
t
o

1

4

,x e
r
37
r
L
2
,
2n]
functia

99


B. Funcia spline de ordinul al doilea
Funcia cutat va avea expresia:

sio + sii(x - 0) + S12(x - 0)
2
, x e
S20 + S21 (x + S22(x ^)
2
, x
G
S30 + S31 (x - n) + S32(x - n)
2
,x e
S40 + S4i(x %-) + S42(x --)
2
, x
G

Notam:
Si Sio + sii(x - 0)
+ Si2(x - 0)
2

5*2 = S20 + S2l(x p
+ S22 (x -|)
2

53 S30 + S3i(x -
n) + S32(x - n)
2

= S40 + S41 (x ^-) +
S42 (x ^y)
2
[0, f]
[f.T]
Kf]
[ f , 2vr] .
S (x)
100



Condiiile care se pun sunt urmtoarele:


nlocuind valorile cunoscute n celelalte ecuatii, obtinem urmatorul sistem liniar
1 + S4i + S42 ( " 2 )
2
= 0
s
21 +
s
22(f )
2

s
31 +
s
32(f )
2
= 2Sl2

S21 = 0
Sl2(f)
2
= l
S21 + 2S22

S31 S31 + 2S32 S41


functia trece prin puncte

Si(0) 0
^
S
io
s4>=1
^
s
20
S3(n) 0
^ S30
S*(f) = -1
^
s
40
S4(2n) 0

functia este continua

n n
5l(
2
)
=
52(
2
}


S2(n) S3(n)

S3(y) = S4()

derivata este continua

, n , n
Si' ( 2) = &'( 2)

S2
;
(n) S3
;
(n)

s>'(f) = SA)

conditie suplimentara

Si'(0) 0
^ Sii
-1
"K_
\2 -
2-1
1
0
0
S (x)
101




































cu solutia
4 4 4 4 12 12 8
S12 i S22 ------------- ~ S32 ~T , S42 r , S2I S31 -----1 S41 .
n n
n
2
n
2
n
2
n
2
n
In acest fel, am determinat functia spline polinomiala de ordinul al doilea care aproximeaz
functia sinus pe intervalul [0, 2n]:
J_. r 2
n
2

, x G [ 0, ]
, x G [ f , 7r]
Ax
2
+ x 4
S (x)
l2
x
2 :;2
x 20
n
2
n
Ax
2
+ x 16
2

X G [7T, x G
[,27r]
In figura urmatoare am reprezentat graficul functiei spline S n raport cu functia initiala (sin x):

C. Functia spline cubic
Functia cautat va avea expresia:
Sl0 + Sii(x 0) + S12 (x 0)
2
+ S13 (x 0)
3

320 + S2l(x

f ) + S22(^

f )
2
+ S' Z A ~ f )
3
S30 +
S3i(x n) + S32 (x n)
2
+ S33(x n)
3
S40 +
S41 (x +S42 (x ^f)
2
+S43 (x )
3

x G [0, ]
X G [ , 7r]
x G [ n, x G
[f ,2TT]
S (x)
Notam:
S10 + Sll(x 0) + Si2(x 0)
2
+ S13 (x 0)
3

S20 + S2l (x

f ) + S22A ~ f )
2
S
^(
X
~ f )
3

S30 + S31 (x n) + S32 (x n)
2
+ S33 (x n)
3
S40
+ S41 (x %) + S42 (x %)
2
+ S43 (x %- )
3

51
52
53
54
Condi iile care se pun sunt
urmtoarele:
102


func tia trece prin puncte
S1(0) = 0
&(|) = i
S3(n) = 0
S*() = -1
S4(2n) = 0
functia este continua n n
5l(
2
) = 52(
2
}

S2(n) = S3(n)
s
3
() = s
4
()
derivata este continua , n ,
n
5i'( g) = SA g)
= Ss'(n)
S
3
' ( ) = S
4
'()
derivata a doua este continua
V(|) = s2"(|)
^"(n) = S3
/;
(n)
^"(y) = 54"(T)
condi tii suplimentare Si
7,
(0) = 0
S4
,7
(2n)
0





de unde, dupa efectuarea simplificrilor, rezulta c expresia funct iei spline cubice naturale
3
n
0
4
S12 = 0
S13
s
23
n
3

4
6
s
22
Solut ia acestui sistem va fi:
s
10 =
0 s
11
s
20 =
1 s
21
4
S30 = 0
s
40 =

1
0
S31
s
32
s
42
S13
n
3

4 6
S41 = 0
S l 3
_

care interpoleaz setul de date iniial este:
103








Redm n figura urmtoare graficul funciei spline cubice S n raport cu funcia iniial (sin x):

4.3.3 Probleme propuse
Exerciiul 4.3.2. Sa se gaseasca funcia spline de ordinul nti si funcia spline cubica natural
pentru urmtoarele seturi de date:
a)
b)
4.3.4 Implementare
A. Algoritmi
Prezenm n coninuare algorimul penru obinerea funciei spline cubice naurale. Date de
intrare lisa argumenelor funciei, x, lisa valorilor funciei, f, si variabila
z
Date de ieire dac z ese numar, aunci reurneaza valoarea funciei spline n acel numr, daca z
ese simbol, aunci reurneaza expresiile pe subinervale ale funciei spline.
x G [0, ]
x G [ |, 7r ] x G
[7T,
S (x) =
x G [,27t].
x( 3i r
2
+ 4x
2
)
. 7T
3
, , .
( 7T
3
127TX
2
+ 9X7T
2
+ 4x
3
)
, TI
-3
,
(x 7 r)(7 T
2
+ 4x
2
8 x7 r)
. 7T
3
, , .
(26n
3
24nx
2
+ 45xn
2
+ 4x
3
)
n
3


X -1 0 1
2
/(*)
2 1 0
-1
X
n 3n
?,
71
~
2TT
/(*)
1 0 -1 0 1
104


Algoritm
n = numrul de puncte, A - matrice ptratic de ordinul n 2, b - vector cu n 2 linii
pentru i = 1, n 1 hi xi +\ Xi pentru i = 1, n 2
= 2 {hi + /li-i-i)
pentru i = 2, n 2
A
i,i-1
h
i ljl;i hi pentru z = 1, n 2
/i+2
fi
+
1
/i+1

/i
bi = 6
h
i+i
h
i
c1 = 0
Cn = 0 _______
pentru z = 2, n 1
ci = a i 1-a soluie a sistemului tridiagonal Ac = b pentru i
= 1, n 1
s
i0
f
i
f
i+1
f
i
2h
i
c
i +
h
i
c
i+1
hi 6
c
i
2
c
i+1
c
i
=
6 hi
B. Programe MAPLE si rezultate
Programul Maple pentru determinarea functiei spline cubice naturale este urmtorul:
cubicspline:=proc(x::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;
s
i1 =
s
i2 =
105


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:
Testam aceasta procedur 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]
106


6.10-f)
2
4(10-!'
3

X\ : 1 +
n
2
n
3

...ixli.iizi):
n
2
n
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 n
2
+ 4 z
2
) n
3
- 12 nz
2
+ 9 zn
2
+ 4 z
3

n
3
n
3

(z n) (n
2
+ 4 z
2
8 z n) 26n
3
24n z
2
+ 45 zn
2
+ 4z
3

n
3
n
3

4.4 Polinoame Bernstein
4.4.1 Breviar teoretic
Polinomul Bernstein de grad m de aproximare a funciei f pe intervalul [0,1] este dat de relaia:
/ k \
(&./)(*) = E
C
. **(!-*)"-* /(-).*[0,1]. (4.25)
kt W
Cu ajutorul polinoamelor Bernstein se poate construi curba Bezier asociata punctelor Pi f a, yi ) , i =
0, n. Aceasta este dat prin ecuaiile parametrice:
n
x( t) = j 2 cn t
i
( i t)
n- t
xi ,
(4.26)
y(t) = E Cn t
i
(1 t)
n-i
yi , t e [0,1].
4.4.2 Probleme rezolvate
Exerciiul 4.4.1. Gasiti curba Bezier determinata de punctele Pi(0, 0), P2(1, 2), P3(2,1), P4(3, 2), P5(2, 4).
i=0
n
i =0
107


Rezolvare
Ecuatiile parametrice ale curbei Bezier sunt date de:
5
x(t) =Y1 cn t
i
(1 - t)
n
_
i
Xi = C4
0
t
0
(1 - t)
4
0 + C4V(1 - t)
3
1+
i=0
+ C4
2
t
2
(1 - t)
2
2 + C4
3
t
3
(1 - t)
1
3 + C4
4
t
4
(1 - t)
0
2 =
=4t(1 - t)
3
+ 12t
2
(1 - t)
2
+ 12t
3
(1 - t) + 2t
4

5
y(t) = cn t
i
( 1 - t)
n
_
i
Xi = C41
0
( 1 - t)
4
0 + C
,
4
1
t
1
( 1 - t)
3
2 +
i=0
+ C4
2
t
2
(1 - t)
2
1 + C4
3
t
3
(1 - t)
1
2 + C4
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
Exerciiul 4.4.2. Sa se scrie ecuatia curbei Bezier determinata de punctele (0, 0), (0, 2), (2,1), (2,2).
Exerciiul 4.4.3. S se scrie ecuatia curbei Bezier determinata de punctele (1, 0), (0, 2), (1,1), (2, 0),
(3,1).
4.4.4 Implemenare
A. Algorimi
Date de intrare o list de puncte n plan, Pi ( xi , j i ) , i = 1, n
Dae de iesire ecuatiile parametrice ale curbei Bezierdeterminata de aceste puncte
Algoritm pentru i = 0, n
x = x+cn t
i
(1 - t)
n
_
i
Xi+1 y = y
+ Cn t
i
(1 - t)
n
_
i
y+ 1
B. Programe MAPLE si rezulae
Testam aceasta procedur 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
108



109


Capitolul 5
Derivare numeric
Necesitatea derivrii numerice apare n practica n urmatoarele doua situatii:
a) expresia analitica a functiei date / conduce la o derivare formala dificil, caz n care derivata
se aproximeaz prin diferente finite;
b) expresia analitic a functiei / nu este cunoscuta (i.e. functia / este dat tabelat), caz n care
derivata se aproximeaza prin derivata unui polinom de interpolare
5.1 Aproximarea derivatei prin diferente finite
5.1.1 Breviar teoretic
Aproximarea derivatei ntai:
a) cu diferente finite la dreapta:
tU ^ f (
x
+
h
) ~ f (
x
) f ' i Ou r ^ t , u \ f x
f ( x ) = - h , G ( x, x + h) (5.1)
b) cu diferente finite la stanga:
t K ^ f (
x
) ~ f (
x
~
h
) , f ' i Ou < - ^ t i , ^ ( x o^
/ W = ------------ ^ --------- +
h
> ^ {
x
~ h , x ) (5.2)
Aproximarea derivatei a doua:
a) cu diferente finite la dreapta:
/"(x) = /( + ft)-VW+/(-ft) _ { (x _ h, ;r + h ) (5.3)
b) cu diferente finite la stanga:
/"(*) = + + ^({), { (x _ ^ x ) (5.4)
5.1.2 Probleme rezolvate
110


111


Exerciiul 5.1.1. Sa se gseasc prima derivat a funciei f : R ^ R, f (x) = x
2
+ 3x + 2 cu diferene finite
la stanga si la dreapta, n punctul x0 = 2.
Rezolvare
Precizia cu care este returnat valoarea derivatei este legata de valoarea pasului h. Pentru a
exemplifica acest lucru, folosind varianta clasic cu formula de derivare calculam valoarea derivatei n
punctul x0 = 2 , si apoi o comparam cu diversele valori obtinute pentru diferite valori ale lui h.
Astfel, folosind formula de derivare avem:
f '(x) = 2x + 3
de unde rezulta c f'(2) = 7.
Folosind aproximarea derivatei ntai cu diferente finite la dreapta, respectiv la stanga, pentru h =
0.1, avem:
m = = 7,
/'(2) =
/(2)
-/
(
i
2
--
1)
= 6 . 9 ,
= /(2 + 0.01) /(2) =
J y J

0.01
respectiv
N f (2) - f (2 - 0.01)
f 2 = ^ ^ = 6.99,
J ;
0.01
si aa mai departe.
Se observa ca, rezultatele numerice obtinute difera de rezultatul exact cu h.
5.1.3 Probleme propuse
Exerciiul 5.1.2. S se calculeze prima si a doua derivata folosind diferente finite la stanga, si apoi la
dreapta pentru urmatoarele functii:
a) f (x) = x
3
+ 2 n punctul x0 = 2 cu eroarea h = 0.1
b) f (x) = sin x n punctul x0 = n cu eroarea h = 0.01.
Comparati cu valorile exacte.
5.1.4 Implementare
A. Algoritmi
Date de intrare expresia unei functii, f, punctul x0 n care dorim s calculm derivata (respectiv a
doua derivat) si precizia h cu care dorim sa calculam aceasta derivata.
Date de iesire valoarea f'(x0) calculat cu diferente finite la dreapta (respectiv la stanga), respectiv
valoarea lui f''(x0) calculat cu diferente finite la dreapta
respectiv
iar pentru h = 0.01, avem
112


Algoritm
a) derivata ntai cu diferente finite la dreapta:
, _ f ( x + h ) ~ f { x )
h
b) derivata ntai cu diferente finite la stanga:
c) derivata a doua cu diferente finite la dreapta:
/ (
x +
h) 2f (
x
)
+
/ (
x
h)

r(x) =
h
2

B. Programe MAPLE si rezultate
Toate cele trei variante de program iau ca argument o expresie algebric, /, o variabila x (care
poate sa fie un numar, sau un simbol) si o eroare, h.
Testam 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 functii de
interpolare
5.2.1 Breviar teoretic
In cazul n care expresia analitica a functiei / nu este cunoscuta (functia / este data tabelat), derivata
functiei se mai poate obtine prin derivarea unui polinom de interpolare (Newton sau Lagrange).
Derivata acestui polinom de interpolare se poate obtine fie formal, fie folosind diferente finite (vezi
paragraful anterior).
5.2.2 Probleme rezolvate
113


Exerciiul 5.2.1. Se da funcia tabelat

a) folosind un polinom de interpolare, s se gseasca funcia f precum i derivata acesteia
b) folosind un polinom de interpolare, sa se gaseasca derivata nti a funciei f n punctul x0 = 2.5.
Rezolvare
Cu ajutorul polinomului de interpolare Lagrange, obtinem o valoare aproximativa pentru functia
f:
2 4 17 3 112 2 129
f ( z) = z 4 z
3
z 4 z - 34.
3 2 3 2
Derivata sa formala este:
, 8 3 51 2 224 129
f (z) = z
3
4 ---------- z
2
z 4 -------------- ,
J }
3 2 3 2
iar valoarea derivatei n punctul x0 = 2.5 este -4.45833340.
Aceasta valoare se poate obtine si daca folosim derivata cu diferente finite la dreapta a functiei f,
de exemplu cu o eroare de 0.01:
/'(2.5) = /(
2
-
5
+ -
01
) ~ Z(
2
-
5
) = -4.443980000.
J
' 0.01
5.2.3 Probleme propuse
Exerciiul 5.2.2. Calculati derivata ntai a fundpei

n punctul x0 = 0.5 folosind derivata polinomului de interpolare Lagrange. Exerciiul
5.2.3. Calculati derivata ntai a fundpei

n punctul x0 = n folosind derivata polinomului de interpolare al lui Newton cu diferente divizate.
5.2.4 Implementare
A. Algoritmi
Funcia de inerpolare a funciei abelae f se obine folosind unul din algorimii prezenai n
seciunile 4.2, 4.1 sau 4.3. Derivaa funciei de inerpolare se obine n Maple folosind procedura diff.
B. Programe MAPLE i rezultate
X 1 2 3 4 5
f {x) 1 3 - 1 0 1
X - 1 0 1 2
f {x)
2 1 0 - 1
X
2
71
f 27T
f {x)
1 0 -1 0 1
114


Exemplificm aplicarea acesei meode penru funcia abelaa

folosind polinomul de inerpolare Lagrange.
> x:=[1,2,3,4,5]: fx:=[1,3,-1,0,1]: # functia tabelata
> f:=lagrange(x,fx,z); # polinomul de interpolare
2 4 17 3 112 2 129
/ := z
4
- hz
3
z
2
+ 2 - 34
J
3 2 3 2
> diff(f,z); # prima derivata
8 3 51 2 224 129
3
Z +
T
Z
~~3~
Z +
~2~
> diff(f,z$2); # derivata a doua
2 224
-8z
2
+ 512 -
3
> diff(f,z$3); # derivata a treia
-16 z + 51
X 1 2 3 4 5
f {x) 1 3 - 1 0 1
115


Capitolul 6
Integrare numeric
Fie f : [a, b] ^ R o funcie integrabil Riemann-Darboux i nodurile echidistante x
f) a
a + i h ale intervalului [ a, b\, i = 0, N, h
N
6.1 Formule de tip Newton-Cotes
6.1.1 Breviar teoretic
Formula trapezelor (pentru care N =1):
l '
b
b - h
l f ( x) dx ^ [/(&) + f ( a) ] = | [/(&) + /(a)]. (6.1)
Formula general a trapezelor (formula trapezelor aplicata pe n subintervale ale intervalului dat):

Formula lui Simpson (pentru care N =2): l '
b
h
J f ( x) dx&- - [ f ( a) + 4: f ( a + h) +f ( b) ] . (6.3)
Observaia 6.1.1. Din teorema de medie, rezulta ca formulele de integrare de tip Newton-Cotes sunt
exacte pentru functii polinomiale de grad maxim 2N 1.
6.1.2 Probleme rezolvate
Exercitiul 6.1.1. Sa se calculeze
/ x
3
+ 1 dx
J 0
folosind:
n 1
/(x
i=1
f ( x) dx ^
(6.2)
f
() +
2

f (x<)
+
f (b)

116


a) metoda clasica (formal);
b) formula trapezelor;
c) formula general a trapezelor mpartind intervalul [0,1] n 2, 4, 8 subintervale;
d) formula lui Simpson.
Rezolvare
Rezultatul exact, obinut prin metoda formala, este:

Deoarece functia considerata este o functie polinomiala de gradul 3, rezulta ca formula trapezelor
(pentru care N = 1) nu este exacta, dar formula lui Simpson (pentru care N = 2) este exact. Aceasta
se poate remarca si din comparatia rezultatelor obtinute cu rezultatul exact (adica 1.25) obtinut prin
metoda formala.
Folosind formula trapezelor, obtinem:
1 _ o 1 3
X * + Idx= [/(O) + /(1)] = -a +
2
) = - = 1.5.
Daca mpartim intervalul [0,1] n 2 subintervale si aplicam formula generala a trapezelor avem:
r
1
1 1 1 9 2 1
I 1 ' l x i[/(0) + 2/(-) + /(1)] = - ( 1 + ^ + 2) = - = 1.3125.
Pentru n = 4 subintervale, avem:
1 1 3
3
+ 1 dx =-[/(0) + 2 ^ /(O + -) + /(!)]
1 65 9 91 81
= -(1 + 2 + 2- + 2 + 2) = = 1.265625.
8 64 8 64 64
Pentru n = 8 subintervale avem:
r
1
i
7
i 1 321 321
l ** +
1
* = 6
l/(0)
+
2
E
/(
+ 5)+
/(1)l
= 16-16 = 256 =
L25390625
-
Folosind formula lui Simpson, obtinem:
4
i 115 15
x
3
+ l dx= -|-(/(0) + 4/(-) + /(!)) = - y = - = 1.25.
1
x
4

4
o x
x + 1 ax =
'0
1
o 1 5
+ x|0 - + 1 - 1.25.
o
4 4

/

6.1.3 Probleme propuse
117


Exerciiul 6.1.2. S se calculeze integralele urmtoare folosind formula general a trapezelor pentru n
= 4 subintervale si formula lui Simpson:
f
8

a) / x
3
+ 1 dx

Comparati rezultatul obtinut cu solutia exacta.
6.1.4 Implementare
A. Algoritmi
Algoritmii folositi pentru integrarea numeric se bazeaza 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:
Exemplificm n continuare calculul integralei



sin x + 1 dx.
118


> f:=x->sin(x)+1;
f := x ^ sin(x) + 1
> evalf(int(f(x),x=0..1));
> trapeze(f(x),0,1,1);
> trapeze(f(x),0,1,2);
> trapeze(f(x),0,1,4);
> trapeze(f(x),0,1,8);
> simpson(f(x),0,1);
6.2 Formule de tip Gauss
6.2.1 Breviar teoretic
Formula de integrare numerica de tip Gauss pentru doua puncte (N = 2):
f ( x) dx / A j + f . (6.4)
Formula de integrare numerica de tip Gauss pentru trei puncte (N = 3):
Formula de integrare numerica de tip Gauss pentru patru puncte (N = 4):
( 6. 6)
18 + v
/
30 / y/525 - 70^^
+
36 ( 35 J +
18 + / y/525 - 70^/30^
+
36 ' y 35 J
+

+ 18 - ( y/525 + 70V
/
3C>\
36 35
Deoarece nformulele deintegrare numerica de tip Gausslimitelede interpolare sunt
-1 i 1, n cazul n care dorim s integram o functie definita pe un
interval [a, b], facem
schimbarea de variabila
(b a)t + b + a .
x = ^ --------------------- (6.7)
1.459697694
1.420735492
1.450080515
1.457300938
1.459098974
1.459862190
119


care va transforma intervalul [a, b] al variabilei x n intervalul [0,1] corespunztor noii variabile t. Astfel,
se obtine:
f
b
b a f
1
/ (b a)t + a + b\
J /(x)dx = J i f ----------------
J
~2 J
dt
(6-8)
Observaia 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 f 2
-2 i i / ,3
Exerciiul 6.2.1. Sa se calculeze Jx + 1 dx i Jx 1 dx folosind o formul de cuadratura de tip Gauss.
Rezolvare
Folosim formula pentru 2 puncte, care da rezultate exacte pentru polinoame pana la gradul 5.
Avem:
l /
+ l d l
= (--y)
+ 1 +
( i r )
+ 1 =
5
x
A
- 1 dx = ( -ir + - f + + 1 I -1 = 2.
6.2.3 Probleme propuse
Exerciiul 6.2.2. Sa se calculeze integralele urmtoare folosind formula lui Gauss pentru
2, respectiv pentru 3 puncte: r
8

3
a) / x + 1 dx
1
b) / cos nx dx
/o
2
c) J 3x
2
+ 1 dx
Comparai rezultatul obinut cu soluia exact si cu rezultatele obtinute n urma integrarii prin
metodele de tip Newton-Cotes.
6.2.4 Implementare
A. Algoritmi
Algoritmii folosii pentru integrarea numeric se bazeaz pe formulele de integrare prezentate
anterior.
B. Programe MAPLE si rezultate
Urmatorul program MAPLE ia ca argument o functie f , capetele intervalului pe care se integreaza, a
si b, i ordinul n (care poate fi 2, 3 sau 4).
gauss:=proc(f::algebraic, ab::range, n::numeric)
local xx, a, b g;
xx:=op(indets(f, name));
a:=lhs(ab);
120


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:
Exemplificam 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
121


Capitolul 7 Ecuatii
difereniale
Vom prezenta n continuare metode numerice de rezolvare a problemelor cu date iniiale pentru
ecuatii diferentiale de ordinul nti, precum i metode numerice de rezolvare a unor probleme la
limita liniare pentru ecuatii diferentiale de ordinul al doilea.
Rezolvarea problemelor cu date initiale pentru ecuatii
diferentiale de ordinul ntai
j
Fie problema cu date initiale

metode unipas: metoda diferentelor finite, metoda lui Taylor, metoda Runge-Kutta;
metode multipas: metoda Adams-Bashforth, metoda Adams-Moulton, metoda predictor- corector
Consideram punctele
Xj+i = Xj + h = x0 + (i + 1)h , i = 0,1,..., N 1
h > 0, i admitem c ay G ( a, f i ) pentru i = 0, N 1. Notm cu a = x0 i b = =
x0 + Nh.
7.1 Metoda diferentelor finite
7.1.1 Breviar teoretic
Formula lui Euler cu diferente finite nainte:
(7.3)

Pentru rezolvarea numerica a acestei probleme vom trece n vedere:
(7.1)
(7.2)
122


Formula lui Euler cu diferente finite napoi:
VOm) = y(x%) + h f ( xi +1, y( xi +1) ) , i = 0, N - 1 (7.4)
Formula punctului de mijloc:
y( xi +i ) = y{xi - 1 ) + 2h f ( xi , y( xi ) ) , i = 1, N - 1 (7.5)
unde y(xi) trebuie gsita cu alt metod.
7.1.2 Probleme rezolvate
Exercitiul 7.1.1. Sa se rezolve problema cu date initiale
J 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 diferente finite nainte. Aplicand formula (7.3) pentru x0 = 0 si y0 = y(0) = 2,
obtinem succesiv:

Soluia exact a problemei cu date iniiale considerat este
x3
y{x) = + X + 2.
Reprezentam grafic punctele obtinute folosind metoda lui Euler cu diferente finite nainte si graficul
solutiei exacte a problemei considerate:
X1 = 0.1000000000
y1 =
2.100000000
x2
=
O.2OOOOOOOOO y2 = 2.20l000000
x3 = 0.a000000000 y3 = 2.a05000000
x4 = 0.4000000000 y4 = 2.4l4000000
x5 = 0.5000000000 y5 = 2.5a0000000
Xe = 0.6000000000 ye = 2.655000000
x7 = 0.T000000000 y7 = 2.T9l000000
xs = 0.8000000000 ys = 2.940000000
X9 = 0.9000000000 yo = a. 104000000
x
10 = l y10 = a.285000000
123



7.1.3 Probleme propuse
Exerciiul 7.1.2. Folosind metoda lui Euler cu diferente finite nainte, sa se determine solutia aproximativa
a problemei
y'(x) = y(x) x
2
+ x y(1) = 2
mpartind intervalul [1, 2] n N = 4. Comparat cu rezultatul exact.
7.1.4 Implementare
A. Algoritmi
Date de intrare: o ecuatie y'(x) = /(x,y(x)), valorile initiale x0 si y0, un interval [a, b] i numarul de puncte
n care se mparte intervalul, N
Date de ieire: solutia aproximativa a problemei cu date initiale, dat sub forma unui ir de puncte, rez,
folosind metoda lui Euler cu diferente finite nainte
Algoritmul consta n urmtorii pasi:
1. definirea functiei /
2. aplicarea formulei lui Euler cu diferente finite nainte:
adauga elementul (x0, y0) la lista rez
pentru i = 0, N 1 yi+i = yi +
h/ (x
i,yi) xi+i = xi +
h
adauga punctul (xi+1,yi+1) la liste rez
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

124


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 : =
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
rez := [[0, 2], [0.1000000000, 2.100000000], [0.2000000000, 2.201000000],
[0.3000000000, 2.305000000]]
yl := 2.414000000
xl := 0.4000000000
rez := [[0, 2], [0.1000000000, 2.100000000], [0.2000000000, 2.201000000],
[0.3000000000, 2.305000000], [0.4000000000, 2.414000000]]
yl := 2.530000000
xl := 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]]
yl := 2.655000000
xl := 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]]
yl := 2.791000000
xl := 0.7000000000
rez := [[0, 2], [0.1000000000, 2.100000000], [0.2000000000, 2.201000000],
[0.3000000000, 2.305000000], [0.4000000000, 2.414000000],
xl := 0.3000000000
l22


[0.5000000000, 2.530000000], [0.6000000000, 2.655000000],
[0.7000000000, 2.791000000]]
yl := 2.940000000
xl := 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]]
yl := 3.104000000
xl := 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]]
yl := 3.285000000
xl := 1.000000000
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]]
Prezentm n continuare aproximarea soluiilor problemei
cos x
y'(^) /v
y
(x)

y(0) = 2
a crei soluie exact este y( x) = \J2 sinrr + 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(.t) = sj ' l sin(.t) + 4
> p1:=plot([seq(dfieuler(diff(f(x),x)=cos(x)/f,0,2,0..5,N),N=2..52,10)]
124


> ):
> p2:=plot((2*sin(x)+4)"(1/2),x=0..5, color=black, thickness=2):
> display(p1,p2);


i i i i | i i i i | i i i i | i i i i | i i i i |
0 1 2 3 4 5
125


7.2 Metoda lui Taylor
7.2.1 Breviar teoretic
Metoda lui Taylor de ordinul n pentru rezolvarea problemei cu date initiale (7.1), presupune gasirea
sirului (Yn)n, unde:
Yo = y(xo)
Y+l = Yi + h Tn(xi,Yi,h) pentru i = 0,1,...,N 1,
iar
h h
n1

Tn( xi, yi,h) = f (xi,yi) + - f ' ( xi, yi) + . . . +
Pentru n =1, metoda lui Taylor devine metoda lui Euler. Pentru n
=2, obtinem urmatoarea formula:


h
T
2
{ xi , yi , h) = f ( xi , yi )
+ -
x 9f
7^(xi,yi) + - 7^{xi , yi ) f {xi , yi )

iar pentru n = 3 obtinem:

d
2
f d
2
f
(x*, y) + 2f ( xi } y^ - - ( cci , yi ) +
SxSy

d
2
f
+ f i
x
i , Vi ) - Q^i
x
i ^Vi )
7.2.2 Probleme rezolvate
Exerciiul 7.2.1. Folosind metoda lui Taylor de ordinul 2, sa se rezolve problema cu date initiale
urmatoare
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
h
T2(x, y, h) = 1 + x
2
+ 2x.
Astfel, termenul general are forma:
Vi+i = Vi + h (1 + x
2
+ hxi)
(7.6)
(7.7)
(7.8)
(7.9) Vi ) f {
x
i , Vi )
+
h
T3( xi , yi , h) =f ( xi , yi) + -
h
2

Sx
2

df.
Sx
d
v
+ / (i, Vi ) - 7^{x , yi ) + - - ( Xi , yi ) - ( xi } yt ) +
d
2
f
126


Plecnd de la X0 = 0 i y0 = y(0) = 2 i aplicnd formula lui Taylor de ordinul 2, obinem succesiv:

7.2.3 Probleme propuse
Exerciiul 7.2.2. Folosind metoda lui Taylor de ordinul 2 si 3, sa se gaseasca solutia aproximativ a
problemei
J y' (x) = x
2
+ x +1
\ y(i) = 2
mprtind intervalul [1, 2] n N = 4. Comparati cu rezultatul exact.
7.2.4 Implementare
A. Algoritmi
Date de intrare: o ecuatie y'(x) = f(x,y(x)), valorile initiale xo si y0, un interval [a, b] i numarul de
puncte n care se mparte intervalul, N
Date de ieire: solutia aproximativa a problemei cu date initiale, dat sub forma unui ir de puncte,
rez
Algoritmul consta n urmatorii pasi:
1. definirea functiei f
2. aplicarea formulei lui Taylor de ordinul 2 sau 3:
adauga elementul (x0, y0) la lista rez pentru i
= 0, N 1
yi+i = yi + hT(x^ y^ h), unde T este dat de (7.8) sau (7.9) xi+i = xi + h
adauga punctul (xi+1,yi+1) la liste rez
B. Programe MAPLE i rezultate
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)');
Xi = 0.1000000000 yi = 2.120000000
X2 = 0.2000000000 y2 = 2.232706000
X3 = 0.3000000000 y3 = 2.350316071
X4 = 0.4000000000 y4 = 2.475125294
X5 = 0.5000000000 y5 = 2.609481021
X6 = 0.6000000000 y6 = 2.755790277
X7 = 0.7000000000 y7 = 2.916529651
X8 = 0.8000000000 y8 = 3.094257797
X9 = 0.9000000000 yo = 3.291630711
X
io
=
1.000000000 yio = 3.511419969
127


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;
y
1
:=y
0
;
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);

In continuare prezentam pe acelasi sistem de coordonate solutia exact a problemei rezolvate
anterior si aproximarea solutiei cu ajutorul formulei lui Taylor de ordinul 2, respectiv 3, pentru
diferite valori ale parametrului N.

128




7.3 Metoda Runge-Kutta
7.3.1 Breviar teoretic
Metoda Runge-Kutta de ordinul n pentru rezolvarea problemei cu date initiale (7.1) presupune gasirea
sirului (Yn)n care aproximeaza solutia problemei date.
Pentru n =2, obtinem:
h
Yi +1 = Yi + [ f ( xi , Yi ) + f ( xi + i , Yi + h. f ( xi, Yi }) ] (7.10)
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);


129


cu Yo = y(xo).
Pentru n =3, obtinem
'i+i
=
+ 7 ' (ki + 4k2 + k s ) (7-11)
cu Yo = y(xo) si
ki = h /(xi,Yi) (7.12)
A2 = h / ^ ^
k3 = h /(xi + h, Yi ki + 2k2)
Pentru n = 4, obtinem
l'i-i-i = l'i + (ki + 2k2 +2k3 + k4) (7-13)
6
cu Y = y(xo) si
ki = h /(xi,Y) (7.14)
k2 = h- f ( xi + ^, Yi +
h = h- f ( ^Xi + ^, Yi + y^) k4
= h f ( xi + h, Yi + ka)
7.3.2 Probleme rezolvate
Exerciiul 7.3.1. Sa se rezolve problema cu date initiale urmatoare
J y'(x) = 1 + x
2

l 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.
Plecand de la x0 = 0 si y0 = y(0) = 2 si aplicand formula (7.10) obtinem:
130



7.3.3 Probleme propuse
Exerciiul 7.3.2. Folosind metoda Runge-Kutta de ordinul 2, 3, 4, sa se gaseasca solutia
aproximativa a problemei
J y'(x) = x +1
1 y(1) = 2
mpartind intervalul [1, 2] n N = 4. Comparat cu solutia exacta.
7.3.4 Implementare
A. Algoritmi
Date de intrare: o ecuatie y'(x) = f (x,y(x)), valorile initiale xo si y0, un interval [a, b] i numarul de
puncte n care se mparte intervalul, N
Date de ieire: solutia aproximativa a problemei cu date initiale, dat sub forma unui ir de
puncte, rez, obtinuta cu metoda Runge-Kutta
Algoritmul consta n urmatorii pasi:
1. definirea functiei f
2. a) metoda Runge-Kutta de ordinul 2:
adauga elementul (x0, y0) la lista rez
pentru i = 0, N 1 h
Vi +1 = Vi + 2 M(
Xi
Vi ) + f (
x
i +i Vi +
h
f (
x
i > Vi ) ) \
xi+i = xi + h
adaug punctul (xi+1,yi+1) la liste rez
b) metoda Runge-Kutta de ordinul 3 adauga
elementul (x0, y0) la lista rez
pentru i = 0, N 1
calculeaza coeficieni k1, k2, k3 pe baza formulei (7.12)
Ui +i = Di + 7: ( ^i + + f c3 )
adauga punctul (xi+1,yi+1) la liste rez
c) metoda Runge-Kutta de ordinul 4 adauga
elementul (x0, y0) la lista rez
x1 =
0.1000000000
yi = 2.100500000
x2 = 0.2000000000 y2 = 2.203000000
xa = 0.3000000000 ya = 2.309500000
x4 = 0.4000000000 y4 = 2.422000000
x5 = 0.5000000000 y5 = 2.542500000
x6 = 0.6000000000 y6 = 2.673000000
x7 = 0.7000000000 y7 = 2.815500000
xg = 0.8000000000 yg = 2.972000000
xg = 0.9000000000 yg = 3.144500000
x
10
=
1.000000000 y10 =
3.335000000
131


pentru i = 0, N 1
calculeaza coeficieni kq, k2, k3, k4 pe baza formulei (7.14)
Ui +i = Vi + z ( kq + 2kq + 2f c3 + f c4 )
6
adaug punctul (xi+1,yi+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
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]]
Prezentam n continuare diferite aproximari obtinute cu metoda Runge-Kutta de ordinul 4, pentru
solutia problemei
J y'(x) = cos x
\ y(0) = 2.
132


folosind diverse valori ale parametrului N. Solutia exacta a acestei probleme este y(x) = sin x + 2.

7.4 Metoda Adams-Bashforth
7.4.1 Breviar teoretic
Metoda Adams-Bashforth este o metoda multipas de rezolvare a problemei (7.1), care pentru calculul
valorii yi+1 foloseste valorile obtinute n punctele x*, xi-k.
Pentru k = 1, se obtine metoda Adams-Bashforth de ordinul 2, a carui termen general yi+1 se gseste
din relatia:
h
y%+1 = Vi + ^- [3 f f a, yi ) - f ( xi - i , yi - i ) ] (7.15)
unde y0 = y(x0). Pentru ca relaia (7.15) sa aibe sens, trebuie ca indicii s fie toi pozitivi, i.e. i 1 > 0
deci i > 1. Ins aceasta ne permite s aflam valorile aproximative ale solutiei ncepand cu y2. Valoarea y1
trebuie calculata prin alta metoda (de exemplu, folosind metoda lui Euler cu diferente finite nainte).
Pentru k = 2, se obtine metoda Adams-Bashforth de ordinul 3, a carui termen general yi+1 se gseste
din relatia:
h
Vi +1 = yi + j ^- {23 f ( xi, yi ) - + 5/(x_2, yi - 2) }- (7.16)
unde y0 = y(x0). Pentru ca relatia (7.16) s aibe sens, trebuie ca indicii s fie toti pozitivi, deci i > 2.
Valorile y1 si y2 trebuie calculate prin alta metoda (de exemplu, folosind metoda lui Euler cu diferente
finite nainte).
Pentru k = 3, se obtine metoda Adams-Bashforth de ordinul 4, a carui termen general yi+1 se gaseste
din relatia:
h
y i + 1 = y i + ^ l i
5 5
/(^ y i ) -
5 9
f ( x % - \ , y % - 1) + 37/( Xi _2, y i - 2 ) - 9 /(Xi _3, V i - i ) } . (7. 17)
unde y0 = y(x0). Pentru ca relatia (7.17) s aibe sens, trebuie ca indicii sa fie toti pozitivi, deci i > 3.
Valorile yi, y2 si y3 trebuie calculate prin alta metod (de exemplu, folosind metoda lui Euler cu diferente

133


finite nainte).
Pentru k = 4, se obtine metoda Adams-Bashforth de ordinul 5, a carui termen general yi+1 se gseste
din relatia:
h
Vi +I = Vi + ^ {1901 f ( xi , yi ) - 2774/(a:i_i,yi_i) + 2616/(a7*_2, yi-2) (7.18)
- 1274 f (xi-3, yi-3) + 251 f (xi-4, y*-4)}.
unde y0 = y(x0). Pentru ca relaia (7.18) sa aibe sens, trebuie ca indicii sa fie toi pozitivi, deci i > 4.
Valorile y1, y2, y3 si y4 trebuie calculate prin alta metoda (de exemplu, folosind metoda lui Euler cu
diferente finite nainte).
7.4.2 Probleme rezolvate
Exerciiul 7.4.1. Folosind una din metodele Adams-Bashforth prezentate mai sus, sa se rezolve
urmatoarea problem cu date initiale
j 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 x0 = 0 si y0 = 2. Cu ajutorul formulei lui Euler cu diferente finite nainte, obtinem x1 =
0.1000000000 si y1 = 2.100000000 Aplicand formula (7.15) obtinem:

7.4.3 Probleme propuse
Exerciiul 7.4.2. Folosind metoda Adams-Bashforth de ordinul 2 si 3, s se gseasc solutia
aproximativa a problemei
J y'(x) = y(x) x
2
+ x
y(1) = 2
mpartind intervalul [1, 2] n N = 4. Comparati cu solutia exact.
7.4.4 Implementare
A. Algoritmi
Date de intrare: o ecuatie y
;
(x) = f(x,y(x)), valorile initiale x0 si y0, un interval [a, b], ordinul metodei,
m, si numarul N de puncte n care se mparte intervalul
Date de ieire: solutia aproximativ a problemei cu date initiale, dat sub forma unui ir de
puncte, rez, obtinuta cu ajutorul metodei Adams-Bashforth Algoritmul consta n urmatorii pasi:
x2 = 0.2000000000 y2 = 2.201500000
x3 = 0.3000000000 y3 = 2.307000000
x4 = 0.4000000000 y4 = 2.418500000
x5 = 0.5000000000 y5 = 2.538000000
x6 = 0.6000000000 y6 = 2.667500000
x7 = 0.7000000000 y7 = 2.809000000
xg = 0.8000000000 yg = 2.964500000
x9 = 0.9000000000 yo = 3.136000000
x10 = 1.000000000 y10 = 3.325500000
134


1. identificarea functiei f
h ^ ~
a

N
2. gsirea soluiei aproximative
adaug elementul (x0, y0) la lista rez
pentru i = 1, m 1 yi+i = yi +
hf (x
i,yi
)

Xj+i = Xi + h
adauga punctul (xi+1,yi+1) la lista rez
pentru i = m, N
obtine yi+1 din formula corespunzatoare ordinului((7.15), (7.16), (7.17) sau (7.18))
Xi+i = Xi + h
adauga punctul (xi+1,yi+1) la lista rez
B. Programe MAPLE s i 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),
M
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;
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;
135


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 continuareprezentam pe acelasi sistem de coordonate solutia exacta a problemei rezolvate
anterior si solutiile obtinute cu metoda Adams-Bashforth, n care am variat ordinul metodei dar am
pastrat constant numrul de puncte n care s-a calculat solutia.
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);

7.5 Metoda Adams-Moulton
7.5.1 Breviar teoretic
Metoda Adams-Moulton folosete o formul implicit pentru a gsi elementul yi+1 al soluiei unei
probleme cu date initiale.
Metoda Adams Moulton de ordinul 2:
h
y%+1 = Vi + - ^ [ f ( xi, Vi ) + f ( xi +i , yi +i ) ] - (7-19)

136


Metoda Adams-Moulton de ordinul 3:
h
Vi +1 = y% + [5/(a;i+i,yi+i) + 8f ( xi , yi ) - (7.20)
Metoda Adams-Moulton de ordinul 4: h
Vi+1 = yi + ^ [9/(^+i, yi+i) + 19/(ar*, g/i) 5/(ar*_i, 2/*_i) + /(or*_2, 2/-2)]- (7.21)
Metoda Adams-Moulton de ordinul 5: h
Yi+1
= Yt +
720
[251
^
Xi
+^
Yi
+^ +
646
K
Xi
'
Fi
)
264 Yi
~^
+
(
7
-
22
)
+ 106 f (Xi-2, Y-2) - 19 f (Xi-3, Y-3)]
Observaia 7.5.1. Formula Adams-Moulton de ordin n se foloseste mpreuna cu o formul Adams-
Bashforth de ordin egal sau superior n metode de tip predictor-corector (vezi paragraful 7.6).
xi = 0.1000000000
x2 = 0.2000000000
x3 = 0.3000000000
137


7.6 Metoda predictor-corector
7.6.1 Breviar teoretic
Combinaia unei metode explicite folosita pentru predicia valorii i a unei metode implicite folosita
pentru corectarea valorii, se numete metoda predictor-corector.
Dac ordinul metodei predictor este cel putin egal cu ordinul metodei corector, atunci este
suficienta o singur iteratie pentru a pastra acuratetea metodei corector.
Cea mai raspandita metoda predictor-corector este combinata formulei de ordinul patru a lui
Adams-Bashforth ca predictor, cu formula de ordinul patru a lui Adams- Moulton ca si corector:
(7.23)
- 5 f (x
i-i
,
yi-i
)
+
f (x
i-2
,
yi-2
)]

7.6.2 Probleme rezolvate
Exercitiul 7.6.1. Folosind metoda predictor-corector, sa se rezolve problema cu date initiale
y(x) = 1 + x
2
y(0) =
2
pe intervalul [0,1], pentru h = 0.1.
Rezolvare
Avem xo = 0 si yo = 2. Cu ajutorul formulei lui Euler cu diferente finite nainte, obtinem

+ 37 f (xi-2, yi-2) - 9 f (xi-3, yi-3)] h
Vi +I = Vi + 2 4 [
9
f (
x
i +1> Vi +1) +
19
Vi )
yi= 2.100000000 y2
= 2.201000000 y3 =
2.305000000
138


Aplicnd formula (7.23) obinem:

7.6.3 Probleme propuse
Exerciiul 7.6.2. Folosind metoda predictor-corector, s se gseasc soluia aproximativ a problemei
j v'
(x
) = y
(x
) +
x

\ y(i) = 2
mprtind intervalul [1, 2] n N = 8. Comparati cu solutia exacta.
7.6.4 Implementare
A. Algoritmi
Date de intrare: o ecuatie y'(x) = f (x,y(x)), valorile initiale x0 si V0, un interval [a, b] i numarul de
puncte N n care se mparte intervalul
Date de ieire: solutia aproximativa a problemei cu date initiale, dat sub forma unui ir de
puncte, rez
Algoritmul consta n urmatorii pasi:
1. identificarea functiei f

x4 = 0.4000000000 p
y4 =
2.417333333

yr = 2.417333333
X5 = 0.5000000000
p
y5 =
2.537666666

y5 = 2.537666666
X6 = 0.6000000000
p
y6 =
2.667999999

y6 = 2.667999999
x7 = 0.7000000000
p
y7 =
2.810333332

yr = 2.810333332
X8 = 0.8000000000
A
,

0
0

2.966666665

y8 = 2.966666665
X9 = 0.8000000000
p
yo =
3.138999998

yo = 3.138999998
x
10 =
1.000000000
p
y
10
=

3.329333331

y10 = 3.329333331
2. gasirea solutiei aproximative
adauga elementul (x0, y0) la lista rez
pentru = 1,3
Vi+i = Vi +
hf
fev^
b u

139



140


xi+i = xi + h
adauga punctul (xi+1,yi+1) la lista rez
pentru i = 4, N
calculeaz yf din ecuatia (7.23) calculeaza yi din
ecuatia (7.23)
xi+i = xi + h
adauga punctul (xi+1,yi+1) la lista rez
B. Programe MAPLE i 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(
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;
141


rez:=[op(rez),[x1,y1]]; od; end:
In continuare prezentm n acelai sistem de coordonate soluia exacta a problemei rezolvate
anterior si solutiile obtinute cu metoda predictor-corector, n care am variat ordinul metodei dar am
pastrat constant numarul de puncte n care s-a calculat solutia.
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);

142


Rezolvarea problemelor la limita liniare pentru ecuat ii diferent
iale de ordinul al doilea
j
7.7 Metoda diferent elor finite pentru rezolvarea unei
probleme la limita liniare
7.7.1 Breviar teoretic
Se considera problema
y" = p(x) y' + q(x) y + r(x) x G [a, b] cu conditiile la frontiera mixte:
Y1 y
(a)
+ Y2 y'
(a)
=
a
Ya y
(b)
+ Y4 y'
(b)
=






















(7.24)
(7.25)
Daca Y2,Y4 = 0, atunci vorbim de conditii la limita Dirichlet, iar daca
Y1, Y3 = 0, atunci vorbim de conditii la limit Neumann.
b a
Dac mprim intervalul [ a, b] n N + 1 intervale de lungime h = ^ ^ inotm
Y = y(xi), atunci determinarea valorilor Y se reduce la rezolvarea sistemului
AY = B
(7.26)
(7.27)
(7.28)
2hY1
3Y2 h
2
r(x2)
h
2
r(x1)
2haai
(7.29)
h
2
r(xN-1) /i
2
r(xw) -
2
^
CW

2h
Y3 +
3
Y4.
iar
unde
, 4an2_ |
a
172
0 0 0
2h' y1-
3' y2
2 0
0

0
2h' y1-
3' y2
b2

3
0
0
0
0
&N- 1
0

0
CN- 1
4e
jV
74
C
2
b
3
0
0
A
T
Y =(Y1,Y2,...,YN )
B
(7.30)
(7.31)
(7.32)
bi = (2 + h
2
q(xi))
C i = l ~ ^P{ X ) .
143


In capetele intervalului, valorile aproximative ale solutiei sunt date de:
ha Y2yi
V
(x
o
)

hYi + Y2 h3
Y4Vn
V
(x
N +l
)

hY3 + Y4
7.7.2 Problema rezolvata
Exercitiul 7.7.1. Sa se gaseasca solutia aproximativa a problemei urmatoare
y" = x
V(0) = 0
V(1) = 1


















Valorile solutiei aproximative n capetele intervalului sunt
y(0) = 0 y(1) = 1.
Astfel, se obtine solutia aproximativa a problemei date sub forma unui sir de puncte:
,1 27 , 2 56 , 3 89 , "
( > )> (4, ^g) (4 128^^4 128^ ^
(7.33)
s
i

(7.34)
pe intervalul intervalul [0,1] (N = 3).
Rezolvare Avem:
p(x) = 0
Yi = 1 Y3
= 1
1 0 1
q(x) = 0
Y2 = 0 Y4
= 0
r(x) = x a
= 0
3 =1
h
3 + 1 4
1 2 3
*!= 4 x
2 = i

Inlocuind aceaste valori, se obtine sistemul
Ay = b
unde
A =
i
2 1 0
1 2 1
0 1 2
64
_2_
64
61
'64
b
si a carui solutie este:
27
12
8
56
12
8
89
12
8
y =
144


7.7.3 Probleme propuse
Exerciiul 7.7.2. S se gseasc solutia aproximativa a problemei
f y'' =
2y
+ %
1
< y(0)
= 1
1 y(1) = 2
pe intervalul intervalul [0,1] (N = 4). Comparati cu solutia exacta.
Exercitiul 7.7.3. Sa se gaseasc solutia aproximativ a problemei
( y" = 2y' + 3y 1 {
2y(0)+ y'(0) = 1
1 y' (1) = 1
pe intervalul intervalul [0,1] (N = 4).
7.7.4 Implementare
A. Algoritmi
Date de intrare: ecuatia ec1, condicile la frontier ec2, ec3, si numarul de puncte n care se cauta
solutia, N
Date de iesire: lista rez a punctelor care definesc solutia
Algoritmul consta urmatoarele etape:
1. identificarea intervalului [a,b],a functiilor p, q, r precum si a coeficientilor Y1, q2,
73 , 74, a, P
2. determinarea punctelor x* n care se calculeaz solutia, a matricei A si a vectorului B
3. rezolvarea sistemului AY = B
4. returnarea listei de puncte de forma [(xj,Y)] care alctuiesc solutia numeric a problemei
B. Programe MAPLE s i rezultate
Observat ia 7.7.1. Avand ecuapa si condipile pe frontiera, se pot determina: intervalul [a,b], funcpile
p, q, r, numele variabilei n care se scrie ecuatia, x, precum si coeficienpi Y1, Y2, Y3, Y4, a, P. Pentru
aceasta, am construit procedura coeficieni.
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")
then f:=rhs(ec1);
elif StringTools[Has](convert(rhs(ec1),string),"$2") or
StringTools[Has](convert(lhs(ecl),string),"diff(diff") then f:=lhs(ecl); 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)');
145


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
g4:=coeff(mEl],op(indets(mEl],function))); if mE2]=0 then g3:=0
else g3:=coeff(mE2],op(indets(mE2],function))); fi; fi;
RETURN(A,B,xx,p,q,r,gl,g2,g3,g4,rhs(ec2),rhs(ec3)); end:
Procedura care returneaza sirul de puncte care aproximeaza solutia este bvproblem.
bvproblem:=proc(ecl::equation, ec2::equation, ec3::equation,
N: : integer)
local f,A,B,p,q,r,h,gl,g2,g3,g4,a,b,i,x,xx,AA,BB,yy; f:=coeficienti(ecl,ec2,ec3);
A:=fEl] ;B:=fE2] ;xx:=fE3] ; p:=f E4];q:=fE5];r:=f E6];
gl:=f E7] ;g2:=f ES] ;g3:=f E9] ;g4:=fEl0] ;a:=fEll] ;b:=fEl2] ; h:=(B-A)/(N+l); for i from l to
N do x Ei] :=evalf(A+i*h); od;
AA:=matrix(N,N,0);
BB:=vector(N,0); for i from l to N do
AA Ei,i]:=evalf(-(2+h~2*subs(xx=x Ei],q)));
BB Ei]:=evalf(h~2*subs(xx=x Ei],r)); od;
for i from l to N-l do
AA Ei,i+1]:=evalf(l-h/2*subs(xx=x Ei],p));
AA Ei+1,i]:=evalf(l+h/2*subs(xx=x Ei+1],p)); od;
AAEl,1]:=evalf(AAEl,l]-4*(l+h/2*subs(xx=xEl],p))
*g2/(2*h*gl-3*g2));
AAEl,2]:=evalf(AAEl,2]+(l+h/2*subs(xx=xEl],p))
*g2/(2*h*gl-3*g2));
AAEN,N-l]:=evalf(AAEN,N-l]-(l-h/2*subs(xx=xEN],p))
146


*g4/(2*h*g3+3*g4));
AAEN,N] :=evalf(AAEN,N]+4*(l-h/2*subs(xx=xEN] ,p))
*g4/(2*h*g3+3*g4));
BB El]:=evalf(BBEl]-2*h*a*(l+h/2*subs(xx=xEl],p))/
(2*h*gl-3*g2));
BBEN] :=evalf(BBEN]-2*h*b*(l-h/2*subs(xx=xEN] ,p))/
(2*h*g3+3*g4));
evalm(AA);evalm(BB); yy:=linsolve(AA,BB) ;
RETURN(E
Eevalf(A), evalf(( h*a-g2*yyEl] )/(h*gl+g2)) ],
seq( [x[i] ,yy [i] ] ,i=1 ..N),
[evalf(B), evalf(( h*b-g4*yy[N] )/(h*g3+g4)) ]
]);
end:
Testam aceasta procedur pentru calculul soluiei aproximative a problemei
v" =
-
v' + v +1
v(0) = 1
!/'(!) = o
Pentru comparatie, am reprezentat grafic n acelasi sistem de coordonate solutia formala a problemei,
obtinut cu ajutorul procedurii predefinite dsolve si punctele obfinute aplicand 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);


147


AV&-DX, , , ( v' B+l ) ^, , ( VS + 1) ! , , ( V5- 1) ^ . s
e
(
2 )(_i + 2e
(
------- 3 >) e
(
--- 2 > [ 2e
{
4 ) - 1)
vl ----------------------------------------------------------------- H
-
1
* * ( ( n/1) 7T \ /_ ( y/+l ) 7T \ / ( n/ 1) 7T \ / ( \/5+l ) 7r -v
gv 4 / gv 4 / gv 4 / gv 4 )

[$i' (x) + p(x) $i(x)q(x) $i(x)]dx.
148


7.8 Metoda colocatiei si metoda celor mai mici ptrate
7.8.1 Breviar teoretic
Se considera problema
y" + p(x) y' + q(x) y + r(x) = f (x), x G [a, b] (7.35)
cu conditiile la limit mixte,
Yi y
(a)
+ Y2 y'
(a)
=
a
Y3 y
(b)
+ Y4 y'
(b)
=
3

Cautam o solutie a ecuatiei (7.35) de forma
Yn(x) = $o(x) + ^2 Ci ^i(x) (7.37)
i=l
unde ($0, $l;..., $N} sunt functii de clasa C
2
liniar independente, care verifica: Yi $o(a) + Y2 $0(a) =
a si Y3 $o(b) + Y4 $0(b) = 3
(7.38)
7r$i(a)+72-$-(a) = 0 i 73-$(6) + 74$!(&) = 0, i = 1, N.
Metoda colocatiei presupune gasirea coeficientilor ci din sistemul de N ecuatii cu N necunoscute
N
J^Ci[$i'(xfc) + p(xfc) $i(xfc) + q(xfc) $i(xfc)] = (7 39)
i = 1 ____
= f ( xk) - $0(
x
k) - p( xk) - $o( xk) - q( xk) - $o( xk) , k = 1, N
Metoda celor mai mici ptrate presupune gsirea coeficientilor ci din sistemul de N ecuatii cu N
necunoscute
[$
j'
(x)
+ p
(x)

(x)
+ q
(x)

(x)]

i=i
[$i' (x) + p(x) $i(x)q(x) $i(x)]dx =

i
[$
0'
(
x
)
+ p
(
x
)
$0(x) + q
(
x
)
$o
(
x
) f(
x
)]

(7.36)
N
(7.40)
149


7.8.2 Probleme rezolvate
Exerciiul 7.8.1. Sa se gseasc soluia problemei
y'' + y' =
x

y(0) = 1
y(i) = i
folosind:
a. metoda colocaiei, cu N =3
b. metoda celor mai mici patrate, cu N =3 Indicaie: se consider
$o(x) = 0 i ^(x) = sinArx, i = 1,3.
Rezolvare
Se observ c funciile $o(x) = 0 i ^(x) = sin7rx, = 1 , 3 sunt funcii de clas C
2
, liniar
independente, si verifica conditiile (7.38). De asemenea, avem:
p(x) = 1 q(x) = 1 f (x) = x.
i Xi = 0 + j , i = 1, 3.
A. Rezolvare folosind metoda colocatiei Solutia problemei este de forma:
y3(x) = $o(x) + ci $i(x) + C2 $2(x) + C3 $s(x). nlocuind n
sistemul (7.39), obtinem urmtorul sistem:

1 n
2
. 2N 1 9n
2

C i + (1 - 47T )c2 +
y/2

(1 - tt
2
)ci - (1 - 9tt
2
)c3 = -
1 n
2
. 2N 1 9n
2
3
_Cl _ ( 1 _ 4r ) C2 + __c, = _

a carui solutie este:

De aici rezult ca solutia aproximativ a problemei este:

, i V2 + 1 . 1
8, 3
w
= smlTX
- 4(1 - 4t 2)
Solutia exacta a problemei date este
V2- 1
sin27rx+4(1_97r2) sm37rx.


y(x) = x
Reprezentam n continuare pe acelasi sistem de coordonate, solutia exact a problemei initiale (cu linie
ngrosata) si solutia obtinuta folosind metoda colocatiei:
1
V2
3
4
V2 + 1
4(1 7T
2
)
y/2- 1 4(1
97r
2
)
1
c
i
c
2
c
3
4(1 4n
2
)
sin
x
sin
1
x
150



B. Rezolvare folosind metoda celor mai mici patrate Notam
f j ( x) = $"( x) +p( x) - &j ( : r) + q( x) - $j ( x) , j = 1,3 Cu
aceasta notatie, sistemul (7.40) devine:
C
1 /
f
1
(x)

f
1
(x)
+
C
2 /
f
2
(x)

f
1
(x)
+
C
3 /
f
3
(x)

f
1
(x)
= i X

f
i
(x)

Jo Jo Jo Jo
<
C
1 /
f
1
(x)

f
2
(x)
+
c
2 /
f
2
(x)

f
2
(x)
+
c
3 /
f
3
(x)

f
2
(x)
= /
x


f
2
(x)

./o Jo Jo Jo
C
1 /
f
1
(x)

f
3
(x)
+
c
2 /
f
2
(x)

f
3
(x)
+
c
3 /
f
3
(x)

f
3
(x)
= /
x


f
3
(x)

Jo Jo Jo Jo
Solutia acestui sistem este:
_ 2 _ 1 _ 2
1
7T (1 7T
2
)
2
7r( 1 47T
2
)
3
37r(l 97T
2
)
De aici rezulta ca solutia aproximativ a problemei, obtinuta cu metoda celor mai mici patrate, este:
. , 2 1 2
V: <{ x)
= TX1F)
sm
*
x
~ 41 - XX)
8111
*" 341 - 9^)
Sln $mr
-
Reprezentam n continuare pe acelasi sistem de coordonate, solutia exacta a problemei initiale (cu
linie ngrosata) si solutia obtinuta folosind metoda celor mai mici patrate:

151



7.8.3 Probleme propuse
Exercit iul 7.8.2. Sa se gaseasc solutia aproximativa a problemei
f y'' + y' =
x

y(0) = 0
( y(1) = 0
pe intervalul [0,1] folosind:
a. metoda colocatiei
b. metoda celor mai mici patrate
folosind ca baz functiile $0(x) = 0, $1(x) = x(1 x), $2(x) = x
2
(1 x).

152


BIBLIOGRAFIE
[1] t. Balint, L. Brescu, N. Bonchi, Metode numeri ce Timioara, 2007
[2] C. Berbente, S. Mitran, S. Zancu, Metode Numeri ce, Ed. Tehnic, Bucureti, 1998.
[3] T.A. Beu, Cal cul numeri c n C, Editia a 2-a, Ed. Alabastra, Cluj-Napoca, 2000.
[4] G. Coman, Anal i za Numeri ca, Ed. Libris, Cluj-Napoca, 1995.
[5] M. Dinu, G. Linca, Al gori tmi si teme speci al e de anal i za numeri ca Ed. Matrix Rom,
Bucureti, 1999.
[6] O. Dogaru, Gh. Bocsan, I. Despi, A. Ionica, V. Iordan, L. Luca, D. Petcu, P. Popovici
Inf ormati ca pentru def i ni ti vare si grad, Ed. de Vest, Timisoara, 1998.
[7] W. Kelley, A. Peterson, Di f f erence equati on, An Introducti on wi th Appl i cati ons ,
Academic Press, Elsevier, 2000.
[8] t. Maruster, Metode numeri ce n rezol varea ecuai i l or nel i ni are , Ed. Tehnic, Bu-
curesti, 1981.
[9] P. Naslau, R. Negrea, L. Cadariu, B. Caruntu, D. Popescu, M. Balmez, C. Dumi- trascu,
Matemati ci asi st ate pe cal cul ator , Ed. Politehnica, Timisoara, 2005.
[10] D. Petcu, Mapl e, un st andard pentru matemat i ca computer i zat a, Tipografia UVT,
Timisoara, 1997
[11] V. A. Patel, Numeri cal Anal ysi s, Humboldt State University, USA, 1994.
[12] MapleV4 - pagina de help

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