You are on page 1of 161

Cezar FLUERAU

Algoritmi numerici.
FACULTATEA DE INGINERIE ELECTRIC
MASTER - INFORMATIC N INGINERIA ELECTRIC (INF)
2010-2011

Metode numerice pentru cmpul electromagnetic

Cuprinsul
1

Introducere
1.1
1.2
1.3
1.3.1
1.3.2
1.3.3
1.4

Reprezentarea algoritmilor n pseudocod.


Complexitatea algoritmilor.
Implementarea algoritmilor numerici.
Programul MATLAB.
Programe libere / gratuite.
Limbaje de programare de nivel nalt.
Erori n rezolvarea problemelor numerice.

1
1
1
1
2
3
3

Metode numerice de rezolvare a ecuaiilor neliniare.


2.1
Metode numerice de rezolvare a ecuaiilor neliniare cu o necunoscut
2.1.1
Metoda biseciei sau a njumtirii intervalului
2.1.1.1
Principiul metodei.
2.1.1.2
Implementarea n Matlab.
2.1.2
Metoda iteraiei simple
2.1.2.1
Principiul metodei.
2.1.2.2
Implementarea n Matlab.
2.1.2.3
Analiza convergenei.
2.1.2.4
Aplicaie n studiul circuitelor electrice de curent continuu.
2.1.3
Metoda secantei (metoda prilor proporionale).
2.1.3.1
Principiul metodei.
2.1.3.2
Implementarea n Matlab.
2.1.4
Metoda lui Newton
2.1.4.1
Principiul metodei.
2.1.4.2
Implementarea n Matlab.
2.1.5
Metod combinat funciunea fzero (Matlab).
2.2
Metode numerice de rezolvare a ecuaiilor algebrice polinomiale.
2.2.1
Metoda de separare a rdcinilor ecuaiilor algebrice
2.2.1.1
Metoda irului lui Rolle.
2.2.1.2
Metoda irului lui Sturm
2.2.2
Metoda de determinare a rdcinilor ecuaiilor algebrice
2.2.2.1
Metoda Lobacevski Graeffe
2.2.2.2
Metoda lui Bairstow
2.2.3
Implementarea n Matlab ( roots ).

Rezolvarea numeric a sistemelor de ecuaii algebrice liniare.


3.1
Metode de rezolvare direct a sistemelor de ecuaii algebrice liniare.
3.1.1
Implementarea n Matlab.
3.1.2
Metoda eliminrii Gauss.
3.1.3
Metoda Gauss-Jordan
3.1.3.1
Implementarea n Matlab.
3.1.4
Metoda factorizrii.
3.1.4.1
Metoda de factorizare Crout (varianta U1).
3.1.4.2
Metoda de factorizare Doolittle (varianta U1).
3.1.4.3
Metoda de factorizare Cholesky.
3.1.4.4
Implementarea n Matlab.
3.1.5
Probleme numerice.
3.1.5.1
Pivotarea.
3.1.5.2
Norma unei matrici.
3.1.5.3
Condiionarea matricilor.
3.2
Metode iterative pentru rezolvarea sistemelor de ecuaii algebrice.
3.2.1
Principiul metodelor iterative pentru rezolvarea sistemelor de ecuaii algebrice.
3.2.2
Metoda Jacobi (a deplasrilor simultane)
3.2.3
Metoda Gauss-Seidel (a deplasrilor succesive)
3.2.3.1
Metoda suprarelaxaiilor succesive (SOR).
3.2.4
Metoda Picard-Banach.
i

4
4
5
5
6
8
8
8
10
12
12
12
13
15
15
16
18
19
20
20
20
21
21
25
27

29
29
30
38
43
44
47
48
51
54
57
62
62
63
65
69
69
70
72
74
75

Metoda gradientului conjugat.


3.2.5
3.3
Tehnici adaptate matricilor rare (sparse matrices).
3.3.1
Problema umplerilor.
3.3.2
Metode de stocare a matricilor rare.
3.3.3
Funciuni referitoare la matricile rare implementate n Matlab.

Metode de interpolare.

77
79
81
82
84

87

4.1
Formularea problemei.
4.1.1
Interpolarea global.
4.1.1.1
Interpolarea polinomial direct.
4.1.1.2
Interpolarea Newton.
4.1.1.3
Interpolarea Lagrange.
4.1.2
Interpolarea pe poriuni.
4.1.2.1
Interpolarea liniar pe poriuni.
4.1.2.2
Interpolarea prin polinoame Hermite.
4.1.2.3
Interpolarea spline.
4.1.2.4
Interpolarea pchip.
4.1.2.5
Interpolarea Akima.
4.1.2.6
Compararea metodelor de interpolare prezentate.

87
88
88
89
90
93
93
95
96
100
101
102

Rezolvarea numeric a ecuaiilor difereniale ordinare.

106

5.1
Introducere.
106
5.2
Consideraii generale.
107
5.3
Forma canonic a unui sistem de ecuaii difereniale.
107
5.3.1
Ecuaii difereniale ordinare de ordinul I.
107
5.3.2
Ecuaii difereniale ordinare de ordin superior.
107
5.4
Principiul general de rezolvare numeric a sistemelor de ecuaii difereniale.
108
5.4.1
Aproximarea derivatei.
108
5.4.2
Algoritmul general.
109
5.4.3
Criterii .
110
5.5
Metoda Euler de ordinul 1.
111
5.5.1
Metoda Euler explicit.
113
5.5.2
Metoda Euler implicit.
117
5.5.3
Comparare ntre metodele Euler explicit i implicit.
119
5.5.4
Aplicaii n simularea regimurilor tranzitorii n circuitele electrice.
120
5.5.5
Integrarea direct a sistemelor de ecuaii difereniale prin metoda Euler. Aplicaii n studiul
circuitelor electrice.
124
5.5.5.1
Generarea ecuaiilor circuitelor electrice.
125
5.5.5.2
Rezolvarea numeric a sistemului de ecuaii.
127
5.6
Metode de ordin superior.
130
5.6.1
Metoda punctului median.
130
5.6.2
Metode de tip Runge-Kutta.
133
5.6.2.1
Metoda Runge-Kutta de ordinul 4.
133
5.6.2.2
Implementarea metodelor Runge-Kutta n Matlab.
137
5.7
Metode cu mai muli pai.
139

Probleme cu valori la limit.

140

Rezolvarea numeric a ecuaiilor cu derivate pariale.

141

ANEXE.

142

8.1
Studiul unor circuite liniare cu un singur rezistor neliniar [11].
8.1.1
Discuie.
8.1.2
Algoritm pentru determinarea punctului de funcionare.
8.2
Program Matlab pentru simularea regimului tranzitoriu prin metoda Euler.
8.2.1
Metoda potenialelor la noduri.
8.2.2
Generarea sistemului de ecuaii integro-difereniale.
8.2.3
Discretizarea ecuaiilor integro-difereniale.
8.2.4
Generarea sistemului de ecuaii discretizate.

BIBLIOGRAFIE.

142
142
144
149
149
150
152
152

157

ii

Metode numerice.

1 Introducere
Motto:
nainte de apariia calculatoarelor, Matematica
era o tiin exact.
Acum nu mai e nici ea !
prof. Augustin Moraru
comunicare verbal.

Dezvoltarea tehnicii de calcul permite abordarea unor probleme care, altfel, ar fi fost mult
prea complexe.
Aceasta implic studierea aprofundat a metodelor numerice, care permit fundamentarea
algoritmilor
Este greu de stabilit o list exhaustiv a domeniilor n care metodele numerice se dovedesc de
nenlocuit. De fapt, se poate spune c, treptat, metodele numerice se extind n tot mai

multe domenii.

1.1 Reprezentarea algoritmilor n pseudocod.


Algoritmii pot fi prezentai n mod avantajos sub forma unui pseudo-cod, apropiat de limbjele
de programare reale.
n lucrare, se va folosi, dup caz, o sintax apropiat de cea a limbajului C, sau limbajul de
programare specific programului Matlab.
http://mn.lmn.pub.ro/indrumar/indrumarLMN2010_v1.pdf

1.2 Complexitatea algoritmilor.


O tratare clar se gsete n:
http://mn.lmn.pub.ro/indrumar/indrumarLMN2010_v1.pdf (cap. 1.4)

1.3 Implementarea algoritmilor numerici.


1.3.1

Programul MATLAB.

Matlab reprezint programul de referin pentru studierea metodelor numerice i pentru


rezolvarea concret a unor probleme practice.
Este disponibil sub principalele sisteme de operare (Windows, Linux, Mac OS X).
1

Programul este comercial i este relativ scump.


Un punct de plecare pentru accesul la o documentaie bogat, propus de unul dintre
creeatorii programului Matlab:
Cleve Moler Numerical Computing with Matlab
http://www.mathworks.com/moler/chapters.html
Cleve Moler Eperiments with Matlab
http://www.mathworks.com/moler/exm/chapters.html
Documentele sunt prezentate n format PDF i pot fi descrcate pe calculatorul propriu, pentru
uz personal.

Un curs interactiv simplu:


Technische Universiteit Eindhoven - Interactive Matlab Course
http://www.imc.tue.nl/
Un tutorial simplu, o buna iniiere n Matlab:
http://www.cyclismo.org/tutorial/matlab/
Un curs prezentat sub forma de documente PDF:
Gerald Recktenwald - Numerical Methods with Matlab
http://web.cecs.pdx.edu/~gerry/nmm/course/

1.3.2

Programe libere / gratuite.

Sunt disponibile versiuni gratuite, compatibile n mare msur cu Matlab.


(GNU) Octave este disponibil pe mai multe platforme (Linux, Mac OS X, Windows
prin emulator Linux) i este n mare proporie compatibil cu Matlab.
http://www.gnu.org/software/octave/
Scilab (GNU/Linux, Windows, Mac OS X)
http://www.scilab.org/

Metode numerice.

1.3.3

Limbaje de programare de nivel nalt.

Limbajul C / C++ :
Numerical Recipes in C.
http://www.nrbook.com/a/bookcpdf.php
http://www.fizyka.umk.pl/nrbook/bookcpdf.html
Pentru alte limbaje de programare de nivel nalt utilie n rezolvarea algoritmilor numerici, se
recomand studierea literaturii de specialitate.

1.4 Erori n rezolvarea problemelor numerice.


O tratare clar se gsete n:
http://mn.lmn.pub.ro/indrumar/indrumarLMN2010_v1.pdf cap. 2

2 Metode numerice de rezolvare a ecuaiilor neliniare.


Algebra dispune de metode i formule de calcul pentru determinarea soluiilor ecuaiilor
algebrice cu gradul cel mult patru. Toate celelalte tipuri de ecuaii algebrice, cele cu gradul
mai mare dect patru i cele transcendente, care fac parte din categoria ecuaiilor neliniare,
necesit pentru determinarea soluiilor lor metode de rezolvare numeric [13].
Metodele numerice sunt exclusiv iterative i soluiile ecuaiilor neliniare se obin ca limite ale
unor iruri convergente. Calitatea i eficiena fiecrei metode n parte este apreciat prin dou
criterii: criteriul utilizriii optime a memoriei calculatorului necesar pentru date i programe,
respectiv criteriul micorrii timpului de calcul necesar obinerii soluiei.
O parte a metodelor numerice poate fi aplicat pentru toate tipurile de ecuaii algebrice iar alt
parte este specific doar rezolvrii ecuaiilor algebrice polinomiale. n ingineria electric
metodele de rezolvare numeric a ecuaiilor neliniare are o aplicabilitate divers, cum ar fi
determinarea punctelor de intersecie a graficelor a dou funcii, determinarea punctelor de
funcionare n circuitele electrice i electronice, rezolvarea ecuaiilor circuitelor electrice
neliniare, etc.

2.1 Metode numerice de rezolvare a ecuaiilor neliniare cu o


necunoscut
Se consider ecuaia neliniar sau transcendent
f (x ) = 0

(2.1)

n care f : [a, b] este o funcie continu iar x r (a, b ) este soluia exact a ecuaiei.
Pentru determinarea numeric a acestei soluii se utilizeaz metode interative care constau n
construirea unui ir de numere reale x0 , x1 ,......., x k ... convergent ctre soluia exact xr a
ecuaiei. Orice metod interativ pentru determinarea soluiei x const n gsirea unei ecuaii
de forma
xr = F (x )
(2.2)
echivalent cu ecuaia dat n intervalul [a, b] :
f (x ) = 0 xr = F (x )

(2.3)

astfel nct irul de numere ( x k )k 0 s aib limita xr adic


lim xk = xr

(2.4)

unde termenii irului se determin recurent n funcie de termenul precedent, cu relaaia:


x k = F (x k 1 )
(2.5)
Iteraiile se opresc atunci cnd distana dintre doi termeni consecutiv ai irului este mai mic
dect o valoare impus .
x k x k 1 <
(2.6)
Dup modul n care este construit funcia de interaie F ( x ) se prezint n continuare cteva
dintre metodele numerice de rezolvare a ecuaiilor neliniare .

Metode numerice.

2.1.1

Metoda biseciei sau a njumtirii intervalului

2.1.1.1

Principiul metodei.

Aceasta este une dintre cele mai simple metode pentru rezolvarea unei ecuaii neliniare, care
se bazeaz pe propietatea funciei f(x) de a avea semne diferite la capetele intervalului [a, b],
dac soluia unic x a ecuaiei f(x)=0 exist n intervalul (a,b): Atunci:
f (a ) f (b ) < 0
(2.7)
i ntr-o prima interaie, se calculeaz
a+b
x m 0 x0 =
2

(2.8)

jumtatea intervalului [a, b] . Dac x0 nu este rdcin a ecuaiei, verificarea nu poate fi


fcut prin comparare:
f (x0 ) <
(2.9)
atunci se evalueaz dintre cele dou subintervale (a, x0 ) i ( x0 , b ) pe acela care conine
soluia.
Evaluarea se face dup semnul produsului valorilor funcie la capetele subintervalelor, adic:
f (a ) f ( x0 ) < 0
(2.10)
i

f ( x0 ) f (b ) < 0
(2.11)
Dac este satisfcut inegalitatea (2.10), atunci soluia se caut n intervalul (a, x0), algoritmul
continund cu njumtirea acestuia:
a + x0
x m1 x1 =
, .a.m.d
(2.12)
2
Dac inegalitatea (2.10) nu este satisfcut, atunci n mod obligatoriu este satisfcut
(2.11) i soluia se afl n intervalul ( x0 , b ) , prin urmare algoritmul va continua cu
njumtirea acestuia:
x +b
x m1 x1 = 0
, .a.m.d.
(2.13)
2
irul valorilor succesive ale jumtilor de subintervale: x m0 , x m1 , x m2 ,..... este convergent
ctre soluia exact xr :
Fig. 2.1

Prima interaie n metoda


njumtirii intervalului

Algoritmul interativ de njumtire se oprete atunci cnd lungimea subintervalelor obinute


n interaie devine mai mic dect valoarea impus soluiei
5

bn an <

(2.14)

Metoda njumtirii intervalului este uor de aplicat i este sigur convergent, dar necesit un
numr mare de evaluri ale funciei.
2.1.1.2

Implementarea n Matlab.

function x=zerobisect(f,a,b)
% Rezolvarea ecuatiei f(x)=0
% Metoda bisectiei intervalului
% f(x)= functiunea
% a,b = intervalul initial
trace=true;
if trace
figure;
fplot(f, [a b])
hold;
plot([a b],[0 0],':')
disp ('*** Metoda bisectiei intervalului');
disp ('it---a---------------b---------------b-a----------')
end
%Algoritmul:
k = 0;
while abs(b-a) > eps
x = (a + b)/2;
if sign(f(x))==sign(f(b)) > 0
b = x;
else
a = x;
end
if trace
disp(sprintf('%3d %15.12f %15.12f %15.7e', k, a, b, b-a));
plot([a a],[0 f(a)], ':r',[b b] ,[0 f(b)],':b')
end
k = k + 1;
end
if trace plot([a b], [f(a) f(b)],'or'), end

Observaii :


Pentru simplitate, funciunea de rezolvat a fost reprezentat folosind un procedeu


specific Matlab (funciuni anonime: f=@(x)expresie ). Se pot ns folosi i
alte forme de definire a funciunilor (similare celor din alte limbaje de
programare).

Pentru urmrirea evoluiei iteraiilor, au fost incluse secvene de cod care permit
scrierea valorilor succesive i trasarea graficului care ilustreaz procedura. n cazul
n care nu se dorete aceasta, este suficient s se atribuie parametrului trace
valoarea false. Ca i n exemplele care urmeaz, aceast funcionalitate este
penalizant, deoarece, sub forma prezentat, implic evaluri suplementare ale
funciunii studiate. Prin urmare, ea este propus numai n scop didactic. n aplicaii
reale, secvenele de cod respective pot fi eliminate.

Exemplu de appel :
6

Metode numerice.

Calculul lui x = 2 , prin rezolvarea ecuaiei x2-2=0 :


x=zerobisect(@(x)x.^2-2, 1, 2)

Rezultatele:
*** Metoda bisectiei intervalului
it---a---------------b---------------b-a---------0 1.000000000000 1.500000000000 5.0000000e-001
1 1.250000000000 1.500000000000 2.5000000e-001
2 1.375000000000 1.500000000000 1.2500000e-001
3 1.375000000000 1.437500000000 6.2500000e-002
4 1.406250000000 1.437500000000 3.1250000e-002
5 1.406250000000 1.421875000000 1.5625000e-002
6 1.414062500000 1.421875000000 7.8125000e-003
7 1.414062500000 1.417968750000 3.9062500e-003
8 1.414062500000 1.416015625000 1.9531250e-003
9 1.414062500000 1.415039062500 9.7656250e-004
..............................................
48 1.414213562373 1.414213562373 1.7763568e-015
49 1.414213562373 1.414213562373 8.8817842e-016
50 1.414213562373 1.414213562373 4.4408921e-016
51 1.414213562373 1.414213562373 2.2204460e-016
2

Fig. 2.2

1.5

Rezolvarea ecuaiei
x2-2=0
prin metoda biseciei

0.5

-0.5

-1
1

1.2

1.4

1.6

1.8

Observatii:

Convergena metodei este foarte lent. n schimb, ea este garantat, dac intervalul
iniial ncadreaz soluia.

La fiecare iteraie, este necesar evaluarea funciunii f(x) o singur dat. S se


analizeze cazul modificrii propuse mai jos - punctul 2).

Exerciii propuse:

S se implementeze n cod verificarea faptului c n intervalul (a,b) exist o rdcin a


ecuaiei. n caz contrar, s se afieze un mesaj de avertizare i execuia s fie
abandonat.

S se adauge oprirea procedurii dac numrul de iteraii depete o limit prestabilit.

S se adauge un parametru referitor la eroarea admisibil. Iteraiile se opresc atunci


cnd intervalul de cutare a soluiei este mai restrns dect eroarea admisibil.

S se rezolve alte ecuaii. Exemple:


f(x)=sin(x)
f(x)=J0(x) = bessel(0,x)

2.1.2

Metoda iteraiei simple

2.1.2.1

Principiul metodei.

O alt variant a metodei iterative este cunoscut sub numele de metoda iteraiei simple [3,4].
Metoda se refer la rezolvarea ecuaiei:
f ( x) = x

(2.15)

n metoda iteraiei simple, irul soluilor numerice este generat de relaia:


xk = f ( xk 1 ) k = 1,2,...n

(2.16)

Se pornete de la o iniializare arbitrar x0 [a, b] i se calculeaz succesiv x1, x2, . . . , xn


pn cnd |xn xn1| < eps.
Fig. 2.3

x
g(x)

Metoda iteraiei simple.

g(x0)

x0

x1

Punctul P reprezint soluia cutat.


Metoda se mai numete i metoda punctului fix.
O condiie suficient pentru convergena iteraiilor este ca f s fie o contracie, respectiv:
f ( x1 ) f ( x2 ) M x1 x2 , M < 1, x1 , x2 [a, b]
(2.17)
Dac f(x) este derivabil, aceast condiie este satisfcut atunci cnd f ' ( x ) < 1 .
n cazul n care ecuaia se prezint sub forma:
g ( x) = 0

(2.18)

aceasta se transform ntr-o ecuaie de forma x = f(x), de exemplu, prin artificiul :


f ( x) = x + c g ( x)
(2.19)
Aparent, valoarea constantei c cu care se multiplic ecuaia g(x) nu este important,
totui ea influeneaz puternic convergena irului de iteraii.
Constanta c trebuie aleas n acord cu condiia de convergen f ' ( x ) < 1 . Ea trebuie
s aib semnul opus celui al derivatei funciunii g(x), astfel nct f ' = 1 + cg ' ( x ) s fie
subunitar. Cu ct acesta este mai mic, cu att irul iterativ este mai rapid convergent.

2.1.2.2

Implementarea n Matlab.

Partea principal a algoritmului este urmtoarea:


% Rezolvarea ecuatiei f(x)=x
% Metoda punctului fix
% f(x)= functiunea

Metode numerice.

% xstart = initializare
x = xstart;
y = f(x);
k = 1;
kmax=50;
while (x ~= y) & (k < kmax))
k = k+1;
x = y;
y = f(x);
end

Dup cum se constat, nu este necesar salvarea valorilor succesive ale lui x i f(x).
Un exemplu (prelucrare dup [3,4]) permite reprezentarea grafica a evoluiei iteraiilor.
Soluia este marcat cu un mic cerc rou.
function x=zeropunctfix(f,xmin,xmax,xstart);
% Rezolvarea ecuatiei f(x)=0
% Metoda punctului fix
% x=punctfix(f,xmin,xmax,xstart) rezolva x = f(x)
% f(x) = functiunea
% xmin, xmax = intervalul
% xstart = valoarea initiala
trace=true;
if trace
figure;
fplot(@(x)x, [xmin xmax xmin xmax],'g');
axis tight;
axis square;
hold;
fplot(f, [xmin xmax]);
plot([xmin xmax],[0 0],'--')
plot ([xstart xstart], [xstart f(xstart)], ':b');
disp ('*** Metoda punctului fix ');
disp ('it---x---------------y-------------')
end
% Iteratii
x = xstart;
y = f(x);
n = 1;
nmax=50;
while (x ~= y) && (n < nmax)
n = n+1;
xnou = y;
ynou = f(xnou);
if trace
disp(sprintf('%3d %15.12f %15.12f', n, xnou, ynou))
plot([x xnou], [y y],':r',[xnou xnou], [y ynou], ':b');
end
x=xnou;
y=ynou;
end
if trace plot([x x],[f(x) f(x)],'or',[xmin x],[y y],'--or',[x x],[xmin
y],'--or'), end

2.1.2.3

Analiza convergenei.

O problem important n procedurile iterative constist n ncrederea care se poate acorda


soluiei numerice.
Faptul c doi termeni succesivi sunt suficient de apropiai:
xk +1 xk <

(2.20)

nu nseamn ntotdeauna c acetia sunt foarte aproape de soluia exact x. Este posibil ca
distana fa de soluiia ecuaiei:
e = xk +1 x
(2.21)
s fie mult mai mare dect .
n cazul metodei iteraiilor simple, se obin urmtoarele relaii privind eroarea impus i
eroarea real err [1]:
Ln +1
en = xn+1 x
x 1 x0
(2.22)
1 L
n +1
n = xn+1 xn L x0 x
n care s-a notat cu L < 1 constanta Lipschitz a funciei de iteraie f, ce satisface:
f ( x1) f ( x2 ) L x1 x2 ; x1 , x2 [a, b]

(2.23)

Cu ct aceast constant are valori mai mici, cu att irul iterativ este mai rapid convergent,
numrul de iteraii necesar atingerii preciziei impuse fiind:
e
log(1 L)
x1 x0
(2.24)
n=
log( L)
Raportul dintre eroarea impus i cea real depinde de constanta L.
Exemple :
f = @(x) sqrt(1+x);
f = @(x) 1./x+1;
f = @(x) cos(x);
a = sqrt(2); f = @(x) a.^x;






punctfix(f,
punctfix(f,
punctfix(f,
punctfix(f,

10

-1, 4, 0)
.5, 2.5, 1)
-pi/4, pi/2, 0)
1, 5, 3)

Metode numerice.

2.5

3.5
3
2
2.5
2
1.5

1.5

1
0.5
1
0
-0.5
-1
-1

0.5
0.5

f=@(x) sqrt(1+x); zeropunctfix(f,-1,4,0)

1.5

2.5

f=@(x)1./x+1; zeropunctfix(f,.5,2.5,1)
5

1.4
4.5

1.2
1

0.8
3.5

0.6
0.4

0.2
2.5
0
-0.2

-0.4

1.5

-0.6
-0.5

0.5

1.5

f = @(x) cos(x); zeropunctfix (f, -pi/4, pi/2, 0)

Fig. 2.4

a = sqrt(2); f = @(x) a.^x; zeropunctfix(f, 1, 5, 3)

Exemple de aplicare a metodei iteraiei simple.

Exemplele care urmeaz pun n eviden importana alegerii estimrii iniiale xstart asupra
convergenei iteraiilor.
2

5
4.5

1.5

iteratii divergente

4
1

3.5
0.5

2.5
2

-0.5

1.5
-1

1
-1.5
-2
-2

0.5
-1

f = @(x) exp(x)-2; zeropunctfix (f, -2, 2, 0)

f = @(x) exp(x)-2; zeropunctfix (f, 0, 5, 1.2)


(a) Iteraiile converg spre soluia x=-1.8414
(b) Iteraiile diverg.
Fig. 2.5
Influena iniializrii asupra convergenei iteraiilor.

n cazul (a), iniializarea xstart=0 are loc ntr-o zon n care este ndeplinit condiia ca
procedura s fie o contracie, iar iteraiile converg ctre un punct fix. n cazul (b), pentru
xstart=1.2, aceast condiie nu este ndeplinit, iar iteraiile sunt divergente.
11

Exerciii propuse:

S se rezolve alte ecuaii de tipul f(x)=x:


f(x)=J0(x) = bessel(0,x)
f(x)=(1+x)
f =(1/x+1)

f = @(x) bessel(0,x); zeropunctfix(f, 0, 1, 0.1


f = @(x) sqrt(1+x); zeropunctfix(f, 0, 3, 1)
f = @(x) (1./x+1); zeropunctfix(f, 0.1, 2, 0.1)
Soluiile acestor ecuaii sunt x=(1+5)/2, numit i seciunea de
aur.

2.1.2.4

Aplicaie n studiul circuitelor electrice de curent continuu.

O discuie mai ampl este prezentata n Anexa 11.1.

2.1.3

Metoda secantei (metoda prilor proporionale).

2.1.3.1

Principiul metodei.

Se determin soluia ecuaiei f ( x ) = 0 pe un interval (a,b), cu f : [a.b] continu pe

[a, b] i f (a ) f (b) < 0 , mprind intervalul [a, b]


[ f (b)] .

n dou pri proporionale cu f (a ) i

Fig. 2.6

Primele interaii
n metoda
secantei

Asfel, ntr-o prim aproximaie se determin abscisa corespunztoare interseciei dintre


coarda (dreapta) care unete punctele de coordonate (0, f (a )) i (b, f (b )) cu axa 0x:
a f (b ) b f (a )
x1 =
(2.25)
f (b ) f (a )
Inversul interativ de divizare proporional a intervalului continu n funcia de poziia
coardei fa de grafic.
Dac coarda se afl la stnga graficului (fig.2.6) adic dac
f (a ) f (b ) < 0

(2.26)

atunci se mparte n continuare subintervalul [a, x1] n pri proporionale i soluia


aproximativ n urmtorul pas este:
a f (x1 ) x1 f (a )
(2.27)
x2 =
f (x1 ) f (a )

12

Metode numerice.

n acest caz punctul de pornire al aproximaiilor este punctul a=x0, punctul b rmne fix iar
deplasarea aproximaiilor succesive se face de la stnga la dreapta.
Deci coarda se afl la dreapta graficului, adic dac
f ( x1 ) f (b ) < 0

(2.28)

atunci se mparte ncontinuare intervalul [x1, b] n pri proporionale i soluia aproximativ


n urmtorul pas este:
x f (b ) b f ( x1 )
x2 = 1
(2.29)
f (b ) f ( x1 )
n acest caz, punctul de pornire al aproximaiilor este punctul b=x0, punctul a rmne fix iar
deplasarea aproximaiilor succesive se face de la dreapta la stnga.
n final, valoarea xk este soluie a ecuaiei date deci f ( xk ) < , fiind valoarea impus.
Convergena metodei depinde de alegerea optim a punctului de pornire x0. Condiia de
convergen (numit condiia Fourier) este:
f ( x0 ) f '' (x0 ) < 0
(2.30)
Se impune alegerea lui a sau b ca punct de pornire al algoritmului.
2.1.3.2

Implementarea n Matlab.

function x=zerosecanta(f, a, b)
% Rezolvarea ecuatiei f(x)=0
% Metoda secantei
% f(x)= functiunea
% a,b = intervalul initial
trace=true;
if trace
figure;
fplot(f, [a b])
hold;
plot([a b],[0 0],'--')
disp('***
Metoda secantei');
disp ('it---a---------------b---------------b-a----------')
end
%Algoritmul:
k=0;
while abs(b-a) > eps*abs(b)
c
a
b
x

=
=
=
=

a;
b;
b + (b - c)/(f(c)/f(b)-1);
b;
if trace
disp(sprintf('%3d %15.12f %15.12f %15.7e', k, a, b, b-a));
plot([c a],[f(c) f(a)],'--r', [b b], [0 f(b)],':b')
end
k = k + 1;
end
if trace plot([a b], [f(a) f(b)],'or'), end

13

Exemplu de apel :

Calculul lui x = 2 , prin rezolvarea ecuaiei x 2 2 = 0 :


x=zerosecanta(@(x)x.^2-2, 0, 3)

Rezultatele:
***
Metoda secantei
it---a---------------b---------------b-a---------0 3.000000000000 0.666666666667 -2.3333333e+000
1 0.666666666667 1.090909090909 4.2424242e-001
2 1.090909090909 1.551724137931 4.6081505e-001
3 1.551724137931 1.397390272835 -1.5433387e-001
4 1.397390272835 1.413429130200 1.6038857e-002
5 1.413429130200 1.414218257349 7.8912715e-004
6 1.414218257349 1.414213561071 -4.6962784e-006
7 1.414213561071 1.414213562373 1.3024553e-009
8 1.414213562373 1.414213562373 2.2204460e-015
9 1.414213562373 1.414213562373 -2.2204460e-016
7

Fig. 2.7

6
5

Rezolvarea ecuaiei
x2-2=0
prin metoda secantei

4
3
2
1
0
-1
-2

0.5

1.5

2.5

Observatii:

Convergena metodei este rapid. Ea este garantat, dac intervalul iniial ncadreaz
soluia.

n principiu, metoda secantei necesit dou evaluri ale funciunii la fiecare iteraie,
dar acest numr se poate reduce la o singur evaluare, cu preul stocrii unor valori
suplimentare.

Analiza convergenei [2]


Se poate demonstra c evoluia erorii (e) n cursul iteraiilor satisface relaia:
''
'
'
1 f ( ) f ( k ) f ( k *1)
ek +1 =
ek ek 1 ; [ x, xk ]
3
2
f ' ( xk )

(2.31)

sau:
ek +1 = ( ek ek 1 )

(2.32)

Convergena metodei se numete supraliniar.


n principiu, numrul de digii coreci este multiplicat cu 1,6 la fiecare iteraie. Rezult:
ek +1 = ( ek )
(2.33)
unde
14

Metode numerice.

1+ 5
2

(2.34)

este seciunea de aur.

Exerciii propuse:

S se implementeze n cod verificarea faptului c n intervalul (a,b) exist o rdcin a


ecuaiei. n caz contrar, s se afieze un mesaj de avertizare i execuia s fie
abandonat.

S se adauge oprirea procedurii dac numrul de iteraii depete o limit prestabilit.

S se adauge un parametru referitor la eroarea admisibil. Iteraiile se opresc atunci


cnd intervalul de cutare a soluiei este mai restrns dect eroarea admisibil.

S se rezolve alte ecuaii. Exemple:


f(x)=sin(x)
f(x)=J0(x) = bessel(0,x)

2.1.4

Metoda lui Newton

2.1.4.1

Principiul metodei.

Metoda se bazeaz pe un procedeu de liniarizare, n care se rein din dezvoltarea funciei f(x),
f : [a, b] , continu pe [a, b] n serie Taylor n jurul punctului x0 , doar primii doi
termeni. Asfel ecuaia neliniar iniial f ( x ) = 0 se nlocuiete cu ecuaia liniar
f ( x 0 ) ( x x 0 ) f ' ( x0 ) = 0

(2.35)

a crui soluie este:


f (x )
x1 = x0 ' 0
f (x0 )

(2.36)

Din punct de vedere geometric (fig.2.8), n metoda lui Newton x1 reprezint abcisa punctului
de intersecie a tangentei dus la graficul funciei f i punctul de coordonate ( x0 , f (x0 )) cu
axa 0x. Rezult relaia recursiv pentru aproximaia soluiei la pasul k+1:
f (x )
x k +1 = x k ' k
(2.37)
f ( xk )
Fig. 2.8

15

Primele interaii
n metoda
NewtonRaphson

Convegenta metodei depinde de alegerea punctului de plecare x0. Pentru ca algoritmul


Newton s fie convergent ctre soluia xr este necesar ca punctul de pornire x0 s verifice
condiia:
f ( x0 ) f ' ' ( x0 ) > 0
(2.38)
ceea ce conduce la determinarea derivatei de ordinul doi a fuciei. n plus, la fiecare pas al
interaiei trebuie evaluat derivata de ordinul nti a funciei, ceea ce necesit un efort mare de
calcul.
2.1.4.2

Implementarea n Matlab.

function x=zeronewton(f, fprim, x, xprev)


% Rezolvarea ecuatiei f(x)=0
% Metoda NewtonRaphson
% f(x) = functiunea
% fprim(x)= derivata lui f(x)
% x
= valoare initiala
% xprev= initializare
trace=true;
if trace
figure;
fplot(f, [x xprev])
hold;
plot([x xprev],[0 0],'--')
disp ('*** Metoda Newton-Raphson');
disp ('it---x---------------x-xprev-------')
end
%Algoritmul:
k = 0;
while abs(x - xprev) > eps*abs(x)
xprev = x;
x = x - f(x)/fprim(x);
if trace
disp(sprintf('%3d %15.12f %15.12f', k, x, x-xprev))
plot([xprev x] , [ f(xprev) 0],':r', [x x], [0 f(x)],':b')
end
k = k + 1;
end
if trace plot([x x], [f(x) f(x)],'or'), end

Exemplu de appel :

Calculul lui x = 2 , prin rezolvarea ecuaiei x2-2=0 :


Observaie:



f(x)=x2-2=0
fprim(x)=2x

16

Metode numerice.

Rezultatele:
>> x=zeronewton(@(x)x.^2-2,@(x)2.0*x, 10, 0)
*** Metoda Newton-Raphson
it---x---------------x-xprev------0 5.100000000000 -4.900000000000
1 2.746078431373 -2.353921568627
2 1.737194874380 -1.008883556993
3 1.444238094866 -0.292956779513
4 1.414525655149 -0.029712439717
5 1.414213596802 -0.000312058346
6 1.414213562373 -0.000000034429
7 1.414213562373 -0.000000000000

100

Fig. 2.9
80
60

Rezolvarea ecuaiei
x2-2=0
prin metoda NewtonRaphson

40
20
0
-20

10

Observatii:

Convergena metodei este rapid (convergen patratic).

Pentru primul pas, sunt necesare dou valori ale variabilei independente x, respectiv
valoarea de start x i o valoare xprev (n exemplele prezentate , aceasta a fost
considerat nul).

Pentru trasarea graficului, s-au adoptat ca prime limite [x, xprev]. Aceast convenie
nu satisface n toate situaiile. Se propune o ameliorare a procedurii.

Dezavantajul principal consist n necesitatea evalurii derivatei funciunii la fiecare


iteraie. Se poate ameliora aceast situaie folosind o metod modificat, numit
metoda Newton - Kantorovici, n care se folosete la fiecare itreraie valoarea derivatei
estimat n punctul iniial:
f (x )
xk +1 = xk ' k
(2.39)
f ( x0 )

Exist situaii n care iteraiile nu sunt convergente.

17

Fig. 2.10 Exemplu de interaii NewtonRaphson neconvergente.

f(x)

Analiza convergenei [3]


Se poate demonstra c evoluia erorii e n cursul iteraiilor satisface relaia:
1 f '' ( ) 2
ek +1 =
e k ; [ x , xk ]
2 f ' ( xk )

(2.40)

sau:
ek +1 = (e k2 )

(2.41)

adic o convergen patratic.


n principiu, pentru funciuni continue, numrul de digii coreci se dubleaz la fiecare iteraie.

Exerciii propuse:

S se adauge oprirea procedurii dac numrul de iteraii depete o limit prestabilit.

S se rezolve alte ecuaii:


f(x)=sin(x)
f(x)=J0(x) = bessel(0,x):

x=zeronewton(@(x)bessel(0,x),@(x)-bessel(1,x), 1, 0)
Observaie:
Se folosete proprietatea funciunii Bessel

2.1.5

J 0' = J 1 ( x )

Metod combinat funciunea fzero (Matlab).

Ideea metodei consist n a combina sigurana oferit de metoda biseciei cu viteza de


convergen a metodei secantei.
Metoda este implementat n funciunea Matlab fzero [2].
Sintaxa acestei funciuni prezint mai multe opiuni, dintre care mai importante sunt
urmtoarele:

x=fzero (f, x0)


unde f este o funciune, iar x0 este un numr care reprezint o estimare iniial.
Soluia f(x)=0 este cutat n vecintatea acestui punct.
Exemple:
x=fzero(@sin, 3)
x= 3.1416
x=fzero(@(x)x.^2-2,2)
x= 1.4142 (=2)
x=fzero(@(x)bessel(0,x),2)
x= 2.4048

18

Metode numerice.

x=fzero (f, x0)


unde f este o funciune, iar x0=[a b] este un vector cu dou elemente. Este
necesar ca funciunea f s aib semne diferite n cele dou puncte: f(a) f(b)<0,
n caz contrar se emite un mesaj de eroare. Soluia f(x)=0 este cutat n acest
interval.
Exemple:
x=fzero(@sin,[3.1 3.2])
x= 3.1416
x=fzero(@(x)x.^2-2,[1 2])
x= 1.4142 (=2)
x=fzero(@(x)bessel(0,x),[2 3])) x= 2.4048
eroare
x=fzero(@sin,[1 2])

[x, y]=fzero (f, x0)


ntoarce soluia x i valoarea funciunii f(x) n acest punct (n mod ideal, egal
cu zero).
Exemple:
[x,y]=fzero(@sin, 3) x= 3.1416, y= 1.2246e-016

x=fzero (f, x0, optiuni)


n care pot fi precizare opiuni suplimentare [2].
Exemple:
>> x=fzero(@sin,3, optimset('Display','iter'))
Search for an interval around 3 containing a sign change:
Func-count
a
f(a)
b
f(b)
Procedure
1
3
0.14112
3
0.14112
initial
interval
3
2.91515
0.224515
3.08485
0.0567094
search
5
2.88
0.258619
3.12
0.021591
search
7
2.83029
0.306295
3.16971
-0.0281093
search
Search for a zero in the interval [2.83029, 3.16971]:
Func-count
x
f(x)
Procedure
7
3.16971
-0.0281093
initial
8
3.14118
0.000417192
interpolation
9
3.14159 -5.41432e-008
interpolation
10
3.14159 1.45473e-015
interpolation
11
3.14159 1.22465e-016
interpolation
12
3.14159 1.22465e-016
interpolation
Zero found in the interval [2.83029, 3.16971]
x =
3.1416

Se poate urmri evoluia procedurii, care ilustreaz principiul metodei.

2.2 Metode numerice


polinomiale.

de

rezolvare

ecuaiilor

algebrice

Se consider ecuaia algebric polinomial de gradul n cu coeficieni reali sau compleci


scris n form canonic [13]:
n

Pn (x ) = ai x i = 0,cu an 0; Pn :

(2.42)

i =0

n algebra clasic se arat c este posibil s rezolvm ca mijloace elementare doar ecuaiile cu
grad n 3 . Pentru ecuaiile al cror grad este mai mare dect 4 se folosesc metode numerice
care permit determinarea tuturor rdcinilor fr a fi nevoie de o aproximaie iniial. n
19

elaborarea algoritmilor interativi se ine seama de regulile legate de existena rdcinilor unei
ecuaii algebrice. Asfel, o ecuaie de gradul n are ntotdeauna n rdcini reale i/sau complexe,
iar rdcinile reale pot avea un anumit ordin de multiplicitate. Rdcinile complexe sunt dou
cte dou complex conjugate. Deci dac gradul n al ecuaiei este impar, exist cel puin o
rdcin real.
Pentru rezolvarea numeric a ecuaiilor algebrice trebuiesc parcurse dou etape:
1. determinarea celor mai mici intervale [a, b] n interiorul crora se gsete o
singur soluie a ecuaiei date, etap care se numete separarea rdcinilor;
2. Calcul interativ al rdcinilor ecuaiei, care vor fi limitele unor iruri convergente
de numere: (xk )k 0
lim (xk )k 0 = xr

(2.43)

Iteraiile se opresc i xk este considerat drept soluiei a ecuaiei date dac distana
dintre doi termeni consecutivi ai irului este mai mic dect o eroare impus:
xk xk 1 < 1
(2.44)
sau dac valoarea polinomului n punctul respectiv este mai mic dect o valoare
impus:
P (xk ) < 2
(2.45)
2.2.1

Metoda de separare a rdcinilor ecuaiilor algebrice

2.2.1.1

Metoda irului lui Rolle.

Aceast metod este o consecin a teoremei lui Rolle: dat fiind ecuaia algebric
Pn (x ) = 0, Pn : , Pn continu i derivabil pe , ntre dou rdcini reale i
consecutive ale ecuaiei Pn'1 ( x ) = 0 exist cel mult o rdcin a ecuaiei considerate.

Se formeaz irul cresctor al rdcinilor reale ale ecuaiei Pn'1 = 0 > x1 < x 2 < ..... xn 1 i se

calculez irul lui Rolle (irul valorilor funciei Pn ( x ) n punctele date de rdcinile derivatei,

la care se adaug limitele la ): P ( ), P ( x1 ), P ( x2 ),..... P (xn 1 ), P ( ) . n fiecare din

intervalele ( , x1 ), (x1 x2 ),....., ( xn 1 ,+ ), exist o rdcin a ecuaiei date, dac i numai dac
la capetele intervalului considerat, funcia P(x) ia valori de semne contrare.
Metoda irului lui Rolle poate fi utilizat eficient doar pentru ecuaii de grad n cel mult 4,
deoarece determinarea rdcinilor ecuaiei Pn' 1 (x ) = 0 devine dificil de rezolvat.
2.2.1.2

Metoda irului lui Sturm

Se determin numrul de rdcini reale dintr-un interval i separarea acestora pentru ecuaia
algebric Pn ( x ) = 0, cu Pn : . Fie a, b i Pn ( x ) = 0 , cu Pn : . Fie
a, b i Pn ( x ) , continu i derivabil pe (a, b) . Se formeaz irul lui Sturm asociat

funciei Pn ( x ) , polinoamele p 0 , p1 ,.... p n continue pe (a,b) i care satisfac condiiile:


)

