Professional Documents
Culture Documents
Algoritmi numerici.
FACULTATEA DE INGINERIE ELECTRIC
MASTER - INFORMATIC N INGINERIA ELECTRIC (INF)
2010-2011
Cuprinsul
1
Introducere
1.1
1.2
1.3
1.3.1
1.3.2
1.3.3
1.4
1
1
1
1
2
3
3
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
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
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
140
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.
Programul MATLAB.
1.3.2
Metode numerice.
1.3.3
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.
(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)
(2.4)
Metode numerice.
2.1.1
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)
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
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 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.
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.
Exerciii propuse:
2.1.2
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)
(2.16)
x
g(x)
g(x0)
x0
x1
(2.18)
2.1.2.2
Implementarea n Matlab.
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.
(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
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
Fig. 2.4
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
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:
2.1.2.4
2.1.3
2.1.3.1
Principiul metodei.
Fig. 2.6
Primele interaii
n metoda
secantei
(2.26)
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)
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 :
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.
(2.31)
sau:
ek +1 = ( ek ek 1 )
(2.32)
Metode numerice.
1+ 5
2
(2.34)
Exerciii propuse:
2.1.4
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)
(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
Implementarea n Matlab.
Exemplu de appel :
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:
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.
17
f(x)
(2.40)
sau:
ek +1 = (e k2 )
(2.41)
Exerciii propuse:
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 )
18
Metode numerice.
de
rezolvare
ecuaiilor
algebrice
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
2.2.1.1
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,
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
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
p 0 ( x ) = Pn ( x )
p1 ( x ) = Pn' 1 ( x )
20
Metode numerice.
pi
(x )
= pi 1
(x )
qi
(x)
p n ( x ) 0, ()x [a, b]
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
2.2.2.1
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)
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.
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
(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
a.
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 )
(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)
A(j p )
A(j p1)
, j = 1, n
(2.62)
rj
(A( ) )
=
p 1 2
A(j p )
, j = 1, n 1
(2.63)
m
= 2 p 1 ,
2
(2.64)
(2.65)
A1( p )
A0( p )
(2.68)
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)
(2.72)
Din relaia (2.54), (2.71) i (2.72) rezult c raportul r1( p ) tinde ctre M.
r1p M
(2.73)
(2.74)
Ak( +pM)
Ak( p )
(2.75)
(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:
(2.77)
Metode numerice.
x1 = e j si x2 = e j
(2.78)
= 2m
A2( p )
A0( p )
(2.81)
(2.83)
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.
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
(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
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
(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 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)
(2.99)
(2.100)
Exemple:
P(x)=x2 + 4x +2
>> c=[1 4 2]
c =
1
4
>> x=roots(c)
x =
-3.4142
-0.5858
27
28
Metode numerice.
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)
[ X ] = [T ] [G ]
1
(3.5)
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.
(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.
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).
.
. .
.
(3.7)
Te = .
.
. .
.
. .
.
T
N 1 . . . TNN GN
31
ceficientilor :
3
7
1
5
8
4
.
. . 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 :
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 studiat:
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
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.
%//
%//
%
%
Tablouri de lucru:
Y[N,N]
// Tabloul Y al coeficientilor sistemului
J[N]
// Termenii liberi
V[N]
// Vectorul necunoscutelor= potentialele nodurilor
n1, n2, V, E
);
);
);
);
);
%
%
%
35
else
%
%
%
%
%
%
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
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 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
(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
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
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
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
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
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.
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.
3.1.3.1
Implementarea n Matlab.
44
Metode numerice.
45
1 0 0
3 7 8
0 1 0
8 1 4
0 0 1
Imparte linia 1 cu 8
1 0.125 0.5 0 0 0.125
3
0 1
1 0
1 0
0 2.875
0.5
0.125
-0.125
0.5
0.125
0.5
0.981
0.125
0.151 -0.057
0.981
-0.298 0.129
0
0.114
0.151 -0.057
0.114
46
Metode numerice.
-0.225 0.079
0.124
0 1 0
0 0 1
Exerciiu:
S se adapteze algoritmul metodei Gauss prezentat n pseodocod mai sus, pentru
metoda Gauss-Jordan.
3.1.4
Metoda factorizrii.
(3.20)
unde :
[L]
L
U 22 U 23 ...
[U ] =
[L] = 21 22
L31 L32 L33
U 33 ..
...
... ... ... ...
(3.21)
U11 U12
L
1
U 22
[U ] =
[L] = 21
L31 L32 1
47
...
(3.22)
L11
L
[L] = 21
L31
...
L22
L32
L33
...
...
...
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:
3.1.4.1
(3.24)
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
(3.25)
L21U 14 + L22U 24
(3.26)
L31U14 + L32U 24 + L33U 34
Metode numerice.
(3.27)
k 1
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
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.
1 X N YN
(3.29)
3.1.4.2
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
k 1
(3.30)
j = k + 1, N
j =1
Fig. 3.4
4
Succesiunea operaiilor n
metoda de factorizare a lui
Doolittle (varianta U1).
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.
Det ( A) = Lii
(3.31)
i =1
53
3.1.4.3
(3.33)
i 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.
[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
(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 )
(3.38)
m 1
m 1
Tmm U im2 Di
U mm =
(3.39)
; m = 2, N
i =1
T11
(3.40)
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
Astfel, se determin:
m 1
U mj = Tmj U imU ij Di / (U mm Dm ) ;
i =1
j = m + 1, N
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.
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
L = tril ( a )
U = triu ( a )
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
0
0
0
(3.45)
[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
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
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
0
0
1.0000
4.0000
6.5000
1.6792
0
0
0
[ L ][U ][ x ] = [ P ][ y ]
[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
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
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 .
(3.52)
Fig. 3.7
permutarea
liniilor
p
noul pivot
62
Pivotarea
parial
(permutarea
liniilor).
Metode numerice.
(3.57)
(3.58)
Fig. 3.8
Pivotarea
total
(permutarea
liniilor i a
coloanelor).
permutarea
liniilor
aici se cauta
pivotul
noul pivot
permutarea
coloanelor
3.1.5.2
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
A = max aij
i[1,m ]
j =1
(3.61)
x 1 = xi
i =1
x 2=
2
i
(3.62)
i =1
x = max xi
i[1,n ]
(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
(3.70)
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
(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)
(3.76)
(3.77)
66
Metode numerice.
(3.78)
(3.79)
( A) = A A1 ;
( ( A) 1)
(3.80)
n consecin:
(c1)
x
A
( A)
x + x
A
(3.81)
(3.83)
(3.84)
(3.85)
(3.86)
A1 b
x
A x
b
(3.87)
(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
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.
0.5000
0.3333
0.2500
0.3333
0.2500
0.2000
Metode numerice.
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
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
(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)
x = B 1 (Cx + b)
(3.93)
(k )
=M x
(3.94)
u
( k 1)
+u
69
(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
(3.97)
U
D
A=
(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.
(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
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
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
a x
ij
j =i +1
( k 1)
j
(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.
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
(k )
n care x% i este valoarea estimat a elementului xi, xi( k 1) este valoarea din iteraia precedent,
> 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.
(3.106)
(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 :
3.2.4
Metoda Picard-Banach.
f1
...
[ f ] = fi ;
...
f N
fi = f i ([ x ]) ; i = 1,..., N ;
75
(3.110)
(3.111)
(3.112)
(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
(3.117)
(3.118)
[ x ] = x ( k ) [ J ]
f x(k ) ;
(3.119)
76
Metode numerice.
3.2.5
(3.120)
(3.121)
i pozitiv-definit, adic:
xT A x > 0 ;
(3.122)
(3.123)
(3.124)
(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
i =1
i =1
b = A x* = A i pi = i A pi
(3.129)
(3.130)
i =1
(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)
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)
(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 =
rkT+1rk +1
rkT rk
pk +1 = rk +1 + k pk
k=k+1
end // repeta
Rezultatul este xk+1.
k =
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
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.
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
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
Metoda de stocare normal, sub forma unui tablou, este prea costisitoare, din dou puncte de
vedere:
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:
Simplitatea gestionrii umplerilor, adic a apariiei unor elemente noi, n cursul unor
operaiuni (ca mai sus).
Exemplu:
Fie matricea:
82
Metode numerice.
A=
20
32
26
14
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.
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
elemptr
2
liniile matricii
v
i
next
col
elem
col
next
col
null
next
elem
elem
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
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.
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)
i, j :
s:
m, n:
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.
nnz(s)
issparse(s)
v = nonzeros(s)
spy(s)
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.
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).
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.
2.
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
(4.3)
g ( x ) = ck x k
(4.4)
k =0
88
Metode numerice.
g ( xi ) = ck xik = yi ; i = 0,..., n
(4.5)
k =0
(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.
.......
( 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)
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.
(4.11)
(4.12)
(4.13)
i k
Exemplu:
Fie o interpolare pe o mulime format din trei puncte:
x0 < x1 < x2
k = 2 l2 ( x ) =
x x0 x x1 1
.
=
x2 x0 x2 x1 0
x = x2
x = xi , i 2
(4.14)
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.
90
Metode numerice.
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.
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
92
Metode numerice.
Fig. 4.4
1.5
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
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
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
%
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
(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)
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.
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)
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)
=
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
(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
First derivatives
h = diff(x);
delta = diff(y)./h;
d = splineslopes(h,delta);
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.
%
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);
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
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);
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)).
%
%
%
%
%
%
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.
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
%
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
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
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
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
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 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.
105
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
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
106
Metode numerice.
(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)
= vectorul necunoscutelor
(5.5)
(5.6)
= condiiile iniiale
(5.7)
5.3.2
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)
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 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
soluia exact
soluia aproximat (numeric)
5.4.1
Aproximarea derivatei.
108
Metode numerice.
Fig. 5.3
x0
Punctul urmtor
t0
tk-p
tk-i
tk-1 tk
Aproximarea
derivatei
p puncte precedente
(5.12)
metoda implicita
5.4.2
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.
Algoritmul general.
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 .
unde xn,h este soluia aproximat n punctul n, iar x(tn) este valoarea exact n acest
punct.
kh
h
=0
(5.14)
(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.
Metode numerice.
(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)
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.
(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
(5.22)
(Euler implicit)
(5.23)
(5.24)
(5.25)
Rezult :
dx
x x
= k +1 k + O ( h )
dt tk
hk
(5.27)
112
Metode numerice.
5.5.1
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
Exemple:
(5.28)
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')
exact
Eul.exp
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
(5.30)
(5.31)
exact
Eul.exp
0.4
0.5
0.6
0.7
0.8
0.9
(5.32)
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
0.9
(5.34)
% 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
0.3
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.
115
Exemple :
= x; y (0) = 1
dt
(5.35)
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
116
Metode numerice.
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
5.5.2
Algoritmul de rezolvare a unei ecuaii difereniale ordinare prin metoda Euler explicit de
ordinul 1 poate fi prezentat prin urmtoarea funciune Matlab:
% Daca nu se impun:
%
nr.max. de iteratii
%
eroarea admisibila
% atunci se adopta valori standard
118
Metode numerice.
Dou dintre exemplele de mai sus sunt tratate prin metoda implicit n fiierele:
edEulerImpSistTest2.m
edEulerImpSistTest3.m
5.5.3
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);
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
(5.39)
(5.40)
e(t ) = U 0 e ; =
R
(5.41)
(5.42)
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
0.5
0.4
Expl
Impl
0.2
0
10
0.6
-3
Circuit
x 10 RL - tensiune sinusoidala
Expl
Impl
0.4
0.2
0
Expl
Impl
0
-5
0.5
Fig. 5.5
i(t)
U
L
C
+q
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)
123
0.2
0.2
0.15
0.15
0.1
0.1
0.05
0.05
Fig. 5.6
0.3
num
exac t
0.1
0.1
-0.1
0
0
num
exact
0.2
-0.2
-0.1
Chestiuni de studiat:
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
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
[T ][x] = [g ]
(5.50)
unde :
[ T ] este tabloul (patrat) al coeficienilor sistemului ;
[x]
[g]
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:
L1 [a]
i1
R1
e1
*L
12
(1)
R3
L2 (2)
i 3 [b] i 4
i5
R2
C (3)
i2
e2
(nod a ) i1 i2 + i3 = j
(nod b) i i i = j
4
5
3
dt
dt
dt
dt
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:
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
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 :
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].
5.5.5.2
(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
128
Metode numerice.
tf
//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 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.1
Metoda
GDE
Euler
O(h)
O(h2)
Runge - Kutta
O(h4)
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');
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
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.
(5.61)
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
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
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
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;
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
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
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.
;
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))';
0.15
0.1
0.05
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
n care :
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
(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.
138
Metode numerice.
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
139
140
Metode numerice.
141
8 ANEXE.
(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
(8.3)
Discuie.
142
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
143
Fig. 8.4
8.1.2
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
f(U,I)=0
U0
f(U,I)=0
U0
U1
U1
I1
I0
I2
I1
I0
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)
145
Fig. 8.6
Ik+1
Ik
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)
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.
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)
(8.6)
RU = 1/GU
RI
Re
Rd
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
Rd min + Rd max
(8.7)
148
Metode numerice.
8.2.1
(8.8)
[Y '][v ] = [ j ']
(8.9)
[j]
Observaii:
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
b n
Yb
mb n
j + i
k
k n
cc b
b n
8.2.2
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:
Note :
Semnele care preced termenii indic operaia care trebuie efectuat (adunarea cu
valorile deja introduse, sau scderea) la adugarea unui termen.
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
151
+j
8.2.3
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
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.
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
=
=
=
=
=
=
zeros(N,N);
zeros(N,1);
zeros(N,1);
zeros(N,N);
zeros(N,N);
zeros(N,1);
n1, n2, X, E
); % Tipul: 1:R, 2:L, 3:C, 4:J
);
);
); % valoarea: R/L/C/J
); % sursa de tensiune
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
1
0.5
0
a) calculate cu Matlab
0
0.5
1.5
2.5
3.5
2.5
3.5
V2
2
1.5
1
0.5
0
0.5
1.5
156
Metode numerice.
BIBLIOGRAFIE.
157