p 0 ( x ) = Pn ( x )

p1 ( x ) = Pn' 1 ( x )

20

Metode numerice.

pi

(x )

= pi 1

(x )

qi

(x)

pi 2 , i = 2, n (adic polinomul pi (x ) este restul cu


x

semn schimbat al mpririi polinomului pi 2 ( x ) la pi 1 ( x ) , qi(x) fiind


ctul acestei mpriri;
)

p n ( x ) 0, ()x [a, b]

Metoda irului lui Sturm este o consecin a urmtoarei teoreme:


Dac funcia polinomial Pn ( x ) este derivabil pe (a,b) i cu derivata continu i
Pn (a ) 0, Pn (b ) 0 i admite un ir Sturm asociat: p 0 , p1 ,......., p n , atunci numrul

rdcinilor reale ale ecuaiei Pn ( x ) = 0 n intervalul (a,b) este egal cu diferena dintre
numerele schimbrilor de semn al irurilor de numere pi (a ) si pi (b ), i = 0, n .
Prin urmare, teorema permite att determinarea numrului rdcinilor reale ntr-un interval ,
ct i separarea acestora prin micorarea lungimii subintervalelor coninute n intervalul dat.

2.2.2

Metoda de determinare a rdcinilor ecuaiilor algebrice

2.2.2.1

Metoda Lobacevski Graeffe

Se determin rdcinile reale i complexe ale ecuaiei polinomiale Pn ( x ) = 0 . Polinomul


Pn ( x ) se poate exprima:
n

i =0

j =1

Pn (x ) = ai x1 = a0 (x y ) = 0, a0 0, ai , i = 0, n

(2.46)

unde x j , j = 1, n sunt rdcinile reale sau complex conjugate ale polinomului considerat,
care vor verifica relaiile lui Vieta. Asfel, prima relaie a lui Vieta este
a
x1 + x2 + ......... + xn = 1
(2.47)
a0
Dac una dintre rdcini, s presupunem x1, este mult mai mare n modul dect toate celelalte
x1 >> x j , j = 2, n
(2.48)
atunci se poate accepta aproximaia ce rezult din relaia (2.47)
a
x1 1
a0

(2.49)

n acest caz se spune c rdcina x1 este preponderent. Este evident c n realitate nu vom
putea accepta presupunerea c un polinom are o rdcin preponderent. n schimb, se poate
afirma ntotdeauna ca una dintre rdcini, fie aceasta tot x1, este mai mare n modul dect
toate celelalte x1 > x j , j = 2, n . Dac vom ridica la o putere nu suficient de mare aceast
inegalitate, atunci rdcina x1 va deveni preponderent, adic
xnm >> x mj
i se va putea utiliza cu suficient de bun aproximaie relaia (2.49).

21

(2.50)

Algoritmul Lobacevski- Graeffe stabilite o procedur de obinere a relaiei (2.50), prin


ridicarea succesiv la ptrat, adic m = 2 p , p , a rdcinilor ecuaiei date, ceea ce conduce la
gsirea rdcinii preponderente.
Dac n expresia (2.46) a polinomului Pn (x ) se schimb necunoscuta x cu x se obine:

Pn ( x ) = ( 1) a0 (x + x j )
n

(2.51)

j =1

Efectund produsul

( 1)n Pn (x ) Pn ( x ) = a02 (x 2 x 2j )
n

(2.52)

j =1

se obine un polinom de gradul n n variabil x 2 , avnd rdcini pe x12 , x22 ,........ . Se repet
acest procedeu de p ori se obine un nou polinom de gradul m = 2 p n variabil x.

Q (x ) = a0m (x m x mj ) = ( 1) Ai( p ) xi2 m


n

j =1

i =0

(2.53)

unde p = 0,1,.... , iar noii coeficieni Ai( p ) obinute n fiecare etap de calcul p se obin,
recursiv prin nmulirea direct a polinoamelor Pn (x ) si

Pn ( x ) , adic funcia de

coeficienii iniiali a i . n prima etap de calcul rezult:


A0(1) = a02 ;

A1(1) = a12 2a0 a 2 ,...., An(1)1 = a n21 + 2a n 2

(2.54)

Dac se noteaz cu Ai( p +1) valorile acestor coeficieni obinui n etapa p+1, atunci prin
intermediul de identificare a coeficienilor prezentat anterior se obine relaia recursiv.
( p +1)

Ai

= (Ai

(p)

+ 2 ( 1) Ai(pk) Ai +k , i = 0, n
k

(2.55)

k =0

unde se convine ca toi termenii cu indicele inferior i + k > n

si i k < 0 s fie nuli.

Pentru trei cazuri de existen a rdcinilor polinomului iniial Pn (x ) , identificate cu ajutorul


semnului i valorilor noilor coeficieni Ai( p ) n diverse etape de ridicare succesiv la ptrat, se
va prezenta metoda Lobacevski- Graeffe.

a.

Cazul rdcinilor reale i distincte. Dac toate rdcinile x j , j = 1, n ale polinomului

Pn ( x ) sunt distincte, atunci ele se pot ordona descresctor dup module i indici n
forma:
x1 > x2 > ....... > xn
(2.56)
Relaiile lui Vieta pentru polinomul Q (x ) obinut n etapa (p) de calcul sunt:
x1m + x2m + ............ + xnm =

A1( p )
A0( p )

x1m x2m + x1m x3m + .... + xnm1 xnm =

(2.57)
A2( p )
x1
A0( p )

M
x1m x2m ....................... xnm =

(2.58))
An( p )
A0( p )

22

Metode numerice.

n care termenii din dreapta sunt ntotdeauna pozitiv, fiind ptrate perfecte.
presupunnd c n etapa p rdcina x1m = x12 p a devenit preponderent, atunci termenii
x1m , x1m x2m , ..........a.m.d. vor deveni prepondereni n relaiile (2.57), (2.58),.... Prin
urmare, se pot utiliza cu coeficient de bun aproximaie relaiile:
A( p )
x1m 1( p )
(2.59)
A0
x1m x2m

A2( p )
A0( p )

(2.60)

M
x1m x2m .... xnm

An( p )
A0( p )

(2.61)

din care se obin, succesiv ncepnd cu x1 modulele rdcinilor:


x j = m

A(j p )
A(j p1)

, j = 1, n

(2.62)

Determinarea semnului rdcinii se face prin introducerea i verificarea n ecuaia


iniial Pn (x ) = 0 , ceea ce suplimenteaz efortul de calcul.
Este necesar un criteriu care s opreasc algoritmul (ridicarea succesiv la ptrat) la o
anumit etap p n care se realizeaz preponderena celei mai mari rdcini n modul.
Pentru acesta, n fiecare etap de calcul se calculeaz rapoartele:
(p)

rj

(A( ) )
=

p 1 2

A(j p )

, j = 1, n 1

(2.63)

Dac separarea rdcinii preponderente s-ar fi produs n etapa p 1 , adic


atunci conform relaiei (2.59)
m
p 1
A( p1)
x12 = x12 1( p1)
A0

m
= 2 p 1 ,
2

(2.64)

i cu att mai mult n etapa urmtoare


A( p )
x12 p = x1m 1( p )
A0

(2.65)

innd seama de relaia de recuren (2.55) i de relaiile (2.63), (2.64), raportul:


r1( p ) 1
(2.66)
Dac se repet procedura de calcul a acestor raportate pentru toi ceilali coeficieni, n
prima etap de calcul, atunci criteriul de oprire al algoritmului este: dac toate
rapoartele r j( p ) , j = 1, n 1 tind ctre 1, atunci s-a produs separarea rdcinilor
polinomului.
b. Cazul rdcinilor reale i multiple n modul. Dac se consider c cea mai mare
rdcin n modul a polinomului Pn (x ) are ordinul de multiplicitate M, atunci ordinea
descresctoare a rdcinilor polinomului este:
x1 = x2 = ........ = X M > X M +1 > ....... > X n
(2.67)
Prima relaie a lui Vieta va avea un termen preponderent:
23

x1m + x2m + ....... + x Mm + x Mm +1 M x1m

A1( p )
A0( p )

(2.68)

iar a M-a relaia lui Vieta va avea ca termen preponderent:


x1m x2m ...... x Mm + x1m x2m ..... x Mm 1 x Mm +1 + ...... + xnm M .... xnm

x1m x2m .... x Mm = (x1 )

mM

AM( p )
A0( p )

(2.69)

Calculul rdcinilor M-multiple n modul se face utiliznd relaia (2.69) prin care se
obine o aproximaie de calcul mai bun avnd n vedere exponentul mai mare:
x1 = m M

AM( p )
A0( p )

(2.70)

iar determinarea semnului se face prin verificarea ecuaiei iniiale Pn (x ) = 0 .


Criteriul de separare se determin asemntor cu cel din cazul rdcinilor reale i
distincte. Deci separarea rdcinilor preponderente, M-multiple n modul, s-ar fi
realizat n interaia p-1, atunci conform relaiei (2.68) ar trebui ca:
m
An( p 1)
2 p 1
2
x1 = x1
(2.71)
M A0( p 1)
i, cu att mai mult, n interaia urmtoare p este valabil aproximaia:
A1( p )
qp
m
x1 = x1
M A0( p )

(2.72)

Din relaia (2.54), (2.71) i (2.72) rezult c raportul r1( p ) tinde ctre M.
r1p M

(2.73)

ceea ce va constitui i criteriul de separare a rdcinilor multiple n modul, deci un


raport rj tinde ntr-o etap oarecare p ctre un numr ntreg M, atunci s-a produs
separarea rdcinilor preponderente M- multiple n modul.
n cazul n care rdcina M- multipl n modul nu este i cea mai mare n modul, adic
irul descresctor al rdcinilor ecuaiei Pn (x ) = 0 se constituie n:

X 1 > X 2 > ..... > X k = X k +1 => X k + M 1 > ...... > X n

(2.74)

atunci n relaiile anterioare (2.70) (2.73) se aplic o deplasare spre dreapta cu k a


rdcinilor inferiori. Astfel, calculul rdcinii M- multipli n modul se face cu relaia:
xk = mM

Ak( +pM)
Ak( p )

(2.75)

iar criteriul de separare se aplic asupra raportului


rk( p ) M

(2.76)

care dac tinde ctre numrul ntreg M arat c s-a separat rdcina M- multipl.
c. Cazul rdcinilor complexe. Se presupune c rdcinile complexe i conjugate x1 i
x2 ale ecuaie Pn (x ) = 0 au i cel mai mare modul adic:

x1 = x2 > x3 > ....... > xn

(2.77)

Rdcinile x1 i x2 complex conjugate se scriu ca


24

Metode numerice.

x1 = e j si x2 = e j

(2.78)

unde = x1 = x 2 este modulul rdcinilor iar = arg x1 = arg x 2 este argumentul


acestora. Prima relaie a lui Vieta pentru pasul p al interaiilor devine:
A( p )
2 m cos m + x3 + ..... + xnm = 1( p )
(2.79)
Ao
dar termenul 2 m cos m nu poate fi considerat preponderent din cauza factorului
cos m cu semne oscilante. Cea de a doua relaia a lui Vieta este:
A( p )
x1m x2m + x1m x3m + ..... + xnm1 xnm 2 m 2( p )
(2.80)
A0
ceea ce conduce la gsirea termenului precedent 2 m i la determinarea modului
rdcinilor complexe i conjugate n mod asemntor unei rdcini reale 2- multipli n
modul:

= 2m

A2( p )
A0( p )

(2.81)

semnul fiind evident.


Determinarea criteriului de separare se face astfel: dac separarea s-ar fi realizat n
etapa p-1, atunci ar trebui ca:
m
p 1
A p1
2 = 2 (2p1)
(2.82)
A0
i cu att mai mult n situaia urmtoare:
A( p )
2 p = m 2( p )
A0
ca atare raportul
r2( p ) 1,

(2.83)

r2( p ) trebuie s tind ctre 1


(2.84)

iar raportul:
( p)

r1

(A( ) )
=

p 1 2

(2.85)

A0( p )

m
are semn oscilant datorit schimbrilor de semn ale termenului 2 cos m . Prin
urmare, prezena rdcinilor complexe i conjugate va fi identificat prin apariia unui
raport cu semne oscilante, iar separarea modulului unei perechi de astfel de rdcini se
produce atunci cnd raportul imediat urmtor celui oscilant tinde ctre unu.

Determinarea argumentului rdcinilor complexe i conjugate se face utiliznd


P ( x ) = 0.
relaiilor lui Vieta pentru ecuaia iniial n
2.2.2.2

Metoda lui Bairstow

Metoda lui Bairstow permite determinarea rdcinilor reale i complexe conjugate ale ecuaiei
Pn ( x ) = 0, prin calculul interativ al unui divizor de ordinul doi al polinomului considerat.
Polinomul Pn ( x ) se poate scrie:
25

n 2

i =o

j =2

Pn (x ) = ai x i = (x 2 + px + q ) b j x j + Rx + S

(2.86)

unde x 2 + px + q este un trinom oarecare de ordinul doi iar Rx+S este restul mpririi lui
Pn (x ) la x 2 + px + q . Dac extindem notaiile i pentr coeficienii R i S, adic notm
R = bn 1 si S = bn + pbn 1 , atunci din identificarea termenilor cu acelai puteri ale lui x, va
rezulta relaia de recuren pentru noii coeficieni:
bk = ak pbk 1 qbk 2 , k = 0, n
(2.87)
unde vom considera b 2 = b1 = 0 .
Evident c x 2 + px + q divide pe Pn ( x ) , deci trebuie ca restul s fie nul, adic:
R ( p, q ) = 0
S ( p, q ) = 0

unde R i S depind de p i q. Sistemul neliniar (2.91) este echivalent cu sistemul:


bn ( p, q ) = 0
bn1 ( p, q ) = 0

(2.88)

(2.89)

Fiecare ecuaie a sistemului (2.89) este neliniar i pentru rezolvare se vor dezvolta n serie
Taylor funciile bn ( p, q ) si bn 1 ( p, q ) n jurul aproximaiei curente ( pm , qm ) . Dac se
pstreaz numai termenii liniari se obine sistemul:
b
b
bn ( p, q ) bn ( pm , qm ) + ( p pm ) n
+ (q qm ) n
=0
(2.90)
p p= pm
q q=qm
Calculul derivatelor pariale se poate face folosind relaia de recuren (2.87):
bk
b
b
= bk 1 p k 1 q k 2
p
p
p
bk
b
b
= bk 2 p k 1 q k 2
q
q
q

(2.91)

Ideea ingenioas a metodei const n faptul c derivatele pariale necesare interaiei urmtoare
se pot calcula cu ajutorul unor formule recursive de tipul relaiei (2.87). Astfel dac notm cu
ck =

bk
p

si d k =

bk
,
q

rezult c relaiile (2.91) se pot scrie n forma:


ck = bk 1ck 1 q ck 2

d k = bk 2 pd k 1 qd k 2 , k = 0, n

(2.92)

unde se consider c 2 = c1 = d 2 = d 1 = 0
Sistemul liniarizat numai dup prima relaie (2.92) devine:
( pn+1 pm ) cn + (qm+1 qm ) cn 1 = bn

( pm+1 pm ) cn1 + (qm+1 qm ) cn2 = bn1

(2.93)

n mod analog se obine sistemul de liniarizat i deci se folosete cea de-a doua relaie (2.92).

26

Metode numerice.

cn cn 1
Matricea sistemului: J =
se numete i matricea Jacobian i este nesingular
cn 1 cn 2
adic det. J 0, pentru rdcini complexe simple. n acest caz se calculeaz soluia
sistemului (2.93).
b c b c
p = pm+1 pm = n1 n1 n 2 n 2
(2.94)
cn cn2 cn
b c b c
q = qm+1 qm = n n 1 n 1 2 n
(2.95)
c n cn 2 c n
unde cn cn 2 cn2 = det J .
ntregul proces de calcul se poate relua pentru polinomul de gradul n-2
n

Pn 2 (x ) = b j x j

(2.96)

j =2

Unde coeficienii acestui polinom sunt tocmai ultimele valori calculate cu ajutorul relaiei
(2.87). Algoritmul continu pn la factorizarea polinomului Pn (x ) n produse de polinoame
de grad cel mult doi i se obin perechi de soluii de forma:
x1, 2 =

p p 2 4q
2

(2.97)

n ceea ce privete alegerea aproximaiei iniiale ( p0 , q0 ) , aceasta se poate obine printr-un


procedeu de localizare a rdcinilor, cum ar fi de exemplu metoda Lobacevski- Graeffe.
Asupra convergenei metodei Bairstow, din punct de vedere practic se poate prezenta un caz
de neconvergen: deci Pn (x ) are o singur rdcin real i r 2 + rp0 + q0 = 0 , atunci metoda
Bairstow nu converge pentru valorile iniiale ( p0 , q0 ) .
2.2.3

Implementarea n Matlab ( roots ).

n Matlab exist funciunea roots care determin toate rdcinilie unui polinom specificat
prin irul coeficienilor termenilor.
Fie polinomul:
P (x ) = c1 x n + c2 x n1 + ... + cn x + cn +1

(2.98)

Coeficienii si formeaz irul:


c = [c1 c2 ...cn cn+1 ]

(2.99)

Rdcinile polinomului sunt date de :


r = roots( c )

(2.100)

Exemple:

P(x)=x2 + 4x +2
>> c=[1 4 2]
c =
1
4
>> x=roots(c)
x =
-3.4142
-0.5858

27

P(x)=x4 + 3x3 + 4x2 + 2x +1


c=[1 3 4 2 1]
c =
1
3
4
>> x=roots(c)
x =
-1.3090 + 0.9511i
-1.3090 - 0.9511i
-0.1910 + 0.5878i
-0.1910 - 0.5878i

28

Metode numerice.

3 Rezolvarea numeric a sistemelor de ecuaii algebrice


liniare.
Rezolvarea sistemelor de ecuaii algebrice este una din problemele centrale din domeniul
metodelor numerice. Numeroase probleme se reduc, n ultim instan, la sisteme de ecuaii
algebrice. Astfel de sisteme apar n modelarea numeric a unui numr mare de probleme, din
diverse domenii ale tehnicii, dar i ale economiei, ca i n numeroase alte situaii. Talia
sistemelor de rezolvat poate fi foarte mare, ceeace conduce la un efort de calcul semnificativ.

3.1 Metode de rezolvare direct a sistemelor de ecuaii algebrice


liniare.
Se consider sistemul de N ecuaii algebrice liniare cu N necunoscute X(k), k=1,N:
[T ][ X ] = [G ]
Matricea T a coeficienilor este o matrice patrat de dimensiuni N*N:
T12
T1N
T11
.
.
.

T = .
.
.

.
.
.

TN 1 TN 2 ... TNN
X este vectorul coloan cu N elemente al necunoscutelor:
X1

.
X = .

.
X
N
iar G este vectorul coloan cu N elemente al termenilor liberi:
G1
.

G= .

.
GN

(3.1)

(3.2)

(3.3)

(3.4)

Din punct de vedere formal, soluia general a sistemului este :

[ X ] = [T ] [G ]
1

(3.5)

unde [T]-1 este inversa matricei coeficienilor lui [T].


Se poate generaliza pentru cazul n care necunoscutele X i termenii liberi G sunt
tablouri cu N linii i M coloane. Aceasta revine la rezolvarea simultan a M sisteme de
ecuaii cu cte N necunoscute fiecare.

29

n cele ce urmeaz, se vor considera n principal sistemele n care numrul de ecuaii este egal
cu cel al necunoscutelor, deci a cror matrice a coeficienilor este patrat.

3.1.1

Implementarea n Matlab.

Soluia sistemului (3.1) este:


X =T \G

(3.6)

Exemplu:
>> t=[1 2 3; 9 12 15; 2 4 8]
t =
1
2
3
9
12
15
2
4
8
>> g=[2 4 5]'
g =
2
4
5
>> x=t\g
x =
-2.1667
1.3333
0.5000

Este indicat s se estimeze determinantul matricii coeficienilor, pentru a se evita cazul unor
matrici singulare (al crei determinant este nul, sau practic nul):
>> det(t)
ans =
-12

Dup cum se va vedea n paragraful urmtor, aceast abordare simpl (simplist) este
acceptabil numai n cazul sistemelor de talie redus. n cazul sistemelor de talie mare (cazul
curent n practic) se utilizeaz alte metode, mai eficiente.

Discuie:
Este interesat de comparat duratele calculelor pentru diversele abordri directe ale
problemei. n acest scop, se poate folosi o facilitate oferit de Matlab, prin itermediul
perechii de funciuni tic i toc:
tic
...comenzi Matlab...
toc

Spre exemplu, fie urmtorul, n care se compar metodele directe de rezolvare a unui
sistem de ecuaii de talie relativ mare:
% Sisteme liniare-rezolvarea directa
% Comparatea duratelor de executie
% Fisier sislin_intro.m
N=10;
% talia sistemului
a=rand(N);
% matricea N*N a coeficientilor
y=rand(N,1);
% termenul liber

30

Metode numerice.

disp('Rezolvarea directa a sistemelor de ecuatii')


disp (['(1) ===> x=a\y
: N=' num2str(N)] )
tic
x1=a\y;
toc
disp('(2) ===> x=inv(a)')
tic
x2=inv(a);
toc
disp('(3) ===> x=inv(a)*y')
tic
x2=inv(a)*y;
toc

i iat rspunsul:
Rezolvarea directa a sistemelor de ecuatii
(1) ===> x=a\y
: N=1000
Elapsed time is 0.208349 seconds.
(2) ===> x=inv(a)
Elapsed time is 0.501279 seconds.
(3) ===> x=inv(a)*y
Elapsed time is 0.504136 seconds.

Comentarii:


Metoda (1) propus de Matlab prezint, dintre cele luate n considerare, cea mai bun
performan. Acest situaie e datorat faptului c metoda este implementat n Matlab
prin algoritmi performani. De altfel, aceast trstur este caracteristic mediului
Matlab, n care este indicat s se fac apel, n msura posibilului, la metodele
intrinseci incluse n aplicaie. Rezultatul se explic prin faptul c, dup cum se va
vedea, rezolvarea unui sistem prin metoda Gauss (implicat n abordarea Matlab)
necesit un numr de operaii semnificative de ordinul a O(N3/3).

Calcului inversei (cazul 2) necesit sensibil mai mult timp dect rezolvarea sistemului.
Aceasta se explic prin faptul c, dup cum se va vedea, calcului inversei unei matrice
necesit un numr de operaii semnificative de ordinul a O(N3).

Folosirea n continuare a inversei matricii coeficienilor deja calculat (cazul 3) nu


implic o durat suplimentar semnificativ. Numrul de operaii suplimentare este de
ordinul a O(N2), deci cu un ordin de mrime mai mic dect n cazurile precedente.

Extensii ale metodei:




Rezolvarea sistemelor de ecuaii:


Se construiete matricea extins, prin adugarea termenului liber n ultima coloan a
matricii (care devine, prin aceasta, de talie N *(N+1)):
T11 . . . T1N G1

.
. .
.
(3.7)
Te = .
.
. .

.
. .
.
T

N 1 . . . TNN GN

31

Aceast matrice extins va fi folosit n continuare n locul matricii originale n relaia


(3.6).
n Matlab, aceasta se realizeaz ca n exemplul urmtor:
% Matricea
a =
1
3
8

ceficientilor :
3
7
1

5
8
4

% Matricea extinsa cu coloana termenului liber :


>> b=[[a] [2;3;8]]
b =
1
3
5
2
3
7
8
3
8
1
4
8
% Rezolvarea :
>> x=a\b
x =
1.0000
-0.0000
0
0.7753
0
1.0000
0
-0.5843
0
0.0000
1.0000
0.5955
% Solutia se afla in ultima coloana :
>> y=x(:,end)
y =
0.7753
-0.5843
0.5955

Determinarea matricii inverse:


Se construiete matricea extins, prin adugarea unei matrici unitate de talie N*N la
dreapta matricii originale (care devine, prin aceasta, de talie N *(2N)):
T11 . . . T1N 1 . . . 0

.
. . 1
.
.
Te = .
.
. .
(3.8)
1
.

.
. .
1 .
.
T

N 1 . . . TNN 0 . . . 1
Aceast matrice extins va fi folosit n continuare n locul matricii originale n relaia
(3.6).
Aceasta este echivalent cu rezolvarea simultan a N sisteme de ecuaii, n care
termenii liberi succesivi conin doar un termen 1 pe linia de acelai rang cu coloana.
n Matlab, aceasta se realizeaz ca n exemplul urmtor:
% Matricea extinsa cu o matrice unitate :
>> c=[a eye(3)]
c =
1
3
5
1
0
0
3
7
8
0
1
0
8
1
4
0
0
1

32

Metode numerice.

% Rezolvarea :
>> z=a\c
z =
1.0000
-0.0000
0
-0.2247
0.0787
0.1236
0
1.0000
0
-0.5843
0.4045
-0.0787
0
0.0000
1.0000
0.5955
-0.2584
0.0225
% Inversa se afl n ultimele coloane ale rezultatului :
>> ai=z(:,4:end)
ai =
-0.2247
0.0787
0.1236
-0.5843
0.4045
-0.0787
0.5955
-0.2584
0.0225

Abordarea direct (prin intermediul matricii inverse) nu este util n practic, din
urmtoarele motive :

Calculul inversei unei matrice de talie (N*N) necesit, n principiu, aproximativ N3


calcule semnificative (~O(N3) - multiplicri i diviziuni care cer mai mult timp de calcul
dect adunrile i scderile.

Chiar dac matricea coeficienilor este rar (deci cu relativ puine elemente nenule,
aa cum este de regul n cazul circuitelor electrice), matricea invers este plin , ceea
ce implic un numr mai mare de calcule.

De aceea, n practic se utilizeaz metode diferite, care nu implic necesitatea inversrii


matricei sistemului.

De studiat:


S se considere exemple de circuite electrice liniare de curent continuu de


complexitate redus (un numr relativ mic de laturi/bucle/noduri).

S se scrie ecuaiile circuitului, folosind diverse metode (teoremele lui


Kirchhoff, metoda curenilor ciclici, metoda potenialelor la noduri) i s se
reprezinte n Matlab.

S se rezolve aceste ecuaii folosind Matlab.

S se verifice bilanul puterilor (de asemenea, folosind Matlab).

Documentaie:


Capitolul consacrat generrii automate a ecuaiilor unui circuit electric ( extras din
[11], cu numerotarea original ) fiierul anexat:

Cap_RO12_FormeMatriciale.doc
Este indicat s se consulte acest capitol, n particular seciunea 12.7 consacrat
metodei potenialelor la noduri (simplificat, ntr-o prima abordare). n particular,
algoritmul de generare a sistemului de ecuaii pentru acesat metod (seciunea
12.7.1.4.2), prezentat pentru cazul general al reelelor n regim variabil, poate fi
simplificat pentru reelele de curent continuu, prin eliminarea tuturor termenilor
dependeni de timp, reprezentai n contextul prezentat prin operatorii de derivare i de
integrare, notai cu D, respectiv I, ceeace conduce la un sistem de ecuaii algebrice.
n capitolul consacrat metodelor numerice de rezolvare a sistemelor de ecuaii
difereniale, acest subiect va fi abordat n toat complexitatea sa.
33

Exemplu de cod Matlab:


%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%

Generarea sistemului de ec. pt. metoda potentialelor la noduri


Fisier: potnod.m
SECTIUNEA 1: INITIALIZARE ------------------------Datele principale ale circuitului:
N = Numarul de noduri (in afara celui de referinta)
R = Tabloul datelor circuitului
structura liniei:
T n1 n2 V E
T
= tipul elementului
R =latura
J = sursa de curent
n1,n2 = nodul initial, final
V
= valoarea
daca T=R: R = rezistenta
daca T=J: J = sursa de curent
E
= sursa de tensiune (daca T=R)

%// SECTIUNEA 2: CITIREA DATELOR--------------------disp 'Descrierea circuitului:'


disp '
Tip n1
n2
V
E'
BR=1;
% latura rezistiva (cu R/E)
BJ=2;
% sursa de curent (cu J)
% Pentru teste - se comenteaza (%) secventele care nu intereseaza
% .. - se elimina comentariile pentru exemplul de studiat
%
%
%
%
%
%
%
%
%

R=[ BR
BR
BR
BJ
BR
BR
BR
BR
BR

0
1
2
0
1
0
3
3
4

1
2
0
2
2
3
1
4
2

10
1;
5
0;
5 -10;
1
0;
10
0;
10
1;
10
0;
2
0;
8
0]

%R=[ BR 0 1 10 30;
%
BR 1 2 5 0;
%
BR 0 2 2 6;
%
BR 0 2 5 15;
%
BJ 2 1 1 0]
% Raspuns: V=[20 10]
R=[ BR 0 1
BR 0 2
BR 0 3
BR 1 2
BR 2 3
BR 1 4
BR 2 4
BR 2 5
BR 3 5
BR 4 5
% Raspuns:

5 10;
10 30;
5 50;
10 20;
5
0;
1 -13;
10
0;
10
0;
10 -20;
10
0]
V=[20 30 40 10 5]

34

Metode numerice.

%//
%//
%
%

Lectura fisierului de descriere a circuitului


si constructia matricilor coeficientilor:
//Numarul de noduri poate fi determinat
//
printr-o prima parcurgere a fisierului de date.

disp 'Numarul de noduri:'


mr= max(R);
N = max(mr(2), mr(3))
%
%
%
%

Tablouri de lucru:
Y[N,N]
// Tabloul Y al coeficientilor sistemului
J[N]
// Termenii liberi
V[N]
// Vectorul necunoscutelor= potentialele nodurilor

%// Imitializarea la zero a tablourilor de lucru:


Y = zeros(N,N);
J = zeros(N,1);
% Cat timp mai sunt date: //---------------------[lin col]=size(R);
for l=1:lin
% Citeste T,
T = R( l , 1
n1= R( l , 2
n2= R( l , 3
V = R( l , 4
E = R( l , 5

n1, n2, V, E
);
);
);
);
);

% daca T = BR atunci // e o latura


if T == BR
%
daca n1 <> 0 atunci
%
Y[n1,n1]
+= Yb
%
J[n1]
-= Yb(E)
%
end daca // n1
if n1 > 0
Y(n1, n1) = Y(n1, n1) + 1/V;
J(n1)
= J(n1) - E/V;
end
%
%
%
%

daca n2 <> 0 atunci


Y[n2,n2]
+= Yb
J[n2]
+= Yb(E)
end daca // n2
if n2 > 0
Y(n2, n2) = Y(n2, n2) + 1/V;
J(n2)
= J(n2) + E/V;
end

%
%
%

daca n1<>0 si n2<>0 atunci


Y[n1,n2] = Y[n2,n1] -= Yb
end daca // n1 et n2
if (n1 > 0) & (n2 > 0)
Y(n1, n2) = Y(n1, n2) - 1/V;
Y(n2, n1) = Y(n1, n2);
end
% daca nu
// T=BJ : e sursa de curent

35

else
%
%
%

daca n1<>0 atunci


J[n1] -= V
end daca
if n1 > 0
J(n1) = J(n1) - V;
end

%
%
%

daca n2<>0 atunci


J[n2] += V
end daca
if n2 > 0
J(n2) = J(n2) + V;
end
% end daca //T
end;
% end cat timp //sfarsitul ciclului de lectura -----------end;
disp 'Coeficientii sistemului:'
Y
disp 'Termenii liberi:'
J
%// SECTIUNEA 3: CALCULE -------------------------------------% Rezolvarea sistemului de ecuatii [Y][V]=[J]
disp 'Potentialele nodurilor:'
V = Y\ J
%END // procedura

Exemplu de execuie a programului :


Descrierea circuitului:
Tip n1
n2
V
R =
1
0
1
5
1
0
2
10
1
0
3
5
1
1
2
10
1
2
3
5
1
1
4
1
1
2
4
10
1
2
5
10
1
3
5
10
1
4
5
10
Numarul de noduri:
N =
5
Coeficientii
Y =
1.3000
-0.1000
0
-1.0000
0

E
10
30
50
20
0
-13
0
0
-20
0

sistemului:
-0.1000
0.6000
-0.2000
-0.1000
-0.1000

0
-0.2000
0.5000
0
-0.1000

-1.0000
-0.1000
0
1.2000
-0.1000

36

0
-0.1000
-0.1000
-0.1000
0.3000

Metode numerice.

Termenii liberi:
J =
13
5
12
-13
-2
Potentialele nodurilor:
V =
20.0000
30.0000
40.0000
10.0000
20.0000

Alte exemple (soluiile V sunt indicate pe schemele circuitelor):


Tip n1 n2 V
R=[ BR
BR
BR
BR
BJ

0
1
0
0
2

1 10 30;
2 5 0;
2 2 6;
2 5 15;
1 1 0]

Tip n1 n2 V
R=[ BR
BR
BR
BR
BR
BR
BR
BR
BR
BR

0
0
0
1
2
1
2
2
3
4

1
2
3
2
3
4
4
5
5
5

5 10;
10 30;
5 50;
10 20;
5
0;
1 -13;
10
0;
10
0;
10 -20;
10
0]

Implementarea n Excel:
Fiierul PotNox.XLS anexat conine un exemplu de implementare n Excel a metodei
potenialelor la noduri pentru circuitele de curent continuu ( acest fiier este comentat n
francez, deci l propunem i ca exerciiu lingvistic  ).

37

3.1.2

Metoda eliminrii Gauss.

Metoda lui Gauss rezolv sistemele de ecuaii liniare care au matricea sistemului ptrat i
nesingular (det T 0) , printr-un algoritm de eliminare succesiv a necunoscutelor. Asfel,
T
dac se nmulete prima ecuaie a sistemului (3.1), pe rnd cu factorii i1 , pentru i=2,N i
T11
apoi se adun la ecuaia cu numrul i, se va elimina necunoscuta x1 din fiecare ecuaie,
evident cu excepia primei ecuaii. Se obine sistemul echivalent:

T11 X 1 +

T12 X 2

+ ..

T22(1) X 2

+ ..

T N(12) X 1

+ ..

+ T1 N X N G1

+ T2(N1) X N G
=

(1 )
+ T NN
X N G N

(3.9)

unde s-au notat noii coeficieni obinui n aceast prim etap de calcul cu indice superior(1).
De asemenea este evident c n prima ecuaie a sistemului coeficienii nu se modific.
T
Algoritmul de continu prin nmulirea celei de-a doua ecuaii a sistemului cu i 2 , pentru
T22
i=3,N i apoi adunndu-o la fiecare ecuaie i a sistemului se va elimina necunoscuta x2. Se
obine sistemul echivalent:
+ ..
+ .. + T1N X N G1
T11 X 1 + T12 X 2

T22(1) X 2
+ ..
+ .. + T2(N1) X N G2(1)

=
(3.10)

T23( 2 ) X 3 + .. + T2(N2 ) X N

( 2 )
(2)
( 2)
T
X
+
..
+
T
X
1
N3
NN
N

G N
Procedeul de eliminare a necunoscutelor continu pn cnd se aduce sistemul la forma:
+ ..
+ .. + T1N X N G1
T11 X 1 + T12 X 2

(1)
T22 X 2
+ ..
+ .. + T2(N1) X N G2(1)

=
(3.11)

T33( 3) X 2 + .. + T3(N3) X N

( N 1)
TNN
X N G ( N 1N)

ceea ce este echivalent cu reducerea matricei A la o matrice superior triunghiular, iar ecuaia
matriceal a sistemului devine:
T11 + T12 + .. + .. + T1N X 1 G1

T22(1) + .. + .. + T2(N1) X 2 G2(1)

(3.12)

T33( 3) + .. + T3(N3)

( N 1)
( N 1)
TNN

X N G N
unde indicii superiori indic etapa n care a fost obinut respectivul element. Aceast etap de
aducere a matricii T la forma triunghiular se numete eliminare sau triangularizare, iar
fiecare din elementele Tii, cu i=1,N puncte pe diagonala principal se numete pivot.

38

Metode numerice.

j
Fig. 3.1

Succesiunea operaiilor
n metoda lui Gauss

Tij

Tii

i
j

0
k
k
devine 0

Tki

Tkj

Algoritmul de baz (fr pivotare !) este urmtorul:


//Metoda Gauss
//Parcurgerea liniilor
Pentru i=1 la N-1{
//Parcurgerea liniilor urmatoare
Pentru k=i+1 la N {
//Tratarea elementelor ramase
//Se anuleaza elementele de pe liniile (i+1,N)
//
si coloana (i+1)
//Tii este pivotul
cki=T(k,i)/T(i,i);
% Linia(k) = linia(k)-linia(i)*cki:
Pentru j=i la N {
Tkj=Tkj-cki*Tij
} //j
} //k
} //i

Este evident c n cursul algoritmului, pentru a putea opera, trebuie ca toi pivoii s fie
nenuli. Mai mult, pentru reducerea erorilor de rotunjire, se recomand ca valoarea pivotului,
n modul s fie ct mai mare posibil.
Pentru rezolvarea acestor dou cerine se utilizeaz procedura de pivotare, adic de permutare
(schimbare) a liniilor (sau a liniilor i coloanelor). Pivotarea, efectuat ntr-o anumit etap de
calcul nu modific termenii deja deja obinui n matricea A. Asupra acestui aspect se va
reveni mai trziu.
Necunoscutele se determin dup (N-1) etape de eliminare, pe rnd, ncepnd cu ultima.

39

XN =
X N 1

GN( N 1)
Tnn(n 1)
GN( N12 ) TNN12 X N
=
TN( N1,N2 )1
Gi(i 1)

T (

i 1)
i, j

Xj

j =i +1

Xi =

Tii(i 1)

(3.13)
; j = N 2,2

X1 =

G1 T1, j X j
j =2

T11

Etapa de determinare a necunoscutelor se numete retrosubstituie.


Cele doua etape pot fi cumulate, dac matricea coeficienilor este extins cu o coloan
suplimentar, care conine termenii liberi ai sistemului (eventual, prin adugarea de coloane
suplimentare, se pot rezolva simultan mai multe sisteme de ecuaii cu aceiai coeficieni dar
cu diveri termeni liberi, ca n exemplul care urmeaz).
Algoritmul poate fi prezentat n modul urmtor:
function T=gauss(T)
% Aducerea matricii T la forma triunghiular-superioara
% Rezolvarea unui sistem de ecuatii
% Algoritm simplificat - fara pivotare
[nlin, ncol]=size(T);
for i=1:nlin-1
% Parcurgerea liniilor urmatoare
for k=i+1:nlin
% Tratarea elementelor ramase
% Se anuleaza elementele de pe liniile (i+1,nlin)
%
si coloana (i+1)
% Tii este pivotul
cki=T(k,i)/T(i,i);
% Linia(k) = linia(k)-linia(i)*cki:
for j=i:ncol
T(k,j)=T(k,j)-T(i,j)*cki;
end
end
end
% Daca exista coloane in plus (termenul liber)
% se rezolva sistemul.
% Solutia va fi in ultimele coloane
if ncol>nlin
%Parcursul invers - retrosubstitutie
for j=nlin+1:ncol
T(nlin,j)=T(nlin,j)/T(nlin,nlin);
for i=nlin-1:-1:1
s=0;
for k=i+1:nlin
s=s+T(i,k)*T(k,j);
end
T(i,j)=(T(i,j)-s)/T(i,i);

40

Metode numerice.

end
end
end

Observaie:
Codul de mai sus este o traducere direct i simplist n limbajul Matlab. Trebuie avut
n vedere c o astfel de practic este, n general, ineficient, deoarece nu se beneficiaz
de posibilitile pe care le ofer Matlab. Exemplul prezentat are doar un rol didactic.
El poate fi transpus n alte limbaje (C/C++, etc).
Ca exemplu, se reia cel prezentat mai sus, adugnd secvena de cod :
% Sisteme liniare-rezolvarea directa
% Comparatea duratelor de executie
% Fisier sislin_intro.m
. . . . .
b=[ a y];
disp('(4) ===> Gauss')
tic
xg=gauss(b);
x3=xg(:,end);
toc
Se vor nregistra durate sensibil mai mari, cauzate de cele afirmate mai sus. De altfel, numrul N de
ecuaii va trebui s nu fie prea mare, pentru a se evita problemele care pot aprea.

Exemplu:
1 Rezolvarea sistemului a*x = y:
% Matricea coeficientilor (3*3) :
>> a=[1 3 5; 3 7 8; 8 1 4]
a =
1
3
5
3
7
8
8
1
4
>> y=[ 2; 3; 8 ];
% Matricea extinsa cu coloana termenilor liberi :
>> b=[[a] y]
b =
1
3
5
2
3
7
8
3
8
1
4
8
% Metoda Gauss :
>> bg=gauss(b)
bg =
1.0000
3.0000
5.0000
0.7753
0
-2.0000
-7.0000
-0.5843
0
0
44.5000
0.5955
% Solutia se afla in ultima coloana:
>> x=bg(:,4)
x =
0.7753
-0.5843
0.5955
%Verificare :
>> a*x-y
ans =
1.0e-014 *
0
0.0888
0.1776
41

% Sau :
>> x=a\y
x =
0.7753
-0.5843
0.5955

2 Inversiunea unei matrici:


% Aceeasi matrice a :
a =
1
3
5
3
7
8
8
1
4
% Se extinde cu matricea unitate :
>> c=[ [a] eye(3) ]
c =
1
3
5
1
0
0
3
7
8
0
1
0
8
1
4
0
0
1
% Metoda Gauss :
>> cg=gauss(c)
cg =
1.0000
3.0000
5.0000
-0.2247
0.0787
0
-2.0000
-7.0000
-0.5843
0.4045
0
0
44.5000
0.5955
-0.2584
% Inversa lui a se afla in ultimele 3 coloane :
>> ainv=cg(:,4:6)
ainv =
-0.2247
0.0787
0.1236
-0.5843
0.4045
-0.0787
0.5955
-0.2584
0.0225
% Verificare a*ainv = matricea unitate:
>> a*ainv
1.0000
0
0
0.0000
1.0000
0
0.0000
-0.0000
1.0000

0.1236
-0.0787
0.0225

Este interesant s se analizeze complexitatea metodei Gauss. Asfel, n ceea ce privete efortul
de calcul, trecerea de la pasul k la pasul k+1 al algoritmului presupune efectuarea a:
(n k )(n k + 1) nmuliri
(n k )(n k + 1) adunri
(n k ) mpriri
Prin urmare, la sfritul etapelor de calcul se vor efectua n total:
N 1
N (N 2 1)
(N i )(N i + 1) =
nmuliri

3
i =1

N (N
(N 1)(N i + 1) =
N 1
i =1
N 1

(N 1)
i =1

1)

adunri
3
N (N 1)
mpriri
=
2

operaii pentru triregularizarea matricei A, iar pentru retrosubstituire se vor efectua:


N 1
(N i ) = N (N 1) nmuliri

2
i =1
N 1
(N i ) = N (N 1) adunri

2
i =1
42

Metode numerice.

Adunnd tipurile de operaii efectuate n total n cele dou etape, se obine pentru metoda
Gauss un total de:
N (N 1)(2 N + 5)
N (N 1)(2 N + 5)
N (N + 1)
nmuliri,
adunri i
mpriri.
6
6
2
Considernd c tipul necesar calculatorului pentru a efectua o nmulire sau o mprire este
mult mai mare dect cel consumat pentru o adunare, atunci se poate presupune c efortul de
calcul necesar calculatorului n metoda Gauss este proporional numai cu numrul de nmuliri
i mpriri, adic:
N (2 N 2 + 6 N 2 )
G
(3.14)
6
Acest numr este foarte mic, ncepnd cu n 3 , fa de numrul de operaii cerute de regula
lui Cramer (cu determinanii calculai dup minori):
C = N N !
(3.15)
Adic

G << C

(3.16)

n ceea ce privete necesarul de memorie utilizat n metoda Gauss, pentru memorarea matricei
T i a vectorilor G i X sunt necesare:
N2+N+N=N(N+2)
locaii de memorie, fiecare locaie fiind rezervat unui numr real.
Acelai numr este necesar i pentru regula lui Cramer (este de remarcat faptul c metoda lui
Cramer nici nu intr n discuie, din punctul de vedere al eficienei, pentru rezolvarea
numeric a sistemelor de ecuaii algebrice).

3.1.3

Metoda Gauss-Jordan

Metoda Gauss-Jordan reprezint o modificare a metodei Gauss. Ea se aplic matricii extinse


(prin adugarea coloanei termenului liber, respectiv coloanelor termenilor liberi n cazul
rezolvrii simultane a mai multor sisteme cu aceeai coeficieni, sau a unei matrice unitate,
pentru determinarea inversei matricii coeficienilor, dup cum s-a artat mai sus rel 3.7,
3.8).
Ea se desfoar n dou etape:

Se aduce matricea la forma n scar:

Te Te(1)

0
= 0

0
0

x
1

x.
x

x
x

x x
x. x

x
x

. .
. .

0
0
0

1
0
0

x
1
0

x x
x x
1 0

x
x
x

. .
. .
. .

x
x

x
x

(3.17)

Toi coeficienii de pe diagonala matricii iniiale sunt adui la valoarea 1, iar cei de sub
diagonala principal sunt anulai. Procedura este similar celei din metoda Gauss, cu
singura deosebire care provine din coeficienii de pe diagonal.

Se aduce tablou la forma n scar redus:


43

Te(1) Te( 2 )

0
= 0

0
0

0
1
0
0
0

0
0
1
0
0

0 0 y
0 0. y
0 0 y
1 0 y
0 10

y
y
y
y
x

.
.
.
.
.

.
.
.
.
.

y
y

y
y

(3.18)

Toi coeficienii de pe diagonala matricii iniiale sunt adui la valoarea 1, iar ceilali
sunt anulai. Procedura este similar retrosubstuiei din metoda Gauss.

 n final, partea extins a matricii va conine, dup caz:


- Soluia sistemului, n cazul n care matricea coeficienilor a fost extins cu
vectorul termenilor liberi.
- Inversa matricii coeficienilor, n cazul n care matricea a fost extins cu o
matrice unitate.
Numrul de operaii n metoda Gauss-Jordan este cu circa 50% mai mare fa de metoda
Gauss, deoarece n fiecare etap k se calculeaz n-1 multiplicatori:
n
n3
3n
G J = [(n 1) + (n 1)(n + 1 k )] =
+ n2
2
2
k =1
(3.19)
Din cauza numrului mrit de operaii, metoda Gauss-Jordan se utilizeaz mai ales la calculul
numeric al matricei inverse.

3.1.3.1

Implementarea n Matlab.

n Matlab, metoda Gauss-Jordan este implementat n funciunea rref.


Aceasta poate fi apelat n diverse variante, dintre care cele mai importante sunt ilustrate n
exemplele care urmeaz.

Exemplu: Rezolvarea unui sistem de ecuaii prin metoda Gauss-Jordan:


% Rezolvarea unui sistem de ecuatii prin metoda Gauss-Jordan
% Coeficientii sistemului a x = y
a =
1
3
5
3
7
8
8
1
4
% Verificarea rangului matricii (trebuie sa fie 3) :
rank(a)
% Termenii liberi :
>> y=[2 ; 4 ; 5]
y =
2
4
5

44

Metode numerice.

% Matricea extinsa cu coloana termenilor lineri :


>> ay=[a y]
ay =
1
3
5
2
3
7
8
4
8
1
4
5
% Metoda Gauss-Jordan :
>> [r,j]=rref(ay)
r =
1.0000
0
0
0.4831
0
1.0000
0
0.0562
0
0
1.0000
0.2697
j =
1
2
3
% Solutia se afla in ultima coloana :
>> x=r(:,end)
x =
0.4831
0.0562
0.2697
% Verificare a * x =y = 0 ?:
>> a*x-y
ans =
0
0
0

Exemplu: Inversarea unei matrice prin met. Gauss-Jordan


% Inversarea unei matrice prin met. Gauss-Jordan
>> a=[1 3 5; 3 7 8; 8 1 4]
a =
1
3
5
3
7
8
8
1
4
% Se extinde [a] cu matricea [1] :
>> aext=[a eye(3)]
aext =
1
3
5
1
0
0
3
7
8
0
1
0
8
1
4
0
0
1
% Se aplica metoda Gauss-Jordan pentru matricea extinsa :
>> [r,j]=rref(aext)
r =
1.0000
0
0
-0.2247
0.0787
0.1236
0
1.0000
0
-0.5843
0.4045
-0.0787
0
0
1.0000
0.5955
-0.2584
0.0225
% Primele coloane contin o matrice unitara.
% Inversa lui [a] se afla pe ultimele coloane :
>> ainv=r(:,4:6)
ainv =
-0.2247
0.0787
0.1236
-0.5843
0.4045
-0.0787
0.5955
-0.2584
0.0225
% Verificare :
>> a*ainv
ans =
1.0000
-0.0000
0
0
1.0000
0
0
-0.0000
1.0000

45

Exemplu de aplicare a metodei Gauss-Jordan pentru determinarea inversei unei matrice.


(adaptat dup http://www.idomaths.com/gauss_jordan.php )
Se consider o matrice (3x3) (primele trei coloane) completat la dreapta cu o matrice unitate.
Operaiile succesive sunt urmtoarele (s-au pus n eviden termenii importani pentru
urmrirea evoluiei calculelor):
1 3 5

1 0 0

3 7 8

0 1 0

8 1 4

0 0 1

Permutarea liniilor 3 si 1 (pivotul=8):


8 1 4 0 0 1
3 7 8 0 1 0
1 3 5 1 0 0

Imparte linia 1 cu 8
1 0.125 0.5 0 0 0.125
3

0 1

1 0

Scade (3 linia 1) din linia 2 :


1 0.125 0.5 0 0 0.125
0 6.625 6.5 0 1 -0.375
1

1 0

Scade linia 1 din linia 3 :


1 0.125 0.5 0 0 0.125
0 6.625 6.5 0 1 -0.375
0 2.875 4.5 1 0 -0.125

Imparte linia 2 cu 6.625 (pivotul) :


1 0.125
0

0 2.875

0.5

0.125

0.981 0 0.151 -0.057


4.5

-0.125

Scade (2.875 linia 2) din linia 3 :


1 0.125

0.5

0.125

0.981 0 0.151 -0.057

1.679 1 -0.434 0.038

Imparte linia 3 cu 1.679 (pivotul)


1 0.125

0.5

0.981

0.125

0.151 -0.057

0.596 -0.258 0.022

Matricea a fost adusa la forma n scar


Scade (0.5 linia 3) din linia 1 :
1 0.125

0.981

-0.298 0.129
0

0.114

0.151 -0.057

0.596 -0.258 0.022

Scade (0.981 linia 3) din linia 2 :


1 0.125 0 -0.298 0.129

0.114

0 -0.584 0.404 -0.079

1 0.596 -0.258 0.022

46

Metode numerice.

Scade (0.125 linia 2) din linia 1 :


1 0 0

-0.225 0.079

0.124

0 1 0

-0.584 0.404 -0.079

0 0 1

0.596 -0.258 0.022

Matricea a fost adusa la forma n scar redus.


Primele trei coloane conin matricea unitate, iar ultimele trei reprezint inversa matricii iniiale.

Exerciiu:
S se adapteze algoritmul metodei Gauss prezentat n pseodocod mai sus, pentru
metoda Gauss-Jordan.

3.1.4

Metoda factorizrii.

Factorizarea consist n reprezentarea matricei prin produsul a dou matrice :


[T ] = [ L][U ]

(3.20)

unde :
[L]

este o matrice inferioar - stnga ( Lower , n englez), ai crei termeni nenuli


se gsesc numai dedesubtul diagonalei principale i pe aceasta.

[U] este o matrice superioar - dreapta ( Upper , n englez), ai crei termeni


nenuli se gsesc numai deasupra diagonalei principale.
Prin urmare, aceast descompunere poate fi de forma:
L11

U11 U12 U13 ...


L

L
U 22 U 23 ...
[U ] =
[L] = 21 22
L31 L32 L33

U 33 ..

...
... ... ... ...

(3.21)

Termenii care nu figureaz sunt nuli.


Pentru determinarea acestor termeni (Lij, Uij, i,j=1,N) se impune condiia ca produsul celor
doi factori s fie egal cu matricea de factorizat.
Dac se nmulesc toate cele N linii ale matricii L cu cele N coloane ale matricii U, se obin N2
ecuaii, din care trebuie determinate cele N2+N necunoscute. Prin urmare, sistemul este
nedeterminat. Ca urmare, factorizarea unei matrici date nu este unic.
Se poate rezolva problema adoptnd pentru N necunoscute valori date. Cel mai comod este ca
termenii diagonali ai lui L sau U s fie impui egali cu 1.
Rezult dou posibiliti, n funciune de factorul
valoarea 1:
1

U11 U12
L

1
U 22
[U ] =
[L] = 21
L31 L32 1

... ... ... ...


respectiv:

47

(L sau U) pe a crui diagonal se impune


U13 ...
U 23 ...
(L1)
U 33 ..

...

(3.22)

L11
L
[L] = 21
L31

...

L22
L32

L33

...

...

...

1 U12 U13 ...

1 U 23 ...

(U1)
[U ] =
1 ..

...

(3.23)

Cele dou opiuni au fost desemnate prin indicii (L1) (pentru cazul n care diagonala matricii
L conine valoarea 1), respectiv (U1).
Observaie:

n paragrafele care urmeaz, consacrat prezentrii principiului metodei factorizrii,


s-a adoptat varianta (U1).

n Matlab, s-a adoptat varianta (L1).

Propunem ca exerciiu adaptarea algoritmilor prezentai n paragrafele urmtoare


(3.1.4.1 i 3.1.4.2) n cazul variantei (U1), pentru varianta (L1).

Avantajele factorizrii sunt :


3
n principiu, ea necesit ~O(N /3) calcule semnificative, deci o treime fa de calculul
matricei inverse.
Factorii [L] i [U] pot fi rari (evident, e vorba doar de partea nenul a matricei).
Cei doi factori [L] i [U] pot fi stocai ntr-un acelai tablou de (N*N) elemente. Acest
tablou poate fi chiar tabloul iniial [T], ai crei termeni sunt nlocuii n timpul calculelor.
Sistemul se transform n :
[ L][U ][ X ] = [G ]

3.1.4.1

(3.24)

Metoda de factorizare Crout (varianta U1).

Algoritmul se descompune n dou etape principale:


1) Factorizarea matricei coeficienilor [T].
Fie, pentru nceput, un exemplu de factorizare LU a unei matrici de dimensiuni 4x4:
0
0 1 U12 U13 U 14
T11 T12 T13 T 14 L11 0
T T

0 0 1 U 23 U 24
21 22 T23 T 24 = L21 L22 0

*
T31 T32 T33 T34 L31 L32 L33 0 0 0
1 U 34

0
1
T41 T42 T43 T44 L41 L42 L43 L44 0 0
Produsul celor doi factori L i U este:
L11U12
L11U13
L11
L
L U +L
L21U13 + L22U 23
(T ) = 21 21 12 22
L31 L31U12 + L 32 L31U13 + L32U 23 + L33

L41 L41U12 + L42 L41U13 + L42U 23 + L43

(3.25)

L21U 14 + L22U 24
(3.26)
L31U14 + L32U 24 + L33U 34

L41U14 + L42U 24 + L43U 34 + L44


L11U14

Prin compararea cu matricea T se constat c:


a) Prima coloan a matricii L este identic cu prima coloan a matricii T, deci nu e
necesar nici un tratament :
Li1 = T i1 pentru i=1 la N.
48

Metode numerice.

b) Prima linie a matricii U, cu excepia primului termen, care are valoarea 1, se


obine diviznd elementele corespunztoare ale matricii T prin elementul de pe
diagonal L11 :
U1j = T 1j / L11 pentru j=2 la N.
c) Se continu prin a doua coloan a matricii L, ncepnd cu al doilea termen.
Elementele Li1=Ti1 i U12 care figureaz n expresii sunt cunoscute. Prin urmare :
Li2 = T i2 Li1U12, pentru i=2 la N.
d) Se continu cu a doua linie a matricii U, ncepnd cu al treilea termen (al doilea
este 1). Elementele Li1=Ti1 et U12 care figureaz sunt cunoscute. Prin urmare :
U22=1; U2j = (T 2j L21U1j)/L22, pentru j=3 la N.
e) Algoritmul continu n acelai mod, alternnd coloanele din L i liniile din U.
Astfel, n etapa (k, k=2 la N) se obine:
k 1

Lik = Tik LijU jk ;


j =1

(3.27)

k 1

U kj = (Tkj LkiU ij ) / Lkk ; k = 2, N


i =1

Aceast procedur poate fi ilustrat n modul urmtor:


2

Fig. 3.2
4

Succesiunea operaiilor n
metoda de factorizare a lui
Crout (varianta U1)

1
3
m

Numrul de calcule este de ordinul O(N3/3). Aceasta este etapa cea mai costisitoare n
timp de calcul. Elementele factorilor [L] i [U] nlocuiesc treptat pe cei ai matricei iniiale
[T].
n principiu, algoritmul este urmtorul (v. diagrama din figura de mai jos, cu referine la
diverii pai n cod):

49

//Factorizarea Crout
//Prima coloan din L (etapa 1):
Pentru i=1 la N {
L(i,1)=T(i,1)
}
//Prima linie din U (etapa 2):
Pentru j=2 la N {
U(1,j)=T(1,j)/L(1,1)
}
//Liniile i coloanele urmtoare (etapa 3):
Pentru k=2 la N {
//Coloanele k la N (etapa 4):
Pentru i=k la N {
//L(i,k)=T(i,k)-<v1,v2>
L(i,k)=T(i,k)-j=1 la k-1[L(i,j)U(j,k)]
}
Dac j=N, atunci END
//Linia k din U (etapa 5):
Pentru j=k+1 la N {
//U(k,j)=[T(k,j)-<v3,v4>]/L(k,k)
U(k,j)=(T(k,j)-i=1 la k-1[L(k,i)U(i,j)])/L(k,k)
}
}
unde <vm, vn> este produsul scalar dintre vectorii vm i vn.
k

j
2

V2

Fig. 3.3

V4

i
.

V3

Ilustrarea
metodei de
factorizare a
lui Crout
(varianta U1).

k
i

U(k,j)

1
V1
i

L(i,k)
j

Se constat c se avanseaz succesiv pe coloanele matricei L i liniile matricei U.


n practic, acest algoritm trebuie ameliorat, n vederea evitrii mpririlor prin zero (dac elemente
diagonale ale lui L sunt nule), sau prin valori foarte mici. n astfel de situaii, se practic permutri de
linii sau de coloane, care se refer numai la partea din matricea T nc ne tratat.

50

Metode numerice.

2) Rezolvarea sistemului, prin metoda dublului parcurs , care se petrece, la rndul su,
n dou etape :
a) Parcursul direct : se rezolv sistemul auxiliar :
L11
Y1 G1

... = ... Y
[ L ][Y ] = [G ] x x
[ ]

x x LNN YN GN

(3.28)

Elementele vectorului auxiliar [Y] sunt calculate succesiv n sensul indicat de sgeat.
Aceast etap necesit aproximativ O(N2/2) calcule
n principiu, algoritmul este urmtorul :
//Parcursul direct
//Primul element din Y :
Y(1)=G(1)/L(1,1)
//Elementele urmtoare :
Pentru i=2 la N {
Y(i)={G(i)- j=1 la i-1[L(i,j)Y(j)]}/L(i,i)
}
//Parcursul direct poate fi executat n acelai timp cu
//factorizarea.

b) Parcursul invers : se rezolv un alt sistem auxiliar :


1 x x X 1 Y1
[U ][ X ] = [Y ] 1 x ... = ... [ X ]

1 X N YN

(3.29)

Elementele vectorului necunoscutelor [X] sunt calculate succesiv n sensul indicat de


sgeat. Aceast etap necesit, de asemenea, aproximativ O(N2/2) calcule.
n principiu, algoritmul este urmtorul :
//Parcursul invers
//Ultimul element din X :
X(N)=Y(N)
//Elementele urmtoare :
Pentru i=N-1 la 1 cu pasul -1 {
X(i)=Y(i)- j=i+1 la N[U(j,i)X(j)]
}

3.1.4.2

Metoda de factorizare Doolittle (varianta U1).

Aceast variant prezint unele avantaje fa de metoda Crout, care o fac mai bine adaptat
cazului matricilor rare .
Fie din nou exemplul precedent, abordat ns pe o cale diferit.
1. Se determin pentru nceput L11=T11, apoi prima linie a matricii:
U1j = T1j/L11, pentru j=2 la N.
2. Se continua cu a doua linie din L i din U:
L21=T21 ; L22 = T22 L21U12.
U2j = (T2j L21U1j)/ L22 pentru j=3 la N.
51

3. Algoritmul continu n acelai mod, tratnd succesiv liniile celor dou matrice,
ncepnd cu cele din L, apoi din U. Astfel, n etala (k, pentru k=2 la N), se
obine :
k 1

Lki = Tki LkjU jo ; i = 1, k


j =1

k 1

U ki = (Tki LkjU ji ) / Lkk ;

(3.30)
j = k + 1, N

j =1

Fig. 3.4
4

Succesiunea operaiilor n
metoda de factorizare a lui
Doolittle (varianta U1).

n mod detaliat, algoritmul se desfoar ca n figura urmtoare:


j

V2

V4

1
2

Fig. 3.5

Ilustratrea
metodei de
factorizare
Doolittle
(varianta U1).

V1

V3
j

L(k,i)

U(k,i)
i

n principiu, algoritmul este urmtorul (v. diagrama din figur, cu referine la diverii pai n cod ):

52

Metode numerice.

//Factorizarea Doolittle
//Parcurs pe linii (etapa 1):
Pentru k=1 la N {
//Linia k a lui L (etapa 2):
Pentru i=1 la k {
//L(k,i)=T(k,i)-<v1,v2>
L(k,i)=T(k,i)-j=1 la k-1[L(k,j)U(j,i)]
}
//Linia k a lui U (etapa 3):
Pentru j=k+1 la N {
//U(k,i)=[T(k,i)-<v3,v4>]/L(k,k)
U(k,i)=(T(k,i)-j=1 la k-1[L(k,j)U(j,i)])/L(k,k)
}
Se constat c se avanseaz succesiv pe linii, ale matricei L apoi ale matricei U.
Acesta este avantajos dac matricile sunt memorate pe linii, ceea ce poate fi util n operaii asupra
matricilor rare.

Observaii asupra procesului de factorizare.


Se poate constata, pentru cele dou metode de factorizare prezentate anterior, c:

Numrul de calcule semnificative din punct de vedere al timpului de calcul


(nmuliri i mpriri) est de ordinul de mrime O(N3/3), la fel ca i pentru
metoda lui Gauss.

Dublul parcurs asociat etapei a doua, de rezolvare a sistemului cu matricea


factorizat, implic, n principiu, O(N2) calcule semnificative.

Tablourile L i U pot fi stocate n aceeai zon de memorie cu tabloul iniial T.


ntr-adevr, elementele factorilor [L] i [U] nlocuiesc treptat pe cai ai tabloului
iniial [T].

Se poate calcula cu uurin determinantul matricii [T], egal cu produsul


termenilor diagonali din [L]:
N

Det ( A) = Lii

(3.31)

i =1

n linii mari, factorizarea conine trei cicluri imbricate :



Un ciclu exterior , fie urmnd diagonala matricii (n metoda Crout), fie
liniile (metoda Doolittle). Acest ciclu se execut o dat i conine N pai.

Un al doilea ciclu, n interiorul primului. Acesta se desfoar n mod
alternativ n zonele nc ne tratate ale coloanelor din L i liniilor din U
(metoda Crout), fie n lungul liniilor n curs de tratare (metoda Doolittle).
Lungimea medie a unui astfel de ciclu este de N elemente (ntre 2N i 0
pentru metoda Crout, N pentru metoda Doolittle).

Un ciclu intern , reprezentat prin produsele scalare ntre doi vectori,
pus n eviden n procedurile de mai sus prin <vm,vn>. Aceste cicluri sunt
executate de cele mai multe ori (de N ori). Prin urmare, ele sunt cele mai
critice din punct de vedere al performanei i sunt cele care trebuie s fie
optimizate n primul rnd. La limit, ele pot fi programate n limbaje de
asamblare, dar acesta abordare poate pune probleme de programare i de
portabilitate..
Metoda factorizrii devine i mai interesant n situaia n care un sistem de
ecuaii trebuie s fie rezolvat pentru mai muli termeni liberi. n acest caz, este
suficient o singur factorizare a matricii coeficienilor sistemului.

53

3.1.4.3

Metoda de factorizare Cholesky.

Metoda de factorizare Cholesky e utilizabil n cazul matricilor simetrice i pozitiv definite.


ntruct matricile care apar n rezolvarea problemelor de cmp prin metodele prezentate n
aceast lucrare se ncadreaz n aceast categorie, metoda Cholesky reprezint alegerea
optim.
n cazul unei matrice simetrice, este avantajos ca elementele de pe diagonalele celor doi
factori [L] i [L] s fie egale, nct ntre aceti factori exist relaia evident:
T
(3.32)
[ L] = [U ]
Evident, se poate face o economie substanial de memorie dac se reine numai unul din cei
doi factori.
Algoritmul este urmtorul :
a) Se determin U11 = T11 , apoi prima linie din U :
U1j = A 1j/L11, pentru j=2 la N.
b) Se trateaza succesiv restul liniilor din matricea U. Astfel, n etapa (i, pentru i=2
la N) :
i 1

U ii = Tii U ij2 = Tii < v1 , v1 > ; i = 2, N


j =1

(3.33)

i 1

U ik = (U ik U ijU kj ) / U ii = (U ik < v1 , v2 > ) / U ii ; k = i + 1, N


j =1

Ca mai sus, <vm,vn> este produsul scalar al celor doi vectori din diagrama care urmeaz. Se
ine seama c datorit simetriei matricii, vectorii v1 i v1T sunt echivaleni.

U(1,1)

1
2

V1

Fig. 3.6

V2

j
.

3
i

U(i,i)

U(i,k)

54

Ilustrarea
metodei de
factorizare a
lui Cholesky

Metode numerice.

n principiu, algoritmul este urmtorul (v. diagrama din figur, cu referine la diverii pai n cod):
//Factorizarea Cholesky
//Prima linie din U (=prima coloan din L) (etapa 1):
U(1,1)=sqrt(U(1,1))
Pentru k=2 la N {
U(k,1)=T(k,1)/U(1,1)
}
//Liniile i coloanele urmtoare (etapa 2):
Pentru i=2 la N {
//U(i,i)=sqrt(U(i,i)- <v1,v1>
U(i,i)=sqrt(U(i,i)- j=1 la i-1[U(i,j)2]]
//Linia i, coloanele k=i+1 la N (etapa 3):
Pentru k=i+1 la N {
//U(i,k)=[U(i,k)-<v1,v2>]/U(i,i)
U(i,k)=[U(i,k)-j=1 la i-1[U(i,j)U(k,j)]]/U(i,i)
}
}
Momentul critic este cel n care se calculeaz rdacina patrat a unor termeni. n cazul matricilor
pozitiv-definite, aceasta trebuie s fie ntotdeauna posibil. n practic, ns, din cauza acumulrii
erorilor numerice, este posibil ca algoritmul s se blocheze, dac mrimea a crei rdacini patrate
trebuie calculat, este negativ. Se poate ocoli acest inconvenient printr-o modificare a algoritmului, n
care factorizarea se face sub forma produsului a trei matrice:

[T ] = [ L] [ D ] [U ] = [U ] [ D ] [U ]
T

(3.34)

n care matricea [D] este o matrice diagonal, iar matricile [L] i [U] au valorile 1 pe diagonal.

Factorizarea matricilor simetrice, dar nu i pozitiv definite.


Dac matricea [T] a coeficienilor nu este pozitiv definit, algoritmul precedent nu mai este
utilizabil, deoarece, ntr-un anumit moment, poate aprea un pivot negativ, a crui rdcin
patrat nu ar putea fi calculat.
Metoda poate fi ns modificat pentru evitarea acestui inconvenient.
Ea consist n factorizarea matricii simetrice sub forma produsului a trei matrice :

[T ] = [ L] [ D ][U ] = [U ]T [ D ][U ] ,

[ L] = [U ]T

cu

(3.35)

unde [D] este o matrice diagonal, ai crui termeni sunt Dm=1, iar [U] este o matrice
triangular superioar, cu termenii diagonali diferii de 1 :
x
x
x
x
U11
1

U 22
x
x
x
1

U mm
x
x
(3.36)
1
[U ] =
[ D] =

U nn
x
1

U NN
1

Un termen diagonal al matricei coeficienilor [T] este, dup regulile nmulirii matricilor:
m

Tmm = L mi DikU km = U imU km Dik ; m = 2, N


i =1 k =1

(3.37)

i =1 k =1

Dar, ntruct matricea D est diagonal, rmn numai termenii pentru i=k:
m

m 1

i =1

i =1

2
Amm = U im2 Dii = U im2 Di + U mm
Dm ; ( Dii = Di )

Astfel, se pot determina termenii diagonali necunoscui:


55

(3.38)

m 1

Dm = sgn Tmm U im2 Di = 1


i =1

m 1

Tmm U im2 Di

U mm =

(3.39)

; m = 2, N

i =1

n cazul particular al primului termen (m=1), sumele sunt nule. n consecin:


D1 = sgn ( T11 ) = 1
U11 =

T11

(3.40)

Termenii nediagonali de pe linia (m) a matricei coeficienilor sunt:


m

Tmj = L mi DikU km = U imU km Dik ;


i =1 k =1

j = m + 1, N

(3.41)

i =1 k =1

Dar, ntruct matricea D est diagonal, rmn numai termenii pentru i=k:
m

m 1

i =1

i =1

Tmj = U imU ij Di = U imU ij Di + U mmU mj Dm

Astfel, se determin:
m 1

U mj = Tmj U imU ij Di / (U mm Dm ) ;
i =1

j = m + 1, N

n cazul particular al primului termen (m=1), sumele sunt nule. n consecin:


U1 j = (T1 j ) / (U11D1 ) ; j = 2, N

Algoritmul este urmtorul: :


//Factorizare Cholesky
//matrice simetrice dar nu pozitiv definite
//Prima linie din U (etapa 1):
D(1)=sgn(A(1,1))
U(1,1)=sqrt(abs(A(1,1)))
Pentru j=2 la N {
U(1,j)=A(1,j)/(U(1,1)D(1))
}//j
//Liniile urmatoare (etapa 2):
Pentru m=2 la N {
D(m)=sgn[A(m,m)-i=1 la m-1(u(i,m)2 D(i))]
U(m,m)=sqrt(abs(A(m,m)-i=1 la m-1(u(i,m)2 D(i))))
//Linia m din U (etapa 3):
Pentru j=m+1 la N {
U(m,j)=(A(m,j)- i=1 la m-1[U(i,m)U(i,j)D(i)])/(U(m,m)D(m))
}//j
}//m

56

(3.42)

(3.43)

(3.44)

Metode numerice.

3.1.4.4

Implementarea n Matlab.

n Matlab sunt implementate mai multe funciuni destinate operaiunilor de factorizare sau
conexe.
Trebuie remarcat faptul c, spre deosebire de prezentarea de mai sus a metodei factorizrii, n
implementarea din Matlab matricea L are termenii diagonali unitari, iar matricea U are
termenii diagonali diferii de unitate, opiune desemnat mai sus prin (L1).

3.1.4.4.1

Factorizarea LU.

Matlab ofer funciunea lu, care prezint mai multe variante.

Lu1=lu(A)
Factorizarea LU a matricii patrate a. Matricea rezultant Lu1 conine, n zona de sub
diagonala principal, matricea L (cu excepia termenilor de pe diagonal, egali cu 1), iar
n zona de peste diagonala principal (inclusiv aceast diagonal), matricea U.

Exemplu:
a =
1
3
3
7
8
1
>> Lu1=lu(a)
lu1 =
8.0000
0.3750
0.1250

5
8
4
1.0000
6.6250
0.4340

4.0000
6.5000
1.6792

Sub aceast form, metoda e relativ puin interesant.


n Matlab sunt prevzute dou funciuni care permit extragerea celor doi factori din
matricea factorizat:

Matricea triunghiular-inferioar (versiunea de baz):

L = tril ( a )

Matricea triunghiular-superioar (versiunea de baz):

U = triu ( a )

Vectorul diagonalei (versiunea de baz):

V = diag ( a )
Exemplu:
>> a=[1 3 5; 3 7 8; 8 1 4]
1
3
5
3
7
8
8
1
4
>> lu1=lu(a)
8.0000
1.0000
4.0000
0.3750
6.6250
6.5000
0.1250
0.4340
1.6792

57

>> L=tril(lu1)
8.0000
0
0.3750
6.6250
0.1250
0.4340
>> U=triu(lu1)
8.0000
1.0000
0
6.6250
0
0

0
0
1.6792
4.0000
6.5000
1.6792

Dup cum se constat, matricea L conine pe diagonal termenii din matricea U, n loc
s conin 1. Se poate rezolva aceasta, folosind o variant a funciunii tril(), care
restituie numai termenii situai n afara diagonalei, apoi se adaug valorile 1:
>> L=tril(lu1,-1)
0
0
0
0.3750
0
0
0.1250
0.4340
0
>> L=L+eye(3) % In general, L=L+eye(size(L,1))
1.0000
0
0
0.3750
1.0000
0
0.1250
0.4340
1.0000

[L2,U2] = lu(a)
Matricea rezultant L2 conine matricea L, eventual cu liniile transpuse, n urma
pivotrii (v. paragrafele care urmeaz), iar matricea U2 conine matricea U.

Exemplu:
>> [L2, U2]=lu(a)
L2 =
0.1250
0.4340
0.3750
1.0000
1.0000
0
U2 =
8.0000
1.0000
0
6.6250
0
0

1.0000
0
0
4.0000
6.5000
1.6792

Dup cum se constat, matricea L2 are liniile 1 i 3 permutate. Produsul matricilor L2


i U2 este egal cu matricea a:
>> L2*U2-a
ans =
1.0e-015 *
0
-0.4441
0
0
0
0

0
0
0

Soluia sistemului de ecuaii:


[ a ] [ x ] = [ y ] [ L][U ][ x ] = [ y ]

(3.45)

se obine n dou etape (parcursul direct, respectiv invers):


( dir ) [ L ][ g ] = [ y ] g = L \ y
(inv )

[U ][ x ] = [ g ]

x =U \ g

58

(3.46)

Metode numerice.

>> g=L2\y
g =
5.0000
2.1250
0.4528
>> x=U2\g
x =
0.4831
0.0562
0.2697

Metoda poate fi aplicat i matricilor dreptunghiulare. Spre exemplu, se adaug matricii


a coloana termenului liber:
>> a1=[ a y ]
a1 =
1
3
5
3
7
8
8
1
4
>> [L21, U21]=lu(a1)
L21 =
0.1250
0.4340
0.3750
1.0000
1.0000
0
U21 =
8.0000
1.0000
0
6.6250
0
0

2
4
5
1.0000
0
0
4.0000
6.5000
1.6792

5.0000
2.1250
0.4528

Ultima coloan a matricii U21 conine vectorul rezultant n urma parcursului direct
(dup cum se poate constata comparnd cu vectorul g din exemplul precedent).
n consecin, parcursul invers se efectueaz folosind primele coloane, rspectiv ultima
coloan din U21. n cazul de fat (matrice 3*3), rezult:
>> x=L21(:,1:3)\U21(:,end)
x =
0.4528
1.9552
4.0949

De asemenea, se poate calcula inversa matricei coeficienilor, dac se adaug coloane


suplimentare care conin iniial matricea unitate:
>> aext=[a eye(size(a,1))]
aext =
1
3
5
1
0
3
7
8
0
1
8
1
4
0
0
>> [Le,Ue]=lu(aext)
Le =
0.1250
0.4340
1.0000
0.3750
1.0000
0
1.0000
0
0
Ue =
8.0000
1.0000
4.0000
0
6.6250
6.5000
0
0
1.6792

0
0
1

0
0
1.0000

59

0
1.0000
-0.4340

1.0000
-0.3750
0.0377

% Calculul inversei :
>> ainv=Ue(:,1:3)\Ue(:,4:6)
ainv =
-0.2247
0.0787
0.1236
-0.5843
0.4045
-0.0787
0.5955
-0.2584
0.0225
% Verificare :
>> a*ainv
ans =
1.0000
0.0000
0
0
1.0000
0.0000
0
0
1.0000

[Lp, Up, P]=lu(a)


Matricea rezultant Lp conine matricea L (sub forma de matrice triunghiular
superioar, cu liniile n ordinea nepermutat), matricea Up conine matricea U, iar
matricea P este matricea de pivotare.
Exemplu:
>> [Lp, Up, P] = lu (a)
Lp =
1.0000
0
0.3750
1.0000
0.1250
0.4340
Up =
8.0000
1.0000
0
6.6250
0
0
P =
0
0
1
0
1
0
1
0
0

0
0
1.0000
4.0000
6.5000
1.6792

Se poate verifica direct c matricea P indic permutarea liniilor 1 i 3. Produsul


matricilor L2 i U2 este egal cu matricea P*a.
>> Lp*Up-P*a
ans =
1.0e-015 *
0
0
0
0
0
-0.4441

0
0
0

Soluia sistemului de ecuaii:


[ a ] [ x ] = [ y ] [ P ][ a ] [ x ] = [ P ][ y ]

[ L ][U ][ x ] = [ P ][ y ]

se obine n dou etape (parcursul direct, respectiv invers):


( dir ) [ L ][ g ] = [ P ][ y ] g = L \ ( Py )
(inv )

[U ][ x ] = [ g ]

x =U \ g

60

(3.47)

(3.48)

Metode numerice.

>> g=Lp\(P*y)
g =
5.0000
2.1250
0.4528
>> x=Up\g
x =
0.4831
0.0562
0.2697

Ca i n cazul prededent, metoda poate fi aplicat i matricilor dreptunghiulare. Spre


exemplu, se adaug matricii a de mai sus coloana termenului liber, apoi se factorizeaz:
>> [Lp1, Up1,
Lp1 =
1.0000
0.3750
0.1250
Up1 =
8.0000
0
0
P1 =
0
0
0
1
1
0

P1] = lu (a1)
0
1.0000
0.4340

0
0
1.0000

1.0000
6.6250
0

4.0000
6.5000
1.6792

5.0000
2.1250
0.4528

1
0
0

Parcursul liber se realizeaz ca mai sus.

3.1.4.4.2

Factorizarea Cholesky.

Factorizarea Cholesky a unei matrici patrate a simetrice i pozitiv definite se realizeaz prin
funciunea Matlab:

R=chol(a)
Matricea rezultant R este factorul de deasupra diagonalei principale (inclusiv diagonala).
Datorit simetriei, este valabil relaia:
R R = a
(3.49)
(unde R este transpusa matricei R, n notaia Matlab).
Exemplu:
>> p=pascal(4)
p =
1
1
1
2
1
3
1
4
>> R=chol(p)
R =
1
1
0
1
0
0
0
0

1
3
6
10

1
4
10
20

1
2
1
0

1
3
3
1

61

3.1.5

Probleme numerice.

3.1.5.1

Pivotarea.

Dup cum se poate constata, n timpul factorizrii, prin oricare din metode, exist o
operaiune de diviziune a elementelor de pe o linie prin termenul diagonal al matricii L situat
pe linia n curs. Acest termen se numete pivot .
O problem survine n situaia n care se ajunge la un pivot nul (Lkk = 0 pentru o anumit
valoare a lui k).
Soluia consist n adoptarea unui alt pivot, n mod obligatoriu nenul. n plus, din raiuni
numerice, este avantajos s se adopte un pivot ct mai mare, n care caz erorile sunt mai mici.
Pivotul poate fi ales dintre termenii matricii care nc nu au fost tratai n cursul factorizrii,
deci printre cei situai mai jos i la dreapta fa de termenul respectiv.
Aceasta echivaleaz cu o permutare a ecuaiilor (deci a liniilor), sau o permutare a coloanelor
(deci o renumerotare a mecunoscutelor), sau a ambelor.
n practic, permutarea (liniilor sau coloanelor) este virtual . Elementele rmn la locurile
lor, dar sunt accesate n mod indirect, prin intermediul unor vectori de permutare .

n cazul pivotrii pariale , se permut numai liniile. Aceasta este echivalent cu


renumerotarea ecuaiilor.
Pivotul care trebuie s nlocuiasc un element T(m,m) nul este ales printre candidaii
situai pe aceeai coloan, pe liniile care urmeaz:
T (m, m) = 0 pivot = T (i p , m ) i p ( m + 1, N )
(3.50)
Un vector PL cu N elemente N conine indicii celor N linii ale matricii T. La nceput,
coninutul su este :
PL(i)=i, i=1,N
(3.51)
Permutarea a dou linii i1 i i2 se traduce prin :
PL(i1)=i2, PL(i2)=i1

(3.52)

Accesul la elementele matricii T se face n realitate, n acesat situaie, n mod indirect :


T (i, j ) T ( PL(i ), j )
(3.53)

Fig. 3.7

zone deja tratate


pivot nul
0

permutarea
liniilor

p
noul pivot

62

Pivotarea
parial
(permutarea
liniilor).

Metode numerice.

n cazul pivotrii totale , sunt permutate att liniile, ct i coloanele. Permutarea


coloanelor este nsoit i de permutarea (renumerotarea) necunoscutelor.
Pivotul care trebuie s nlocuiasc un element L(k,k) nul este ales printre candidaii
situai pe una din liniile i coloanele care urmeaz: :
T (m, m) = 0 pivot = T (i p , j p ) i p (m + 1, N ), j p (m + 1, N )
(3.54)
Ca urmare, sunt necesari doi vectori de permutare, unul (PL) pentru linii (deci a
ecuaiilor), iar altul (PC) pentru coloane (deci a necunoscutelor). La nceput, ei conin:
PL(i)=i ; i=1,N
(3.55)
PC(j)=j ; j=1,N
(3.56)
Permutarea a dou linii i1 i i2 i a dou coloane j1 i j2 se traduce prin :
PL(i1)=i2, PL(i2)=i1
PC(j1)=j2, PC(j2)=j1

(3.57)
(3.58)

Accesul la elementele matricii T se face n realitate, n acesat situaie, n mod indirect :


T (i, j ) T ( PL(i ), PC ( j ))
(3.59)

Fig. 3.8

zone deja tratate


pivot nul
0

Pivotarea
total
(permutarea
liniilor i a
coloanelor).

permutarea
liniilor

aici se cauta
pivotul

noul pivot

permutarea
coloanelor

n cazul factorizrii Choleski a matricilor simetrice i pozitiv definite, se poate demonstra


ca toi pivoii sunt pozitivi, deci pivotarea nu este necesar, din acest punct de vedere.

3.1.5.2

Norma unei matrici.

Norma unei matrice A, notat ||A||, este un scalar care d o msur asupra mrimii
elementelor unei matrice.
Ea poate fi definit pentru orice matrice, de orice talie (spre deosebire de determinantul unei
matrici).
Exist mai multe definiii ale normei unei matrice. Se poate demonstra echivalena acestora
(n sensul c ele induc aceeai topologie, dar nu se va insista aspura acestui aspect).

63

Spre exemplu, pentru o matrice de dimensiuni (m*n), adic cu m linii i n coloane, se pot
defini, printre altele:
- Norma Frobenius:
m

AF=

2
ij

(3.60)

i =1 j =1

- Norma uniform (maximul sumelor pe linii ale valorilor absolute):


D
n

A = max aij
i[1,m ]
j =1

(3.61)

Similar, se pot defini normele unui vector x cu n elemente:


D

x 1 = xi
i =1

x 2=

2
i

(3.62)

i =1

x = max xi
i[1,n ]

Proprieti ale normei:


( n1) A = A

(3.63)

( n2)

A 0 pt. A;

A = 0 daca A = 0

( n3)

A+ B A + B

(3.65)

( n4)

Ax A x

daca Ax exista

(3.66)

(n5)

AB A B

daca AB exista

(3.67)

(n 6)

A A1 1 daca A nu e singulara

(3.64)

(3.68)

Implementri n Matlab:
- Norma bazat pe valorile singulare ale matricii (pentru definiie, de consultat bibliografia)
n=norm(a)

- Norma Frobenius:
n=norm(a,fro)

- Norma uniform:
n=norm(a,inf)

Exemplu:
>> a=[8 -7 0; -3 4 6; 5 -3 8]
a =
8
-7
0
-3
4
6
5
-3
8
>> n=norm(a)
n =
13.1788
>> nf=norm(a,'fro')
nf =
16.4924

64

Metode numerice.

>> ninf=norm(a,'inf')
ninf =
16

3.1.5.3

Condiionarea matricilor.

n rezolvarea unor sisteme de ecuaii care provin din situaii concrete, un factor care poate
prezenta importan este acela c este posibil ca anumite valori ale coeficienilor sau
termenilor liberi s fie determinate numai cu anumite aproximaii. n aceste situaii, se pune
problema estimrii gradului de ncredere n soluiile determinate (indiferent de metoda
folosit).

Definiii:
- Un sistem este bine condiionat dac variaii mici ale coeficienilor sau ale termenilor
liberi conduc la variaii mici ale soluiei.
- Un sistem este ru condiionat dac variaii mici ale coeficienilor sau ale termenilor
liberi conduc la variaii mari ale soluiei.

Exemplu:
Fie sistemul de 2 ecuaii cu 2 necunoscute:
2 x 4
1
x 2
2 4.001 * y = 8.001 y = 1

(3.69)

respectiv, n Matlab:
>> a=[1 2 ; 2 4.001]
a =
1.0000
2.0000
2.0000
4.0010
>> y=[4; 8.001]
y =
4.0000
8.0010
>> x=a\y
x =
2.0000
1.0000

Presupunem c unul din coeficienii sistemului sufer o mic modificare:


2 x 4
1
x 6
2 3.999 * y = 8.001 y = -1

(3.70)

Se constat c soluia a suferit o variaie mare.


La fel, dac se modific unul dintre termenii liberi:
2 x 4
1
x 4
*
=

2 4.001 y 8
y = 0



n consecin, sistemul considerat este ru condiionat.

65

(3.71)

Interpretare geometric.
n cazul sistemelor de dou ecuaii, se poate prezenta o interpretare geometric elementar.
Fie sistemul :
a x + a12 y = b1
a11 a21 x b 1
* = 11
a

a21 x + a22 y = b2
12 a22 y b 2

(3.72)

Cele dou ecuaii sunt reprezentate prin dou drepte n coordonatele (x,y) :
y

Fig. 3.9

b1/a12
b2/a22

Interpretarea geometric a
rezolvrii unui sistem de dou
ecuaii cu dou necunoscute.

P(x,y)
y
x
x

b1/a11

b2/a21

Soluia se afl la intersecia P(x,y) a celor dou drepte.


n cazul n care pantele celor dou drepte sunt foarte apropiate, mici variaii ale coeficienilor
aij , deci ale pantelor, pot conduce la deplasri mari ale soluiei. De asemenea, mici variaii ale
termenilor liberi bi conduc la mici deplasri pe vertical ale dreptelor, cu efecte similare.

Numrul de condiionare al unei matrici.


Este important s se gseasc o estimare obiectiv asupra condiionrii unei matrici. n acest
scop, se definete numrul de condiionare al matricei.
Se pleac de la un sistem de ecuaii sub forma generic:
Ax = b

(3.73)

n care A este o matrice patrat cu (n*n) elemente, iar b sete vectorul termenilor liberi, cu n
elemente.
Se studiaz influena perturbaiilor suferite de ctre coeficienii sistemului (elementele
matricii A), sau de ctre termenii liberi (elementele lui b).
- Influena perturbaiilor (erorilor) coeficienilor sistemului.
Se presupune c matricea A sufere o (mic) modificare A. n consecin, soluia x va
suferi, la rndul ei, o modificare x (mic sau mare, n funciune de condiionarea matricii
A):
A ' = A + A x ' = x + x
(3.74)
iar ecuaia, n aceste condiii, devine:
A' x ' = b ( A + A)( x + x ) = b

(3.75)

Dac se dezvolt i se ine seama de ecuaia iniial, se obine:


A x = A ( x + x ) x = A1A ( x + x )

(3.76)

Din proprietile (n4, n5) ale normei, rezult:


x A1 A ( x + x )

(3.77)

66

Metode numerice.

nmulind cu valoarea (scalar) ||A||, rezult:


A x A A1 A x + x
Se obine n norm eroarea relativ a soluiei:
x
A
A A 1
x + x
A

(3.78)

(3.79)

Se definete numrul de condiionare al matricii A:


D

( A) = A A1 ;

( ( A) 1)

(3.80)

n consecin:
(c1)

x
A
( A)
x + x
A

(3.81)

Din proprietatea (n6) a normei rezult (A)1.


- Influena perturbaiilor (erorilor) termenilor liberi.
Se presupune c vectorul b sufere o (mic) modificare b. n consecin, soluia x va
suferi, la rndul ei, o modificare x (mica sau mare, n funciune de condiionarea matricii
A):
b ' = b + b x ' = x + x
(3.82)
iar ecuaia, n aceste condiii, devine:
Ax ' = b' A ( x + x ) = b + b

(3.83)

Dac se dezvolt i se ine seama de ecuaia iniial, se obine:


A x = x x = A1x

(3.84)

Din proprietatea (n4) a normei, rezult:


x A1 b

(3.85)

De asemenea, din ecuaia iniial, se obine:


Ax = b b A x

(3.86)

A1 b
x

A x
b

(3.87)

Se obine n norm eroarea relativ a soluiei:


x
b
A A 1
b
x
n consecin:
x
b
(c 2)
( A)
x
b

(3.88)

(3.89)

Prin urmare, numrul de condiionare joac rolul unui factor de amplificare a erorii (asupra
ceficienilor sistemului sau asupra termenului liber), n eroarea soluiei sistemului.
Matricile bine condiionate au numrul de condiionare mic (dar 1). Matricile ru
condiionate au numrul de condiionare mare.
67

Evident, valoarea numrului de condiionare depinde de definirea normei, dar concluzia


precedent rmne valabil.

Implementarea n Matlab:
n Matlab, numrul de condiionare al unei matrice poate fi calculat prin intermediul
funciunii cond(), care prezint variante, n funcie de norma folosit:
Exemple:
>> a=[1 2 ; 2 4.001]
a =
1.0000
2.0000
2.0000
4.0010
>> c=cond(a)
c =
2.5008e+004
% Cu norma Frobenius :
>> cfro=cond(a,'fro')
cfro =
2.5008e+004
>> cinf=cond(a,'inf')
cinf =
3.6012e+004

Prin urmare, matricea de mai sus este ru condiionat, deoarece oricare din normele
calculate este foarte mare.
Dup cum se constat, condiionarea unei matrici este o proprietate intrinsec a acesteia, care
nu depinde de algoritmii numerici folosii n mod concret.

Exemplu: matricea Hilbert:


Un exemplu clasic de matrice ru condiionat este matricea Hilbert, ale crei elemente au
valorile:
1
Hilb(i , j ) =
; i, j = 1,.. N
(3.90)
i + j 1
mplementarea n Matlab :
>> H=hilb(3)
1.0000
0.5000
0.3333
>> cond(H)
ans =
524.0568

0.5000
0.3333
0.2500

0.3333
0.2500
0.2000

Importana practic a condiionrii unei matrici.


Se poate obine o estimare a preciziei rezultatelor, cu ajutorul numrului de condiionare al
matricii.
Dac se noteaz cu cea mai mic valoare care poate fi reprezentat n sistemul de calcul
folosit, atunci precizia estimat este de ordinul de mrime (A) .
n Matlab:
=> eps ( = 2.2204e-016 )
Ca exemplu, pentru sistemul (3.67) :
68

Metode numerice.

>> a=[1 2 ; 2 4.001]


>> cond(a)
ans =
2.5008e+004
>> err=eps*cond(a)
err =
5.5529e-012

Se poate estima numrul de zecimale exacte nex la care se poate spera. Pentru aceasta, eroarea
rezultatului trebuie s satisfac relaia:
er=0.5 exp(-nex) err
Result c n cazul considerat se poate spera la 11 zecimale. Acest caz fericit se datoreaz
felului n care sunt reprezentate numerele reale n Matlab. n cazul reprezentrii cu mai puine
cifre semnificative, eroarea poate deveni sensibil mai mare, iar numrul de zecimale exacte
scontate poate fi serios diminuat.

3.2

Metode iterative pentru rezolvarea sistemelor de ecuaii


algebrice.

Metodele directe sunt bine adaptate rezolvrii sistemelor de ecuaii a cror talie nu este foarte
mare. n caz contrar, cerinele de memorie i de timp de procesare pot deveni excesive.
Metodele iterative prezint interes n special n rezolvarea problemelor de talie mare, dei
nimic nu mpiedic utilizarea lor n toate situaiile.
n plus, metodele iterative sunt practic inconturnabile n rezolvarea sistemelor de ecuaii
neliniare.
Ct timp calculatoarele nu aveau puterea actual, metodele iterative de rezolvare a sistemelor
de ecuaii algebrice erau cele mai utilizate.
3.2.1

Principiul metodelor iterative pentru rezolvarea sistemelor de ecuaii algebrice.

Se consider sistemul de ecuaii algebrice:


Ax = b

(3.91)

n care matricea coeficienilor (A) este de talie (n*n) , iar termenul liber (b) i necunoscutele
(x) sunt vectori cu n elemente.
Se reprezint matricea A a coeficienilor sub forma:
A= BC

(3.92)

n care B i C sunt, de asemenea, matrici cu (n*n) elemente.


Sistemul devine:
(B C) x = b

x = B 1 (Cx + b)

(3.93)

Soluia iterativ este reprezentat de relaia :


x(k ) = {
B 1C x ( k 1) + {
B 1b
M

(k )

=M x

(3.94)

u
( k 1)

+u
69

n care indicele superior (k) reprezint numrul iteraiei.


Matricea M se numete matrice de iterare .
Ca pentru orice metod iterativ, convergena iteraiilor este o problem esenial.
Se demonstreaz c o condiie suficient pentru convergen este ca valorile proprii ale
matricii de iterare s fie toate de modul mai mic dect 1. Se definete raza de convergen a
matricii M (M) ca fiind modulul celei mai mari valori proprii a matricii M.
Condiia de convergen este:
(M ) < 1

(3.95)

Se mai poate demonstra c exist urmtoarea relaie ntre raza de convergen i norma
matricii :
(M ) M
(3.96)
n consecin, iteraiile sunt convergente dac norma matricii de iterare este subunitar.
n funciune de modul n care este descompus matricea A, se disting mai multe metode
iterative, dintre care vor fi prezentate n continuare cele mai uzuale.
3.2.2

Metoda Jacobi (a deplasrilor simultane)

Metoda Jacobi se bazeaz pe descompunerea matricii coeficienilor sub forma:


B=D
C = ( L + U )

(3.97)

unde D reprezint matricea diagonal a coeficienilor matricii A, iar L i U sunt rezultatele


factorizrii matricei, cu excepia termenilor diagonali:

U
D

A=

Fig. 3.10 Reprezentarea matricii


coeficienilor n metoda iterativ
Jacobi.

Prin urmare, metoda de iterare devine:


x ( k ) = D 1 b ( L + U ) x ( k 1)

(3.98)

M = D 1 ( L + U )

Inversa matricii D este banal elementele sale sunt inversele elementelor de pe diagonal:
0 ji

Dij = 1
(3.99)
j=i
a
ii
n mod concret, pentru o linie (i) din sistem:
ai1 x1 + ... + aii xi + ... + ain xn = bi ; i = 1,.., N
relaia de iterare este:
70

(3.100)

Metode numerice.

xi( k ) = bi aij x (jk 1) / aii ; i = 1,.., N ; k = 1,...


j i

(3.101)

La fiecare iteraie sunt necesare valorile tuturor rezultatelor x(k-1) din iteraia precdent. Acest
aspect reprezint un inconvenient al metodei.

Implementare n Matlab:
function x=jacobi(a,b, xini,
% Metoda iterativa Jacobi
% Sistemul a x = b
% Date de intrare: a(n,n) =
%
b(n)
=
%
xini(n)=
%
erm
=
%
itm
=

erm, itm)
matricea coef.
termenul liber
estimarea initiala
eroarea max.
nr. max. de iteratii

[nlin,ncol]=size(a);
if (nlin ~= ncol)
echo('Matrice dreptunghiulara-STOP')
return ;
else n=nlin;
end;
if (nargin >3)
ermax=erm;
itmax=itm;
else
ermax=1.e-6;
itmax=100;
end
iter=0;
err=1.e6;
x =xini;
xn=x;
% Iteratii
while ((err > ermax) && (iter < itmax)) % (comentariu 1)
err=0;
% Calculul noilor valori xn(*)
for i=1:n
sij=b(i);
for j=1:n
if (i~=j) sij = sij - a(i,j) * x(j); end;
end;
xn(i) = sij / a(i,i);
sij = abs (x(i)-xn(i));
if (sij > err) err = sij; end; % (Comentariu 3)
end;
for i=1:n, x(i) = xn(i); end ; % (Comentariu 2)
disp (sprintf('iter, err: %3d %15.12e', iter, err));
iter=iter+1;
end % Iteratii

Comentarii

71

1. Matlab nu conine instruciui de tipul buclelor cu control la ieire ( de tipul do


while sau repeat until), care ar fi mai avantajoase n contextul de
fa.
2. La sfritul unei iteraii, noile valori devin cele curente, cu care se continu
procedura. n consecin, trebuie pstrate n memorie cele dou iruri de valori:
cele curente (x) i cele noi (xn). Din acest motiv, metoda se mai numete i a
deplasrilor simultane.
3. Sunt posibile diverse formulri ale criteriului de estimare a erorii, corelate cu
diversele norme ale matricilor.

Exemplu:
>> a=[2 0 1; 1 1 1; 0 1 3]
2
0
1
1
1
1
0
1
3
>> b=[1;2;3]
1
2
3
>> xini=b
>> x=jacobi(a,b, xini)
iter, err:
0 4.000000000000e+000
iter, err:
1 4.666666666667e+000
iter, err:
2 2.666666666667e+000
. . . . . . . . . . . . . . . .
iter, err: 52 1.282218575094e-006
iter, err: 53 9.567004521926e-007
x =
0.2000
1.2000
0.6000

3.2.3

Metoda Gauss-Seidel (a deplasrilor succesive)

Ideea de baz a metodei Gauss-Seidel consist n aceea c noile valori xi le nlocuiesc pe cele
precedente de ndat ce sunt calculate. Ca urmare, se dovedete c se accelereaz sensibil
convergena.
n mod formal, matricea coeficienilor se descompune n modul urmtor:
B= D+L

C = U

(3.102)

M = ( D + L) 1U
Relaia de iterare este:
i 1

xi( k ) = bi aij x (jk )


j =1

a x
ij

j =i +1

( k 1)
j

/ aii ; i = 1,.., N ; k = 1,...

(3.103)

n mod concret, lucrurile sunt mai simple. n memorie se poate pstra doar o singur ediie a
termenilor x, n care noile valori le nlocuiesc succesiv pe cele vechi.

72

Metode numerice.

Fig. 3.11 Desfurarea operaiilor


n metoda iterativ Gauss
- Seidel.

iteratii
[x]=
noile valori x

(k)

vechile valori x

(k-1)

Ca urmare, suma nu mai trebuie s fie tiat n dou sume pariale, n funciune de noile i
vechile valori ale necunoscutelor. Termenii xi care particip sunt, dup caz, valorile noi
(pentru j<i, respectiv cele anterioare (pentru i>j).
function x=GaussSeidel(a,b, xini, erm, itm)
% Metoda iterativa Gauss-Seidel
% Sistemul a x = b
% Date de intrare: a(n,n) = matricea coef.
%
b(n)
= termenul liber
%
xini(n)= estimarea initiala
%
erm
= eroarea max.
%
itm
= nr. max. de iteratii
[nlin,ncol]=size(a);
if (nlin ~= ncol)
echo('Matrice dreptunghiulara-STOP');
return;
else n=nlin;
end;
if (nargin >3)
ermax=erm;
itmax=itm;
else
ermax=1.e-6;
itmax=100;
end
iter=0;
err=1.e6;
x =xini;
xn=x;
% Iteratii
while ((err > ermax) && (iter < itmax))
err=0;
% Calculul noilor valori xn(*)
for i=1:n
sij=b(i);
for j=1:n
if (i~=j) sij = sij - a(i,j) * x(j); end;
end;
xin = sij / a(i,i);
sij = abs (x(i)-xin);
x(i)= xin;
if (sij > err) err = sij; end;
end;
disp(sprintf('iter, err: %3d %15.12e', iter, err))
iter=iter+1;
end % Iteratii
73

Exemplu:
>> a=[2 0 1; 1 1 1; 0 1 3]
2
0
1
1
1
1
0
1
3
>> b=[1;2;3]
1
2
3
>> xini=b
>> x=GaussSeidel(a,b, xini)
iter, err:
0 2.000000000000e+000
iter, err:
1 1.000000000000e+000
iter, err:
2 1.666666666667e-001
iter, err:
3 2.777777777778e-002
iter, err:
4 4.629629629630e-003
iter, err:
5 7.716049382716e-004
iter, err:
6 1.286008230453e-004
iter, err:
7 2.143347050754e-005
iter, err:
8 3.572245084571e-006
iter, err:
9 5.953741810671e-007
x =
0.2000
1.2000
0.6000

Se poate constata, prin comparare direct, n aceleai condiii, convergena mai rapid a
metodei Gauss-Seidel.
n ambele metode de mai sus, o condiie suficient de convergen este ca matricea
coeficienilor s fie diagonal-dominant, adic:
aii > aij ; i
(3.104)
j i

Aceeai condiie este valabil n catzuil matricilor simetrice i pozitiv-definite.


3.2.3.1

Metoda suprarelaxaiilor succesive (SOR).

Metoda relaxaiilor se bazeaz pe ideea de a folosi n calcule valori extrapolate n funciune de


cele estimate direct prin algoritmul folosit, i cele de la iteraia anterioar:
(k )
x ( k ) = x% i + (1 ) x ( k 1) ; i = 1,.., N ; k = 1,...
(3.105)
i

(k )
n care x% i este valoarea estimat a elementului xi, xi( k 1) este valoarea din iteraia precedent,

iar xi( k ) este valoarea cu care se vor continua efectiv calculele.

Coeficientul de relaxare poate cpta urmtoarele clase de valori:

> 1 : suprarelaxare
Suprarelaxarea are ca scop accelerarea convergenei iteraiilor, printr-o abordare
curajoas, optimist, n care se ncearc extrapolarea noilor valori dincolo
de cele obinute prin algoritmul de baz.

= 1 : metoda Gauss-Seidel

< 1 : subrelaxare

74

Metode numerice.

Subrelaxarea are ca scop asigurarea convergenei iteraiilor, n situaiile n care


aceasta nu e garantat, printr-o abordare prudent, n care se ncearc
extrapolarea noilor valori, privilegind pe la cele din iteraia precedent.
n mod formal, procedura de iterare este urmtoarea:
x ( k ) = ( D L) 1 [U + (1 ) D ] x ( k 1) + ( D L) 1 b

(3.106)

Convergena metodei suprarelaxaiilor succesive (SOR : Successive Over Relaxation).


Pentru matricile simetrice i pozitiv definite, metoda SOR converge pentru:
(1, 2)

(3.107)

Dac raza de convergen a metodei Jacobi (M) este cunoscut, se propune o valoare
optimal a coeficientului de suprarelaxare :
2

(3.108)
1 + 1 (M )

De studiat :

S se prezinte exemple de aplicare a metodelor iterative Jacobi i Gauss-Seidel. S se


compare eficiena celor dou metode (numrul de iteraii necesare pentru a se atinge o
anumit eroare).

S se completeze codul pentru metoda Gauss-Seidel pentru metoda relaxaiei, n


particular a suprarelaxaiilor succesive (SOR). S se compare eficiena acestui
mecanism n comparaie cu metoda direct (fr relaxare).

3.2.4

Metoda Picard-Banach.

n principiu, un sistem de ecuaii algebrice poate fi adus la forma normal urmtoare :


(3.109)
[ f ]=0
unde :

f1
...

[ f ] = fi ;

...
f N

fi = f i ([ x ]) ; i = 1,..., N ;

este vectorul de N funciuni (liniare sau nu), de N variabile :


x1
...

[ x ] = xi

...
x N
O variant de prezentare a problemei consist n rezolvarea sistemului :
[ x ] = F ([ x ] )

75

(3.110)

(3.111)

(3.112)

Metoda iterativ de rezolvare este urmtoarea :


x ( k +1) = F x ( k ) , pentru k=1,

(3.113)

unde x(k) este vectorul necunoscutelor n iteraia de ordin k. Dac F posed anumite
proprieti (asupra crora nu vom insista), iteraiile converg. Aceast metod se
numete metod de punct fix sau Picard-Banach.
Aceast abordare poate fi adus la forma standard prin transformarea :
[ f ] = [ x ] - F ([ x ]) = 0

(3.114)

Algoritmul iterativ cel mai utilizat este cel al lui Newton Raphson.
Plecnd dintr-un punct [x(k)], ecuaiile pot fi dezvoltate n serie :
f
f i ([ x ]) = f i x ( k ) + i ( x j x (jk ) ) + ...; i = 1,..., N ;
j x j

(3.115)

Pstrnd numai primii termeni din dezvoltrile n serie i presupunnd c [x] este soluia
(deci [f([x])=0 ), se obine :
f
(3.116)
j xi ( x j x(jk ) ) = fi x ( k ) ; i = 1,..., N ;
j

Tabloul [J] ale crui elemente sunt:


f
J ij = i ; i, j = 1,.., N ;
j x j

(3.117)

este Jacobianul sistemului, care devine astfel :


J ij ( x j x(jk ) ) = fi x ( k ) ; i = 1,..., N [ J ] [ x ] x( k ) = f x( k ) ;

(3.118)

Soluia formal este :

[ x ] = x ( k ) [ J ]

f x(k ) ;

(3.119)

Ea corespunde algoritmului urmtor :


[x]<= initializare
Repet :
[xnou]=[x]-[J]-1 [f([x])]
Err = ||xnou - x||
[x] = [xnou]
CtTimp Err>=Eroarea admisibila

Detalii asupra condiiilor de convergen pot fi gsite n lucrri de specialitate.


Principalul inconvenient al metodei consist n necesitatea calculrii inversului jacobianului
sistemului.
Aceasta e cu att mai penalizant n cazul sistemelor neliniare, al cror jacobian se modific, n
principiu, la fiecare iteraie.
Cu toate acestea, este acceptabil ca inversul jacobianului s fie nlocuit printr-o aproximare
convenabil , care s asigure convergena algoritmului. Aceasta a generat o multitudine de
metode de optimizare .

76

Metode numerice.

3.2.5

Metoda gradientului conjugat.

Not: Prezentarea care urmeaz este reprodus dup [15].


Metoda gradientului conjugat este destinat, n principal, rezolvrii sistemelor de ecuaii
algebrice de tipul :
[ A][ x ] = [b] ;
n care [A] este o matrice patrat de talie NxN, simetric i pozitiv definit, iar vectorul
necunoscutelor [x] i termenul liber [b] au N elemente.
n cele ce urmeaz, pentru simplitate, se vor folosi urmtoarele convenii de notare:
- matricile se desemneaz prin litere mari aldine (ex: A ):
- vectorii se desemneaz cu litere mici aldine (ex: x ).
- scalarii se desemneaz cu litere mici (ex: ).

Ca urmare, sistemul de ecuaii de rezolvat este:


Ax=b

(3.120)

Matricea A este simetric:


A = AT ;

(3.121)

i pozitiv-definit, adic:
xT A x > 0 ;

(3.122)

pentru orice vector x0 (adic cu toi termenii nenuli).


Mai adugm relaiile cunoscute:
( AB )T = B T AT ;
( AB ) 1 = B 1 A1 ;

(3.123)
(3.124)

Doi vectori nenuli u i v se numesc conjugai fa de A dac:


uT Av = 0 ;

(3.125)

Deoarece A este simetric i pozitiv definit, se poate defini un produs intern (scalar):
D

u,v

= AT u, v = Au, v = u, Av = uT A v ;
A

(3.126)

Prin urmare, doi vectori sunt conjugai dac sunt ortogonali fa de produsul lor intern. Relaia
de simetrie e simetric.
Se noteaz cu x* soluia exact a sistemului.
Fie {pk} o secven de n direcii mutual conjugate.
ik
0
;
pi , pk A = piT A pk =
2
pk A i = k

(3.127)

Ele formeaz o baz n Rn, astfel nct un vector, printre care i soluia exact x*, poate fi
dezvoltat n funciune de vectorii bazei:
N

x* = i pi ;

(3.128)

i=1

Din ecuaie, rezult:


N

i =1

i =1

b = A x* = A i pi = i A pi

(3.129)

De asemenea, folosind proprietatea de ortogonalitate dintre dou direcii conjugate distincte,


rezult:
77

pkT b = pkT A x* = i pkT A pi = k pkT A pk

(3.130)

i =1

Prin urmare, cooeficienii dezvoltrii sunt de forma:


pk , b
p ,b
pT b
k = T k
=
= k 2
pk A pk
pk , pk A
pk

(3.131)

Pe scurt, ideea metodei de rezolvare a ecuaiei (3.118) consist n gsirea unei secvene de
direcii conjugate, urmat de calculul coeficienilor k.
Practic, nu e necesar s se determine direct toi vectorii conjugai. Ei pot fi determinai
succesiv, printr-o procedur iterativ. Aceasta permite rezolvarea unor sisteme de talii mari,
inabordabile prin metode directe.
Pentru acesata, e necesar un criteriu (o metric) care s permit aprecierea apropierii de
soluia problemei.
n acest scop, se poate utiliza urmtoarea funcional (form patratic):
1
f ( x ) = x T A x bT x ; x R n
2

(3.132)

Aceast funcional este minimizat de ctre soluia x* a ecuaiei (3.118).


Pentru demonstraie, se calculeaz derivata acestei forme patratice:

x f ( x )
1

'
f ( x) =
...

f ( x)
xN

(3.133)

Prin calcule elementare i innd seama de proprietile prezentate mai sus, se obine:
1
1
(3.134)
f ' ( x ) = AT x + A x b = Ax - b
2
2
Se constat c:
f ' ( x) = 0

A x -b = 0

x = x*

(3.135)

deci soluia ecuaiei minimizeaz funcionala. Ca urmare, soluia ecuaiei poate fi obinut
prin minimizarea funcionalei.Aceasta se realizeaz prontr-o procedur iterativ.
Se pornete de la o estimare iniial x0. Se poate adopta ca prim vector p0 gradientul cu semn
schimbat al funcionalei n x=x0, adic:
(3.136)
p0 = f '( x0 ) = b Ax0
Reziduul la pasul de ordin k este:
rk = f '( xk ) = b Axk ; k = 1, 2,.., N

(3.137)

Direcia conjugat pk+1 urmtoare se alege din relaia;


pT Ar
pk +1 = rk iT k pi
i k pi Api

(3.138)

Numrul maxim de iteraii este N. Iteraiile pot fi stopate dac eroarea (norma reziduului)
scade sub o anumit limit prescris.
Rezult urmtorul algoritm:
78

Metode numerice.

r0 = b Ax0
p0 = r0
k =0
Repeta:

rkT rk
pkT Apk
xk +1 = xk + k pk
rk +1 = rk k Apk

k =

daca rk +1 err atunci exit

rkT+1rk +1
rkT rk
pk +1 = rk +1 + k pk
k=k+1
end // repeta
Rezultatul este xk+1.

k =

O implementare Matlab este urmtoarea:


function [x]=CG(A,b,x0)
% Metoda gradientului conjugat pt sistemul Ax=b
r=b-A*x0;
w=-r;
z=A*w;
a=(r'*w)/(w'*z);
x=x0+a*w;
B=0;
for i=1:size(A,1);
r=r-a*z;
if (norm(r) <1e-10)
break;
end
B=(r'*z)/(w'*z);
w=-r+B*w;
z=A*w;
a=(r'*w)/(w'*z);
x=x+a*w;
end
end

n unele situaii, este necesar o precondiionare n scopul asigurrii unei convergene mai
rapide. Aceasta este metoda gradientului precondiionat. Prezentarea sa depete cadrul de
fa.

3.3

Tehnici adaptate matricilor rare (sparse matrices).

O matrice rar (sparse matrix) conine puini termeni nenuli. Ea poate fi caracterizat
printr-un factor de umplere , definit ca raportul ntre numrul de termeni nenuli i numrul
total de termeni (deci N, pentru o matrice patrat cu N linii i coloane). Adesea, n special
pentru matricile de talie mare, acest factor poate fi de cteva procente. Astfel de matrici apar

79

n mod curent n numeroase probleme de modelare a unor sisteme fizice complexe (circuite
electrice de talie mare, determinarea cmpurilor prin metode numerice, etc.).
Este clar c :

Tehnicile curente de stocare a matricilor (tablourilor) sunt puin adaptate, fiindc se face
mare risip de memorie.

Metodele curente de factorizare i de rezolvare a sistemelor de ecuaii sunt puin adaptate,


fiindc implic un mare numr de calcule inutilee.

Ca exemplu, se poate aprecia c n cazul simulrii numerice a reelelor electrice de talie mare,
utilizarea tehnicilor adaptate matricilor rare este practic inconturnabil.

Fig. 3.12

Structuri tipice de matrici rare (dup [10]): a) band diagonal, b) bloc


triunghiular, c) bloc tridiagonal, d) bloc diagonal bordat simplu, e)
bloc diagonal bordat dublu, f) bloc triunghiular bordat simplu, g)
band triunghiular bordat, h,i) band diagonal bordat simplu sau
dublu, j,k) altele.
80

Metode numerice.

Numrul de operaii i timpul de calcul pot fi reduse n mod drastic. n practic, pentru
sisteme de talie mare, utilizarea tehnicilor de matrici rare poate conduce la un numr de
operaii aproape proporional cu N (~O(N)) n loc de N3.
Bine neles, preul de pltit consist n realizarea mai complex, dar exist deja mijloace
informatice adecuate.
3.3.1

Problema umplerilor.

O problem care apare este cea a umplerilor . ntr-adevr, n timpul factorizrii, pot aprea
elemente noi n locul unor valori nule. Tehnicile de stocare utilizate trebuie s permit
inserarea simpl a unor termeni noi.
Prin urmare, factorul de umplere al matricei n curs de factorizare crete. Au fost dezvoltate
tehnici speciale, cu scopul reducerii numrului de umpleri.
n linii mari, umplerile se propag n jos i la dreapta n matrice, pe msur ce
factorizarea avanseaz. Din acest punct de vedere, matricile band au o structur
favorabil, deoarece umplerile pot aprea numai n limitele benzii iniiale.
Din potriv, matricea invers este, n general, plin, fapt care elimin de la nceput
algoritmii bazai pe determinarea inversei unei matrici rare.
Se poate vizualiza structura unei matrice folosind funciunea Matlab: spy(), dup cum se
va vedea n exemplele care urmeaz.

Exemple n Matlab.
Matlab prezint o gam larg de operaiuni asupra matricilor rare, ca i o galerie de
exemple de matrice cu diverse proprieti ( v. help gallery).

Exemplul 1:
>>
%
%
%
%

w=gallery('wathen',5,5)
w=gallery(wathen,nx,ny) returneaza
o matrice cu
n = 3*nx*ny+2*nx+2*ny+1 linii si coloane
In cazul curent : m=96 linii si coloane
(1,1)
8.5909
(2,1)
-8.5909
(3,1)
2.8636
(12,1)
-8.5909
(13,1)
-11.4545. . . . . . . . . . .
(94,96)
4.0217
(95,96)
-12.0651
(96,96)
12.0651
% Se poate avea o prima imagine asupra
% modului in care sunt stocate in Matlab
% matricile rare.
% Numarul de elemente nenule din w :
>> nnz(w)
1256
% Factorul de umplere al matricii :
>> kfw=nnz(w)/prod(size(w))
0.1363
% Structura matricii :
>> spy(w)

81

spy(w)
0
10
20
30
40
50
60
70
80
90
0

20

40
60
nz = 1256

80

% Matricea inversa :
>> winv=inv(w);
>> nnz(winv)
9216
>> kf=nnz(winv)/prod(size(winv))
kfwinv =
1 % => Matrice plina
>> spy(winv)
% Factorizarea :
>> wlu=lu(w)
>> nnz(wlu)
2840
>> kfwlu=nnz(wlu)/prod(size(wlu))
0.3082
>> spy(wlu)

spy(winv)
0
10
20
30
40
50
60
70
80
90
0

20

40
60
nz = 9216

80

spy(wlu)
0
10
20
30
40
50
60
70
80
90
0

20

40
60
nz = 2840

80

Este util de comparat impactul celor trei operaiuni asupra numrului de elemente al matricii
rezultante:

Inversiunea unei matrici (chiar i rar) conduce, n general, la o matrice plin. Dup cum
s-a spus mai sus, aceasta elimin metoda inversiunii dintre metodele acceptabile n cazul
matricilor raee.

Factorizarea unei matrici rare sporete numrul de elemente nenule, adic genereaz
umpleri (de comparat factorii de umplere din primul i ultimul caz). Gradul de umplere
poate depinde de o serie de factori, printe care unul asupra cruia se poate aciona consist
n renumerotarea adecuat a liniilor (adic a ecuaiilor) i/sau a coloanelor (adic a
necunoscutelor). Asupra acestui aspect se va reveni ulterior.

3.3.2

Metode de stocare a matricilor rare.

Metoda de stocare normal, sub forma unui tablou, este prea costisitoare, din dou puncte de
vedere:

Se stocheaz un numr (foarte) mare de elemente nule;

Se efectueaz un (mare) numr de operaii inutile ( cum ar fi cele care implic


elementele nule din matrice).

Ca urmare, s-au dezvoltat alte metode, capabile s rezolve favorabil situuaiile de mai sus.
n ceea ce privete tehnicile de stocare a matricilor rare, condiiile principale care trebuie s
fie satisfcute sunt urmtoarele:

Accesul facil i performant la elementele unei matrici rare, n momentul efecturii de


operaiuni asupra acestora (spre exemplu, rezolvarea sistemelor, factorizarea, etc.).

Simplitatea gestionrii umplerilor, adic a apariiei unor elemente noi, n cursul unor
operaiuni (ca mai sus).

Nu ntotdeauna cele dou cerine au soluii similare.


Toate metodele de stocare a matricilor rare se bazeaz pe ideea stocrii termenilor nenuli din
matrice, mpreun cu vectori auxiliari carte indic amplasarea acestor termeni.

Exemplu:
Fie matricea:
82

Metode numerice.

A=

20

32

26

14

Schema de stocare este urmtoarea:


Vectorul elementelor nenule:
Indicii liniilor:
Indicii de debut al coloanelor:

V=
Ilin=
Jcol=
col:

20
1
1

14
3
3

26
2
5

6
3
6

32
1

Elementele nenule din matrice sunt, n exemplul de mai sus, transportate n vectorul
V, sortate n primul rnd pe coloane, apoi pe linii.
Tabloul Ilin conine indicii liniilor pe care se afl fiecare din elementele din matricea
original.
Tabloul Jcol conine indicii din tabloul V din care debuteaz coloanele din matricea A.
Spre exemplu, Jcol(1)=1 arat c prima coloan ncepe cu elementul de pe poziia 1
din V, Jcol(2)=3 arat c elementele de pe a doua coloan se gsesc ncepnd cu
elementul numrul 3 din V, .a.m.d. Ultimul element (n cazul de fa Jcol(4)=6)
indic un termen inexistent, situat dincolo de limita vectorului V.
Trebuie remarcat faptul c inserarea unui element nou (umplere) implic deplasarea
elementelor urmtoare din tabloul valorilor i modificarea n consecin a indicilor Ilin
i Jcol. Asupra acestui aspect se va reveni n seciunea consacrat implementrii n
Matlab.

Stocarea matricilor rare n Matlab.


n Matlab, se folosete o schem ntructva diferit. Spre exemplu:
a =
2
0
32
0
26
0
14
6
0
% Transformarea in matrice rara :
>> s=sparse(a)
s =
(1,1)
2
(3,1)
14
(2,2)
26
(3,2)
6
(1,3)
32

Rezult c elementele nenule sunt stocate indexate cu doi indici, din care primul indic linia
iar al doilea coloana pe care se afl un element, ordonate, ca i mai sus, nti dupa coloane,
apoi dup linii:
s(i , j ) = ai , j pentru ai , j 0
(3.139)
De exemplu:
>> s(3,1)
14

O implementare n limbajul C.
Limbajul C, prin mecanismul pointerilor, permite construirea de scheme de stocare i de
algoritmi performani pentru tratarea matricilor rare.
83

O posibilitate consist n reprezentarea elementelor nenule sub forma unui tablou de pointeri
spre un ir de liste nlnuite care conin elementele semnificative de pe linii.
pointer spre matrice

Fig. 3.13 Exemplu de


stocare a
matricilor
rare n
limbajul C.

elemptr

2
liniile matricii

v
i

next

col

elem

col

next

col

null

next
elem

elem

typedef struct elem *


struct elem {
/*
int col;
/*
double v;
/*
elemptr next; /*
};
elemptr * a;
/*

elemptr;
element al listei
- coloana
- valoarea
- elementul urmator

*/
*/
*/
*/

tabloul a

*/

O astfel de schem, n care ordonarea principal se face pe linii, este bine adaptat factorizrii
prin metoda Doolittle, n care matricea coeficienilor este parcurs n acest mod [16].
De asemenea, nserarea unui element nou (umplere) se poate face cu uurint, prin
intercalarea acestuia n lista nlnuit corespunztoare liniei, dup elementul precedent n
ordinea coloanelor i modificarea corespunztoare a pointerilor next spre elementul urmtor,
tehnic informatic uzual. Listele se ncheie cu pointeri spre elementul nul.
3.3.3

Funciuni referitoare la matricile rare implementate n Matlab.

Matlab ofer o gam larg de funciuni specializate n operaii asupra matricilor rare.
De asemenea, numeroase funciuni generice se comport n mod adecuat atunci cnd sunt
aplicate asupra unor matrici rare.

Crearea matricilor rare.


O matrice rar poate fi generat prin convertirea unei matrici normale:
>> a=[2 0 32; 0 26 0; 14 6 0]
2
0
32
0
26
0
14
6
0
>> s=sparse(a)
s =
(1,1)
2
(3,1)
14
(2,2)
26
(3,2)
6

84

Metode numerice.

(1,3)

32

Se poate urmri din acest exemplu i modul de stocare a matricii rare s, sub forma unui
vector, n ordinea sortrii pe coloane, apoi pe linii.
Operaiunea invers este posibil:
af=full(s)

Matricile rare pot fi produse i direct.


S = sparse(i,j,s,m,n)

i, j :
s:
m, n:

vectori care conin indicii liniilor, respectiv coloanelor.


vectorul valorilor elementelor .
numrul de linii, respecziv voloane

Exemplu:
>> S = sparse([3 2 3 4 1],[1 2 2 3 4],[1 2 3 4 5],4,4)
S =
(3,1)
1
(2,2)
2
(3,2)
3
(4,3)
4
(1,4)
5

Operaii diverse.

Numrul de elemente nenule dintr-o matrice:

nnz(s)

Verificarea dac o matrice este rar:

issparse(s)

Extragerea elementelor nenule:

v = nonzeros(s)

Vizualizarea structurii matricei:

spy(s)

Listarea elementelor nenule:

[i, j, v]= find(s)

Ameliorarea performanelor calculelor.


Faptul ca n Matlab elementele sunt stocate pe coloane, are implicaii asupra performanelor
calculelor. Accesul pe coloane este mai performant.
Exemplu:
S = sparse(10000,10000,1);
disp('Accesul pe linii:');
tic;
for n = 1:1000
A = S(100,:) + S(200,:);
end;
toc
disp('Accesul pe coloane:');
tic;
for n = 1:1000
B = S(:,100) + S(:,200);
end;
85

toc
disp('Accesul pe linii, in matricea transpusa:');
tic;
for n = 1:1000
A = S(100,:)' + S(200,:)';
A = A';
end;
toc
Rezultate :
Accesul pe linii:
Elapsed time is 0.717797 seconds.
Accesul pe coloane:
Elapsed time is 0.052434 seconds.
Accesul pe linii, in matricea transpusa:
Elapsed time is 0.657760 seconds.

O alt posibilitate de ameliorare a performanelor consist n reordonarea liniilor sau a


coloanelor, n principal cu scopul aducerii matricei la o structur avantajoas.
n principiu, pentru matricile band, care apar n problemele de modelare numeric a
cmpurilor, ideea de baz este cea de reducere a limii benzii.

86

Metode numerice.

4 Metode de interpolare.
Funciunile cu care se opereaz n aplicaiile numerice pot fi definite n dou moduri:

prin cod, ntr-un limbaj de programare care traduce algoritmul de calcul al funciunii pe
domeniul de definiie;

prin tabele de valori ale funciunii ntr-o mulime discret de puncte care formeaz o
reea, numite noduri.

Problema interpolrii consist n determinarea unor funciuni care s permit evaluarea unei
funciuni definit prin tabele de valori n orice punct din domeniul de definiie, nu numai n
nodurile reelei.
Spre deosebire de interpolare, aproximarea funciilor (fitting, n englez) consist n
stabilirea unor expresii analitice care s aproximeze suficient de bine comportarea unei
funciuni definit prin valori, fr a impune ca funciunea de aproximare s treac prin
punctele n care este definit funciunea dat. Astfel de probleme sunt ntlnite n practic n
stabilirea unor formule empirice de aproximare a unor funciuni definite numai pe cale
experimental. Soluia unor astfel de probleme nu este unic, ea depinde de clasa funciilor n
care se caut o soluie, ca i de criteriile de estimare a erorii.
n cele ce urmeaz, vor fi tratate numai problemele de interpolare.
Fig. 4.1
interpolare
aproximare

Deosebirea dintre
interpolarea i aproximarea
funciilor.

n cele ce urmeaz vor fi studiate numai funciunile reale de o singur variabil real
(cazul unidimensional).

4.1 Formularea problemei.


Se consider o funciune real y=f(x) de o variabil real x definit printr-un tabel de valori
(presupuse distincte):

x
y

x0
y0

x1
y1

x2
y2

....
....

xn
yn

Se cere s se estimeze f(x) i pentru alte valori ale variabilei x dect cele din tabloul de valori.

87

Aceasta se poate realiza prin determinarea unei funciuni g(x) care s satisfac condiiile de
interpolare, adic s treac prin punctele date:
(4.1)
g ( xi ) = yi ; i = 0,.., n
Soluia problemei nu este unic.
Din acest motiv, funciunii de interpolare g(x) i se impun condiii suplimentare. Este de bnuit
c, de aici, decurg numeroase abordri, n funciune de condiii concrete.
n principiu, funciunea de interoplare poate fi reprezentat sub forma:
n

g ( x ) = ck k ( x)

(4.2)

k =0

unde k(x) sunt n+1 funcii liniar independente, care definesc o baz.
Se disting dou clase principale de metode de interpolare:
1.

Interpolarea global, prin care determin o singur funciune de interpolare pe ntregul


domeniu de definiie a funciunii;

2.

Interpolarea pe poriuni, prin funciuni definite pe fiecare dintre intervalele definite de


ctre noduri. Aceste funciuni sunt racordate nct s respecte anumite condiii de
continuitate. n afara continuitii valorilor, care este implicit, pot fi impuse condiii
suplimentare, cum ar fi continuitatea derivatelor de ordinul 1 (racordarea s nu creeze
coluri), etc.

Nu trebuie ns uitat un aspect esenial pentru ingineri: funciunile definite prin valori
experimentale pot fi grevate de erori, nct precizia valorilor date nu poate depi anumite
limite practice. De aceea, nu trebuie exagerat n prezentarea rezultatelor care s sugereze o
precizie mai mare dect cea posibil cu datele de care se dispune (spre exemplu, prezentarea
rezultatelor cu multe cifre semnificative, dei n practic trei cifre semnificative sunt
rezonabile i oneste).

4.1.1

Interpolarea global.

n interpolarea global, toate funciunile bazei k(x) sunt definite explicit, printr-o singur
expresie, pe ntregul domeniu de definiie al funciunii.
n funcie de alegerea bazei, decurg diversele metode de interpolare. n majoritatea cazurilor,
aceste funciuni sunt de tip polinomial.

4.1.1.1

Interpolarea polinomial direct.

Funciunile k(x) se aleg de forma:


k ( x) = x k ; k = 0,.., n

(4.3)

Prin urmare, funciunea de interpolare este un polinom de gradul n:


n

g ( x ) = ck x k

(4.4)

k =0

88

Metode numerice.

Problema se reduce la determinarea coeficienilor ck, impunnd condiia de interpolare (4.1).


Se obine astfel un sistem de n+1 ecuaii cu cele n+1 necunoscute:
n

g ( xi ) = ck xik = yi ; i = 0,..., n

(4.5)

k =0

Sub form matricial, sistemul se scrie astfel:


Ac=y

(4.6)

n care:
1 x0

1 x1
A = .. ..

1
1 xn

x02 .. x0n
c1
y1

y
2
n
c
x1
x1
2
2

..
.. ; c = .. ; y = ..



..
..
..
2
n
cn
yn
xn
xn

(4.7)

Matricea A, numit matrice Vandermonde, este nesingular dac valorile xi sunt distincte.
Metoda este puin interesant, deoarece implic un efort de calcul care poate fi semnificativ
(rezolvarea unui sistem de ordinul n), iar matricea A este, n general, slab condiionat, ceeace
se poate traduce prin erori mari.

4.1.1.2

Interpolarea Newton.

Funciunile k(x) se aleg de forma:


0 ( x ) = 1

.......
( x ) = ( x x )( x x ).....( x x ); k = 1,..., n
0
1
k 1
k
Impunnd condiia de interpolare, rezult sistemul de ecuaii:
g ( x0 ) = y0 = c0
g( x ) = y = c + c ( x x )
1
0
1
1
0
1
g ( x2 ) = y 2 = c0 + c1 ( x2 x0 ) + c2 ( x2 x0 )( x2 x1 )
.....

g ( xn ) = yn = c0 + c1 ( xn x0 ) + c2 ( xn x0 )( xn x1 )

(4.8)

(4.9)

Acesta este un sistem de tip triunghiular-inferior, a crui soluie se determin cu uurin:


c0 = y0
c = ( y c ) /( x x ) = ( y y ) /( x x )
1
1
0
1
0
1
0
1
0
(4.10)

c2 = ( y2 c0 c1 ( x2 x0 ) ) /( x2 x0 ) /( x2 x1 )
.....
Metoda Newton prezint o serie de avantaje.
n primul rnd, determinarea coeficienilor implic un efort de calcul redus, sistemul este
relativ bine condiionat, se pot aduga puncte noi, cu posibilitatea de recuperare parial a
vechilor rezultate, etc.

89

4.1.1.3

Interpolarea Lagrange.

Interpolarea Lagrange a unei funciuni definit pe intervalul


x0 < x1 < ... < xk < .. < xn

(4.11)

se bazeaz pe polinoamele lui Lagrange:


n
x xi
lk ( x ) =
; k = 0,.., n
i = 0 xk xi

(4.12)

Se constat c aceste polinoame au proprietile:


1 i = k
lk ( xi ) = ki =
0 i k

(4.13)

i k

Aceste polinoame sunt de gradul (n-1).

Exemplu:
Fie o interpolare pe o mulime format din trei puncte:
x0 < x1 < x2

Cele trei polinoame de interpolare Lagrange sunt:


x x1 x x2 1 x = x0
.
=
x0 x1 x0 x2 0 x = xi , i 0
1 x = x1
x x 0 x x2
k = 1 l1 ( x ) =
.
=
x1 x9 x1 x2
0 x = xi , i 1
k = 0 l0 ( x ) =

k = 2 l2 ( x ) =

x x0 x x1 1
.
=
x2 x0 x2 x1 0

x = x2
x = xi , i 2

Funciunea de interpolare Lagrange care trece prin cele n+1 puncte :


(xi, yi ), i=0,n

(4.14)

are deci expresia :


n

g ( x ) = y k lk ( x )

(4.15)

k =0

Faptul c valorile coeficienilor sunt chiar valorile funciei n punctele de interpolare este
un avantaj semnificativ al metodei.

Calculul polinoamelor Lagrange lk(u) (Matlab)


function v = lagrange(k,x,u)
%Interpolare Lagrange
% Date de intrare:
%
k
= punctul de referinta al polinomului (lk)
%
x(1:n) = punctele de interpolare
%
u(*)
= punctele in care se calculeaza valorile interpolate
% v = lagrange(k,x,u) calculeaza v(*) = lk(u)
n = length(x);
v = ones(size(u));
for i = [1:k-1 k+1:n]
v = (u-x(i))./(x(k)-x(i)).*v;
end
end

90

Metode numerice.

Exemplu de verificare: Se calculeaz polinoamele Lagrange pentru o distribuie


oarecare a punctelor de interpolare i se traseaz graficele acestor polinoame:
% Test functiuni de interpolare Lagrange
x=[1 3 6 10];
u=x(1):0.1:x(end);
for k=1:length(x)
v(k,:)=lagrange(k,x,u);
end
plot(u,v,x,ones(size(x)),'or')
legend('l1','l2','l3','l4');
grid
1.5

Fig. 4.2

0.5

Exemple de polinoame
de interpolare global
Lagrange pentru o reea
de patru puncte.

l1
l2
l3
l4

-0.5

-1

10

S-au marcat cu un cerc punctele de coordonate (xk,1, k=1,n) n care polinoamele Lk(x) au
valoarea 1.

Exemplu de implementare n Matlab:


function v = interplagrange(x,y,u)
%Interpolare Lagrange
% Date de intrare:
%
x(1:n) = punctele de interpolare
%
y(1:n) = valorile functiunii
%
u(*)
= punctele in care se calculeaza valorile interpolate
% v = interplagrange(x,y,u) calculeaza v(j) = P(u(j))
%
unde P e polinomul de grad d = length(x)-1
%
cu P(x(i)) = y(i).
% Toate elementele lui u sunt evaluate simultan (Matlab)
n = length(x);
v = zeros(size(u));
for k = 1:n
w = ones(size(u));
for i = [1:k-1 k+1:n]
w = (u-x(i))./(x(k)-x(i)).*w;
end
v = v + w*y(k);
end

Observaie : n implementarea n Matlab, indicii ncep de la 1.

91

Exemple de utilizare :
>> x=[1 4 6 8]
>> y=[1 6 8 3]
% (a) Un singur punct de calcul :
>> u=6
>> v = interplagrange(x,y,u)
v =
8
% -> rezultat corect : valoarea data in punctul de calcul
% (b) Un interval de valori :
>> u=x(1):0.2:x(end)
>> v = interplagrange(x,y,u)
v =
1.0000
1.1232
1.2985
>> plot(x,y,'or',u,v)
9

Fig. 4.3

8
7

Exemple de interpolare
Lagrange global.

6
5
4
3
2
1

De studiat :
S se efectueze teste pentru diverse funciuni de interpolat.

Probleme:
Uneori, polinoamele de interpolare prezint comportamente anormale, n special la capetele
intervalului. Acesta este efectul Runge.
Exemplu [1]:
Fie funciunea
y( x) =

1
1 + x2

% Exemplu de efect Runge


% Fisier interp_runge.m
n=11;
x=linspace(-5,5,n);
y=1./(1+x .*x);
u=x(1):0.1:x(end);
v = interplagrange(x,y,u);
plot(x,y,'-or',u,v);
grid
legend('Puncte date','Polinomul de interpolare','Location','South')

92

Metode numerice.

Dup cum se constat, la extremitile intervalului, polinomul de interpolare prezint


oscilaii ample.
Situaia poate fi ameliorat printr-o alegere adecuat a punctelor de interpolare [1].
Ulterior, vor fi prezentate teste comparative ntre diverse metode de interpolare, pentru
aprecierea vizual a calitii interpolrii.
2

Fig. 4.4

1.5

Exemple de efect Runge n


cazul interpolrii Lagrange
globale.

0.5

0
Puncte date
Polinomul de interpolare
-0.5
-5

Observaie:
Deoarece polinomul de grad n care trece prin cele n+1 puncte este unic, cele trei metode
prezentate mai sus sunt, din punct de vedere teoretic, echivalente.
n practic ns, deoarece calculele se fac cu un numr finit de zecimale, rezultatele obinute
pe cele trei ci pot diferi. De asemenea, efortul de calcul nu este acelai.

4.1.2

Interpolarea pe poriuni.

Interpolarea global poate conduce la rezultate foarte deprtate de cele estimate, n cazul unor
funcii cu comportare mai deosebit.
n astfel de situaii,este oportun utilizarea unor metode de interpolare pe poriuni, n care se
caut expresii diferite ale funciilor de interpolare pe intervalele definite prin reeaua de
puncte de definiie a funciei de interpolat.
n princpiu, aceasta se poate realiza prin adoptarea de funciuni de baz k(x) distincte pe
intervalele definite de reeaua de definiie a funciunii de interpolat.

4.1.2.1

Interpolarea liniar pe poriuni.

Sub aceast denumire se ascunde cea mai banal metod de interpolare, care consist n
adoptarea unei funciuni de interpolare definit prin segmente de dreapt care trec prin
punctele de definiie ale funciunii de interpolat.
Este evident c funciunea de interpolare este continu, dar nu este derivabil n nodurile
reelei.
Cu toate acestea, principalul avantaj al acestei metode elementare consist n faptul c ea nu
produce surprize
93

Fig. 4.5

x1 x2 xk-1

xk

Interpolare liniar pe poriuni.

xn x

xk+1

Din punct de vedere formal, se poate defini un set de funcii de baz de tipul unor polinoame
Lagrange definite pe intervale, conform cu relaiile:

x x2

l1 ( x) = x1 x2
0

x [ x1 , x2 ]

l1(x)
1

x [ x1 , x2 ]

x xk 1
x x
k 1
k
x xk +1
lk ( x ) =
xk xk +1
0

x [ xk 1 , xk ]

x xn1

ln ( x) = xn xn1
0

x [ xn 1 , xn ]

x [ xk , xk +1 ]

x2

x1

lk(x)
1

k = 2, n 1

xk+1 x

xk-1 xk

x [ xk 1 , xk +1 ]

ln(x)
1

x [ xn 1 , xn ]

xn-1

xn x

Implementare n Matlab:
function v = interplin(x,y,u)
% Interpolare liniara pe portiuni
% Date de intrare:
%
x(1:n) = punctele de interpolare
%
y(1:n) = valorile functiunii
%
u(*)
= punctele in care se calculeaza valorile interpolate
% v = interplin(x,y,u) calculeaza v(j) = L(u(j))
%
unde L(x(j)) = y(j) e o functie liniara pe portiuni
%

Diferentele divizate de ord.1


delta = diff(y)./diff(x);

Gaseste intervalul k astfel incat x(k) <= u < x(k+1)


n = length(x);
k = ones(size(u));
for j = 2:n-1
k(x(j) <= u) = j;
end

Evalueaza interpolantul

94

(4.16)

Metode numerice.

s = u - x(k);
v = y(k) + s.*delta(k);

Exemplu :
>>
>>
>>
>>
>>
>>

x=[0 1 2 3];
y=[1 3 -1 1];
u=x(1):0.01:x(end);
v = interplin(x,y,u);
plot (x,y,'or',u,v)
grid

2.5
2
1.5
1
0.5
0
-0.5
-1

4.1.2.2

0.5

1.5

2.5

Interpolarea prin polinoame Hermite.

Dac este necesar ca funciunea de interpolar s fie nu numai continu, ci i derivabil, se


poate adopta interpolarea pe poriuni prin polinoame Hermite.
Se consider un interval din domeniul de definiie al funciunii de interpolat y(x):
xk x xk +1 ; k = 1,.., n 1

(4.17)

i o variabil local:
s = x xk [0, hk ] ; hk = xk +1 xk ; k = 1,.., n 1

(4.18)

Se mai definete:
y y
y y
k = k +1 k = k +1 k ; k = 1,.., n 1
xk +1 xk
hk

(4.19)

Fig. 4.6
P(x)

dk
yk
xk

Interpolare polinomial pe
poriuni.

yk+1
s
x

xk+1

hk
Se consider ca nrimi auxiliare valorile derivatelor polinoamelor de interpolare n
extremitile segmentelor pe care ele sunt definite:
(4.20)
d k = P '( xk )
Cel mai des, interoplarea se realizeaz prin polinoame cubice (de gradul 3), care ofer
suficient suplee pentru impunerea unor condiii de interpolare convenabile. Un astfel de
polinom este:
3hs 2 2 s 3
h 3 3hs 2 +2 s 3
s 2 ( s h)2
s( s h)
(4.21)
P( x ) =
y
+
y
+
d k +1 +
dk
k +1
k
3
3
2
h
h
h
h2
(pentru simplitate, s-a notat h=hk ).
Se poate verifica faptul c acest polinom satisface condiiile de interpolare:
95

s=0

P ( xk ) = y k

s=h

P ( xk +1 ) = yk +1

(4.22)

Pentru determinarea acestor polinoame (Hermite) mai e necesar cunoaterea derivatelor dk n


extremitile segmentelor.
Derivata unui polinom (ca funciune de s) este:
6hs 6 s 2
6hs + 6 s 2
3s 2 2 sh
3s 2 4 sh + h 2
'
P ( x) =
y k +1 +
yk +
d k +1 +
dk
h3
h3
h2
h2
n consecin:
s=0
s=h

P '( xk ) = d k

(4.23)

(4.24)

P '( xk +1 ) = d k +1

Dar valorile derivatelor n punctele de interpolare nu sunt date, nct ele trebuie determinate
printr-o procedur suplimentar, care s asigure, pe lnga continuitatea funciei de interpolare
(care rezult implicit) i a derivatelor sale de ordinul 1 (care rezult implicit) , eventual 2.

4.1.2.3

Interpolarea spline.

O prim variant consist n interpolarea spline.


Aceast metod i trage numele dela cel al unui instrument (o rigl flexibil) folosit pentru
trasarea unor curbe.
Fig. 4.7

Trasarea unei curbe


cu ajutorul unui
spline

curbur nul

n cele ce urmeaz, din marea varietate de posibiliti, vor fi tratate numai funciile spline
cubice.
Derivata a doua a polinomului de interpolare pe segmentul considerat este:
(6h 12 s ) k + (6 s 2h )d k +1 + (6 s 4h )d k
P ''( x ) =
hk2

(4.25)

Valorile sale n cele dou extremiti sunt:


x = xk

s=0

x = xk +1 s = hk

P ''( xk+ ) =
P ''( x

k +1

6 k 2d k +1 4d k
hk

6 k + 4d k +1 + 2d k
)=
hk

(4.26)

S-au notat cu P(xk+), respectiv P(xk+1-) valorile limit la stnga, respectiv la dreapta ale
derivatei a 2-a n cele dou puncte de extremitate ale intervalului.
Similar, pentru intervalul (xk-1,xk) se obine:
96

Metode numerice.

P ''( xk ) =

6 k 1 + 4d k + 2d k 1
hk 1

(4.27)

Pentru a se asigura continuitatea derivatei a 2-a n punctul xk este necesar ca :


6 k + 4d k +1 + 2d k 6 k 1 + 4d k + 2d k 1
P ''( xk+ ) = P ''( xk )

=
hk
hk 1
Rezult ecuaiile :
hk d k 1 + 2( hk + hk 1 )d k + hk 1d k +1 = 3( hk k 1 + hk 1 k ); k = 2,.., n 1

(4.28)

(4.29)

Pentru determinarea celor n valori necunoscute dk mai sunt necesare dou ecuaii.
Aceste ecuaii pot fi obinute impunnd condiii suplimentare n cele dou extremiti ale
intervalului de definiie (x1, respectiv xn).
O prim abordare consist n adoptarea cte unui singur polinom de interpolare pe primele
dou segmente x[x1,x3], respectiv ultimele dou segmente x[xn-2,xn], metod denumit nu
este punct (not a knot end condition ).
O alt abordare posibil, care definete aa numite spline naturale, consist n adoptarea de
valori nule ale derivatei a 2-a n extremitile segmentului, echivalent cu adoptarea de curburi
nule n aceste extremiti (ceeace este sugerat i n desenul de mai sus).
n aceast abordare:
P ''( x1+ ) = 0 2d1 + d 2 = 31

(4.30)

P ''( x ) = 0 d n 1 + 2d n = 3 n 1

(4.31)

Pentru a pstra simetria matricii [A] a coeficienilor sistemului de ecuaii care rezult, cele
dou condiii se inmulesc cu coeficieni convenabili, obinndu-se :
P ''( x1+ ) = 0 (2d1 + d 2 = 31 )
(*h2 ) 2h2 d1 + h2 d 2 = 3h21
(4.32)
P ''( xn ) = 0

( d n 1 + 2d n = 3 n 1 ) (*hn 2 ) hn 1d n 1 + 2hn 1d n = 3hn 2 n 1 (4.33)

Se obinue sistemul de ecuaii :


[ A][d ] = [ g ]

(4.34)

cu urmtoarele matrici:
h2
2h2

2(h2 + h1 )
h1
2

h3
2( h3 + h2 ) h2

....
[ A] =

hk 2( hk + hk 1 )
hk 1

hn 1
2(hn 1 + hn 2 ) h n 2

hn 2
2hn 2

[d ] = [ d1

d2

...

d n 1 d n ]

(4.35)

(4.36)

97

3h21

3(h + h )
2 1
1 2

...

[ g ] = 3(hk k 1 + hk 1 k )

...

3(hn 1 n 2 + hn 2 n 1 )

3hn 2 n 1

(4.37)

Matricea coeficienilor [A] este tridiagonal (adic termenii si nenuli sunt situai pe
diagonala principal i pe cele dou adiacente) i simetric.
Pentru rezolvarea unui astfel de sistem exist tehnici performante.
Prezentm, ca exemplificare, un cod Matlab [3] cu comentariile originale:

Fiier tridisolve.m:
function x = tridisolve(a,b,c,d)
%
TRIDISOLVE Solve tridiagonal system of equations.
%
x = TRIDISOLVE(a,b,c,d) solves the system of linear equations
%
b(1)*x(1) + c(1)*x(2) = d(1),
%
a(j-1)*x(j-1) + b(j)*x(j) + c(j)*x(j+1) = d(j), j = 2:n-1,
%
a(n-1)*x(n-1) + b(n)*x(n) = d(n).
%
The algorithm does not use pivoting, so the results might
%
be inaccurate if abs(b) is much smaller than abs(a)+abs(c).
x = d;
n = length(x);
for j = 1:n-1
mu = a(j)/b(j);
b(j+1) = b(j+1) - mu*c(j);
x(j+1) = x(j+1) - mu*x(j);
end
x(n) = x(n)/b(n);
for j = n-1:-1:1
x(j) = (x(j)-c(j)*x(j+1))/b(j);
end

Exemplu de implementarea n Matlab [3] (cu comentariile originale):


Fiier interpspline.m:
function v = interpspline(x,y,u)
% v = interpspline(x,y,u) finds the piecewise cubic interpolatory
% spline S(x), with S(x(j)) = y(j), and returns v(k) = S(u(k)).
%

First derivatives
h = diff(x);
delta = diff(y)./h;
d = splineslopes(h,delta);

Piecewise polynomial coefficients


n = length(x);
c = (3*delta - 2*d(1:n-1) - d(2:n))./h;
b = (d(1:n-1) - 2*delta + d(2:n))./h.^2;

Find subinterval indices k so that x(k) <= u < x(k+1)

98

Metode numerice.

k = ones(size(u));
for j = 2:n-1
k(x(j) <= u) = j;
end
%

Evaluate spline
s = u - x(k);
v = y(k) + s.*(d(k) + s.*(c(k) + s.*b(k)));

% ------------------------------------------------------function d = splineslopes(h,delta)
% SPLINESLOPES Slopes for cubic spline interpolation.
% splineslopes(h,delta) computes d(k) = S'(x(k)).
% Uses not-a-knot end conditions.
%

Diagonals of tridiagonal system


n = length(h)+1;
a = zeros(size(h)); b = a; c = a; r = a;
a(1:n-2) = h(2:n-1);
a(n-1) = h(n-2)+h(n-1);
b(1) = h(2);
b(2:n-1) = 2*(h(2:n-1)+h(1:n-2));
b(n) = h(n-2);
c(1) = h(1)+h(2);
c(2:n-1) = h(1:n-2);

Right-hand side
r(1) = ((h(1)+2*c(1))*h(2)*delta(1)+ ...
h(1)^2*delta(2))/c(1);
r(2:n-1) = 3*(h(2:n-1).*delta(1:n-2)+ ...
h(1:n-2).*delta(2:n-1));
r(n) = (h(n-1)^2*delta(n-2)+ ...
(2*a(n-1)+h(n-1))*h(n-2)*delta(n-1))/a(n-1);

Solve tridiagonal linear system


d = tridisolve(a,b,c,r);

Exemplu:
>>
>>
>>
>>
>>
>>

x=[0 1 2 3];
y=[1 3 -1 1];
u=x(1):0.01:x(end);
v = interpspline(x,y,u);
plot (x,y,'or',u,v)
grid

-1

-2

0.5

1.5

2.5

Implementarea nativ n Matlab.


Matlab include o funciune spline(x,y), ca i un Spline toolbox care ofer posibiliti
suplementare.
n implementarea din matlab, condiiile la extremiti sunt de tipul nu este punct (not a knot
end condition ).
99

Exemplu:
>>
>>
>>
cs

x=[0 1 2 3];
y=[1 3 -1 1];
cs = spline(x,y)
=
form: 'pp'
breaks: [0 1 2 3]
coefs: [3x4 double]
pieces: 3
order: 4
dim: 1

-1

>> fnplt(cs)
>> hold on
>> plot (x,y,'Or')

4.1.2.4

-2
0

0.5

1.5

2.5

Interpolarea pchip.

O alt posibilitate este prezentat n [3]. Ea se bazeaz pe anumite tehnici care urmresc s
diminueze eventualele oscilaii care pot s apar. Denumirea provine din englez: piecewise
cubic Hermite interpolating polynomial".
O implementare n Matlab este dat n codul urmtor (cu comentariile originale):

Fiier interppchip.m:
function v = interppchip(x,y,u)
% v = interppchip(x,y,u) finds the shape-preserving piecewise cubic
% interpolant P(x), with P(x(j)) = y(j), and returns v(k) = P(u(k)).
%

First derivatives
h = diff(x);
delta = diff(y)./h;
d = pchipslopes(h,delta);

Piecewise polynomial coefficients


n = length(x);
c = (3*delta - 2*d(1:n-1) - d(2:n))./h;
b = (d(1:n-1) - 2*delta + d(2:n))./h.^2;

Find subinterval indices k so that x(k) <= u < x(k+1)


k = ones(size(u));
for j = 2:n-1
k(x(j) <= u) = j;
end

Evaluate interpolant
s = u - x(k);
v = y(k) + s.*(d(k) + s.*(c(k) + s.*b(k)));
% ------------------------------------------------------function d = pchipslopes(h,delta)
% PCHIPSLOPES Slopes for shape-preserving Hermite cubic
% pchipslopes(h,delta) computes d(k) = P'(x(k)).
%
%
%
%
%
%

Slopes at interior points


delta = diff(y)./diff(x).
d(k) = 0 if delta(k-1) and delta(k) have opposites
signs or either is zero.
d(k) = weighted harmonic mean of delta(k-1) and
delta(k) if they have the same sign.

100

Metode numerice.

n = length(h)+1;
d = zeros(size(h));
k = find(sign(delta(1:n-2)).*sign(delta(2:n-1))>0)+1;
w1 = 2*h(k)+h(k-1);
w2 = h(k)+2*h(k-1);
d(k) = (w1+w2)./(w1./delta(k-1) + w2./delta(k));
%

Slopes at endpoints
d(1) = pchipend(h(1),h(2),delta(1),delta(2));
d(n) = pchipend(h(n-1),h(n-2),delta(n-1),delta(n-2));
% ------------------------------------------------------function d = pchipend(h1,h2,del1,del2)
% Noncentered, shape-preserving, three-point formula.
d = ((2*h1+h2)*del1 - h1*del2)/(h1+h2);
if sign(d) ~= sign(del1)
d = 0;
elseif (sign(del1)~=sign(del2))&&(abs(d)>abs(3*del1))
d = 3*del1;
end

Exemplu :
3

>>
>>
>>
>>
>>
>>

x=[0 1 2 3];
y=[1 3 -1 1];
u=x(1):0.01:x(end);
v = interppchip(x,y,u);
plot (x,y,'or',u,v)
grid

2.5
2
1.5
1
0.5
0
-0.5
-1
0

4.1.2.5

0.5

1.5

2.5

Interpolarea Akima.

O metod de interpolare care conduce, de regul, la funciuni de interpolare relativ netede,


adic lipsite de oscilaii parazite, este cea dezvoltat de Akima.
O implementare se gsete n unul din pachetele de utilitare, sub numele de function
yi=UnivariateInterpolation(x,y,xi, plotBool)

Codul (cu comentariile originale, dar cu denumirea modificat, pentru coerena cu cele
folosite mai sus) este:

Fiier interpakima.m:
function
%
% Usage:
%
%
%
%
%

yi=interpakima(x,y,xi)

yi=interpakima(x,y,xi)
Given vectors x and y (of the same length)
and the array xi at which to interpolate,
fits piecewise cubic polynomials and returns
the interpolated values yi at xi.

% Ref. : Hiroshi Akima, Journal of the ACM, Vol. 17, No. 4, October 1970,
%
pages 589-602.

101

% Programmer: N. Shamsundar, University of Houston, 6/2002


%
% Notes: Use only for precise data, as the fitted curve passes through the
%
given points exactly. This routine is useful for plotting a pleasingly
%
smooth curve through a few given points for purposes of plotting.

%
x=x(:); y=y(:); n=length(x);
if n~=length(y)
error('input x and y arrays must be of same length')
end

dx=diff(x);
if any(dx <= 0)
error('input x-array must be in strictly ascending order'),
end
if (min(xi) < min(x) )
error(['The minimum x value of the interpolation data should be
greater '...
'than the minimum x value of the original data\n'])
end
m =diff(y)./dx;
mm=2*m(1)-m(2);
mmm=2*mm-m(1);
% augment at left
mp=2*m(n-1)-m(n-2); mpp=2*mp-m(n-1);
% augment at right
m1=[mmm; mm; m; mp; mpp];
% slopes
dm=abs(diff(m1)); f1=dm(3:n+2); f2=dm(1:n); f12=f1+f2;
id=find(f12 > 0); b=zeros(n,1);
b(id)=(f1(id).*m1(id+1)+f2(id).*m1(id+2))./f12(id);
c=(3*m-2*b(1:n-1)-b(2:n))./dx;
d=(b(1:n-1)+b(2:n)-2*m)./dx.^2;
for i=1:length(xi)
j=min(max(find(x <= xi(i))),n-1);
w=xi(i)-x(j);
yi(i)=((w*d(j)+c(j))*w+b(j))*w+y(j);
end

Exemplu:
>>
>>
>>
>>
>>
>>

3.5

y=[1 3 -1 1];
x=[0 1 2 3];
u=x(1):0.01:x(end);
v = interpakima(x,y,u);
plot (x,y,'Or',u,v)
grid

3
2.5
2
1.5
1
0.5
0
-0.5
-1
-1.5

4.1.2.6

0.5

1.5

2.5

Compararea metodelor de interpolare prezentate.

Fiierul care urmeaz (furnizat) conine un cod care ilustreaz compararea ntre diferitele
metode de interpolare studiate.

102

Metode numerice.

Fiier interp_comparare.m
% Introduceti definitia functiei de interpolat
x=[1:8];
y=[0 8 6 8 -10 -8 -10 0];
u=x(1):0.01:x(end);
ylin=interplin(x,y,u);
ylag=interplagrange(x,y,u);
yspl=interpspline(x,y,u);
ypch=interppchip(x,y,u);
yaki=interpakima(x,y,u);
plot(x,y,'or',u,ylin,'-b',u,ylag,':',u,yspl,'--',u,ypch,'-g',u,yaki,'r');
legend('Puncte
date','liniara','lagrange','spline','pchip','akima','Location','NorthE
ast')
30
Puncte date
liniara
lagrange
spline
pchip
akima

20

10

-10

-20

-30

Fig. 4.8

Comparaie ntre diferite metode de interpolare.

De studiat diverse funciuni de interpolat, pentru diferite numere de puncte.


Program interactiv pentru compararea diferitelor metode de interpolare [3].
Un program interactiv este prezentat n [3], sub numele interpgui.m (furnizat).
El este documentat chiar n codul surs (s-au pstrat comentariile originale, cu modificarea
denumirilor procedurilor de interpolare, n acord cu conveniile folosite n acest capitol).

Exemplu (interpolarea akima nu este inclus n versiunea prezentat):

103

Interpolation
0.5
0.4
0.3
0.2
0.1
0
-0.1
-0.2
-0.3
-0.4
-0.5

Fig. 4.9

Comparaie ntre diferite metode de interpolare (program interpgui.m)

Exemplul 2: Interpolarea unei curbe de magnetizare.


O situaie des ntlnit n ingineria electric se refer la reprezentarea curbelor de magnetizare
ale materialelor feromagnetice, exemplu tipic de funciuni neliniare, definite, n mod curent,
prin valori experimentale (B,H).

Exemplu:
Fiier interp_BH.m
% Interpolarea unei curbe de magnetizare:
B=[0 0.1 0.5 1
1.3 1.6 1.75 1.9
2.1
2.2
];
H=[0 200 500 1000 2000 5000 10000 20000 50000 100000];
% Se interpoleaza h(b)
b=B(1):0.05:B(end);
hlin=interplin(B,H,b);
hlag=interplagrange(B,H,b);
hspl=interpspline(B,H,b);
hpch=interppchip(B,H,b);
haki=interpakima(B,H,b);
% Se reprezinta grafic in modul uzual, b(h)
plot(H,B,'or',hlin,b,'-b',hlag,b,':',hspl,b,'--',hpch,b,'-g',haki,b,'r');
title('B(H)','Fontsize',8);
legend('H,B','lin.','lagr.','spline','pchip','akima','Location','South
East');
grid

104

Metode numerice.

B(H)

2.5

Fig. 4.10 Comparaie ntre


diferite metode de
interpolare a unei
curbe de
magnetizare
(program
interp_BH.m)

1.5

1
H,B
lin.
lagr.
spline
pchip
akima

0.5

0
-2

10
4

x 10

Particularitatea acestui exemplu consist n faptul c, urmare a gamei mult mai reduse de
valori ale induciei magnetice B (ntre 0 i 2.4T) n comparaie cu valorile intensitii
cmpului magnetic H (ntre 0 i 100000 A/m), interpolarea s-a efectuat intervertind cele dou
iruri de valori, adic s-a interpolat H n funciune de B, n loc de B n funciune de H.
Graficele ns au fost reprezentate n modul normal (adic cu H n abscis i B n ordonat).

Concluzii:

Dup cum era de ateptat, interpolarea liniar nu ofer surprize, dar funciunea de
interpolare nu este derivabil n nodurile de definiie. Cu toate acestea, ea este o
alternativ viabil n numeroase aplicaii, avnd n vedere c datele de care se dispune
(adesea de natur experimental) pot prezenta erori, care nu justific adoptarea de
procedee mai sofisticate.

Interpolarea Lagrange poate conduce la funciuni care prezint oscilaii parazite


inadmisibile. Din acest motiv, ea trebuie folosit cu pruden.

Interpolarea spline conduce la rezultate n general satisfctoare.

Interpolarea pchip este, dintre cele prezentate n fig. 4.9, cea mai bun.

Interpolarea akima (v. fig. 4.8 i 4.10) conduce la rezultate comparabile cu cele oferite
de pchip, adic la fel de bune.

Remarc personal: personal, prefer interpolarea liniar, eventual Akima, pe


care le-am folosit cu rezultate foarte bune n numeroase aplicaii.

105

5 Rezolvarea numeric a ecuaiilor difereniale ordinare.

5.1 Introducere.
Ecuaiile difereniale ordinare sunt sisteme de ecuaii n care una sau mai multe variabile
dependente depind de o singur variabil independent prin expresii care pot conine
derivate ale variabilelor independente n funciune de variabila dependent.
n ingineria electric, astfel de sisteme apar frecvent.
Cazul clasic este reprezentat de ecuaiile circuitelor electrice n regimuri variabile, n care
variabile dependente (tensiuni, cureni) sunt funciuni de o variabil independent ( timpul ).
Spre exemplu, n cazul unui circuit RL serie alimentat de la o surs de tensiune variabil e(t),
curentul din circuit i(t) satisface ecuaia diferenial ordinar:
i(t)

Fig. 5.1

Circuit RL serie n regim variabil.

L
e(t)

d i (t )
+ R i ( t ) = e( t )
dt

(5.1)

n cazul particular al unei surse de tensiune continue e=U0, soluia se poate obine prin
metode analitice:
t
R
t

U
U
L
i (t ) = 0 1 e L = 0 1 e ; =
(5.2)
R
R
R

S-a presupus condiia iniial i(0)=0.


n alte situaii, cum ar fi cea n care sursa variaz dup o lege mai complicat, este posibil ca
soluia exact (analitic) s fie greu sau chiar imposibil de determinat.
De asemenea, n cazul n care circuitul conine elemente neliniare, o soluie exact poate fi
dificil sau imposibil de determinat.
n astfel de situaii, trebuie recurs la metode numerice de rezolvare a ecuaiilor difereniale
(sau a sistemelor de ecuaii difereniale, n cazul mai multor variabile dependente)
Fundamentul metodelor de integrare numeric a sistemelor de ecuaii difereniale consist n
discretizarea timpului, ceea ce permite nlocuirea operatorilor difereniali prin expresii cu
diferene finite n care figureaz valorile numerice ale variabilelor (independente i
dependent) ntr-o mulime discret de puncte. n acest mod, sistemul de ecuaii difereniale
se transform ntr-un sistem de ecuaii algebrice, a crui rezolvare trebuie fcut succesiv
pentru valorile discretizate ale timpului.

106

Metode numerice.

5.2 Consideraii generale.


Ordinul unei ecuaii difereniale este dat de ordinul cel mai mare al derivatei funciunii care
figureaz n ecuaie.
n cazul sistemelor de ecuaii difereniale, formate din mai multe ecuaii care conin mai multe
funcii necunoscute, n numr egal cu cel al ecuaiilor, ordinul sistemului este egal cu suma
ordinelor ecuaiilor care compun sistemul.
Pentru determinarea soluiei ecuaiei sau a sistemului, este necesar s se indice i un numr de
condiii iniiale egal cu ordinul ecuaiei sau al sistemului.

5.3 Forma canonic a unui sistem de ecuaii difereniale.


5.3.1

Ecuaii difereniale ordinare de ordinul I.

Forma generic a unei ecuaii difereniale ordinare de ordinul I este:


dx (t )
= y ( x , t ) ; x ( 0) = x 0
dt

(5.3)

Pentru determinarea soluiei x(t) este necesar, n afara ecuaiei, precizarea unei condiii
iniiale (de tipul x(0)=x0). Din acest motiv, astfel de probleme se numesc cu condiii iniiale.
Drept moment iniial se poate considera, fr a pierde din generalitate, momentul t=0.
n cazul mai multor variabile dependente, se obine un sistem de ecuaii difereniale:
d
[x(t )] = [ y ( x, t )] ; [x(0)] = [x0 ]
dt

(5.4)

O astfel de form se numete canonic (derivatele necunoscutelor sunt explicitate).


S-au folosit notaiile:
[x(t )] = [x1 (t ), x2 (t ),.., xk (t ),... xn (t )]t

[ y (t )] = [y1 (t ), y2 (t ),.., yk (t ),.. yn (t )]


[x0 ] = [x1 (0), x2 (0),.., xk (0),.. xn (0)]t
t

= vectorul necunoscutelor

(5.5)

= vectorul termenilor liberi

(5.6)

= condiiile iniiale

(5.7)

iar variabila independent este notat cu t (timpul).


Pentru simularea reelelor electrice, aceast form, dei utilizabil, pare puin adaptat pentru reelele de
talie mare. Transformrile matematice necesare pentru aducerea sistemului de ecuaii la forma canonic
pot fi complexe. n plus, ele impun restricii, unele justificate, modelului circuitului.
O abordare n acelai timp simpl i mai performant, consist n integrarea direct a sistemului, sub
forma care rezult din ecuaiile reelei, fr a le mai aduce la forma canonic. Aceasta abordare va fi
prezentat ulterior.

5.3.2

Ecuaii difereniale ordinare de ordin superior.

Ecuaiile difereniale de ordin superior se pot transforma n sisteme de ecuaii difereniale de


ordinul I, prin schimbri de variabil adecuate.

107

Evident, sunt necesare condiii iniiale suplimentare, care precizeaz valorile iniiale ale
derivatelor de ordin superior.
Spre exemplu, fie ecuaia diferenial de ordinul II:
d2
[x(t )] = y ( x, dx , t ) ; [x(0)] = [x0 ], dx = x0' .
2
dt
dt

dt 0

[ ]

(5.8)

Se introduce o necunoscut suplimentar iar, ca urmare, ecuaia iniial se transform ntr-un


sistem de dou ecuaii difereniale de ordinul I:
d
dt [x (t )] = [u( x, t ]
(5.9)

d [u(t )] = [ y ( x, u, t ]
dt
sau:
d x u ( x, t )
=
;
dt u y ( x, u, t )

[x(0)] = [x0 ]
[u(0)] = [x0' ]

(5.10)

Procedura este similar pentru ecuaii sau pentru sisteme de ecuaii de ordin superior.

5.4

Principiul general de rezolvare numeric a sistemelor de


ecuaii difereniale.

Principiul de rezolvare numeric este bazat pe discretizarea timpului n momentele tk, k=1,2,...
Pasul de discretizare poate fi fix sau variabil, acest din urm caz permind o mai mare
suplee, cu preul unor mai mari dificulti de programare.
x

Fig. 5.2

x0

t0

t1

tk

Integrarea numeric a unei


ecuaii difereniale.

soluia exact
soluia aproximat (numeric)

5.4.1

Aproximarea derivatei.

n principiu, derivata unei funciuni x(t) n momentul tk poate fi exprimat n funciune de


valorile anterioare (deja cunoscute n momentul tk) ale variabilei, prin relaii de tipul :
p
d
x (t ) = n x (tk i )
(5.11)
dt
i =0
tk

108

Metode numerice.

Fig. 5.3

x0

Punctul urmtor

t0

tk-p

tk-i

tk-1 tk

Aproximarea
derivatei

p puncte precedente

Coeficienii sunt determinai, n principiu, prin aproximarea comportamentului anterior al


funciunii prin funciuni adecuate (cel mai adesea polinoame de grad convenabil).
Pentru un pas de discretizare constant (h), formulele precedente pot fi scrise sub forma :
d
1 p
1
1 p
x (t ) = cn x(tk i ) = c0 {
x (tk ) + cn x (tk i )
123
dt
h i =0
h necunoscut h i =1
tk
cunoscute
1442
443
metoda explicita
144444244444
3

(5.12)

metoda implicita

Aceste formule prezint urmtoarele particulariti:

5.4.2

Ele definesc o metod cu p pai , sau de ordin p , fiindc se utilizeaz valorile


(deja cunoscute) ale funciunii n (p) pai de calcul precedeni, pentru a determina
noua valoare x(tk).

Metodele cu un singur pas (de ordinul 1) prezint avantajul unui demaraj facil,
deoarece nu necesit informaii suplimentare n afara celor furnizate de ctre
condiiile iniiale.

Metoda este implicit , fiindc valoarea nc necunoscut x(tk) figureaz de


asemenea n membrul drept al formulei de aproximare.

Se poate transforma metoda ntr-una explicit, dac limita inferioar a indicelui de


sumare (i) este 1 n loc de 0. n acest mod, valoarea necunoscut x(tk) nu mai
figureaz n formula de aproximare a derivatei n momentul tk, nct derivata va
putea fi calculat n funciune de valorile anterioare (cunoscute) ale funciunii. S-ar
putea crede c aceast abordare ar simplifica programarea, ceea ce este adevrat,
ns se poate demonstra c metoda devine instabil dac pasul de integrare nu este
suficient de mic. Din acest motiv, metodele explicite nu sunt utilizate practic nici
odat n simularea numeric a reelelor electrice.

Algoritmul general.

La pornire, valorile iniiale ale necunoscutelor furnizeaz vectorul [x]=[x(0)].


Prin discretizare, sistemul de ecuaii difereniale se transform ntr-un sistem de ecuaii
algebrice, avnd ca necunoscute noile valori [x(tk)] n funciune de valorile anterioare
[x(tk-i)] (i=(0,)1,..,p, n acord cu ordinul metodei).

109

Acest sistem este rezolvat printr-una din metodele de rezolvare a sistemelor de ecuaii
algebrice, ceea ce furnizeaz noile valori ale necunoscutelor.
Pentru urmtorul pas de integrare procesul se reia, pn la atingerea valorii limit a timpului.

5.4.3

Criterii .

n implementarea unui algoritm de rezolvare numeric a ecuaiilor sau sistemelor de ecuaii


difereniale, sunt importante urmtoarele concepte:

Convergena: n ce msur soluia numeric se apropie de soluia exact.


O metod numeric este convergent dac soluia numeric se apropie de cea exact pe
msur ce pasul de integrare h tinde spre 0:
(5.13)
lim max xn ,h x (tn ) = 0
h 0+ n =0,1,.. n

unde xn,h este soluia aproximat n punctul n, iar x(tn) este valoarea exact n acest
punct.

Consistena: ct de bine este aproximat soluia.


Eroarea local a unei metode este eroarea comis la fiecare pas de integrare.
Dac se noteaz cu kh eroarea local la pasul numrul k , pentru un pas de discretizare
h, metoda se numete consistent dac:
lim
h 0

kh
h

=0

(5.14)

O metod este de ordinul p dac:


kh = O (h p +1 ), h 0

(5.15)

Prin urmare, o metod este consistent dac este de ordin mai mare dect 0. Spre
exemplu, metoda Euler care va fi prezentat n seciunea urmtoare, care este de ordinul
1, este consistent.

Stabilitatea: n ce msur sunt atenuate erorile.


n anumite situaii, algoritmii numerici pot prezenta instabiliti numerice. Acestea se
pot manifesta fie prin soluii divergente, fie prin oscilaii parazite care nu se atenueaz.
n aceste condiii, este evident c rezultatele nu mai au nicio utilitate.
Prin urmare, asigurarea stabilitii este o condiie esenial n implementarea unui
algoritm.
Sistemele de ecuaii care pot prezenta instabiliti pot fi, aparent, foarte simple.
Ele sunt caracterizate, n general, prin prezena n fenomenele studiate, a mai multor
scri de timp foarte diferite.
Astfel de probleme apar n numeroase domenii, printre care: cinetica chimic, sisteme
de automatizare, mecanica solidelor, prognoza meteorologic, biologie, fizica plasmei,
circuite electrice.
110

Metode numerice.

n literatur, astfel de sisteme (probleme) se numesc stiff . Asupra lor, se va reveni


ulterior.
Metodele de ordin superior sunt mai precise, dar mai puin stabile. Aceasta ar putea
prea ciudat, dar practica arat c stabilitatea metodei este o calitate important. Se
poate demonstra c metoda Euler implicit (metoda de ordinul 1) este cea mai stabil,
dei nu este nici pe departe cea mai precis.

5.5 Metoda Euler de ordinul 1.


Cea mai simpl metod de integrare a ecuaiilor difereniale ordinare (sau a sistemelor de
ecuaii difereniale) este metoda lui Euler de ordinul 1.
Se consider un punct de discretizare tk (va fi numit punct curent, cel pn la care au ajuns
calculele) i cel care urmeaz tk+1 (va fi numit punctul urmtor). Pasul de discretizare este:
hk = tk +1 tk

(5.16)

punctul curent

Fig. 5.4
punctul urmtor

xk

Aproximarea unei
funciuni n metoda lui
Euler de ordinul 1.

xk+1
hk
tk

tk+1

Cea mai simpl formul de aproximare a derivatei de ordinul 1 a funciunii x(t) n punctul
curent este de forma:
dx (t )
x x
k +1 k
(5.17)
dt tk
hk
Dac se introduce aceast expresie n ecuaia diferenial (5.4) se obine:
dx (t )
x x
k +1 k = y ( x, t )
dt tk
hk

(5.18)

Rmne de rezolvat urmtoarea dilem - n ce moment s fie considerate valorile din


membrul drept: (1) n cel actual sau (2) n cel care urmeaz:
(1)
xk +1 xk y ( xk , tk )
=
?
(5.19)
hk
y ( xk +1 , tk +1 ) (2)

Varianta (1) conduce la metoda lui Euler explicit:


xk +1 = xk + hk y ( xk , tk )

111

(5.20)

Ea se numete astfel deoarece noua valoare xk+1 poate fi determinat direct n funciune
de mrimile din membrul drept, deja cunoscute n acest moment. Aparent, acesta este un
avantaj semnificativ. Se va vedea ns c exist un pre care trebuie pltit.

Varianta (2) conduce la metoda lui Euler implicit:


xk +1 = xk + hk y ( xk +1 , tk +1 )

(5.21)

De data aceasta, noua valoare xk+1 nu mai poate fi determinat direct, ci prin rezolvarea
unei ecuaii, ceeace complic procedura. Acest dezavantaj se poate dovedi numai aparent,
deoarece se va vedea c metoda implicit poate fi cea mai performant n numeroase
situaii.
n ambele abordri, se constat c n fiecare moment se opereaz numai cu valorile funciunii
n dou cele dou momente de timp: momentul actual (pn unde au fost efectuare
calculele) tk, i cel urmtor tk+1.
n aceast situaie, poate fi util s se desemneze :
x*= xk+1
= noile valori (din momentul tk+1 t*)
x = xk

= valorile actuale (din momentul tk t

Astfel, formula de aproximare a derivatei devine:


d
1
x (t ) ( x* x )
dt
hk
Cele dou metode devin, respectiv:
x * = x + hk y ( x , t )
(Euler explicit)
x = x + hk y ( x , t )
*

(5.22)

(Euler implicit)

(5.23)

(5.24)
(5.25)

n practic, se folosete des o discretizare cu pas constant hk = h.


Unul dintre avantajele metodei Euler de ordinul 1 consist n faptul c demararea calculelor
este simpl, singura informaie necesar n acest moment fiind furnizat de ctre condiiile
iniiale.
Pentru estimarea erorii de discretizare, se consider dezvoltarea n serie a funciunii x(t) n
vecintatea punctului tk :
dx
h2 d 2x
xk +1 = xk + hk
+ k 2 + O (hk3 )
(5.26)
dt tk 2! dt t
k

Rezult :
dx
x x
= k +1 k + O ( h )
dt tk
hk

(5.27)

n consecin, metoda este de ordinul 1, ca urmare a dependenei erorii de pasul de


discretizare.

112

Metode numerice.

5.5.1

Metoda Euler explicit.

Algoritmul de rezolvare a unei ecuaii difereniale ordinare prin metoda Euler explicit de
ordinul 1 poate fi prezentat prin urmtoarea funciune Matlab:
function [t,x] = edEulerExp(f,tn,h,x0)
% Metoda Euler explicita de ordinul 1
% Fisier edEulerExp.m
% Date de intrare :
% Ec. diferentiala dx/dt = f(x,t), x(0)=x0
% tn = val. limita a lui t
% h = pasul de integrare (constant)
% x0 = conditia initiala
% Output:
% t = vectorul variabilei independente: t(j) = (j-1)*h
% x = vectorul solutiei numerice in momentele t(j)
t = (0:h:tn)'
; % Vector coloana al momentelor cu pasul h
n = length(t)
; % Numarul elementelor vectorului t
x = x0*ones(n,1); % Prealocare x pentru viteza
% Euler; j=1 : conditia initiala deja stocata in x
for j=2:n
x(j) = x(j-1) + h*f(x(j-1),t(j-1));
end

Not: toate exemplele de cod Matlab referitoare la capitolul consacrat ecuaiilor


difereniale ordinare au nume de timul edxxx, pentru a fi uor de identificat.
Se poate aprecia simplitatea codului. n definitiv, singurele instruciuni care implementeaz
metoda sunt prima (definiia funciei) i ultimele trei, ncadrate ntr-un chenar, pentru a le
pune n eviden. Restul sunt auxiliare sau comentarii.
n procedura prezentat, s-a adoptat soluia salvrii rezultatelor n cele dou tablouri
(t, respectiv x), pentru prelucrri ulterioare, dei, dup cum s-a spus mai sus, la fiecare pas n
timp particip numai valorile din cele dou momente - cel actual i cel care urmeaz.

Exemple:

S se rezolve ecuaia diferenial:


dx (t )
= x ; x ( 0) = 1
dt

(5.28)

Soluia exact a acestei ecuaii este cunoscut:


xe ( t ) = e t

113

(5.29)

% Se defineste functiunea:
f = @(x,t) x;
% Pasul de discretizare,
h =0.1;
% limita de timp :
tm=1;
% Rezolvarea ecuatiei
[t,x]=edEulerExp(f, tm, h, 1);
% Rezultatele se gasesc
% in tablourile t si x.
% Solutia exacta :
xe=exp(t);
% Reprezentarea grafica :
plot (t,xe,'r',t,x,'b')
grid
title('Euler 1 dx/dt=x, x0=1');
legend('exact','Eul.exp','Location',
'SouthEast')

Euler 1 dx/dt=x, x0=1


2.8
2.6
2.4
2.2
2
1.8
1.6
1.4
1.2
1

exact
Eul.exp
0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

S se rezolve ecuaia diferenial:


dx(t )
= x ; x(0) = 1
dt

(5.30)

Soluia exact a acestei ecuaii este cunoscut:


xe (t ) = e t
1
% Se defineste functiunea:
f = @(x,t) -x;
0.9
% Pasul de discretizare,
0.8
h =0.1;
% limita de timp :
0.7
tm=1;
% Rezolvarea ecuatiei
0.6
[t,x]=edEulerExp(f, tm, h, 1);
% Rezultatele se gasesc
0.5
% in tablourile t si x.
0.4
% Solutia exacta :
xe=exp(-t);
0
0.1
0.2
0.3
% Reprezentarea grafica :
plot (t,xe,'r',t,x,'b')
grid
title('Euler 1 dx/dt=x, x0=1');
legend('exact','Eul.exp','Location','NorthhEast')

S se rezolve ecuaia diferenial:


dx(t )
= t 2 x ; x(0) = 1
dt

(5.31)
exact
Eul.exp

0.4

0.5

0.6

0.7

0.8

0.9

(5.32)

Soluia exact a acestei ecuaii este cunoscut:


xe (t ) = 2t 1 + 5e2t

114

(5.33)

Metode numerice.

% Se defineste functiunea:
f = @(x,t) t-2*x;
% Pasul de discretizare,
h =0.1;
% limita de timp :
tm=1;
% Rezolvarea ecuatiei
[t,x]=edEulerExp(f, tm, h, 1);
% Rezultatele se gasesc
% in tablourile t si x.
% Solutia exacta :
xe=(2*t-1+5*exp(-2*t))/4;
% Reprezentarea grafica :
plot (t,xe,'r',t,x,'b')
grid
title('Euler 1 dx/dt=x, x0=1');
legend('exact','Eul.exp'
,'Location','NorthhEast')

1
exact
Eul.exp

0.9

0.8

0.7

0.6

0.5

0.4

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

S se rezolve ecuaia diferenial precedent:


dx(t )
= t 2 x ; x(0) = 1
dt

0.9

(5.34)

cu diferii pai n timp.


Euler 1 dx/dt=t-2x, x0=1 Met. explicita
1

% Fisier edEulerExpTestPasIntegrare.m
t=0:0.2:2;
xexact=(2*t-1+5*exp(-2*t))/4;

0.9
0.8
0.7
0.6

f = @(x,t) t-2*x;

0.5
0.4

pas=[0.1 0.2 0.5];

0.3

[t1,x1]=edEulerExp(f, 2, pas(1), 1);


[t2,x2]=edEulerExp(f, 2, pas(2), 1);
[t3,x3]=edEulerExp(f, 2, pas(3), 1);

ex
h=0.1
h=0.2
h=0.5

0.2
0.1
0

0.2

0.4

0.6

0.8

1.2

1.4

1.6

1.8

plot (t,xexact,'r',t1,x1,'b',t2,x2,'g',t3,x3,':')
grid
title('Euler 1 dx/dt=t-2x, x0=1 Met. explicita');
legend('ex','h=0.1','h=0.2','h=0.5','Location','SouthEast')

Dup cum era de ateptat, alegerea unui pas de integrare mai mic conduce la rezultate mai
bune.

Rezolvarea sistemelor de ecuaii difereniale prin metoda Euler explicit.


Metoda Euler explicit poate fi implementat cu uurin i n cazul unor sisteme de ecuaii
difereniale de ordinul 1 fiecare.
n cazul Matlab, abordarea este simplificat datorit facilitilor referitoare la operaiile cu
matrice oferite de acest mediu.
Ca urmare, exemplu de cod prezentat mai sus de rezolvare a unei ecuaii difereniale prin
metoda Euler explicit poate fi transpus cu uurin pentru cazul sistemelor de ecuaii.

115

function [t,x] = edEulerExpSist(F,tn,h,z0)


% Metoda Euler explicita
% Fisier edEulerExpSist.m
% Sistem de ecuatii diferentiale
% dz/dt=F(z,t)
z =[z1 ; z2 ; ..]
% Conditii initiale
z0=[z10; z20; ..]
% Membrul drept: F =@(z,t)[F1 ; F2 ; ..]
t=0:h:tn;
nt=length(t);
z=z0;
% Primul pas - din conditiile initiale
x=z ;
% x = pentru stocarea rezultatelor
for j=2:nt % Pasii de integrare urmatori
z = z + h*F(z,t(j-1));
x=[x z];
end

Exemple :

S se rezolve sistemul de dou ecuaii difereniale:


dx (t )
dt = y; x (0) = 0
dy (t )

= x; y (0) = 1
dt

(5.35)

Soluia exact este :


x (t ) = sin(t )

y (t ) = cos(t )

(5.36)

Cele dou funciuni necunoscute x(t) i y(t) vor fi grupate n vectorul z=[x; y].
% Definirea membrului drept :
>> F=@(z, t) [z(2); -z(1)];
>> tm=8;
>> h=0.1;
>> z0=[0; 1];
>> [t,z] = edEulerExpSist(F,tm,h,z0)
% Solutia exacta :
>> xexact=sin(t);
>> yexact=cos(t);
% Reprezentarea grafica
>> plot (t,xexact,':r', t, z(1,:), 'b')
>> grid
>> legend('exact','numeric')

1.5
exact
numeric

1
0.5
0
-0.5
-1
-1.5

Not : acelai exemplu este tratat n fiierul edEulerExpSistTest2.m fr a face apel la


funciunea edEulerExpSist.m

116

Metode numerice.

S se rezolve sistemul de trei ecuaii difereniale:


dz1 (t )
; z1 (0) = 0
dt = z2 z3
dz (t )
2
= z1 z3
; z2 (0) = 1

dt

dz3 (t ) = 0.51z1 z 2 ; z3 (0) = 1


dt

(5.37)

Acest sistem este preluat din helpul programului Matlab referitor la funciunea ode23.
>> F=@(z, t) [z(2)*z(3) ; -z(1)*z(3) ; -0.51 * z(1)*z(2)];
>> tm=8;
1.5
>> h=0.1;
1
>> z0 =[ 0 ; 1 ; 1];
0.5
>> [t,x] = edEulerExpSist(F,tm,h,z0);
% Reprezentarea grafica
0
>> plot(t,x(1, :),'r',t,x(2,:),'b',t,x(3,:),'g')
-0.5
>> grid
>> legend ('z1','z2','z3');
-1
-1.5

z1
z2
z3
4

Not : acelai exemplu este tratat n fiierul edEulerExpSistTest3.m fr a face apel la


funciunea edEulerExpSist.m

5.5.2

Metoda Euler implicit.

Algoritmul de rezolvare a unei ecuaii difereniale ordinare prin metoda Euler explicit de
ordinul 1 poate fi prezentat prin urmtoarea funciune Matlab:

function [t,x] = edEulerImp(f,tn,h,x0 ,itmax,ermax)


% Metoda Euler implicita de ordinul 1
% Fisier edEulerImp.m (contine unele elemente suplimentare)
% Ec. diferentiala dx/dt = f(x,t), x(0)=x0
% tn = val. limita a lui t
% h = pasul de integrare (constant)
% x0 = conditia initiala
% itmax = nr.max. de iteratii
% ermax = eroarea max. adm
% Output:
% t = vectorul variabilei independente: t(j) = (j-1)*h
% x = vectorul solutiei numerice in momentele t(j)
t = (0:h:tn)'
; % Vector coloana al momentelor cu pasul h
n = length(t)
; % Numarul elementelor vectorului t
x = x0*ones(n,1); % Prealocare x pentru viteza
if nargin ==4
itmax=10;
ermax=1.e-3;
end

% Daca nu se impun:
%
nr.max. de iteratii
%
eroarea admisibila
% atunci se adopta valori standard

% Euler; j=1 : conditia initiala deja stocata in x


for j=2:n
117

x(j) = x(j-1) + h*f(x(j-1),t(j-1));


% Prima estimare cu met. explicita (predictor)
% Rezolvarea ecuatiei xnou=x(j-1)+h*f(xnou,t)
% Iteratii simple (corector)
it =0;
err=1;
xnou=x(j);
while ((it<itmax) && (err>ermax))
xv
= xnou;
xnou = x(j-1) + h*f(xv,t(j));
err = abs(xv - xnou);
it
= it+1;
end
x(j)=xnou;
end

Elementele suplimentare fa de metoda explicit sunt ncadrate, pentru a facilita compararea


dintre cele dou metode.
O prim estimare a noii valori se face folosind metoda Euler explicit. Aceasta se mai
numete predictor.
Urmeaz secvena de cod care rezolv ecuaia implicit (folosind notaia din rel.5.21):
x * = x + hk y ( x * , t * )
(5.38)
prin metoda iteraiilor simple. Aceasta se mai numete corector.

Rezolvarea sistemelor de ecuaii difereniale prin metoda Euler implicit.


Algoritmul poate fi adaptat pentru rezolvarea sistemelor de ecuaii difereniale, analog cu
cazul tratat mai sus, al metodei Euler explicite.
function [t,x] = edEulerImpSist(F,tn,h,z0 , itmax, ermax)
% Metoda Euler implicita sisteme de ecuatii
% Fisier edEulerImpSist.m
% Sistem de ecuatii diferentiale
% dz/dt=F(z,t)
z =[z1 ; z2 ; ..]
% Conditii initiale
z0=[z10; z20; ..]
% Membrul drept: F =@(z,t)[F1 ; F2 ; ..]
if nargin ==4
% Daca nu se impun:
%
nr.max. de iteratii
itmax=10;
ermax=1.e-3;%
eroarea admisibila
end
% atunci se adopta valori standard
t=0:h:tn;
nt=length(t);
z=z0;
% Primul pas - din conditiile initiale
x=z ;
% x = pentru stocarea rezultatelor
for j=2:nt % Pasii de integrare urmatori
zactual=z;
z = z + h*F(z,t(j-1));
% Prima estimare cu met. explicita (predictor)
% Iteratii (corector)
it =0;
err=1;
znou=z;

118

Metode numerice.

while ((it<itmax) && (err>ermax))


zv=znou;
znou = zactual + h*F(znou,t(j));
err = norm(zv - znou);
it
= it+1;
end
z=znou;
x=[x z];
end

Dou dintre exemplele de mai sus sunt tratate prin metoda implicit n fiierele:

edEulerImpSistTest2.m
edEulerImpSistTest3.m

5.5.3

Comparare ntre metodele Euler explicit i implicit.

Exemplul care urmeaz ilustreaz comparaia dintre metodele Euler explicit i implicit, din
punctul de vedere al erorii (calculat fat de soluia cunoscut) i al numrului de evaluri al
funciunii din membrul drept.
Pentru aceasta, se folosete o variant modificat a funciunii de rezolvare prin metoda
implicit, care furnizeaz suplimentar numrul de evaluri ale funciunii (fiierul
edEulerImpEval.m) cu apelul:
[t,xi,nEvalI]=edEulerImpEval(f, tm, h, 1, itmaxI,ermaxI);

Exemplu: fisierul edEulerExpImpComparareNeval.m (adaptat dup [7] ):


% Compararea metodelor Euler Explicita-Implicita
% in functie de pasul de integrare
% Fisier edEulerExpImpComparareNeval.m
tm=4;
f = @(x,t) -x;
itmaxI =10;
% Pt. metoda implicita
ermaxI = 1.e-3;
fprintf('\nComparare intre metodele Euler Explicita-Implicita
x');
fprintf('\n
Met.implicita: itmax, ermax= %3d %6.3e',itmaxI,
fprintf('\n
h
nEvalE
errE
nEvalI
errI\n');
for h = [0.4 0.2 0.1 0.05 0.025 0.0125 0.00625]
[t,xe]=edEulerExp
(f, tm, h, 1);
nEvalE =
tm/h ;
[t,xi,nEvalI]=edEulerImpEval(f, tm, h, 1, itmaxI,ermaxI);
xex=(exp(-t));
errE = max(abs(xe-xex)); errI = max(abs(xi-xex));
fprintf('%8.5f %7d %11.2e %7d
%11.2e\n',h,nEvalE,errE,nEvalI,errI);
end

119

dx/dt=ermaxI);
% Euler
% SPEC.

Rezultatele:
Comparare intre metodele Euler Explicita-Implicita dx/dt=-x
Met.implicita: itmax, ermax= 10 1.000e-003
h
nEvalE
errE
nEvalI
errI
0.40000
10
8.93e-002
54
6.32e-002
0.20000
20
4.02e-002
55
3.42e-002
0.10000
40
1.92e-002
66
1.73e-002
0.05000
80
9.39e-003
99
9.07e-003
0.02500
160
4.65e-003
160
4.78e-003
0.01250
320
2.31e-003
320
2.35e-003
0.00625
640
1.15e-003
640
1.16e-003

Observaie:
Eroarea estimat n corpul funciunii edEulerImp reprezint abaterea ntre dou
valori succesive ale necunoscutei. Eroarea afiat n tabelul recapitulativ este calculat
fa de soluia exact, deci este altceva.

5.5.4

Aplicaii n simularea regimurilor tranzitorii n circuitele electrice.

Se prezint cteva exemple de simulare a regimurilor tranzitorii simple.


Trebuie ns precizat c, n cazurile mai complicate, este indicat utilizarea unor programe
specializate. Asupra acestora, se va reveni ulterior.

Circuit electric liniar RL serie (fig.5.1).

Ecuaia circuitului se aduce la forma canonic:


d i (t ) e(t ) R
=
i (t )
dt
L
L

(5.39)

S-au modelat patru situaii, n funciune de alimentarea circuitului:

Tensiune continu U0:


e(t ) = U 0

(5.40)

Tensiune scztoare exponenial:


t

e(t ) = U 0 e ; =
R

(5.41)

Impuls dreptunghiular de tensiune:


e(t ) = U 0 (1 1(t t0 ) )

(5.42)

Simbolul 1(t) desemneaz funciunea treapt-unitate (funciunea lui Heaviside),


definit prin relaiile:
0 t < 0
1(t ) =
(5.43)
1 t > 0
Aceasta este implementat n Matlab prin funciunea heaviside (t), care nu este definit n
punctul t=0 (ceace a implicat adaugarea unei valori mici care s evite evaluarea funciei pentru t=0.

Tensiune sinusoidal:
e(t ) = U 0 sin(2 f t )

(5.44)

Toate aceste cazuri au fost simulate prin ambele metode Euler: explicit i implicit.
120

Metode numerice.

% Fisier edEulerCircuitRL.m
% Circuit RL, tensiune continua
U=1;
R=1;
L=1;
tauRL=L/R;
tm=3*tauRL;
dt=tm/10;
iRL=@(i,t) (U/L - R / L * i);
[t,irle]=edEulerExp(iRL, tm , dt ,0);
[t,irli]=edEulerImp(iRL, tm , dt ,0);
subplot(2,2,1);
plot(t,irle,'r',t,irli,'b')
legend('Expl','Impl','Location','SouthEast')
title ('Circuit RL tensiune continua')
grid
% Circuit RL, tensiune scazatoare exponential
iRL=@(i,t) (U*exp(-t/tauRL)/L - R / L * i);
[t,irle]=edEulerExp(iRL, tm , dt ,0);
[t,irli]=edEulerImp(iRL, tm , dt ,0);
subplot(2,2,2);
plot(t,irle,'r',t,irli,'b')
legend('Expl','Impl','Location','NorthEast')
title ('Circuit RL tensiune scazatoare exponential')
grid
% Circuit RL, impuls de tensiune de durata t0
t0=tm/2;
dt=tm/50;
iRL=@(i,t) (U*(1-heaviside(t-t0+1.e-6))/L - R / L * i);
%
ca sa evite heav(0)=NAN
[t,irle]=edEulerExp(iRL, tm , dt ,0);
[t,irli]=edEulerImp(iRL, tm , dt ,0);
subplot(2,2,3);
plot(t,irle,'r',t,irli,'b')
legend('Expl','Impl','Location','SouthEast')
title ('Circuit RL - impuls de tensiune')
grid
% Circuit RL, tensiune sinusoidala
f=50;
T=1/f;
tm=1;
dt=T/20;
beta=pi()/6;
iRL=@(i,t) (U*sin(2*pi()*f*t-beta)/L - R / L * i);
[t,irle]=edEulerExp(iRL, tm , dt ,0);
[t,irli]=edEulerImp(iRL, tm , dt ,0);
subplot(2,2,4);
plot(t,irle,'r',t,irli,'b')
legend('Expl','Impl','Location','NorthEast')
title ('Circuit RL - tensiune sinusoidala')
grid

121

Circuit RL tensiune continua

Circuit RL tensiune scazatoare exponential


0.8
Expl
0.6
Impl

0.5

0.4
Expl
Impl

0.2
0

Circuit RL - impuls de tensiune


0.8

10

0.6

-3
Circuit
x 10 RL - tensiune sinusoidala

Expl
Impl

0.4
0.2
0

Expl
Impl
0

-5

0.5

Circuit electric liniar RLC serie sub tensiune la borne continu.


t=0

Fig. 5.5
i(t)
U

L
C

Circuit RLC serie sub tensiune la


borne continu.

+q

Ecuaia diferenial a circuitului este, dup cuplarea din momentul t=0:


d i (t )
q( t )
dq
L
+ R i (t ) +
= U; i =
dt
C
dt
Prin aducerea la forma canonic, se obine un sistem de dou ecuaii difereniale:
dq
i (0) = 0
dt = i;

d i (t ) = U R i 1 q; q(0) = 0
dt
L L
LC
Necunoscutele q(t) i i(t) pot fi grupate intr-un vector :
z = [ q ; i ]; z0 = [0 ; 0]

(5.45)

(5.46)

(5.47)

Soluia exact prezint mai multe regimuri posibile, n funciune de datele circuitului [11].
Un program de test este inclus n fiierul edEulerCircuitRLC.m.
Partea iniial a acestuia este urmtoarea:
% Circuit RLC, tensiune continua
% Metoda Euler
% Fisier edEulerCircRLC.m

122

Metode numerice.

% Datele circuitului
U= 1
;
R= 2
;
L= 2
;
C= 0.1 ;
tm= 4;
h = 0.05;
% z = [q ; i]
z0= [0 ; 0]; % Conditii initiale nule q(0)=0 i(0)=0
F = @(z,t) [z(2) ; U/L - R/L * z(2) - z(1)/(L*C)];
[t,zexpl]=edEulerExpSist(F, tm , h , z0);
[t,zimpl]=edEulerImpSist(F, tm , h , z0, 100, 1.e-6);
% Solutia exacta:
iexact=RLC(U, R, L, C, t);
etc restul (reprezentarea grafica) se afla in fisierul anexat.
Tabloul 5.1: Comportement tranzitoriu al unui circuit R-L-C serie sub tensiune continu la borne.
Regim
Aperiodic

Condiie

R>2

L
C

Soluia

i=

U 0 t
e sh (t )
L
i(t)

t
Aperiodic critic.

R=2

L
C

i=

U 0 t
te
L
i(t)

t
Periodic sinusoidal amortizat

R<2

L
C

U 0 t
e sin( t );
L
= 0

i=

i(t)

t
Periodic sinusoidal.

R=0

i=

U0
sin( 0t )
0 L

i(t)

Soluia exact este furnizat de ctre funciunea RLC.m ( furnizat).


Pentru datele prezentate mai sus, se obin rezultatele urmtoare.

123

q(t) Metoda explic ita

q(t) Metoda implic ita

0.2

0.2

0.15

0.15

0.1

0.1

0.05

0.05

i(t) Metoda explicita


0.2

Fig. 5.6

0.3
num
exac t

0.1

0.1

-0.1

0
0

num
exact

0.2

-0.2

i(t) Metoda implic ita

-0.1

Circuit RLC serie sub tensiune la borne continu.

Chestiuni de studiat:

Influena parametrilor circuitului (R, L, C) asupra naturii regimului de funcionare.

Influena pasului n timp asupra rezultatelor numerice.

De studiat exemplele n care, n urma studiilor evocate mai sus, unele soluii pot
prezenta erori semnificative (spre exemplu: instabiliti, lipsa convergenei, etc.).
Asupra acestor aspecte se va reveni ulterior.

5.5.5

Integrarea direct a sistemelor de ecuaii difereniale prin metoda Euler.


Aplicaii n studiul circuitelor electrice.

n mod tradiional, n elaborarea algoritmilor de integrare numeric a a ecuaiilor i a


sistemelor de ecuaii difereniale, se pleac de la forma canonic a acestora. Aceast
abordare prezint avantajul de a beneficia de studii matematice aprofundate, pornind de la
teoria calitativ a ecuaiilor difereniale.
n practic, ecuaiile difereniale deduse pornind de la legile fenomenelor studiate nu se
prezint de la nceput sub forma canonic.
n cazul unei singure ecuaii difereniale, aducerea sa la forma canonic este banal.
n schimb, n cazul sistemelor de ecuaii difereniale, aducerea la forma canonic poate
prezenta probleme.
Un exemplu tipic este cel al circuitelor electrice n regimuri tranzitorii.
n teoria circuitelor electrice, se demonstreaz c evoluia n timp a circuitului poate fi integral
descris de ansamblul mrimilor de stare, care sunt:

sarcinile electrice ale tuturor condensatoarelor

fluxurile magnetice din toate bobinele


(nu intrm n unele detalii, e vorba doar de principiul general).

Prin urmare, forma canonic a ecuaiilor difereniale ale unui circuit electric este de forma:

124

Metode numerice.

d q
= F(q, , t )
dt

(5.48)

cu condiiile iniiale exprimate prin valorile iniiale ale sarcinilor electrice ale tuturor
condensatoarelor i ale fluxurilor magnetice din toate bobinele:
q
q(0)
(5.49)
= (0)
t =0

Metoda de studiu al circuitelor care presupune ecuaiile aduse la aceast form canonic se
numete metoda variabilelor de stare. Ea este des invocat, n special n studiile calitative,
deoarece dispune de un aparat matematic bine stabilit.
Ecuaiile circuitului, indiferent de metoda folosit (ecuaiile lui Kirchhoff sub forma lor
originar, sau metoda potenialelor la noduri, sau metoda Kirchhoff-Joubert [11] ), nu se obin
ns sub aceast form.
Aducerea ecuaiilor circuitului la forma canonic se dovedete, din pcate, un proces relativ
complicat (n cazul circuitelor de mare complexitate) i supus unor restricii impuse modelului
circuitului [11] (asupra crora nu se va insista n contextul de fa). Evident, n cazurile
simple (cum este cel al circuitului RLC studiat mai sus), aducerea sistemului la forma
canonic nu prezint dificulti.
Din aceste motive, apare ca interesant abordarea direct a ecuaiilor, sub forma lor originar,
fr le aduce la forma canonic.

5.5.5.1

Generarea ecuaiilor circuitelor electrice.

Ecuaiile unei reele electrice au forma generic urmtoare :

[T ][x] = [g ]

(5.50)

unde :
[ T ] este tabloul (patrat) al coeficienilor sistemului ;
[x]

este vectorul necunoscutelor ;

[g]

este vectorul termenilor liberi (provenind de la surse).

Coeficienii din tabloul [ T ] sunt operatori integro-difereniali, de forma :


t

T ij = aij + d ij

d
+ sij dt
dt
0

(5.51)

iar elementele vectorilor [x] i [g] sunt funciuni reale de timp xi(t) i gi(t).
Un astfel de sistem este integro - diferenial.

125

Exemplu:

Metoda ecuaiilor lui Kirchhoff:

L1 [a]
i1
R1
e1

*L
12
(1)

R3

L2 (2)

i 3 [b] i 4
i5

Fig. 5.7 Exemple de scriere a


ecuaiilor lui Kirchhoff.

R2

C (3)

i2

e2

(nod a ) i1 i2 + i3 = j
(nod b) i i i = j
4
5
3

(bucla 1) R i + L di1 + L di2 + L di2 + L di1 = e


11
1
2
12
12
1

dt
dt
dt
dt

(bucla 2) R i + 1 i dt + q(0) L di2 L di1 = 0


3 3
5
2
12

C
C
dt
dt

1
q (0)
(bucla 3) R2i4 + i5 dt +
= e2

C
C
Sub forma generic, sistemul devine:
1
1
0
0
1

0
0
1 1
1 i j

j
d
d

i2

0
0
R1 + ( L1 + L12 ) dt ( L2 + L12 ) dt 0
e1

* i3 =

d
d
1
0

i
L12
L2
R3 0
dt
4

dt
dt
C

q
(0)
i5 e2

{
1
C 3

14
24
0
0
0 R4
dt
x
[
]
C 3
1444444444
[g]
424444444444

(5.52)

(5.53)

[T ]

Exemplu:

Metoda potenialelor la noduri:


d
1
1
1

1
de
L dt + C dt + R
R1 v1 j2 + e1dt C 2
1

* =
L
dt

1
1
1 v2

j1 j2

+ {

1444
4
2444
4
3
R1
R1 R2 [ x ]
144444
2444443
[g]
[T ]

Este evident c n cazul circuitelor mai complexe, scrierea cu mna a ecuaiilor nu mai este
posibil.

126

Metode numerice.

Din acest motiv, s-au dezvoltat programe de simulare numeric a circuitelor electrice. Un
astfel de program prezint, n principiu, urmtoarea structur, cu trei module principale:
1. Un modul de descriere a circuitului ( preprocesorul ). Aceast descriere poate fi
fcut fie printr-un fiier text, ntr-un limbaj de descriere specific, fie cu ajutorul unui
program de desen specializat, capabil s furnizeze aceast descriere. Anumite pri ale
circuitului pot fi descrise separat, sub forma de modele , care pot fi stocate n biblioteci
de modele.
2. Un modul de simulare ( procesorul ), care face cea mai mare parte a muncii . Acest
modul preia datele circuitului, efectueaz calculele i, cel mai adesea, depune rezultatele
n fiiere de rezultate, pentru analiza ulterioar.
3. Un modul de prezentare a rezultatelor ( postprocesorul ), care preia rezultatele
salvate, pentru a le prezenta sub forma dorit, cel mai adesea sub forma de grafice, sau
pentru a realiza diverse tratamente.
Fisier de descriere
a circuitului

Date

Biblioteca de
modele

Fig. 5.8
Simulare

Fisier de
rezultate

Structura generic a unui


program de simulare a
circuitelor electrice.

Rezultate

xxxx.xxxx
xxxx.xxxx

Se poate observa o specializare a acestor programe, dac ne limitm numai la cele destinate
simulrii circuitelor numite analogice , n dou mari categorii :


Programe specializate n principal n simularea reelelor de energie (cum ar fi EMPT,


ATP i altele), sau EUROSTAG.

Programe specializate n principal n simularea circuitelor electronice (cum ar fi SPICE


i numeroii si descendeni ).

Aceasta nu exclude prezena unor programe mai puin specializate, care pot acoperi
ambele domenii [16], sau a unor programe complementare ale unor aplicaii cu caracter
generalist (cum ar fi, spre exemplu, modulul Power System Blockset n ultimele
versiuni ale programului Matlab-Simulink, care utilizeaz module deja prezente n
Matlab, adaptate problemei de simulare a circuitelor electrice) [2].

Astfel de programe exist pentru o multitudine de sisteme de operare, de la calculatorul


personal sub Windows sau Macintosh, trecnd prin staiile Unix/Linux, pn la marile sisteme
( mainframes ).

5.5.5.2

Rezolvarea numeric a sistemului de ecuaii.

Ca n toate cazurile, se discretizeaz timpul, iar sistemele de ecuaii (integro-) difereniale se


transform n ecuaii algebrice.
n principiu, se poate adopta oricare metod de rezolvare a sistemelor difereniale.
127

n cele ce urmeaz, va fi prezentat abordarea bazat pe metoda Euler implicit de ordinul


1. Aceast opiune este justificat prin faptul c ea asigur stabilitatea, chiar n condiiile unor
circuite cu scri de timp foarte diferite (sisteme stiff).
Considernd, pentru simplitate, un pas n timp constant h, derivatele i integralele variabilelor
se vor exprima prin relaiile:
dx
x* x

(5.54)
dt t*
h
t*

h *
0 xdt I t + 2 ( x + x ); I t = 0 xdt

(5.55)

Aceste formule corespund unei interpolri liniare a funciunii x(t) pe intervalul unui pas de
discretizare (conform cu fig.5.4).
Ca i mai sus, s-au notat cu x,t valorile variabilelor i ale timpului n momentul curent (valori
actuale), iar cu x*,t* valorile din urmtorul punct de calcul (valorile noi).
Prin urmare, n intervalul (t, t*), sistem de ecuaii discretizate devine :
d
h
aij x*j + hij ( x*j x j ) + sij I j + sij 2 ( x*j + x j )] = gi ; i = 1, 2,...

(5.56)

Dup cteva transformri elementare, se ajunge la sistemul algebric urmtor, care trebuie
rezolvat pentru fiecare pas de integrare :

[T ][x ] = [g ]
*

(5.57)

Coeficienii sunt :
gi* = gi + Kij x j sij I j

j
j

* d ij h
+ sij + aij
Tij =
h 2

d ij h

Kij = h 2 sij

(5.58)

Dup fiecare pas de integrare, valorile Ij ale integralelor trebuie s fie recalculate, prin
relaia :
h
I j = I j + ( x*j + x j ); j = 1,2,...
(5.59)
2
Algoritmul generic de rezolvare este urmtorul :
//Algoritm generic de rezolvare a sistemului de ecuaii
//integro-difereniale [T][x]=[g]
//Metoda Euler implicita de ordinul 1
//Variabile:
N
t
h

//talia sistemului = numrul de necunoscute


//timpul
//pasul(local) de discretizare

128

Metode numerice.

tf

//valoarea final a timpului de calcul

[x] //tabloul valorilor curente ale variabilelor (N)


[x*] //tabloul noilor valori ale variabilelor (N)
[g] //vectorul termenilor liberi (N)
[g*] //vectorul de calcul (N)
[T*] //tabloul patrat
(N,N) al coeficienilor
[K] //tablou auxiliar (N)
[I]

//vector auxiliar(integrale)(N)

//Lectura datelor
Citeste N, tf, datele circuitului.
//Iniializare:
t=h
[x]<= condiii iniiale
//Pai n timp:
CtTimp t <= tf
Dac h # h precedent, sau dac primul pas, atunci:
//Calculeaza matricile coeficienilor
[T*], [K] , [g*]
//(relaiile (5.58))
end // dac h#h precedent
//Rezolv sistemul:
[T*] [x*] = [g*] => [x*]
//Prepar pasul urmtor:
t += h
Pentru j=1 la N : Ij=... (formula 5.59));
[x] = [x*]
end //CtTimp t<=tf

Observaii :

Rezolvarea sistemului de ecuaii algebrice obinut prin discretizare se poate face printruna din metodele uzuale (eliminarea Gauss, factorizare LU, etc.). Aceast etap a
algoritmului este, de departe, cea mai costisitoare n timp de calcul, i este cea care trebuie
optimizat n primul rnd.

n general, matricea coeficienilor [T*] este rar . Aceast particularitate poate fi


exploatat prin tehnici de programare adecuate. Factorizarea LU este bine adaptat n
acest sens.

Atta timp ct pasul de discretizare a timpului nu se schimb, coeficienii T* nu se


modific. Dac se utilizeaz metoda de rezolvare prin factorizare LU, factorizarea
matricei coeficienilor rmne valabil atta vreme ct pasul n timp nu se modific.
ntruct factorizarea este etapa cea mai costisitoare n timp de calcul, se poate obine un
ctig semnificativ. Dar aceasta depinde, evident, de regimul de funcionare a circuitului.

n anexa 8.2 este prezentat un program Matlab de simulare numeric a circuitelor electrice n
regim variabil, folosind metoda potenialelor la noduri.

129

5.6 Metode de ordin superior.


S-au dezvoltat metode cu un singur pas de integrare, dar de ordin superior metodei lui Euler
(care este de ordinul 1).
n principiu, aceasta se obine prin evaluarea funciunii (membrului drept) n mai multe
puncte intermediare pe parcursul unui pas de integrare. Procedura rmne ns cu un singur
pas, n sensul c nu sunt utilizate valori ale funciunii anterioare punctului curent (cum se
procedeaz n cazul metodelor cu mai muli pai).
Unele dintre metodele din aceast categorie sunt prezentate n taloul care urmeaz, mpreun
cu ordinul de mrime al erorii de discretizare globale (GDE Global Discretisation Error n
literatura n limba englez) n funciune de pasul de discretizare h (presupus fix).

5.6.1

Metoda

GDE

Euler

O(h)

Metoda punctului median (Midpoint)

O(h2)

Runge - Kutta

O(h4)

Metoda punctului median.

n aceast metod, funcia (din membrul drept) este evaluat de cte dou ori n fiecare pas de
integrare, respectiv n punctul curent i n punctul situat la mijlocul pasului n curs:
k 1 = f ( x, t )

h
h
(5.60)
k 2 = f ( x + 2 k1 , t + 2 )
xnou = x + h k2
Un exemplu de cod Matlab este urmtorul:
function [t,x] = edMidPt(f,tn,h,x0)
% Metoda Punctului median MidPoint
% Fisier edMidPoint.m
% Ec. diferentiala dx/dt = f(x,t), x(0)=x0
% tn = val. limita a lui t
% h = pasul de integrare (constant)
% x0 = conditia initiala
% Output:
% t = vectorul variabilei independente: t(j) = (j-1)*h
% x = vectorul solutiei numerice in momentele t(j)
t = (0:h:tn)'
; % Vector coloana al momentelor cu pasul h
n = length(t)
; % Numarul elementelor vectorului t
x = x0*ones(n,1); % Prealocare x pentru viteza
h2=h/2;
% j=1 : conditia initiala deja stocata in x
for j=2:n
k1=f(x(j-1),t(j-1));
k2=f(x(j-1)+h2*k1,t(j-1)+h2);
x(j) = x(j-1) + h*k2;
end

130

Metode numerice.

Exemplu:
Se compar rezultatele furnizate de metodele Euler explicit i MidPoint cu soluiile exacte
pentru trei ecuaii difereniale diferite:
% Comparare Metode Euler - Midpoint
% Fisier edMidPtTest.m
f = @(x,t) x;
[t,xm]=edMidPt
(f, 1, 0.1, 1);
[t,xe]=edEulerExp(f, 1, 0.1, 1);
xx=exp(t); % Exact
subplot(3,1,1);
plot (t,xx,':r',t,xm,'b',t,xe,'g')
grid
title ('MidPoint - Euler: dx/dt=x,
x0=1');
legend('ex','MidPt','Euler','Location',
'NorthWest')
f = @(x,t) -x;
[t,xm]=edMidPt
(f, 1, 0.1, 1);
[t,xe]=edEulerExp(f, 1, 0.1, 1);
xx=exp(-t); % Exact
subplot(3,1,2);
plot (t,xx,':r',t,xm,'b',t,xe,'g')
grid
title ('dx/dt=-x, x0=1');
f = @(x,t) t-2*x;
[t,xm]=edMidPt
(f, 2, 0.1, 1);
[t,xe]=edEulerExp(f, 2, 0.1, 1);
xx =(2*t-1+5*exp(-2*t))/4;
subplot(3,1,3);
plot (t,xx,':r',t,xm,'b',t,xe,'g')
grid
title ('dx/dt=t-2x, x0=1');

MidPoint - Euler: dx/dt=x, x0=1


3
ex
MidPt
Euler

2.5
2
1.5
1

0.2

0.4

0.6

0.8

0.8

dx/dt=-x, x0=1
1
0.8
0.6
0.4
0.2

0.2

0.4

0.6

dx/dt=t-2x, x0=1
1
0.8
0.6
0.4
0.2

0.5

1.5

O estimare vizual pune n eviden faptul c rezultatele furnizate de metoda punctului


median, n cazurile studiate, sunt mult mai apropiate de cele exacte dect cele furnizate de
ctre metoda Euler. Aceast observaie este n acord cu ordinul de mrime al erorii globale n
funciune de pasul de discretizare.
Pentru o comparare mai detaliat a celor dou metode, trebuie avute n vedere elementele
urmtoare:

Metoda punctului median necesit de dou ori mai multe evaluri ale funciunii, ceeace
reprezint, evident, un factor penalizant.

Avnd n vedere ordinele de mrime ale erorii de discretizare ale celor dou metode,
este posibil ca, pentru o aceeai eroare, s se adopte pai de discretizare mai mari n
metoda punctului median, ceeace poate compensa dezavantajului precedent.
Spre exemplu, n cazul metodei Euler, pentru un pas de discretizare h=0.1, eroarea
global de discretizare este de ordinul O(h)=O(0.1). Pentru acelai pas de discretizare,
metoda punctului median conduce la o eroare de discretizare de ordinul O(h2)=O(0.01).
Pentru a se obine o asmenea eroare cu metoda Euler, este necesar ca pasul de integrare
131

s fie redus de 10 ori, ceeace, coroborat cu primul punct, arat c, n cazul considerat,
pentru erori de avelai ordin de mrime, metoda punctului median necesit n linii mari
de cinci ori mai puine calcule.
Exist i alte abordri similare (cum ar fi metoda Heun), n care estimarea suplimentar se
face la sfritul pasului de integrare.
Dezvoltri ale principiului conduc la metodele Runge Kutta.

Comparare ntre metoda Euler explicit i metoda punctului median [7].


Se consider urmtorul cod Matlab (adaptat dup [7] ):
% Compararea metodelor Euler si MidPoint
% pentru ecuatia dx/dt = -x; x(0) = 1
% Fisier edEulerMidPtComp.m
F=@(x, t) -x ;
tn = 1; x0 = 1;
fprintf('\nComparare intre metodele Euler Explicita-MidPoint dx/dt=x');
h
nEvalE
errE
nEvalM
errM\n');
fprintf('\n
for h = [0.2 0.1 0.05 0.025 0.0125 0.00625]
[te,xe] = edEulerExp(F,tn,h,x0); nEvalE =
tn/h; % Euler
[tm,xm] = edMidPt
(F,tn,h,x0); nEvalM = 2*tn/h; % Midpoint
xex = x0*exp(-te); % Solutia exacta t
errE = max(abs(xe-xex));
errM = max(abs(xm-xex)); % GDE
fprintf('%8.5f %7d %11.2e %7d %11.2e\n',h,nEvalE,errE,nEvalM,errM);
end

n care se compar cele dou metode, din urmtoarele puncte de vedere:

numrul de evaluri ale funciunii nEvalE (Euler), respectiv nEvalM (MidPoint);

eroarea global de discretizare errE, respectiv errM,

pentru cazul particular al ecuaiei difereniale


dx
= x; x(0) = 1
dt

(5.61)

i pentru diveri pai de discretizare h.

Rezultate:
Comparare intre metodele Euler Explicita-MidPoint dx/dt=-x
h
nEvalE
errE
nEvalM
errM
0.20000
5
4.02e-002
10
2.86e-003
0.10000
10
1.92e-002
20
6.62e-004
0.05000
20
9.39e-003
40
1.59e-004
0.02500
40
4.65e-003
80
3.90e-005
0.01250
80
2.31e-003
160
9.67e-006
0.00625
160
1.15e-003
320
2.41e-006

Spre exemplu, pentru o eroare global de discretizare errM=2.86e-3 prin metoda MidPoint,
e necesar un pas hm=0.2 i membrul drept este evaluat de nEvalM=10 ori.
Pentru o eroare similar ( errE=2.31e-3 ), n metoda Euler e necesar un pas he=0.125, care
conduce la un numr de nEvalE=80 de evaluri ale membrului drept.

132

Metode numerice.

Se poate deci afirma, din acest punct de vedere, superioritatea metodei punctului median fa
de metoda lui Euler explicit.

5.6.2

Metode de tip Runge-Kutta.

Principiul general al unei clase de metode grupate sub aceast titulatur se bazeaz pe
estimarea funciunii n mai multe puncte intermediare din cuprinsul pasului de integrare
curent i combinarea rezultatelor sub forma unei medii ponderate.
p

xnou = x + h cm km

(5.62)

m =1

n care cm sunt coeficieni de ponderare iar km sunt evalurile membrului drept (pantei) n
puncte intermediare din cuprinsul pasului de integrare.
n general:
p

=1

(5.63)

m =1

Deoarece exist diverse variante de implementare, se poate vorbi despre metode (la plural)
Runge Kutta.

5.6.2.1

Metoda Runge-Kutta de ordinul 4.

Una din cele mai folosite metode de tip Runge Kutta este cea de ordinul 4, conform cu
algoritmul urmtor :

= f ( x, t )

h
h
= f ( x + k1 , t + )
2
2
h
h
k2 , t + )
3= f (x +
2
2
4 = f ( x + hk3 , t + h )
2

(5.64)

k k k k
xnou = x + h 1 + 2 + 3 + 4
6 3 3 6
Fig. 5.9

k2
k4

k3
k1

h
tk=t

t
tk+1

Un exemplu de cod Matlab este urmtorul :


133

Principiul metodei Runge


Kutta de ordinul 4.

function [t,x] = edRK4(f,tn,h,x0)


% Metoda Runge- Kutta de ordinul 4
% Fisier edRK4.m
% Ec. diferentiala dx/dt = f(x,t), x(0)=x0
% tn = val. limita a lui t
% h = pasul de integrare (constant)
% x0 = conditia initiala
% Output:
% t = vectorul variabilei independente: t(j) = (j-1)*h
% x = vectorul solutiei numerice in momentele t(j)
t = (0:h:tn)'
; % Vector coloana al momentelor cu pasul h
n = length(t)
; % Numarul elementelor vectorului t
x = x0*ones(n,1); % Prealocare x pentru viteza
h2=h/2; h3=h/3; h6=h/6;
for j=2:n
k1=f(x(j-1),t(j-1));
k2=f(x(j-1)+h2*k1,t(j-1)+h2);
k3=f(x(j-1)+h2*k2,t(j-1)+h2);
k4=f(x(j-1)+h*k3, t(j-1)+h);
x(j) = x(j-1) + h6*(k1+k4) + h3*(k2+k3);
end

Exemplu:
Se compar rezultatele furnizate de metodele Euler explicit i Runge Kutta de ordinul 4 cu
soluiile exacte pentru trei ecuaii difereniale diferite:
% Testarea metodei RK4t
% Fisier edRK4Test.m
tm=4; h=0.2;

RK4 - Euler: dx/dt=x, x0=1


60

f = @(x,t) x;
[t,xm]=edRK4
(f, tm, h, 1);
[t,xe]=edEulerExp(f, tm, h, 1);
xx=exp(t);
subplot(3,1,1);
plot (t,xx,':r',t,xm,'b',t,xe,'g')
grid
title ('RK4 - Euler: dx/dt=x, x0=1');
legend('ex','RK4','Euler',
'Location','NorthWest')
f = @(x,t) -x;
[t,xm]=edRK4
(f, tm, h, 1);
[t,xe]=edEulerExp(f, tm, h, 1);
xx=exp(-t);
subplot(3,1,2);
plot (t,xx,':r',t,xm,'b',t,xe,'g')
grid
title ('dx/dt=-x, x0=1');

ex
RK4
Euler

40
20
0

dx/dt=-x, x0=1
1

0.5

2
dx/dt=t-2x, x0=1

2
1.5
1

f = @(x,t) t-2*x;
[t,xm]=edRK4
(f, tm, h, 1);
[t,xe]=edEulerExp(f, tm, h, 1);
xx =(2*t-1+5*exp(-2*t))/4;
subplot(3,1,3);
plot (t,xx,':r',t,xm,'b',t,xe,'g')
grid
title ('dx/dt=t-2x, x0=1');

134

0.5
0

Metode numerice.

Comparare ntre metoda Euler explicit, metoda punctului median i metoda Runge
Kutta de ordin 4 [7].
Se consider urmtorul cod Matlab (adaptat dup [7] ):
% Compararea metodelor Euler, MidPoint si RK4
% pentru ecuatia dx/dt = -x; x(0) = 1
% Fisier edEulerMidptRK4Comp.m
F=@(x, t) -x ;
tn = 2; x0 = 1;
fprintf('\nComparare intre metodele Euler-MidPoint-RK4 dx/dt=-x');
fprintf('\n
h
nEvE
erE
nEvM
erM
nEvR
erR\n');
for h = [0.4 0.2 0.1 0.05 0.025 0.0125 0.00625]
[te,xe] = edEulerExp(F,tn,h,x0); nEvE =
tn/h ; % Euler
[tm,xm] = edMidPt
(F,tn,h,x0); nEvM = 2*tn/h; % Midpoint
[tm,xr] = edRK4
(F,tn,h,x0); nEvR = 4*tn/h; % RK4
xex = x0*exp(-te); % Solutia exacta t
erE = max(abs(xe-xex)); erM = max(abs(xm-xex)); erR = max(abs(xrxex));
fprintf('%8.5f %7d %11.2e %7d %11.2e %7d
%11.2e\n',h,nEvE,erE,nEvM,erM,nEvR,erR);
end

n care se compar cele dou metode, din urmtoarele puncte de vedere:

numrul de evaluri ale funciunii nEvE, nEvM i nEvR;

eroarea global de discretizare erE, erM , respectiv erR.

pentru cazul particular al ecuaiei difereniale


dx
= x; x(0) = 1
dt
i pentru diveri pai de discretizare h.

Rezultate:
Comparare intre metodele Euler-MidPoint-RK4 dx/dt=-x
h
nEvE
erE
nEvM
erM
nEvR
0.20000
10
4.02e-002
20
2.86e-003
40
0.10000
20
1.92e-002
40
6.62e-004
80
0.05000
40
9.39e-003
80
1.59e-004
160
0.02500
80
4.65e-003
160
3.90e-005
320
0.01250
160
2.31e-003
320
9.67e-006
640
0.00625
320
1.15e-003
640
2.41e-006
1280

erR
5.80e-006
3.33e-007
2.00e-008
1.22e-009
7.56e-011
4.70e-012

O evaluare sumar pune n eviden faptul c metoda Runge-Kutta conduce la erori


semnificativ mai mici dect celelalte dou metode n competiie.
Este interesant de comparat dependena erorii globale de discretizare fa de numrul numrul
de evaluri ale funciei :

135

nEval
40
80
160
320

errE - Euler
9.39e-3
4.65e-3
2.31e-3
1.15e-3

errM - MidPt
6.62e-4
1.59e-4
3.90e-5
9.67e-6

errR - RK4
5.80e-6
3.44e-7
2.00e-8
1.22e-9

Concluzia este evident : metoda Runge Kutta este mult mai precis i mult mai eficient
dect cele dou proceduri incluse n comparare.

Rezolvarea sistemelor de ecuaii difereniale prin metoda Runge - Kutta.


Metoda Runge-Kutta poate fi implementat cu uurin i n cazul unor sisteme de ecuaii
difereniale de ordinul 1 fiecare.
n cazul Matlab, abordarea este simplificat datorit facilitilor referitoare la operaiile cu
matrice oferite de acest mediu.
Ca urmare, exemplu de cod prezentat mai sus de rezolvare a unei ecuaii difereniale prin
metoda Runge - Kutta poate fi transpus cu uurin pentru cazul sistemelor de ecuaii.
function [t,x] = edRK4Sist(f,tn,h,x0)
% Metoda Runge- Kutta de ordinul 4
% Fisier edRK4Sist.m
% Sistem de ecuatii diferentiale
%
dz/dt=F(z,t)
x =[z1 ; z2 ; ..]
%
Conditii initiale
x0=[z10; z20; ..]
%
Membrul drept: F =@(x,t)[F1 ; F2 ; ..]
% tn = val. limita a lui t
% h = pasul de integrare (constant)
% Output:
%
t = vectorul variabilei independente: t(j) = (j-1)*h
%
x = vectorul solutiei numerice in momentele t(j)
t = (0:h:tn)'
; % Vector coloana al momentelor cu pasul h
n = length(t)
; % Numarul elementelor vectorului t
h2=h/2; h3=h/3; h6=h/6;
x(1,:)=x0';
for j=2:n
tj=t(j-1);
xj=x(j-1,:)'
xj=xj+h2*k1
xj=xj+h2*k2
xj=xj+h*k3
x(j,:) = ( xj +
end

;
k1=f(xj,tj);
;
k2=f(xj,tj+h2);
;
k3=f(xj,tj+h2);
;
k4=f(xj, tj+h);
h6*(k1+k4) + h3*(k2+k3))';

Exemplu : Regimul tranzitoriu al unui circuit RLC serie (v. 5.5.1.3):


Circuit RLC: i(t) - metoda RK4
0.2

% Testarea metodei RK4Sis


% Circuit RLC serie
% Fisier edRK4SisTest.m

0.15
0.1
0.05

% Datele circuitului RLC


U= 1
; R= 2
; L= 2
; C= 0.1 ;

0
-0.05
-0.1

136

-0.15

0.5

1.5

2.5

3.5

Metode numerice.

tm= 4; h = 0.05;
% z = [q ; i]
z0= [0 ; 0]; % Conditii initiale nule q(0)=0 i(0)=0
F=@(z,t) [z(2) ; U/L - R/L * z(2) - z(1)/(L*C)];
[t,z]=edRK4Sist(F, tm , h , z0);
plot(t,z(:,2));
title('Circuit RLC: i(t) - metoda RK4');
grid

5.6.2.2

Implementarea metodelor Runge-Kutta n Matlab.

n Matlab sunt implementate numeroase proceduri de rezolvare a ecuaiilor (sistemelor de


ecuaii) difereniale, prin diverse metode.
Multe dintre acestea poart nume de tipul odeXY, unde X i Y pot lua diverse valori care
informeaz asupra procedurii implementate.
Printre aceste programme, se gsesc i cele care folosesc metoda Runge-Kutta, sau o
combinaie de astfel de metode, de diferite ordine.
Cea mai utilizat este funciunea ode45, care este, n principiu, prima care trebuie ncercat.
Secvena minimal de apel este urmtoarea :
[t, x]=odeXY(F, [t0 tm], x0)

n care :

F(x,t) este funciunea care implementeaz membrul drept al sistemului,


t0 i tm definesc intervalul de timp
x0 este vectorul valorilor iniiale.
Exemple :

S se rezolve sistemul de trei ecuaii difereniale (v. exemplul de la 5.5.1)


dz1 (t )
; z1 (0) = 0
dt = z2 z3
dz (t )
2
= z1 z3
; z2 (0) = 1

dt

dz3 (t ) = 0.51z1 z 2 ; z3 (0) = 1


dt

(5.65)

Acest sistem este preluat din helpul programului Matlab referitor la funciunile odeXY.
>> F=@(t, z) [z(2)*z(3) ; -z(1)*z(3) ; -0.51 * z(1)*z(2)] ;
>> tm=8 ;
1.5
>> h=0.1 ;
1
>> z0 =[ 0 ; 1 ; 1] ;
0.5
>> [t,x]=ode45(F,[0 tm], z0)
% Reprezentarea grafica
0
>> plot(t,x(:,1),r,t,x(:,2),b,t,x(:,3),g)
-0.5
>> grid

z1
z2
z3

-1

137

-1.5

>> legend (z1,z2,z3) ;

Not : Comparnd cele dou exemple, se constat unele diferene :

n primul rnd, n definiia funciunii F poziiile celor dou argumente (t i z)


sunt inversate.

n tabloul de rezultate, seriile temporale sunt stocate pe coloane.

S se rezolve sistemul de trei ecuaii difereniale:


dz1 (t )
; z1 (0) = 2
dt = z2
dz (t )
2 = 1000(1 z 21) z2 z1 ; z2 (0) = 0
dt

(5.66)

Dac se ncearc rezolvarea acestui sistem cu una dintre procedurile prezentate mai
sus, nu se obine un rezultat convergent. Motivul este acela c acest sistem este dintre
cele categorisite stiff , care reprezint fenomene care evolueaz n scri de timp
foarte diferite.
Pentru rezolvare, se poate folosi o funciune de tipul odeXY inclus n Matlab,
adaptat unor astfel de cazuri.
Exemplu :
F=@(t,z) [z(2); 1000*(1-z(1)^2)*z(2)-z(1)]
[t,x]=ode15s(F,[0 3000],[2 0]) ;
plot(t,x(:,1))
grid

2
1.5
1
0.5
0
-0.5
-1
-1.5
-2
-2.5

500

1000

1500

2000

2500

3000

Not : Funciunea ode15s este bazat pe o metod cu mai muli pai (v. mai departe metodele Gear),
care asigur stabilitatea, dar care este mai puin eficient dect medodele cu un singur par, cum ar fi
metodele Runge- Kutta. Se recomand folosirea acestei funciuni numai n cazul sistemelor stiff.

Pentru detalii, recomandm consultarea helpului programului Matlab.

138

Metode numerice.

5.7 Metode cu mai muli pai.


Printre metodele de discretizare cele mai utilizate, cele ale lui Gear [11] ocup un loc
important, fiindc ele asigur cele mai bune condiii de stabilitate. Fr a intra in detalii,
tabloul urmtor prezint cteva formule din aceast familie.
Tabloul 5.2. Coeficieni unor metode ale lui Gear.
Ordinul (p)

cn

(dx/dt)|k

Metoda :

c0 = 1

[ x(tk) x(tk-1) ] / h

Euler

c1 = -1
c0 = 3/2
c1 = -2
c2 = 1/2
c0 = 11/6
c1 = -3
c2 = 3/2
c3 = - 1/3

(implicit)
[ 3/2 x(tk) 2x(tk-1) +1/2 x(tk-2) ] / h

[ 11/6 x(tk) 3 x(tk-1) +3/2 x(tk-2) 1/3x(tk-3) ] / h

139

6 Probleme cu valori la limit.

140

Metode numerice.

7 Rezolvarea numeric a ecuaiilor cu derivate pariale.

141

8 ANEXE.

8.1 Studiul unor circuite liniare cu un singur rezistor neliniar [11].


Fie un circuit rezistiv, cu un singur rezistor neliniar. Partea liniar poate fi reprezentat prin
generatorul echivalent Thvenin sau Norton, iar rezistorul neliniar este conectat la bornele
acestui generator.
Generatorul echivalent Thvenin, reprezentat n fig. 11.3, are tensiunea electromotoare
echivalent Ee, i rezistena intern Re.
Tensiunea la bornele generatorului echivalent este :
u = Ee Re i

(8.1)

ceea ce este reprezentat n grafic prin dreapta (), care se numete caracteristica extern a
generatorului. Panta acestei drepte este egal (n valoare absolut) cu rezistena intern a
generatorului echivalent Re :
tg ( R ) = Re

(8.2)

i
Re
u

f(u,i)=0

Ee

Fig. 8.1 Circuit liniar cu o singur rezisten neliniar.


Tensiunea la bornele rezistorului neliniar depinde de curent prin caracteristica elementului,
care este, n general, de forma :
f (u, i ) = 0

(8.3)

Intersecia P a celor dou caracteristici este punctul de funcionare .


8.1.1

Discuie.

n funciune de parametrii generatorului echivalent i de caracteristica elementului neliniar,


pot aprea mai multe situaii.

Circuite cu mai multe puncte de funcionare.


Fig. 8.2

142

Circuit cu mai multe puncte de


funcionare.

Metode numerice.

Pentru elementele neliniare a cror caracteristic prezint pri de pant negativ, sunt
posibile mai multe puncte de funcionare. Dup cum se va vedea mai trziu, cele dou
puncte marcate P1 i P2 sunt puncte stabile , i ele pot fi atinse n funcionarea
normal a circuitului. Din contr, punctul P3 este practic inaccesibil i chiar dac este
atins, nu este stabil (punctul de funcionare basculeaz spre unul din punctele stabile).

Circuite cu histerezis.
Se presupune c tensiunea electromotoare echivalent Ee variaz n timp. Caracteristica
extern a generatorului echivalent se va deplasa. Deoarece panta (dat de rezistena
echivalent Re) rmne aceeai, toate instanele acestei caracteristici vor fi paralele.
u

Ee

f(u,i)=0
A1
A1

C2

A2
C1

t1 t2

t3 .

t1
t2

A1

A2
B

t3

C1

C2

Fig. 8.3 Circuit cu histerezis.


Tensiunea electromotoare Ee pleac de la zero, atinge o valoare maxim, apoi revine la o
valoare nul. n momentul t1, punctul de funcionare se gsete pe partea OA1 a
caracteristicei elementului neliniar. n momentul t2, punctul de funcionare ajunge n
punctul A1. Dac tensiunea continu s creasc, punctul de funcionare nu mai poate
continua s se deplaseze pe aceast poriune, ci este obligat s sar n punctul A2, ceea
ce duce la o variaie brusc a intensitii curentului electric. n continuare, punctul de
funcionare continu s evolueze pe poriunea A2B a caracteristicei, pn n momentul n
care tensiunea ncepe s scad. Punctul de funcionare va parcurge poriunea BC1. Ajuns
n punctul C, dac tensiunea continu s scad, punctul de funcionare basculeaz din
nou, pn n punctul C2, cu o nou variaie brusc a intensitii curentului electric. n
continuare, el continu deplasarea din C2 spre O.
Se constat c poriunea A1C1 a caracteristicei elementului neliniar nu este nici odat
parcurs, n acest exemplu.
Din contr, dac rezistena intern a generatorului echivalent depete o anumit
valoare, fenomenul nu se mai produce, deoarece caracteristica extern a generatorului i
cea a rezistenei neliniare se intersecteaz ntr-un singur punct.

143

Fig. 8.4

8.1.2

Circuit cu un singur punctul de


funcionare.

Algoritm pentru determinarea punctului de funcionare.

Construcia grafic din figura 11.3 nu este adaptat pentru utilizarea pe calculator.
Punctul de funcionare poate fi determinat prin algoritmul iterativ care urmeaz.
n principiu, acest algoritm poate prezenta dou versiuni, dup modul de utilizare a
caracteristicei elementului neliniar. Cele dou variante sunt urmtoarele :

Iteraii U=U(I).
Din caracteristica elementului neliniar, se determin tensiunea n funciune de intensitatea
curentului electric.
Este evident c aceast abordare este obligatorie n cazul rezistenelor neliniare controlate de curent.

Iteraii I=I(U).
Din caracteristica elementului neliniar, se determin intensitatea curentului electric n
funciune de tensiune.
Este evident c aceast abordare este obligatorie n cazul rezistenelor neliniare controlate de tensiune.

n cele dou cazuri, iteraiile pornesc de la o valoare iniial (a curentului sau a tensiunii)
arbitrar. Din caracteristica elementului neliniar, se determin cealalt valoare (tensiunea,
respectiv curentul). n continuare, din caracteristica extern a generatorului echivalent, se
determin valoarea urmtoare a curentului, respectiv a tensiunii, cu care se va efectua iteraia
urmtoare.
Procesul continu att timp ct diferena ntre dou valori succesive depete un anumit prag.
Dup cum se constat, este suficient s se memoreze n fiecare iteraie dou valori succesive
ale variabilei, cea veche i cea nou (care va deveni veche n iteraia urmtoare).
O analiz simpl arat c, n funciune de relaia ntre rezistena dinamic Rd a elementului
neliniar n punctul de funcionare i rezistena intern Re a generatorului echivalent, numai
una din cele dou metode converge. Aceasta poate pune probleme n cazul n care condiia de
convergen impune o metod incompatibl cu caracterul elementului neliniar (dup mrimea
de control, tensiune sau curent).

144

Metode numerice.

Iteraii U=U(I)

Iteraii I=I(U)

f(U,I)=0

U0
f(U,I)=0

U0
U1

U2
U1

I1 I2

I0

I1 I0

Iteraii care converg.


U

Iteraii care converg.


U

f(U,I)=0

U0
f(U,I)=0

U0
U1

U1
I1

I0

I2

I1

Iteraii care diverg

I0

Iteraii care diverg


U=U0 = valoare iniial
Repet
f(U,I)=0 => Inou
Unou = Ee - Re Inou
U = U-Unou
U = Unou
Ct timp U >

I= I0 = valoare iniial
Repet
f(U,I)=0 => Unouv
Inou = (Ee - Unou) / Re
I = I-Inou
I = Inou
Ct timp I >

Condiia de convergen :
Rd < R e

Gd < Ge

(Gd=1/Rd, Ge = 1/Re)

Fig. 8.5 Algoritm iterativ pentru determinarea punctului de funcionare.

Ameliorarea procesului iterativ.

Convergena algoritmului precedent (cunoscut sub numele de problem de punct fix ),


poate fi ameliorat pe mai multe ci. Cea mai cunoscut este metoda Newton-Raphson
(cunoscut i ca metoda tangentei ). Ea consist, n principiu, n faptul c deplasarea din
punctul de pe caracteristica neliniar se face dup tangenta la aceast caracteristic, pn la
intersecia acesteia cu caracteristica extern a generatorului echivalent.

145

Fig. 8.6

Ik+1

Ik

Principiul metodei NewtonRaphson (exemplificat pentru


iteraii de tip U(I).

Aceast metod necesit calculul derivatei caracteristicii neliniare.


n cazul n care caracteristica neliniar este prezentat printr-o linie poligonal, procedura se
simplific sensibil. ntr-adevr, pentru un punct situat pe un segment al caracteristicei,
tangenta se suprapune cu segmentul nsui.
y

Iteraii normale

y=f(x)

Fig. 8.7

Iteraii cu relaxare

x*

nou

nou

Metoda Newton-Raphson
n cazul aproximrii
poligonale a caracteristicii
neliniare.

Noua valoare a variabilei xnou se substitue celei determinate prin procedura normal
x* nou, n funciune de intersecia dintre dreapta orizontal y=f(x) i caracteristica generatorului
echivalent.
Aceasta poate fi reprezentat prin formula :
x nou = x*nou + (1 ) x

(8.4)

O astfel de procedur se numete relaxare . n funciune de valorile coeficientului de


relaxare , se disting: sub-relaxarea (dac 0 <<1) i supra-relaxarea (dac >1). Cazul =1
corespunde iteraiilor normale.
Pentru cele dou tipuri de iteraii, un calcul elementar arat c :
Tabloul ( 8.1)

Coeficientul de relaxare a iteraiilor.


Iteraii U=U(I)

Iteraii I=I(U)

Re
Re + Rd

Ge
Ge + Gd

Aceasta conduce, n mod normal (pentru Rd>0, Gd>0, deci caracteristici neliniare fr pant
negativ) la sub-relaxare (<1).
Mai trebuie remarcat c, de ndat ce s-a gsit segmentul de pe caracteristica poligonal a
elementului neliniar pe care se afl punctul de funcionare, urmtoarea iteraie conduce la
soluie. De unde interesul de a nu multiplica n mod nejustificat punctele de pe caracteristica
poligonal (care oricum sunt aproximative).

146

Metode numerice.

Ameliorarea procesului iterativ prin separarea unei rezistene liniare.

O variant de ameliorare a procesului iterativ este bazat pe reprezentarea elementului


neliniar printr-un model compus dintr-un resistor liniar (care va fi numit rezisten
asociat ), n serie sau n paralel cu un rezistor neliniar, care poate fi interpretat ca o surs de
tensiune sau de curent, controlat de curent, sau de tensiune (surs diferen ) [10,11].
Fig. 8.8 Separarea unei rezistene liniare.

Iteraii U=U(I)

Iteraii I=I(U)

Parte liniair

Re
Ee

Parte liniair

Re
Rm

U I

U I

Ee

I(U)=I(U)-U/Rm

U(I)=U(I)-RmI

Rm

Condiia de convergen :
R d < R I = Re + 2 R m

Gd < GU = Ge + 2 Gm
(Gd=1/Rd, Ge = 1/Re, Gm = 1/Rm)
Coeficientul de relaxare a iteraiilor:

Re + Rm
Re + Rd

Ge + Gm
Ge + Gd

Rezistena asociat este inclus n partea liniar a reelei. Noile condiii de convergen pot fi
deduse cu uurin, innd seama c rezistena echivalent i conductana prii liniare
(inclusiv rezistena asociat) sunt :
Re* = Re + R m ; Ge* = Ge + Gm

(8.5)

i c rezistena dinamic, respectiv conductana dinamic a prii neliniare diferen sunt,


respectiv :
Rd* = Rd R m ; Gd* = Gd Gm

(8.6)

Iteraiile I(U) converg.


Iteraiile U(I) converg
0

RU = 1/GU

RI

Re

Rd

Fig. 8.9 Convergena iteraiilor, n funciune de rezistena dinamic.

Se constat suprapunerea parial a domeniilor de convergen ale celor dou tipuri de iteraii.
Aceast ofer un plus de suplee n efectuarea iteraiilor.
Algoritmul poate fi urmtorul :
147

Fig. 8.10 Algoritm pentru iteraiile cu separarea unei rezistene liniare


Alegerea
Rm (v. mai jos)
Evaluarea
Re
Evaluarea
RI, GU
// Iteraii:
X<=Iniializare
Repet
Evaluarea RD pentru punctul de funcionare urmtor
Dac
Gd < GU
atunci iteraii I(U)=>Xnou
Dac
Rd < RU
atunci iteraii U(I)=>Xnou
Dac nu //(supra-relaxare)
Dac I > U atunci iteraii
U(I)=>Xnou
Dac nu
atunci iteraii
I(U)=>Xnou
End
Eroarea(* = ||X-Xnou||
X=Xnou
Ct timp ||Eroarea|| >
(*) n funciune de tipul de iteraii, eroarea ||Eroarea|| poate fi ||I-Inou||, pentru iteraiile U(I),
sau ||U-Unou||, pentru iteraiile I(U).

Se poate demonstra c o valoare convenabil a rezistenei asociate este [11] :


Rm =

Rd min + Rd max

(8.7)

148

Metode numerice.

8.2 Program Matlab pentru simularea regimului tranzitoriu prin


metoda Euler.

8.2.1

Metoda potenialelor la noduri.

n metoda potenialelor la noduri, necunoscutele sunt potenialele nodurilor n raport cu un


nod de referin:

[v(t )] = [v1 (t ), v2 (t ),.., vn (t ),.., vN 1 (t )]T

(8.8)

Numrul de noduri este N, iar numerotarea se face de la 0 (nodul de referin) la N-1.


Se consider, pentru simplitate, cazul metodei potenialelor la noduri simplificat, n care
se impun urmtoarele restricii:
1. Nu exist cuplaje magnetice. Prin urmare, matricea impedanelor laturilor [Z] este
diagonal.
2. Nu exist surse comandate (controlate) toate sursele sunt independente.
3. Nu exist surse ideale de tensiune.
4. Pe fiecare latur exist un singur element pasiv (rezisten, bobin sau
condensator). Aceasta restricie poate impune adugarea de noduri intermediare,
pentru a separa elementele pasive eventual prezente pe o aceeai latur; aceast latur
este astfel divizat n mai multe laturi n serie. Singurul inconvenient consist n
majorarea numrului de necunoscute.

Sistemul de ecuaii al metodei potenialelor la noduri are urmtoarea expresie:

[Y '][v ] = [ j ']

(8.9)

n care figureaz urmtoarele tablouri:


[Y]

Tabloul (N-1, N-1) al operatorilor de admitan asociai nodurilor. Acesta se


construiete n funciune de impedanele laturilor [Z], respectiv [Y] al
admitanelor laturilor, prin reguli simple.

[j]

Tabloul (N) al curenilor de scurtcircuit n noduri.

Observaii:

n cazul circuitelor de curent continuu, tabloul [Y] este un tablou de valori


numerice constante, al conductanelor asociate nodurilor.

n cazul circuitelor de curent alternativ, folosind reprezentarea n complex,


tabloul [Y] este un tablou de valori numerice complexe, al admitanelor asociate
nodurilor.

n cazul circuitelor n regim variabil, tabloul [Y] este un tablou de operatori de


admitan, conform celor care urmeaz.
149

Operatorii de admitan ai elementelor ideale de circuit sunt:


Tabloul ( 8.2) Operatorii de admitan ai elementelor ideale de circuit.

Elementul de pe
latur

Operatorul de
impedan

Operatorul de
admitan

Curentul de scurt
circuit

G = 1/R

Ge

1
dt
L
d
C
dt

1
e dt
L
d
C e
dt

Rezisten R
Bobin L

Condensator C

d
dt

1
dt
C

Regulile de calcul al elementelor tablourilor [Y] i [j] sunt urmtoarele [11]:

Coeficienii diagonali Ynn , n=1,..,N-1


Ynn = =

(suma operatorilor de admitan ai laturilor (b)


conectate la nodul n).

b n

Coeficienii ne-diagonali Ymn, m#n : m,n=1,..,N-1


Ynm, n#m =

Yb

mb n

- (suma operatorilor de admitan ai laturilor (b)


conectate ntre nodurile n i m).

Coeficienii matricei [j] , n=1,..,N-1


jn =

j + i
k

k n

cc b

b n

suma injeciilor de cureni ale surselor de curent


(jk) conectate la nodul n i a curenilor de scurtcircuit ai laturilor conectate la acest nod. Sensul
de referin pozitiv este orientat spre nod.

Se constat c matricea coeficienilor [Y] este simetric (Ynm=Ymn).

8.2.2

Generarea sistemului de ecuaii integro-difereniale.

Regulile de construcie a matricilor coeficienilor pot fi ilustrate prin diagramele care


urmeaz, care precizeaz contribuiile diferitelor tipuri de elemente de circuit.

Contribuiile laturilor.

O latur poate conine, n metoda potenialelor la noduri simplificat, un singur element pasiv
(rezisten, bobin, condensator) i, eventual, o surs de tensiune ideal i independent.
Latura va aduce urmtoarele contribuii n sistem :

150

Metode numerice.

n1
1

Z, Y

n2

n1

n2

N-1

v1
+Y

n1

-Y

-Y

n2

-Y e

vn1
*

+Y

=
Ye

vn2
vN-1

N-1
Fig. 8.11:

Contribuiile elementelor de pe o latur (metoda potenialelor la noduri).

Note :


Numai nodurile fundamentale (deci cu excepia celui de referin, adic cele cu


ni#0) contribuie. Contribuiile nodului de referin n=0 nu figureaz.

Semnele care preced termenii indic operaia care trebuie efectuat (adunarea cu
valorile deja introduse, sau scderea) la adugarea unui termen.

Aceasta impune iniializarea la 0 a ntregii matrice nainte de a ncepe adugarea


contribuiilor elementelor.

Contribuiile surselor de curent.

Sursele de curent nu sunt tratate ca laturi. Ele sunt conectate ntre dou noduri, fr a fi
conectate n serie cu alte elemente. Sursele independente figureaz numai n vectorul [j] din
membrul drept al sistemului de ecuaii .

n1
1

j
n1

n2
n2

N-1

v1
-j

vn1

n1
*

n2

vn2

N-1

vN-1

Fig. 8.12: Contribuiile unei surse de curent.

Not : Observaiile precedente rmn valabile.

151

+j

8.2.3

Discretizarea ecuaiilor integro-difereniale.

Se consider metoda Euler implicit de ordinul 1.


Pentru simplitate, se mai impune dou restricii pe lng cele de mai sus:
5. Singurele elemente pasive (R,L,C) care put fi legate n serie cu o surs de tensiune
sunt rezistenele.
6. Se consider condiii iniiale nule (fluxuri nule (cureni nuli) n bobine i sarcini nule
ale condensatoarelor). Singurele semnale sunt sursele din circuit.
Ca urmare, discretizarea ecuaiilor elementelor ideale de pe laturi conduce la relaiile:
Tabloul ( 8.3) Admitane numerice ale elementelor ideale de circuit.

Elementul de
pe latur

Operatorul de
admitan

Ecuaia
discretizat

Admitana
numeric

Curentul de
scurt circuit

G = 1/R

Ge

1
idt
L
d
C u
dt

h
(i + i * )
2L
C *
(u u )
h

h
2L
C
h

Rezisten R
Bobin L
Condensator C

8.2.4

0
v.obs.5

0
v.obs.5

Generarea sistemului de ecuaii discretizate.

Generarea sistemului de ecuaii discretizate se face conform cu metoda expus n seciunea


5.5.5.1, cu unele particulariti:

Elementele T*ij devin Yij;

Termenii gi devin Ji,;

Relaiile de calcul se adapteaz n noul context.

gi* = gi + K ij x j sij I
j

Tij* =

d ij

Kij =

d ij

h
h

h
sij + aij
2

h
sij
2

J i* = J i + Kij v j sij I

Yij =

Cij

Kij =

Cij

Sij =

h
2 Lij

h
h

h
+ Rij
2 Lij

h
2 Lij

sij I = Sij (V + V * )

152

(8.10)

Metode numerice.

Exemplu de cod Matlab:


% Metoda potentialelor la noduri in regim variabil
% !!! Conditii initiale nule
% !!! Surse E doar in serie cu R
% Fisier: edPotnod.m.
%
% SECTIUNEA 1: INITIALIZARE ------------------------%
% Datele principale ale circuitului:
% N = Numarul de noduri (in afara celui de referinta)
% Z = Tabloul datelor circuitului
%
structura liniei:
%
T n1 n2 x E
%
T
= tipul elementului
%
R/L/C =latura
%
J = sursa de curent
%
n1,n2 = nodul initial, final
%
x
= valoarea
%
daca T#J: x = R/L/C
%
daca T=J: x = sursa de curent
%
E
= sursa de tensiune (daca T#J)
R=1; L=2; C=3; J=4;
Tip=[R
L C
J;
'R' 'L' 'C' 'J'];
% SECTIUNEA 2: CITIREA DATELOR + ECUATII -----fprintf('\nDescrierea circuitului:');
fprintf('\n Tip n1
n2
V
E');
% Date:---se alege exemplul de studiat-----------exemplu=2;
switch exemplu
case 1
% Circuit RLC serie
Z=[ R, 0, 1, 0.2, 1;
L, 1, 2, 0.1, 0;
C, 2, 0, 0.1, 0];
tm= 4
;
% Durata
h = 0.01;
% Pasul in timp
case 2
Z=[ R, 0, 1,
L, 1, 2,
C, 3, 0,
R, 2, 0,
R, 2, 3,
tm= 1
;
h = 0.005;

1
0.01
0.1
10
0.2
%

, 1;
, 0;
, 0;
, 0;
, 0];
Durata
% Pasul in timp

end
% End Date -------------------------------------nl=size(Z,1);
% numarul de linii
for i=1:nl
fprintf('\n %c
%2d
%2d
%6.3f
%6.3f',Tip(2,Z(i,1)),Z(i,2),Z(i,3),Z(i,4),Z(i,5));
end
N= max(max(Z(:,2)),max(Z(:,3)));
fprintf('\nNumarul de noduri: %3d \n',N);
t=0:h:tm ;
153

nt=tm/h ;
fprintf('\nTimpul: 0 : %6.3f : %6.3f\n\n',h,tm);
%
%
%
%
%
%
%

Tablouri de lucru:
Y[N,N]
// Tabloul Y al coeficientilor sistemului
K[N,N],S[N,N] // Tablouri auxiliare
I[N]
//
integralele (bt. bobine)
J[N]
// Termenii liberi
V[N]
// Vectorul necunoscutelor= potentialele nodurilor
Vt[N,nt] //
variatia in timp

% Imitializarea la zero a tablourilor de lucru:


Y
J
V
K
S
I

=
=
=
=
=
=

zeros(N,N);
zeros(N,1);
zeros(N,1);
zeros(N,N);
zeros(N,N);
zeros(N,1);

% Citirea tabloului de date Z: //---------------------for l=1:nl


% Citeste T,
T = Z( l , 1
n1= Z( l , 2
n2= Z( l , 3
x = Z( l , 4
e = Z( l , 5

n1, n2, X, E
); % Tipul: 1:R, 2:L, 3:C, 4:J
);
);
); % valoarea: R/L/C/J
); % sursa de tensiune

if (T == 4) % e o sursa de curent----if n1 > 0


J(n1) = J(n1) - x;
end ;
if n2 > 0
J(n2) = J(n2) + x;
end ;
else
% e o latura -----------switch T
case 1 % R
x=R Y=1/r
a = 1/x;
% 1/R
d = 0;
s = 0;
case 2 % L
x=L Y=1/L|dt
a = 0;
d = 0;
s = 1/x * h/2; % h/2/L
case 3 % C
x=C Y=C d/dt
a = 0;
d = x / h;
% C/h
s = 0;
end
if n1 > 0
Y(n1, n1) = Y(n1, n1) + a + d + s;
K(n1, n1) = K(n1, n1) + d-s;
S(n1, n1) = S(n1, n1) + s;
J(n1)
= J(n1) - e/x ;
end
if n2 > 0
Y(n2, n2) = Y(n2, n2) + a + d + s;
K(n2, n2) = K(n2, n2) + d-s;
S(n2, n2) = S(n2, n2) + s;

154

Metode numerice.

J(n2)

= J(n2) + e/x ;

end
if (n1 > 0) && (n2 > 0)
Y(n1, n2) = Y(n1, n2) - (a+d+s);
Y(n2, n1) = Y(n1, n2);
K(n1, n2) = K(n1, n2) - (d-s);
K(n2, n1) = K(n1, n2);
S(n1, n2) = S(n1, n2) - s;
S(n2, n1) = S(n1, n2);
end
end
end; % Gata lectura + ecuatii -----------------------% SECTIUNEA 3: CICLU IN TIMP -------------------------------------Vt=V;
for tt=h:h:tm
% Rezolvarea sistemului (de optimizat !!!)
Vnou = Y \ (J + K*V - S*I);
Vt = [Vt Vnou];
%#ok<AGROW>
V = Vnou;
I = I + (V+Vnou);
end
nvar=size(V,1);
for i=1:nvar
subplot(nvar,1,i);plot (t,Vt(i,:)); title(['V' num2str(i)]); grid;
end

Descrierea circuitului este furnizat (n aceast versiune demonstrativ) sub forma unui tablou
Z, inclus n codul surs. Structura cestui tablou este prezentat n comentariul inclus n partea
iniial a codului.
Este evident c un program real trebuie prevzut cu faciliti evoluate de descriere a
circuitului (prin fiiere de text sau sub form grafic).

155

V1
1.5

Fig. 8.13: Exemplul 1: Circuit RLC serie


sub tensiune la borne continu

1
0.5
0

a) calculate cu Matlab
0

0.5

1.5

2.5

3.5

2.5

3.5

b) calculate cu Resel [16].

V2
2
1.5
1
0.5
0

0.5

1.5

156

Metode numerice.

BIBLIOGRAFIE.

1. UPB- Fac. de Inginerie electric - ndrumar pentru laboratorul de metode numerice :


http://mn.lmn.pub.ro/indrumar/indrumarLMN2010_v1.pdf
2. Matlab Documentaie.
3. Cleve Moler Numerical Computing with Matlab.
http://www.mathworks.com/moler/chapters.html
4. Cleve Moler Eperiments with Matlab.
http://www.mathworks.com/moler/exm/chapters.html
5. Technische Universiteit Eindhoven - Interactive Matlab Course.
http://www.imc.tue.nl/
6. http://www.cyclismo.org/tutorial/matlab/
7. Gerald Recktenwald - Numerical Methods with Matlab.
http://web.cecs.pdx.edu/~gerry/nmm/course/
8. GNU/Octave : http://www.gnu.org/software/octave/
9. Scilab (GNU/Linux, Windows, Mac OS X).
http://www.scilab.org/
10. Numerical Recipes in C.
http://www.nrbook.com/a/bookcpdf.php
http://www.fizyka.umk.pl/nrbook/bookcpdf.html
11. C. Fluerasu, Corina Fluerasu Circuite electrice. Teorie, Modelare, Simulare.
Printech 2008, ISBN 987-973-718-943-1
12. F. Hantila A method for solving nonlinear resistive networks - Rev. Roum. Sci.
Techn.., Energ. et Electrot., 24, 2, 1979
13. H. Andrei, C. Fluerau, A.Badea, I. Cciul, M : Stan Metode Numerice n Ingineria
Electric, Ed. Bibliotheca, Trgovite, 2008
14. A. Angot - Complemente de matematici pentru inginerii din electrotehnic i
telecomunicaii, Editura tehnic, Bucureti, 1966.
15. Wikipedia.org-Conjugate_gradient_method
16. C. Fluerau Resel Simulation interactive sur ordinateur personnel des rgimes
transitoires dans les rseaux electriques. Deuxime partie algorithmes principaux.
Rev. Roum. Sci. Techn. Electrotechn. et Energ., 36, 2, p.193-204, Bucureti, 1991.

157