Sunteți pe pagina 1din 276

Ioan RUSU

METODE NUMERICE
ALGORITMI N LIMBAJ C

2006

Cuprins

CUPRINS
1. ERORI ............................................................................................................................ 1
1.1. Erori absolute i relative ............................................................................................... 1
1.2. Clasificarea erorilor ..................................................................................................... 2
1.2.1. Erori iniiale ............................................................................................................... 2
1.2.2. Erori de trunchiere ...................................................................................................... 3
1.2.3. Erori de metoda ........................................................................................................... 4
1.2.4. Erori de calcul ............................................................................................................. 4
1.3. Propagarea erorilor......................................................................................................... 7
1.4. Grafuri de procedur ...................................................................................................... 9
1.5. Reguli pentru mrirea preciziei calculelor ................................................................... 11
1.6. Aplicaii ....................................................................................................................... 11
2. REZOLVAREA NUMERIC A ECUAIILOR ALGEBRICE .............................. 15
2.1. Separarea rdcinilor ................................................................................................... 15
2.1.1. Metoda irului lui Rolle ............................................................................................ 15
2.1.2. Metoda irului lui turm ........................................................................................... 16
2.1.3. Metoda lui Budan-Fourier ......................................................................................... 18
2.2. Calculul rdcinilor ecuaiilor algebrice ...................................................................... 19
2.2.1 Metoda biseciei ......................................................................................................... 19
2.2.1.1. Algoritmul 2.2. Bisecia pentru polinoame ........................................................... 20
2.2.1.2. Implementarea algoritmului 2.2 ............................................................................. 21
2.2.1.3. Algoritmul 2.3. Bisecia pentru ecuaii transcendente............................................ 22
2.2.1.4. Implementarea algoritmului 2.3 ............................................................................. 23
2.2.2. Metoda aproximaiilor succesive .............................................................................. 23
2.2.2.1. Algoritmul 2.4. Aproximaii succesive .................................................................. 26
2.2.2.2. Implementarea algoritmului 2.4 ............................................................................. 27
2.2.3. Metoda aproximaiilor succesive cu vitez mare de convergen ............................ 28
2.2.4. Metoda Newton-Raphson......................................................................................... 29
2.2.4.1. Algoritmul 2.5 ........................................................................................................ 31
2.2.4.2. Implementarea algoritmului 2.5 ............................................................................. 32
2.2.5. Metoda NewtonRaphson pentru polinoame .......................................................... 33
2.2.5.1. Algoritmului 2.6.Newton-Raphson pentru polinoame .......................................... 33
2.2.5.2. Implementarea algoritmului 2.6 ............................................................................. 34
2.2.6. Metoda Newton-Raphson pentru rdcini foarte apropiate ....................................... 35
2.2.7. Metoda lui Bairstow .................................................................................................. 36
2.2.7.1. Algoritmul 2.7 ........................................................................................................ 39
2.2.7.2. Implementarea algoritmului ................................................................................... 41
2.3. Aplicaie ....................................................................................................................... 44
3.REZOLVAREA NUMERIC A SISTEMELOR DE ECUAII ............................... 47
3.1.Rezolvarea numeric a sistemelor liniare...................................................................... 47
3.1.1.Metode directe ........................................................................................................... 48
3.1.1.1. Sisteme inferior triunghiulare ................................................................................ 48
3.1.1.1.1. Algoritmul 3.1 ..................................................................................................... 48
3.1.1.1.2. Implementarea algoritmului 3.1 .......................................................................... 49
3.1.1.2. Sisteme superior triunghiulare ............................................................................... 50
3.1.1.2.1. Algoritmul 3.2 ..................................................................................................... 50
3.1.1.2.2. Implementarea algoritmului 3.2 .......................................................................... 50
3.1.1.3. Metoda lui Gauss de eliminare ............................................................................... 51
3.1.1.3.1. Algoritmul 3.3 ..................................................................................................... 52
3.1.1.2.2. Implementarea algoritmului ............................................................................... 53
3.1.1.4. Metoda lui Crout .................................................................................................... 53
3.1.1.4.1. Algoritmul 3.4 .................................................................................................... 53

VII

VIII

Metode numerice n electronic

3.1.1.4.2. Implementarea algoritmului 3.4 .......................................................................... 57


3.1.1.5. Metoda lui Cholesky .............................................................................................. 58
3.1.1.5.1. Algoritmul 3.5 .................................................................................................... 58
3.1.1.5.2. Implementarea algoritmului 3.5 .......................................................................... 58
3.1.1.6. Metoda Gauss-Jordan sau matriceal formal ........................................................ 59
3.1.1.6.1. Algoritmul 3.6 ..................................................................................................... 60
3.1.1.6.2. Implementarea algoritmului 3.6 .......................................................................... 61
3.1.1.7. Metoda factorizrii QR .......................................................................................... 75
3.1.1.7.1. Algoritmul 3.7 ..................................................................................................... 64
3.1.1.7.2. Implementarea algoritmului 3.7 .......................................................................... 65
3.1.1.8. Metoda de rezolvare a sistemelor tridiagonale ....................................................... 67
3.1.1.8.1. Algoritmul 3.8 ..................................................................................................... 69
3.1.1.8.2. Implementarea algoritmului 3.8 ......................................................................... 70
3.1.2. Metode indirecte ....................................................................................................... 71
3.1.2.1. Metoda lui Jacobi ................................................................................................... 71
3.1.2.1.1. Algoritmul 3.9 ..................................................................................................... 72
3.1.2.1.2. Implementarea algoritmului 3.9 .......................................................................... 73
3.1.2.2. Metoda Gauss-Seidel ............................................................................................ 75
3.1.2.2.1. Algoritmul 3.10 .................................................................................................. 75
3.1.2.2.2. Implementarea algoritmului 3.10 ........................................................................ 76
3.2. Rezolvarea numeric a sistemelor neliniare ................................................................. 78
3.2.1. Metoda lui Newton de rezolvare a sistemelor neliniare ........................................... 78
3.2.1.1. Algoritmul 3.11 ...................................................................................................... 80
3.3. Aplicaii ....................................................................................................................... 82
4. DERIVAREA NUMERIC ........................................................................................ 84
4.1. Derivata numeric prin dou puncte ............................................................................ 84
4.2. Derivata numeric prin trei puncte ............................................................................... 85
4.3. Derivata numeric prin cinci puncte ............................................................................ 89
4.4. Calculul derivatei funciilor tabelate ........................................................................... 91
4.5. Aplicaii ...................................................................................................................... 91
5. INTEGRAREA NUMERIC ...................................................................................... 93
5.1. Integrarea funciilor proprii de o singur variabil. Metode cu divizare constant ...... 93
5.1.1. Metoda dreptunghiului .............................................................................................. 93
5.1.1.1. Algoritmul 5.1 ........................................................................................................ 94
5.1.1.1.1. Implementarea algoritmului 5.1 .......................................................................... 95
5.1.2. Metoda trapezului de integrare numeric ................................................................. 95
5.1.2.1. Algoritmul 5.2 ...................................................................................................... 100
5.1.2.2. Implementarea algoritmului ................................................................................. 100
5.1.3. Metoda lui Richardson ............................................................................................ 100
5.1.3.1. Algoritmul 5.3 .......................................................... .101
5.1.3.2. Implementarea algoritmului 5.3 ........................................................................... 102
5.1.4. Metoda lui Simpson ................................................................................................ 102
5.1.4.1. Algoritmul 5.4 ...................................................................................................... 103
5.1.4.2. Implementarea algoritmului 5.4 ........................................................................... 104
5.2. Metode cu diviziune variabil .................................................................................... 104
5.2.1. Metoda cuadraturii gaussiene cu dou puncte ......................................................... 104
5.2.2. Metoda cuadraturii gaussiene pentru mai multe puncte .......................................... 107
5.2.2.1. Eroarea de trunchiere ........................................................................................... 108
5.2.2.2. Algoritmul 5.5 ...................................................................................................... 108
5.2.2.3. Implementarea algoritmului 5.5 ........................................................................... 109
5.3. Compararea metodelor de integrare numeric ........................................................... 116
5.4. Calculul numeric al integralelor improprii ................................................................. 116
5.5. Calculul numeric al integralelor duble ....................................................................... 118

Cuprins
5.5.1. Formula de cubatur a trapezului ............................................................................ 118
5.5.1.1. Algoritmul 5.6 ...................................................................................................... 119
5.5.1.2. Implementarea algoritmului 5.6 ........................................................................... 120
5.5.2. Formula lui Simpson de cubatur............................................................................ 120
5.5.2.1. Algoritmul 5.7 ...................................................................................................... 121
5.6. Aplicaii ..................................................................................................................... 122
6. INTERPOLAREA ...................................................................................................... 123
6.1. Interpolarea polinomial ............................................................................................ 123
6.2. Polinomul de interpolare de spea nti al lui Newton .............................................. 129
6.3. Polinomul de interpolare de spea a doua al lui Newton ........................................... 131
6.4. Polinomul lui Newton de interpolare cu diferene divizate ........................................ 133
6.5. Metoda lui Aitken de interpolare ............................................................................... 135
6.6. Interpolarea cu funcii spline...................................................................................... 137
6.7. Interpolarea funciilor periodice................................................................................. 142
6.8. Interpolarea funciilor de mai multe variabile ............................................................ 144
6.9. Aplicaie ..................................................................................................................... 145
7. OPTIMIZRI ............................................................................................................. 148
7.1. Metoda celor mai mici ptrate ................................................................................... 148
7.1.1. Regresia liniar ....................................................................................................... 149
7.1.1.1. Algoritmul 7.1 ...................................................................................................... 150
7.1.1.2. Implementarea algoritmului 7.1 ........................................................................... 151
7.1.2. Regresia polinomial .............................................................................................. 151
7.1.2.1. Algoritmul 7.2 ...................................................................................................... 152
7.1.2.2. Implementarea algoritmului 7.2 ........................................................................... 153
7.1.3. Regresia hiperbolic................................................................................................ 153
7.1.3.1. Algoritmul 7.3 ...................................................................................................... 154
7.1.3.2. Implementarea algoritmului 7.3 ........................................................................... 155
7.1.4. Regresia exponenial ............................................................................................. 156
7.1.4.1. Algoritmul 7.4 ...................................................................................................... 156
7.1.4.2. Implementarea algoritmului 7.4 ........................................................................... 157
7.1.5. Regresia geometric ................................................................................................ 158
7.1.5.1. Algoritmul 7.5 ...................................................................................................... 158
7.1.5.2. Implementarea algoritmului 7.5 ........................................................................... 159
7.1.6. Regresia trigonometric .......................................................................................... 160
7.1.6.1. Algoritmul 7.6 ...................................................................................................... 160
7.1.6.2. Implementarea algoritmului 7.6 .......................................................................... 161
7.1.7. Regresia multipl .................................................................................................... 162
7.1.7.1. Algoritmul 7.7 ...................................................................................................... 163
7.1.7.2. Implementarea algoritmului 7.7 ........................................................................... 164
7.2. Optimizarea neliniar fr restricii ........................................................................... 165
7.2.1. Metode aleatoare de cutare .................................................................................... 166
7.2.1.1. Algoritmul 7.8 ...................................................................................................... 166
7.2.1.2. Implementarea algoritmului ................................................................................. 167
7.2.2. Metoda cutrii unidimensionale ............................................................................ 168
7.2.2.1. Algoritmul 7.9 ...................................................................................................... 168
7.3. Aplicaii ..................................................................................................................... 170

8. REZOLVAREA ECUAIILOR DIFERENIALE ................................................. 171


8.1. Rezolvarea ecuaiilor difereniale ordinare de ordinul nti ....................................... 171
8.1.1. Metoda seriilor lui Taylor ....................................................................................... 172
8.1.2. Metodele Runge-Kutta ............................................................................................ 173

IX

Metode numerice n electronic

8.1.3. Metodele Runge- Kutta de ordinul doi .................................................................... 175


8.1.3.1. Metoda lui Euler mbuntit .............................................................................. 175
8.1.3.2. Metoda lui Euler modificat ................................................................................ 178
8.1.4. Metoda Runge-Kutta de ordinul patru .................................................................... 181
8.1.5. Metoda predictor-corector....................................................................................... 184
8.1.6. Metoda lui Milne..................................................................................................... 188
8.2. Integrarea numeric a sistemelor de ecuaii difereniale de ordinul nti i a
ecuaiilor difereniale de ordinul doi ................................................................................ 190
8.3. Rezolvarea numeric a ecuaiilor difereniale cu derivate pariale ............................ 193
8.3.1. Metoda diferenelor finite ....................................................................................... 194
8.3.1.1. Ecuaia lui Laplace ............................................................................................... 215
8.3.1.2. Ecuaii difereniale cu derivate pariale de tip parabolic ..................................... 298
8.3.1.3. Ecuaii cu derivate pariale de tip hiperbolic ....................................................... 200
8.4. Aplicaie ..................................................................................................................... 203
9. REZOLVAREA NUMERIC A ECUAIILOR INTEGRALE ............................ 204
9.1. Integrarea ecuaiei Fredholm neomogen de spea a doua ......................................... 204
9.2. Integrarea ecuaiei Volterra neomogen de spea a doua ........................................... 207
9.3. Aplicaie ..................................................................................................................... 209
10. VECTORI SI VALORI PROPRII ........................................................................... 205
10.1. Tipuri de matrice ...................................................................................................... 206
10.2. Localizarea valorilor proprii .................................................................................... 208
10.3. Metode de determinare a vectorilor i valorilor proprii ........................................... 209
10.3.1. Metoda puterii ....................................................................................................... 209
10.3.2. Metoda lui Krlov .................................................................................................. 211
10.3.3. Metoda lui Householder ........................................................................................ 213
10.3.4. Metoda RT ............................................................................................................ 221
10.3.5. Metoda LR ............................................................................................................ 224
10.4. Aplicaii ................................................................................................................... 229
11. FUNCII SPECIALE ............................................................................................... 236
11.1. Funcia gamma ......................................................................................................... 236
11.2. Funcia factorial ....................................................................................................... 238
11.3. Coeficienii binomiali .............................................................................................. 240
11.4. Funcia beta .............................................................................................................. 242
11.5. Funciile Bessel ........................................................................................................ 244
11.6. Aplicaii ................................................................................................................... 250
12. TRANSFORMATA FOURIER DISCRET .......................................................... 252
12.1. Analiza n frecven a semnalelor n timp discret .................................................... 254
12.1.1. Reprezentarea secvenelor cu transformate Fourier .............................................. 254
12.1.1.1.Algoritmi rapizi pentru FFT ................................................................................ 255
12.1.2. Algoritmul Goertzel .............................................................................................. 264
12.3. Aplicaii ................................................................................................................... 267
13. CUTRI ................................................................................................................. 270
13.1. Metode de inserie .................................................................................................... 270
13.1.1. Sortarea prin inserie directa ................................................................................. 270
13.1.2. Sortarea prin inserie direct a dou mulimi ....................................................... 272
13.1.3. Metoda Shell ......................................................................................................... 273
13.2. Metode de sortare prin interschimbare ..................................................................... 275
13.3. Sortarea rapid ......................................................................................................... 276
13.4. Aplicaie ................................................................................................................... 278

Cuprins
ANEXA 1 ......................................................................................................................... 279
BIBLIOGRAFIE ............................................................................................................. 281

XI

1
ERORI*

Rezolvarea problemelor moderne de o mare complexitate din tiinele aplicate, cum ar fi:
astronomia, geodezia, electronica etc., nu se poate realiza fr calculator asistat de un pachet
de metode numerice matematice.
Rezultatele numerice obinute n acest gen de aplicaii, cu ajutorul calculatorului, necesit
o analiz a erorii, datorit faptului c datele iniiale pentru determinarea numeric a rezultatului
sunt obinute de obicei prin observaii sau msurtori afectate de erori i operaiile numerice
efectuate de calculator sunt aproximative atunci cnd numerele nu au o reprezentare intern
exact. Msurtorile experimentale nu pot fi realizate exact, prin repetarea lor obinndu-se
rezultate diferite. Ca urmare, datele obinute prin msurtori conin erori care se reflect n
rezultatul final. Calculatoarele numerice au o reprezentare intern exact a numerelor ntregi
pentru care realizeaz calcule exacte i o reprezentare intern aproximativ a numerelor reale
care influeneaz exactitatea rezultatului.
Determinarea unor mrimi n problemele tehnice se face de obicei cu finalitate practic.
Aici apar erorile inevitabile ale procesului de execuie sau fabricaie; pentru fiecare
component exist tolerane, adic limite ale erorilor ntre care componenta poate fi utilizat.
Studiul acestui capitol se refer la erorile ce apar n operaiile aritmetice realizate de
calculator. Se definesc tipurile de erori ce apar n procesele electronice i se expliciteaz
funciile eroare.

1.1. ERORI ABSOLUTE I ERORI RELATIVE


Deoarece valoarea msurat sau calculat a unei mrimi nu reprezint valoarea adevrat
sau exact a mrimii, o numim valoare aproximativ .
Definiia 1.1. Numim eroare diferena dintre valoarea adevrat (exact) i valoarea
aproximativ. Matematic definiia poate fi exprimat prin formula:
ex x x ,
(1.1)
unde : ex reprezint eroarea, x valoarea adevrat, iar x valoarea aproximativ.

______________________________
*) Bibliografie: [6],[7],[12],[21],[22]

Metode numerice n electronic

Din cele trei valori care intervin n definiia erorii cunoatem numai valoarea
aproximativ. Valoarea adevrat nu o cunoatem, deoarece dac am cunoate-o nu s-ar mai
pune problema existenei erorii. Pentru ca ecuaia (1.1) s fie rezolvabil se face o estimare
asupra erorii, adic se precizeaz o margine superioar a acesteia. n acest caz se poate
determina valoarea adevrat cu ajutorul valorii aproximative, pentru o margine a erorii dat.
Deoarece unii autori definesc eroarea ca diferena:
ex x x ,
(1.2)
pentru a reuni cele dou definiii ale erorii ntr-una singur s-a trecut la definirea erorii

absolute, astfel:
(1.3)
| ex | | x x | .
Dac se cunoate un minorant m i un majorant M al mrimii x atunci orice element
ex* al mulimii { | ex |, M m } se numete eroare absolut la limit.

Definiia 1.2. Numim eroare relativ raportul dintre eroarea absolut i valoarea
aproximativ absolut x |ex /x |
(1.4)
n cazul erorii relative se poate defini eroarea relativ la limit. Din aplicarea proprietilor
modulului rezult:
| x|| x | |x x| |e x| e*x
(1.5)
|x| e x |x| |x| e x

Definiia 1.3 Numim eroare relativ la limit raportul:


ex*
(1.6)
| x | x*
Pentru numerele apropiate de 1, eroarea absolut i eroarea aproximativ sunt aproape
egale, deoarece eroarea absolut se mparte la un numr aproximativ egal cu 1. Pentru numere
diferite mult de 1, cele dou erori absolut i relativ difer foarte mult. Din acest motiv, atunci
cnd nu se poate deduce tipul erorii este necesar s se specifice dac aceasta este relativ sau
absolut. Erorile absolute pentru mrimi care au uniti de msur sunt exprimate n unitile
de msur ale mrimilor, iar erorile relative nu au uniti de msur i sunt exprimate n
procente.

x*

1.2. CLASIFICAREA ERORILOR


Fcnd analiza erorilor pentru un rezultat numeric, se constat c eroarea final poate
depinde de o serie de erori cum ar fi: erorile iniiale, erorile de trunchiere, erorile de metod i
erorile de calcul (rotunjire).

1.2.1. ERORI INIIALE


Aceste erori sunt determinate de erorile care intervin n datele iniiale de calcul cauzate
deseori de msurare, greeli de citire a datelor, greeli de introducere a datelor n calculator sau
de necesitatea reprezentrii unei valori cu un numr finit de cifre. Erorile de msurare se
datoreaz n primul rnd preciziei instrumentului i sunt influenate de aceasta astfel: cu ct
precizia instrumentului este mai mare, cu att eroarea de msur este mai mic. Greelile de
citire, de introducere a datelor fac parte din erorile de observare, care au un caracter aleator i

Erori

sunt caracterizate de funcia de repartiie normal sau gaussian din expresia (1.7), a crei
reprezentare este dat n fig.1.1.
1
(1.7)

exp( 0.5.( / ) 2 ) ,
2
Calculul probabilitii ca eroarea de observaie a unui procedeu de msur s fie cuprins
ntre dou valori date x1 i x 2 se realizeaz ca o sumare pe intervalul dat a funciei de
repartiie, prezentat n expresia (1.8):
x2

P x1 e x2 ( )d (1.8)
x1

Multe numere nu pot fi reprezentate exact printr-un numr finit de cifre. Dintre aceste
numere
amintim: =3.141592654,
2 =1.414213562,
e
=2.73Aceste
numere cu o infinitate de cifre sunt des
utilizate n calcule, dar cu diferite
aproximaii care dau erori inerente.
Numerele transcendente i iraionale sunt
reprezentate printr-o infinitate de cifre n
orice sistem de numeraie. Unele numere,
reprezentate cu un numr finit de cifre ntrun sistem de numeraie, sunt reprezentate
cu un numr infinit de cifre n alt sistem de
Fig1.1.Funcia de repartiie gaussian
numeraie. Ca exemplu poate fi dat
-eroarea de observaie;-dispersia
numrul 0.1 n sistemul de numeraie
zecimal, care n sistemul de numeraie binar este dat de numrul cu o infinitate de cifre
0.0001100110011...

1.2.2. ERORI DE TRUNCHIERE


Aceste erori sunt introduse de procedura numeric aplicat .Ca exemplu putem da
procedura numeric de calcul a valorii funciei trigonometrice cos x .Cea mai utilizat
procedur numeric de calcul este dezvoltarea n serie Taylor , n jurul punctului 0 a funciei
cos x
x2 x4 x6
cos x =1(1.9)

... ,
2 ! 4 ! 6!
unde argumentul x este dat n radiani. Un calcul exact al funciei cos( x ) este imposibil,
programul de calcul oprindu-se la un anumit termen al seriei, obinndu-se n acest mod o
valoare a funciei cu o anumit eroare.
Pentru cazul general al unei funcii f ( x ) dezvoltat n serie Taylor, n jurul punctului

x 0 , oprirea la termenul de rang n d o eroare ce poate fi calculat cu ajutorul formulei restului


lui Lagrange:
( x x0 )n ( n 1)
Rn ( x )
f
( )
( x0 , x )
(1.10)
( n 1)!

Metode numerice n electronic

Procedurile utilizate n calculele numerice sunt finite, iar erorile datorate acestor proceduri
care ntrerup un calcul infinit teoretic, poart numele de erori de trunchiere. Aceste erori n
multe cazuri nu se pot calcula exact, dar se pot estima sau li se pot stabili limitele.

1.2.3. ERORI DE METOD


Pentru rezolvarea unei probleme se pot aplica mai multe metode care au erori
specifice lor. Prin alegerea celei mai adecvate metode n rezolvarea problemei, eroarea poate fi
micorat. Acest lucru se poate realiza dac cel implicat n rezolvarea problemei cunoate
metodele numerice. Deoarece metodele numerice sunt aproximaii ale metodelor analogice de
calcul este necesar s se cunoasc precizia aproximaiilor. n toate capitolele care urmeaz sunt
tratate metodele numerice mpreun cu erorile lor de calcul, iar unde este necesar se face i o
comparaie ntre metode.

1.2.4. ERORI DE CALCUL PRIN ROTUNJIRE


Pentru o nelegere mai bun a acestui tip de erori, vom studia mai nti calculul n virgul
mobil, calcul realizat de calculator. Un numr q este reprezentat in virgul mobil dac el este
(1.11)
scris sub forma: q f b x
unde f este fracia, care mai poart numele de mantis i are valoare subunitar, x
exponentul, care este ntotdeauna ntreg i b baza de numeraie .
Calculatoarele utilizeaz scrierea normalizat a numerelor n virgul mobil, deoarece sub
aceast form se obine o precizie maxim de calcul. Un numr scris n virgul mobil este
normalizat dac prima cifr, dup virgul n mantis este diferit de zero (excepie fcnd
numrul zero). n bazele 10, 2 i 16, avem urmtoarele reprezentri normalizate n virgul
mobil ale unui numr oarecare q :
q f 10 x ,
x

01
. | f | 1 ;

q f 2 ,

1 / 2 | f | 1 ;

1 / 16 | f | 1

q f 16 ,

(1.12)

Adunarea i scderea numerelor n virgul mobil se realizeaz de ctre calculator dup


urmtorul algoritm prezentat n organigrama din fig.1.2. Se consider c numerele sunt date n
baza 10 sub forma f1 10 x1 , f 2 10 x2 iar suma sau diferena f 3 .10 x3 .

Erori

Fig.1 2. Organigrama operaiei de adunare i scdere n virgul mobil,


pentru numere n baza zece.

Metode numerice n electronic

Calculatoarele moderne au cifre de gard ce reprezint locurile pe care se deplaseaz spre


dreapta ultima cifr a numrului cu exponent mai mic. Dup aceste operaii de adunare sau
scdere, cifra de pe aceste locuri poate fi readus napoi n timpul normalizrii. n cazul
efecturii sumei poate apare situaia ca un exponent s fie mai mic dect cel admis de
calculator; de exemplu calculatorul poate admite exponeni pn la ordinul -99 i dorim s
normalizm numrul prin deplasare spre stnga cu un loc, ceea ce ar nsemna un exponent de 100, neadmis de calculator. n acest caz avem o depire inferioar (under flow), iar numrul
este considerat zero.
Mai poate aprea situaia obinerii dup nsumare a unui exponent maxim de dou cifre, pe
care-l poate admite calculatorul, de exemplu 99, i vrem s normalizm rezultatul prin
deplasare cu un loc spre dreapta, deci mrirea exponentului cu o unitate, operaie nepermis de
calculator. n acest caz apare o depire superioar (over flow) i programul se ntrerupe.
Se consider un numr n baza 10 reprezentat n virgul mobil, cu o mantis compus din
t cifre ca fiind rezultatul unor operaii aritmetice. Numrul poate fi scris:
q=f q 10 x g q 10 x-t ,
(1.13)
unde f q si gq satisfac inegalitile :
1 / 10 f q 1

(1.14)

0 gq 1

(1.15)

mantisa f q fiind compus din t cifre.


Prin rotunjire nelegem influena pe care o are valoarea lui gq asupra lui q .
Calculatoarele care nu au cifre de gard, neglijeaz valoarea lui gq , aa nct rezultatul
este q = f q 10 x . n acest caz f q nu se modific i calculatorul a realizat o trunchiere, numit
tiere, pentru a nu se confunda cu erorile de trunchiere. n acest caz eroarea absolut este dat
de expresia | eq | =|g q |10 x-t iar o limit maxim a erorii relative se poate calcula astfel :

eq
q

g q 10 x-t
f q 10 x

10 x-t
10 1 10 x

10 10 - t 101 t

(1.16) Se

observ c limita maxim a erorii relative de rotunjire depinde numai de numrul de cifre al
mantisei numrului. Acest tip de rotunjire introduce o eroare mare, dar timpul de calcul al
calculatorului scade.
Un alt tip de rotunjire n cazul existenei cifrelor de gard este rotunjirea simetric sau
obinuit. n acest caz valoarea aproximativ prin rotunjire a numrului q este dat de
expresia :
| f q |10 x
pentru |g q| 1/ 2
| q|
(1.17)
x
x t
pentru |g q| 1/ 2
| f q |10 10
Dac | g q | 1 / 2 , eroarea absolut este |eq | (1 / 2) 10x t
(1.18)
i pentru | g q | 1 / 2 , eroarea absolut este | eq | (1 / 2) 10 x t
Deci n ambele cazuri | eq | (1 / 2) 10

x t

Limita maxim a erorii relative o putem calcula astfel :


eq
0.5 0 x-t
0.5 10 -t
q

5 10 -t
q
10 1 10 x
10 1

(1.19)
(1.20)

(1.21)

Erori

i n acest caz limita maxim a erorii relative de rotunjire simetric depinde numai de
numrul de cifre al mantisei mrimilor care intr n calcul, pe care l-am considerat acelai
pentru toate mrimile i l-am notat cu t. Se observ c eroarea simetric (1.21) este cu un ordin
de mrime mai mic dect eroarea de tiere (1.16). Pentru o precizie mai mare a calculelor se
utilizeaz rotunjirea simetric.
Aceleai limite maxime ale erorii relative le obinem i pentru cazul reprezentrii
sistematizate a numrului q n baza b :
q a1b n a 2 b n-1 a 3b n-2 ... a m b n-m+1 ...
(1.22)
Considerm m cifre semnificative ale numrului:

q a1b n a 2 b n-1 ... a m b n-m+1 ... b n-m a m+1 a m+2 b -1 ...

-1

Notm cu c = am+1 a m+2 b ...

(1.23)
(1.24)

Dac c < (1 / 2)q atunci c = 0 i valoarea aproximativ prin rotunjire a lui q este
q = a1b n a2 b n-1 a3b n- 2 ... a mb n-m1
valoarea aproximativ a lui q este

(1.25) Dac c > (1 / 2)q atunci c q i

q = a1bn a2 bn-m ... a m 1 bn-m+1

ambele cazuri eroarea absolut eq (1 / 2)b

(1.26) n
n-m+1

O limit maxim a erorii relative se calculeaz astfel:


eq
(1 / 2 ) b n-m+1
q

(1 / 2 ) b1 m ,
q
1 bn

(1.27)

(1.28)

unde m este numrul de cifre semnificative ale numrului .Pentru baza b =10 se obine
acelai rezultat ca la scrierea n virgul mobil (1.21).

1.3. PROPAGAREA ERORILOR


n acest paragraf este studiat propagarea erorilor prin operaiile aritmetice realizate de
calculatorul numeric: adunri, scderi, nmuliri, mpriri i extrageri de rdcin ptrat. Se
consider dou numere x si y cu valorile aproximative, eroarea absolut i eroarea relativ

x ,ex , x , respectiv y ,e y , y . n scopul simplificrii notaiilor vom folosi n continuare


pentru eroarea absolut i eroarea relativ a unei mrimi x, notaia ex respectiv x . Vom
deduce formulele prin care se vede efectul erorilor absolute asupra operanzilor.
Adunarea:
x y x e x y+e y x y+e y +e x

ex y = x y - x y e y+ex ex y = e y+ex

(1.29)

Scderea: x y = x ex y-e y x y+ex -e y

ex y = x y - x y ex -e y ex y = ex -e y

nmulirea:

(1.30)

x y= x ex y+e y x y ex y e y x ex ey

Considernd ex e y 0 rezult:
exy xy-x y ex y e y x

exy ex y e y x

(1.31)

Metode numerice n electronic

8
mprirea:

e y e2
x x ex
x ex
x+ex
1

2 ...
y
y
y
y+e y
y
y 1 e y /y

ey x e
xe y ex e y
x ex
1 x 2 2 .
y
y y y
y
y
ey ey

n calcul s-a utilizat dezvoltarea n serie geometric a factorului 1 / 1 ,


1 i sy y

au reinut primii doi termeni. Considernd e x e y 0 rezult:


ex/y ex /y x.e y /y 2

(1.32)

Rdcina ptrat:
x

x ex

x 1 ex / x

x 1 (1 / 2 )( ex / x )...

n calcul s-a utilizat dezvoltarea n serie binomial a factorului


e

x-

1 ex / x

x = (1 / 2)( ex / x ) x

(1.33)

Propagarea erorilor relative prin operaiile realizate de calculator se deduce din formulele
de propagare a erorilor absolute .
Adunarea:
ex+y
ey
x
e
y
x
y
x+y

x
y
x y x y x x y y
x y
x y
x
y
y (1.34)
x
x y
x y
Scderea:
ex y
x
e
y ey
x
y
x-y

x
y
x y x y x x y y
x y
x y

x+y

x
y
x
y
x y
x y
nmulirea:
exy x e y y ex e y ex
xy

x y
xy
xy
xy
y
x
xy x y (1.36)

x-y

mprirea:

(1.35)

x / y x / y / ( x / y ) (1 / y ). ex ( x / y 2 ). e y / ( x / y ) ex / x e y / y x y
x / y x y

(1.37)

Rdcina ptrat:

x
x

(1 / 2 ). x ( ex / x ) / x (1 / 2).( ex / x ) (1 / 2). e x

(1 / 2) x

(1.38)

Erori

Formulele de calcul al propagrii erorilor relative prin operaiile realizate de calculator


sunt simetrice i din aceste motive se pot realiza grafuri pentru calculul lor. Aceste grafuri se
numesc grafuri de procedur .

1.4. GRAFURI DE PROCEDUR


Aceste grafuri sunt binare , adic ntr-un nod intr cel mult dou mrimi i iese o singur
mrime. Pentru fiecare operaie aritmetic marca grafului se calculeaz diferit. Marca grafului
pentru operaia de adunare este raportul ntre valoarea din nodul care se nsumeaz i suma
valorilor din nodurile care se nsumeaz,
procedeul fiind prezentat prin graful din
x
fig.1.3. Se dau valorile erorilor relative
x i y ale mrimilor care se nsumeaz
x
i eroarea de rotunjire r .
Eroarea la ieirea grafului este
Fig.1.3. Graful operaiei de adunare
x
y
x
y r
x+ y
x
y
x
y

x
(1.39)
x
Se observ egalitatea expresiei erorii
(1.39) cu cea obinut la propagarea erorii
x
prin adunare prezentat n paragraful 1.3.
Eroarea n nodul grafului se
calculeaz dup modul expus anterior i
nodul poate deveni la rndul su un

termen sau un factor al urmtoarei


x
operaii.
n calculul erorii se ine seama de
Fig.1.4. Graful operaiei de scdere
valoarea obinut n fiecare nod prin
operaia corespunztoare expresiei a crei valoare a erorii relative o calculm, pentru a
determina marca ramurii grafului. Pentru operaiile de nmulire, mprire i ridicare la putere
marca grafului este constant indiferent de valoarea obinut n nodul grafului. Marca grafului
pentru desczut la operaia de scdere se
calculeaz ca raportul ntre valoarea
desczutului i diferena valorilor
desczutului i scztorului, iar pentru
scztor se calculeaz ca raportul dintre
valoarea scztorului i diferena valorilor
desczutului i scztorului, luat cu
semnul minus. Eroarea la ieirea grafului
este dat n formula (1.40), iar graful este
prezentat n fig. 1.4.
Fig.1.5.Graful operaiei de nmulire

Metode numerice n electronic

10

x
y
x
y r
xy
xy
(1.40)Marca grafului pentru operaia de
nmulire este totdeauna constant egal cu
unitatea att pentru nmulitor ct i pentru
denmulit. Graful pentru aceast operaie
este prezentat n figura 1.5. Eroarea la
ieirea grafului este dat de expresia
urmtoare: xy x y r

x- y

Fig.1.6. Graful operaiei de mprire

Fig.1.7. Graful operaiei de extragere de


rdcin ptrat

(1.41)
Marca grafului pentru operaia de
mprire este totdeauna constant,
avnd valoarea 1 pentru demprit i -1
pentru mpritor. n figura 1.6 este
prezentat graful pentru operaia
aritmetic de mprire. Eroarea la
ieirea grafului este
x / y x y r (1.42)

Operaia de extragere a rdcinii ptrate


are marca grafului constant egala cu 1 / 2 i
este prezentat n figura 1.7. Eroarea mrimii la ieirea grafului este
(1.43)
x (1 / 2) x r
Se observ c expresia erorilor relative obinute la ieirea grafurilor sunt chiar formulele
de calcul ale erorilor relative propagate prin operaiile aritmetice obinute n paragraful 1.3, iar
mrcile grafului sunt identice cu expresiile cu care se nmulesc erorile relative ale
componentelor care intervin n operaia de calcul. Pentru uurina calculului mrcilor grafului
se ine seama de modul de calcul prezentat anterior pentru fiecare operaie aritmetic.
Cunoscnd erorile relative ale mrimilor care intr ntr-o expresie n care avem operaiile de
baz ale aritmeticii, putem s determin eroarea final a expresiei cu ajutorul grafurilor de
procedur.

1.5.

REGULI
PENTRU
CALCULELOR

MRIREA

PRECIZIEI

Pentru mrirea preciziei calculelor n aplicaiile practice, este bine s inem seama de
urmtoarele reguli de calcul:
1. n operaiile de adunare i scdere s se nceap cu cele mai mici numere.
2. S se evite scderea a dou numere aproximativ egale, prin rescrierea expresiei de
calcul.
3. Expresiile de forma (a b) c i ( a b) / c pot fi rescrise sub forma ac ab respectiv
( a / c) ( b / c ) . Dac numerele a i b sunt aproximativ egale, este bine s se fac nti
scderea dup aceea nmulirea sau mprirea.
4. Dac nici una din regulile precedente nu pot fi aplicate, pentru minimizarea erorii se va
cuta realizarea unui numr ct mai mic de operaii.

Erori

11

1.6.

APLICAII

1. S se determine o limit superioar a erorii relative pentru expresia :


E( x ) = ( ax 2 bx c ) / ( dx f )
n punctul x0 tiind c a , b, c, d , f , x0 sunt pozitive i au respectiv erorile relative a , b
, c , d , f ,

Se cunosc erorile relative ale tuturor elementelor funciei date. Pentru calculul limitei
superioare a erorii relative, se realizeaz graful de procedur al expresiei date, care este
prezentat n figura 1.8. innd cont de grafurile operaiilor aritmetice, se ncepe realizarea
grafului expresiei E cu graful pentru numrtor i dup aceea cu graful pentru numitor
realiznd n final un graf pentru operaia de mprire.
Mrcile grafurilor operaiilor care intervin n expresie se calculeaz conform expresiilor
(1.39 ), (1.40), (1.41), (1.42) i (1.43). Pentru fiecare operaie de calcul se d eroarea de
rotunjire notat cu ri , i=1,2,,8.
Erorile din fiecare punct al grafului se nmulesc cu marca grafului corespunztor iar la
ieire, n punctul n care are loc o operaie aritmetic, se nsumeaz, indiferent de operaia
aritmetic care are loc n nod.

ax02
bx0
eE x 0 x0 r1 a r2
b x 0 r3
r4
2
2
ax0 bx0 c
ax0 bx0

ax 02 bx 0
ax 02 bx 0 c

c
ax 02 bx 0 c

dx 0
r5 d x0 6
( 1)

dx
f
0

f
r7 ( 1) r8
dx0 f
Dac considerm c erorile lui a , b, c, d , f , x0 sunt obinute ca erori de rotunjire, atunci
f

toate erorile din expresie pot fi majorate cu 5 10 t , unde t este numrul de cifre al variabilelor
a , b, c, d , f , x0 admis de calculator. Ca urmare, expresia limitei erorii relative devine:
5ax 02 3bx 0

E 5 10 t

2
ax 0

bx 0 c

2dx 0
dx 0 f

12

Metode numerice n electronic

Fig.1.8. Graful pentru calculul erorii relative a expresiei E(x)

Considernd c x 0 [0,1], atunci expresia erorii relative se poate simplifica fcnd o nou
majorare i anume nlocuim pe x 0 n expresiile de la numrtor cu 1, iar n cele de la numitor
cu zero. Marginea erorii relative pentru expresia dat n condiiile impuse devine:
5a 3b 2d

E 5 10 t

5
f
c

Se observ c limita erorii relative a expresiei E ( x ) depinde de coeficienii a , b, c, d , f i


de t, mantisa admis de calculator. S-a considerat c erorile datelor de intrare sunt
erori de rotunjire. Cnd coeficenii nu sunt pozitivi trebuie s se utilizeze valorile absolute
ale lor.
2. Se consider expresiile u a 3 3a 2 3a 1 i v ( a 1)3 unde a este un numr
pozitiv rotunjit n mod simetric i presupunem c 1 i 3 nu au erori. S se arate c pentru a

Erori

13

foarte mare marginile erorii relative a lui u i v devin aproximativ egale iar pentru a foarte
mic marginea erorii relative a lui u devine aproximativ de cinci ori mai mic dect marginea
erorii relative a lui v . Numrul maxim de cifre al mantisei admise de calculator este t. S se
calculeze marginile erorii relative ale expresiilor date i pentru cazul cnd a este exact.
Construcia grafurilor de procedur pentru cele dou expresii, precum i calculul limitelor
superioare rmne ca un exerciiu pentru cititor.
a u 4010
. t ; v 4010
. t
R:
a 0 u 510
. t ; v 2510
. t

Fig.1.9. Etaj de amplificare cu un tranzistor

3. S se determine o limita a erorii amplificrii etajului din figura 1.9, funcie de


toleranele componentelor pasive electronice. Se consider c rezistoarele au tolerana de 5%
iar condensatoarele de 10%. Amplificarea de tensiune a montajului este dat de expresia:
R || R
30
Au s c ,unde h11b
Re h11b
I E [mA]
Rs =rezisten de sarcin.
Pentru circuitul electronic dat, se poate considera Rs i Re 0 , iar expresia
simplificat a amplificrii n tensiune devine: Au Rc / h11b .
Graful de procedur pentru expresia obinut este prezentat n figura 1.10 i este identic
cu cel pentru operaia de mprire. Mrcile grafului pentru cele dou mrimi care intr n
formula de calcul sunt 1 pentru demprit i -1 pentru mpritor. Eroarea calculat pentru
amplificare nu include i eroare datorat neglijrii rezistenelor de sarcin i emitor. Se
calculeaz o limit a erorii amplificrii circuitului electronic datorat toleranelor
componentelor pasive.
Considernd eroarea de rotunjire foarte mic fa de eroarea introdus de tolerana
componentelor electronice, rezult urmtoarea expresie de calcul:

Metode numerice n electronic

14

A Rc h11 r Rc h11 r
0,05 0,05 0,510
. t 0,1
Amplificarea n tensiune a circuitului
electronic poate avea o limit maxim a
erorii de 10%.
Analog, se pot calcula erorile maxime
pe care le au diferii parametrii ai circuitelor
electronice, funcie de erorile elementelor de
care depind.
Fig.1.10. Graful de procedur a amplificrii n
tensiune

4. Fie a , b i x trei numere pozitive i exacte. S se traseze grafurile de procedur i s


se calculeze marginile erorilor relative de rotunjire pentru expresiile u ax bx 2 i
v x ( a bx ) . S se compare cele dou margini ale erorilor, obinute. S se calculeze
marginile erorilor relative i pentru cazul cnd cele trei numere au erori de rotunjire.
R: u 510
. t 3bx 2a / bx a , v 510
. t 3bx 2a / bx a

u 10 t 1 ( 3bx 2a)/(bx a ) , v 10 t 1 ( 3bx 2a)/(bx a)


5. Se consider un circuit R,L,C alimentat de la o surs U. tiind c frecvena sursei are
variaia f , iar R,L,C au variaiile R , L , c , s se traseze graful impedanei
circuitului i s se determine o margine a erorii relative a ei.
6. Presupunem c x i y sunt dou numere pozitive rotunjite simetric. S se traseze
grafurile de procedur ale expresiilor u ( x x x x ) y i v 4 xy i s se arate c
marginea erorii relative a lui u este mai mare dect marginea erorii relative a lui v .

2
REZOLVAREA NUMERIC A ECUAIILOR
ALGEBRICE*
Pn la ecuaiile de gradul patru, algebra dispune de metode i formule pentru
calculul soluiilor acestora. Pentru ecuaiile de grad mai mare ca patru, cu rdcini
iraionale, determinarea acestora se poate face numai prin aproximaii.
Calculul rdcinilor unei ecuaii se face n dou etape: 1) separarea rdcinilor, 2)
calculul lor cu o eroare impus.

2.1. SEPARAREA RDCINILOR


Considerm funcia f :[a, b] R, x a ,b i ecuaia algebric f(x) 0 .
(2.1)
Separarea rdcinilor unei ecuaii f ( x ) 0 const n determinarea unor intervale n
domeniul de definiie al funciei, n care s existe o singur rdcin real. Pentru
separarea rdcinilor reale exist mai multe metode dintre care amintim: metoda
irului lui Rolle, metoda irului lui turm i metoda lui Budan-Fourier.

2.1.1. METODA IRULUI LUI ROLLE


Aceast metod se bazeaz pe o consecin a teoremei lui Rolle care afirm c: ntre
dou rdcini consecutive ale derivatei f '( x ) 0 exist cel mult o rdcin real a
ecuaiei f ( x ) 0 . Exist cu siguran o soluie ntre rdcinile consecutive ale
derivatei f '( x ) 0 , dac produsul valorilor funciei pentru cele dou rdcini
consecutive ale derivatei este negativ .
Considerm x1 x2 x3 ... xn , rdcinile ecuaiei f ' ( x ) 0 . Se construiete irul
lui Rolle:
f ( a ), f ( x1 ), f ( x2 ),..., f ( xn ), f ( b)
(2.2)
Numrul de variaii de semn din irul lui Rolle reprezint numrul de rdcini reale ale
ecuaiei f ( x ) 0 , iar rdcinile consecutive ale derivatei pentru care avem variaia de
semn a irului reprezint intervalele n care exist o rdcin real a ecuaiei (2.1).
Dac f ( x ) este definit pe ntreaga ax real, R , irul lui Rolle conine
_____________________________
*) Bibliografie: [3],[6],[7],[11],[21].
i termenii cu valorile funciei la + i - :

16

Metode numerice n electronic


f - ,f x1 ,f x2 , ... , f x n , f + .

(2.3)

0..Pentru aplicarea acestei metode trebuie s determinm soluiile ecuaiei f ' x 0 .


Pentru ecuaii de grad mai mic metoda este avantajoas, dar pentru ecuaii de grad
mare rezolvarea ecuaiei derivatei poate deveni tot att de dificil ca i rezolvarea
ecuaiei date f ( x ) 0 .

2.1.2. METODA IRULUI LUI TURM


Considerm funcia definit n (2.1) care ndeplinete condiiile de continuitate i
derivabilitate pentru x a , b .
Definiia 2.1 irul de funcii f 0 , f1, f 2 ,..., f m continue pe [a , b] care satisfac condiiile:
1) f 0 ( x ) f ( x );
2) f m ( x ) 0 pentru x [a , b] ;
3) dac f i ( x ) 0 , 1 i m-1 i x a , b , atunci
f i 1 ( x ) f i 1 ( x ) 0 ;
4) dac f 0 ( x ) 0 pentru x a , b , atunci f0'(x) f1 x 0
se numete ir turm asociat funciei f ( x ) .
Numrul rdcinilor ecuaiei f ( x ) n intervalul [a , b] este dat de urmtoarea teorem
Teorema 2.1. Fie irul turm f0 ,f1 ,f 2 ,...,f m , ataat funciei f ( x ) cu condiiile
f a 0 i f b 0 , atunci numrul de rdcini ale ecuaiei f ( x ) 0 n intervalul
[a , b] este dat de diferena numrului de variaii de semn ale irurilor:
(2.4)
f 0 a , f 1 a , ... , f m a
(2.5) n cazul funciei polinom
f 0 b , f 1 b ,... , f m b
P( x ) care este definit pe R, teorema (2.1) devine:
Teorema 2.2 Fie P0 , P1 , P2 ,..., Pm un ir de polinoame construit astfel

P0= P, P1= P1, iar Pi 1 este restul mpririi lui Pi 1 la Pi luat cu semn schimbat,
pentru 2 i m . Atunci numrul de rdcini ale ecuaiei P( x ) 0 este egal cu
diferena dintre numrul de schimbri de semn ale irurilor:
P0 ,P1 ,P2 , , Pm
(2.6)
P0 ,P1 ,P2 , ,Pm

(2.7)
Demonstraie. Trebuie s artm c irul format este un ir turm. Condiiile irului lui
turm sunt ndeplinite. Prima condiie este ndeplinit din construcia irului. A doua
condiie este ndeplinit deoarece considerm c polinomul nu are rdcini multiple,
deci P( x ) i P' ( x ) nu au rdcini multiple. Construim termenii irului folosind
algoritmul lui Euclid. Se schimb doar semnul restului.
Pi 1 ( x ) Pi ( x ). Qi ( x ) Pi 1 ( x ) ; i 1,2,..., m 1
(2.8)
Aplicnd algoritmul, obinem: P0 ( x ), P1 ( x ) Pm ( x ) =constant 0, deoarece P0 ( x ) i
P1 ( x ) sunt prime ntre ele. Pentru Pi ( x ) = 0 din relaia (2.8) se vede c este ndeplinit

Rezolvarea numeric a ecuaiilor algebrice

17

i condiia 3 din definiia irului lui turm. Dac P( x ) =0 pentru x R, deoarece P( x )


i P' ( x ) nu au rdcini comune, rezult c :
P' x P0' ( x ) P1( x ) 0 P0' x P1 x P12 ( x ) 0 ,
expresie care arat ndeplinirea condiiei 4 din definiia irului lui turm. Pe baza
teoremei 2.1, teorema este demonstrat.
n cazul cnd P( x ) are rdcini multiple, polinomul Pm x va fi cel mai mare divizor
al polinoamelor: P( x ) i P' ( x ) . irul obinut se mparte la Pm x i se obine irul
turm cruia i putem aplica teorema 2.2 .
Dup relaia de recuren (2.8) s-a realizat un algoritm pentru obinerea unui ir
turm ataat unui polinom de gradul n. Algoritmul determin resturile cu semn
schimbat din algoritmul lui Euclid aplicat polinomului i derivatei lui. Dac polinomul
i derivata lui sunt prime, ultimul rest este o constant iar n caz contrar este cel mai
mare divizor al lor.

2.1.2.1. Algoritmul 2.1


{Variabile
grad:gradul polinomului, ntreg);
P1:vectorul coeficienilor polinomului;
P2:vectorul coeficienilor derivatei polinomului;
Rez:vectorul coeficienilor restului;
C1,C2:coeficienii pentru calculul coeficienilor restului, reali;
{
pentru i=grad-1 pn la 0 calculeaz P2[i]=(i+1)P1[i+1];
{ dac grad=0 atunci Rez(0)=P1(0)-P1(1)
/* Restul are gradul grad-2 */
altfel
{
calculeaz C1:=P1[grad]/P2[grad-1];
calculeaz C2:=(P1[grad-1]-C1*P2[grad-2])/P2[grad-1];
pentru i=grad-2 pn la 1 calculeaz
Rez[i]=P1[i]-C1*P2[i-1]-C2*P2[i];
calculeaz Rez[0]=P1[0]=P1-C2*P2[0];
}

}
Tiprete coeficienii restului cu semnul schimbat;
}
}

2.1.2.2. Implementarea algoritmului 2.1

18

Metode numerice n electronic


/ *Funcia care implementeaz calculul coeficienilor primei derivate
a polinomului.
*/
void DerPoli( int grad,
double *coef,
double *rez)
{ int i;
For (i=grad-1;i>=0;i--) rez[i]=(i+1)*coef[i+1];
}
/* Funcia care implementeaz termenii irului lui turm pentru
polinom
Funcia ntoarce
0 dac nu se poate realiza irul
1 dac se realizeaz irul
*/
int Divi( int grad,
double *p1,
double *p2,
double *rez)
{
double const1,const2;
int i;
if (grad= = 1) {
rez[0]=p1[0]-p1[1];
return 1;
}
else
{
const1=p1[grad]/p2[grad-1];
const2=(p1[grad-1]-const1*p2[grad-2])/p2[grad-1];
for (i=grad-2;i>=1;i--)rez[i]=p1[i]-const1*p2[i-1]-const2*p2[i];
rez[0]=p1[0]=p1-const2*p2[0];
return 0;
}

2.1.3. METODA BUDAN-FOURIER


Aceast metod se bazeaz pe teorema lui Budan - Fourier i determin numrul
rdcinilor reale ale ecuaiei polinomiale cu coeficieni reali .
Teorema 2.3 Fie polinomul P( x ) = a0 x n a1 x n-1 ... an cu a0 0 i irul
derivatelor lui:
P x , P' x , P'' x ,... , P n x =a0 n!
(2.9)
Numrul rdcinilor ecuaiei P( x ) 0 n intervalul ( a , b), a , b R este dat de

19

Rezolvarea numeric a ecuaiilor algebrice


N a , b N a N b

sau difer de acesta cu un numr par


N ( a, b) N ( a ) N ( b) 2m ,
unde N a este numrul inferior de schimbri de semn al irului derivatelor pentru
x a i N b este numrul superior de schimbri de semn al irului derivatelor pentru
x b.

Numrul inferior de schimbri de semn al irului este numrul de schimbri de semn


al subirului termenilor diferii de zero, iar numrul superior de schimbri de semn al
irului este numrul de schimbri al irului unde termenii nuli

g
g 1
g k 1
g 1
gk
Pb Pb Pb
0 Pb 0 ; Pb 0 ,
se nlocuiesc cu elementele P g+j j = 0 , 1, ... , k-1 crora li se atribuie semnul

gk

sign Pbg+j
1 signP b

Aceast metod are dezavantajul c nu determin precis numrul de rdcini reale


ale ecuaiei polinomiale .
Dintre toate metodele de separare a rdcinilor reale ale unei ecuaii algebrice cea
mai utilizat este metoda irului lui turm, iar pentru ecuaii de grad mai mic ca patru
se poate utiliza cu mult succes i metoda irului lui Rolle .
k-j

2.2.CALCULUL RDCINILOR REALE ALE


ECUAIEI ALGEBRICE
Pentru calculul rdcinilor reale ale unei ecuaii algebrice se utilizeaz mai multe
metode numerice dintre care amintim: metoda biseciei (bipartiiei), metoda
aproximaiilor succesive, metoda lui Newton - Raphson, metoda lui Lobacevski i
metoda lui Bairstow.

2.2.1. METODA BISECIEI (BIPARTIIEI)


Fie funcia continu f : [a , b] R i ecuaia f ( x ) 0 care are soluie unic pe
intervalul [a , b] . Pentru condiiile date funcia satisface inecuaia f a f b 0 . Se
pune problema determinrii soluiei a ecuaiei f ( x ) 0 pe intervalul [a , b] (fig. 2.1),
cu o anumit eroare .
Metoda const n a verifica dac a sau b sunt soluii ale ecuaiei f ( x ) 0 . Dac a i
b nu sunt soluii, se trece la njumtirea intervalului [a , b] i se determin valoarea
x m ( a b) / 2 . Se verific dac xm este soluie a ecuaiei. Aceast verificare poate fi
fcut prin compararea | f ( x m )| sau compararea | bn a n | , unde este eroarea
de calcul a soluiei ecuaiei. Dac xm este soluie a ecuaiei, problema s-a rezolvat; n

20

Metode numerice n electronic

caz contrar se evalueaz f ( a ), f ( x m ) i se verific dac produsul f (a ) f ( x n ) 0.


Dac inegalitatea este satisfcut b1 x m i a a1 i soluia se caut n intervalul
[a1 , b1 ] . Dac inegalitatea nu este satisfcut, a1 x m i b b1 i soluia se afl n
intervalul [a1, b1 ] . Procedeul continu i se obin dou iruri convergente: unul
monoton cresctor mrginit superior de b i altul monoton descresctor mrginit
inferior de a :
a a1 a2 ... an ....
b b1 b2 ... bn ...

(2.10)
irul lungimilor intervalelor care se obin prin njumtire este:
b1 a1 (b a)/2 , b2 a2 (b a)/2 2 , ... , bn a n (b a)/2 n ,

un ir descresctor cu limita zero .


lim

bn an
2n

lim bn

(2.12)

lim a n

(2.13)

xm

Fig.2.1. Graficul funciei y f ( x ) pe


intervalul [a,b]

(2.11)

Algoritmul de calcul se oprete atunci cnd


este ndeplinit condiia | bn an | unde
este eroarea impus pentru calculul soluiei
ecuaiei date. Soluia ecuaiei este aproximat
cu valoarea mijlocului intervalului [a n , bn ] .
Lungimea intervalului tinde la zero cnd n
tinde la infinit, limita capetelor intervalelor
fiind un punct a crui abscis este soluia
ecuaiei.

2.2.1.1. Algoritmul 2.2. Bisecia pentru polinoame


{Variabile
n: gradul polinomului, intreg;
A: coeficienii polinomului, vector;
ls,ld: limitele intervalului, real;
er: eroarea de calcul, real;
rad:rdcina, real;
x m : jumtatea intervalului [ l s , l d ], real;
// se utilizeaz funcia Valpol din ANEXA 1//
{
dac Valpol(n,A,ls)*Valpol(n,A,ld)>0 atunci
{scrie ecuaia nu are rdcin;

Rezolvarea numeric a ecuaiilor algebrice


stop;
}
dac Valpol(n,A,ls)=0 atunci
{ rad=ls
stop;
}
daca Valpol(n,A,ld)=0 atunci
{ rad=ld;
stop;
}
xm=(ls+ld)/2;
ct timp (abs(ld-ls)>er) i Valpol(n,a,xm)<>0 execut
{ xm=(ls+ld)/2;
dac Valpol(n,a,xm)*Valpol(n,a,ls)<0 atunci ld=xm
altfel ls=xm;
}
rad=xm;
}

2.2.1.2. Implementarea algoritmului 2.2


/* Funcia ntoarce:
0 n caz de eec
1 n cazul unui rezultat corect */
int BiseciePolinom( int grad,
double Coef[],
double ls,
double ld,
double eroare,
double *rdcina)
{
double xm;
if( ValPol(grad,Coef,ls)*ValPol(grad,Coef,ld)>0 ) return 0;
if( ValPol(grad,Coef,ls)==0){
*rdcina=ls;
return 1;
}
if( ValPol(grad,Coef,ld)==0){
*rdcina=ld;
return 1;
}
xm=0.5*(ls+ld);

21

22

Metode numerice n electronic


while ( (fabs(ld-ls)>eroare) && (ValPol(grad,Coef,xm)!=0) )
{
xm=0.5*(ld+ls);
if( ValPol(grad,Coef,ls)*ValPol(grad,Coef,xm)<0 )ld=xm;
else ls=xm;
}
*rdcina=xm;
return 1;
}

2.2.1.3.Algoritmul 2.3. Bisecia pentru ecuaii transcendente


{ Variabile
(F ecuaia, funcie real de variabil real)
ls,ld: limitele intervalului, real;
er:eroarea de calcul, real;
xm: mijlocul intervalului, real;
rad:rdcina, real;
{
dac F(ls)*F(ld)>0 atunci { soluia nu exista ,
stop }
altfel
dac F(ls)=0 atunci {soluia este rad=ls;
stop
}
dac F(ld)=0 atunci {soluia este rad=ld;
stop
}
xm=(ls+ld)/2;
ct timp (abs(ld-ls)>er) i (F(xm)<>0) executa
{ xm=(ls+ld)/2;
dac F(xm)*F(ls)<0 atunci ld=xm;
altfel ls=xm;
}
soluia este rad=xm;
}

2.2.1.4. Implementarea algoritmului 2.3


/* Funcia ntoarce:
0 n caz de eec
1 n cazul unui rezultat corect
*/
int BisecieFuncie(double (*f)(double),
double ls,

Rezolvarea numeric a ecuaiilor algebrice

23

double ld,
double err,
double *soluie)
{
double xm;
if ( f(ls)*f(ld)>0) return 0;
if ( f(ls)==0)
{ *soluie=ls;
return 1;
}
if ( f(ld)==0)
{
*soluie=ld;
return 1;
}
xm=0.5*(ls+ld);
while( ( fabs(ld-ls)>err) && ( f(xm)!=0) )
{
xm=0.5*(ls+ld);
if ( f(ls)*f(xm)<0 ) ld=xm;
else ls=xm;
}
*soluie=xm;
return 1 ;
}

2.2.2. METODA APROXIMAIILOR SUCCESIVE


Fie funcia f : [a, b] R continu i derivabil pe ( a , b) i ecuaia f ( x ) 0 , care pe
intervalul (c,d) ( a , b) are o rdcin unic , f ( ) 0 . Presupunem c ecuaia
(2.14)
f ( x ) 0 , se scrie sub forma: x ( x )
Pentru x o o aproximaie iniial, avem urmtoarele succesiuni de aproximaii:
(2.15)
x1 x0 , x2 x1 , x3 x2 , ... , xn xn-1

Ca urmare formula x n xn-1 reprezint o formul de iteraie. Aceast formul de


iteraie este simpl deoarece valoarea calculat depinde numai de valoarea precedent
i este foarte avantajoas n programarea pe calculator, deoarece nu consum mult
memorie i timpul de calcul este redus .
Dac valoarea calculat depinde de toate valorile precedente
x n x0 , x1 , x2 , ... , xn-1
(2.16)
atunci consumul de memorie i timpul de calcul sunt mai mari dect n cazul
precedent. Dac funcia din formula de iteraie nu depinde de rangul de iteraie,
atunci iteraia este de tip staionar, cazul celor dou iteraii prezentate .

24

Metode numerice n electronic

Formula de iteraie poate depinde i de rangul de iteraie


x n n x0 , x1 , x2 , ... , xn-1
(2.17)
i n acest caz rezult cel mai general mod de iteraie.
Vom studia formula de iteraie xn ( xn 1 ) . Problema care se pune este convergena
irului (2.15), ir care la limit d soluia ecuaiei x = x , deci a ecuaiei f ( x ) 0 .
Convergena irului este dat de teorema contraciei .
Definiia 2.2 Aplicaia T: E E se numete contracie dac exist un R cu
proprietatea 0 1 astfel ca :
Tx , Ty x , y ,
x , y E

E ,

reprezentnd un spaiu metric complet, iar ( x , y ) distana definit n spaiul E.

Teorema 2.4 (Teorema contraciei )


Fie contracia T : E E i E , un spaiu metric complet. Atunci :
1) Aplicaia T este continu
2) Oricare ar fi x0 E irul x0 , x1 , x2 , ... , x n , ... definit prin relaia de recuren
x k 1 Tx k (k =0,1,2, ... ,n, ... ) este convergent. Limita irului este x i este fix
pentru T, adic T x x i viteza de convergen este:

xm , x

m
x0 , x1
1-

3) Punctul x este unic


Fie formula de iteraie x n x n-1 . Considerm c soluia ecuaiei x ( x ) este a ,
deci a= a . Scznd cele dou relaii se obine:
x n a= x n-1 - a

(2.18)

nmulim partea dreapta cu x n 1 a / x n 1 a i rezult


x n-1 a
(2.19)
x n-1 a
xn a
x n-1 a

Aplicnd teorema lui Lagrange


x n-1 a
'
x n-1 a

avem

unde

x n-1 b

x n a ' ( ) x n-1 a

Dac lum valoarea maxim a lui ' x

n ( a , b) pe care o considerm egal cu

atunci
x n a x n-1 a
x n-1 a xn-2-a x n a 2 xn-2 a

x n a n x0 a

(2.20)

25

Rezolvarea numeric a ecuaiilor algebrice

Dac ' x < 1 pe ntreg intervalul, atunci indiferent de alegerea punctului de


start x0 , irul 2.15 este convergent, deoarece
lim xn a lim n x0 a 0 lim xn a ,

valoare care reprezint soluia ecuaiei 2.14.


Dac ' x 1 atunci xn a crete odat cu creterea lui n, rezultnd divergena
irului x n . Aceste cazuri de convergen a metodei aproximaiilor succesive pentru
y

y
yx
y ( x)
yx
y ( x)

a
x0

x1 x3

Fig.2.2. Convergena pentru cazul

0< ' ( x ) <1

x0

x2

x3

x1

Fig.2.3. Convergena pentru cazul

-1< ' ( x ) <0

' x 1 i de divergen a metodei pentru ' x 1 pot fi justificate i prin

reprezentri grafice date n figurile: 2.2, 2.3, 2.4, 2.5.


Calculul soluiei prin metoda aproximaiilor succesive se face funcie de o eroare
impus care d criteriul de oprire al programului . Algoritmul se termin cnd
| x n x n 1 |
(2.21)
ceea ce arat c diferena dintre dou valori consecutive calculate este mai mic ca

26

Metode numerice n electronic

y
y

y ( x)

y ( x)
yx

y=x

a
x2

x1

xo

Fig.2.4. Divergena pentru cazul

x0 a

x1

Fig 2.5. Divergena pentru cazul

'(x) 1

' ( x ) 1

sau cnd
(2.22)
| f ( x n )|
i atunci soluia ecuaiei este aproximat de xn , pentru suficient de mic.

2.2.2.1. Algoritmul 2.4. Aproximaii succesive


{Variabile
(F funcie real de variabil real, ecuaia se aduce la x=F(x))
x0: punctul de start, real;
pc: punctul de derivare, real;
xn: valoarea curenta a rdcinii, real;
xn_1: valoarea precedent a rdcinii, real;
h: pasul de derivare, real;
der:derivata funciei, real;
ls,ld: limitele intervalului, real;
rad:rdcina ecuaiei, real;
{
h=0.0001;
pc=ls;
repeta
der=(F(pc+h)-F(xc))/h;
pc=pc+h;
pn cnd (pc>ld) sau der>=1;
dac
der>=1 atunci
{scrie nu se poate rezolva;
stop }
xn=x0;
repet

Rezolvarea numeric a ecuaiilor algebrice


xn_1=xn;
xn=F(xn_1);
pan cnd abs(xn-xn_1)<er;
rad=xn;
soluia este rad;
}

2.2.2.2. Implementarea algoritmului 2.4


/* Funcia ntoarce:
0 cnd se gsete rdcina cu aproximaia dorit
1 cnd nu se ndeplinete condiia de convergen
2 cnd nu se atinge precizia n numrul de pai impus
*/
int AproxSuc( double (*fi)(double),
/* ecuaia */
double ls,
/* limita stng */
double ld,
/* limita dreapt */
double x0,
/* valoarea de start */
double err,
/* precizia de aflare a soluiei */
int NMax,
/* nr. maxim de iteraii */
double *sol
/* soluia */
)
{
double xn,xn_1,pct,pas=0.001;
int iter,sem=1;
pct=ls;
do
{
if( Derf(fi,pct)>=1) sem=0;
else pct+=pas;
}
while( (sem==1) && (pct<=ld) );
if(sem==0) return 1;
else
xn=x0;
iter=1;
do
{
xn_1=xn;
xn=fi(xn_1);
iter++;
}
while ( ( fabs(xn-xn_1)>err ) && (iter<=NMax) );
*sol=xn;

27

28

Metodenumericenelectronic
if (iter<NMax) return 0;
else return 2;
}

2.2.3.METODA APROXIMAIILOR SUCCESIVE CU VITEZ


MARE DE CONVERGEN
Din figura 2.1 se observ c o nou valoare xn 1 se obine din valoarea calculat xn
(iniial fiind x0 ) la care se adaug o valoare x corespunztor fig. 2.5
(2.23)
x n+1 x n x
unde
x f xn xn
(2.24)
Pentru mrirea vitezei de convergen a metodei se pune problema adugrii la xn a
termenului k x cu k >1, astfel ca valoarea xn 1 s fie foarte aproape de soluie i dac
este posibil s fie chiar a . Deci :
x n+1 x n k x
(2.25)
Valoarea lui k se determin cu ajutorul unghiului prezentat n fig 2.5 i a
segmentului x , k x , (1-k) x . Deoarece y x (bisectoarea nti) formeaz cu axele
de coordonate unghiuri de 450, ABC este un triunghi dreptunghic isoscel, deci
AB=BC=(1-k) x . Din triunghiul dreptunghic TBC rezult:
tan = BC / TB = (1-k ) x / ( k x ) = (1-k)/k

(2.26) sau
(2.27)
Tan poate fi exprimat cu ajutorul
funciei x :
k = 1 / (1- tan( )) .

yx

y ( x)

B
x

kx

a
xn

Fig.2.6. Graficul iteraiei la pasul n

xn xn
xn xn-1

a-x n

'

(2.28)

formul obinut aplicnd teorema lui


Lagrange .
Din expresiile (2.27) i (2.28) se obine
expresia lui k sub forma
k=

x n 1

'

a x n

unde x n a

xn 1

tan =

; xn-1 xn

1
1- '

(2.29)

unde ' poate fi aproximat funcie


de valorile cunoscute astfel :
(2.30)

29

Rezolvarea numeric a ecuaiilor algebrice

Dac inem seama de formulele (2.30) , (2.29) i (2.25) putem exprima formula de
calcul a lui xn 1 astfel :
x n 1 x n k ( f ( x n ) x n )
(2.31)
Influenele lui k pentru cele patru cazuri ale valorilor derivatei sunt:
1. 0 < ' ( x ) <1. Din (2.28) rezult k 1 , , adic o valoare a lui k mai mare ca 1
mrete viteza de convergen a metodei prin mrirea pasului;
2. -1 < ' x <0. Rezult (1 / 2) k < 1 , adic n acest caz pasul trebuie micorat
pentru a obine o mrire a vitezei de convergen a metodei;
3. ' x > 1. Rezult k - , 0 , dei metoda n acest caz este divergent pentru un
k < 0 se poate obine o mbuntire a metodei;
4. ' x < 1. Rezult k 0, 1 / 2 , adic o micorare a pasului dar fr a ne
pronuna asupra convergenei irului n acest caz.

2.2.4. METODA NEWTON-RAPHSON


Aplicnd metoda aproximailor succesive cu vitez de convergen mrit pentru
care considerm x n rezult din (2.31):

x n 1 xn

1 ' xn

xn xn

(2.32)

Aceast expresie reprezint o formul de iteraie pentru determinarea soluiei ecuaiei


x = x i se numete formula Newton - Raphson .
Formula (2.32) mai poate fi exprimat astfel :
xn xn ' xn
x n +1
(2.33)
1 ' xn

Formula de iteraie (2.33) poate fi reprezentat sub forma :


x x ' x
x n+1 g x n
unde g x
1 ' x

(2.34)

Condiia de convergen a irului, spre soluia ecuaiei, este dat de relaia g' x 1 .
Calculm derivata funciei g ( x )
'' x x x
'
g x

1 x
'

(2.35)

Pentru convergena metodei Newton - Raphson este necesar ca g x 1 , condiie


satisfcut dac:
1. Soluia de start x0 este aleas ct mai aproape de soluia ecuaiei, pentru ca
x x s fie ct mai mic ;

30

Metodenumericenelectronic

2. '' x este ct mai mic ;


3. ' x nu este aproape de 1.
Formula Newton - Raphson (2.32) poate fi scris i pentru ecuaia implicit f ( x ) 0
astfel :
y

y= f (x)

y=x
y ( x)

x1

x
x0

x2 x1

Fig.2.7. Determinarea grafic a soluiei prin


metoda Newton-Raphson

x n+1 x n

f xn

f ' xn

x0

Fig.2.8. Determinarea grafic a soluiei


prin metoda tangentei.

(2.36)

unde f ( x ) = x x = 0 . n acest caz formula (2.35) se scrie sub forma :


g' x

f '' x f x

'

(2.37)

iar condiiile de convergen se transcriu:


1. Soluia de start s fie ct mai aproape de soluia ecuaiei, f ( x ) s fie ct mai mic;
2. f '' ( x ) s fie ct mai mic;
3. f ' x s fie ct mai deprtat de zero.
Formula (2.36) mai poart numele i de metoda tangentei. Interpretrile
geometrice ale metodei Newton-Raphson date prin formulele (2.32) si (2.36) sunt
prezentate n figurile 2.6, respectiv 2.7.
irul soluiilor ecuaiei ncepe cu soluia de start x 0 . n punctul de abscis x 0 al
curbei y ( x ) se traseaz tangenta la curb i se determin punctul de intersecie al
tangentei cu prima bisectoare. Abscisa x1 a punctului de intersecie este urmtoarea
valoare a soluiei ecuaiei la primul pas de iteraie. Procedeul de determinare a soluiei
ecuaiei la pasul de iteraie curent se face prin determinarea abscisei puncului de
intersecie al tangentei la curb n punctul de abscis determinat anterior i prima

Rezolvarea numeric a ecuaiilor algebrice

31

bisectoare. irul de abscise determinat, dac ndeplinete condiia de convergen,


tinde la soluia ecuaiei x ( x ) . Pentru metoda tangentei se traseaz tangenta la
curba y f ( x ) n punctul de abscis calculat anterior care se intersecteaz cu axa Ox .
Abscisa punctului de intersecie reprezint soluia ecuaiei la etapa curent de iteraie.

2.2.4.1.Algoritmul 2.5. Newton-Raphson pentru ecuaii


transcendente
{Variabile
(F ecuaia, funcie real de variabil real)
x0:valoarea punctului de start, real;
nmax:numrul maxim de iteraii, ntreg;
i:contor, ntreg;
xn:valoarea curent a rdcinii, real;
xn_1:valoarea precedent a rdcinii, real;
h,er:pasul de derivare, eroarea,reale;
der:valoarea derivatei in xn_1, real;
rad:rdcina ecuaiei, real;
{
i=0;
xn=x0;
h=0.0001;
repet
xn-1=xn;
der=(F(xn-1+h)-F(xn-1))/h;
dac der=0 atunci
{ scrie ecuaia nu se poate rezolva;
stop;
}
xn=xn_1-F(xn_1)/der;
i=i+1;
pn cnd (abs(xn-xn_1)<er) sau (i>nmax);
dac i>nmax atunci
{
scrie soluia nu poate avea precizia dat;
stop;
}
rad=xn;
scrie soluia este rad;
}
}

2.2.4.2. Implementarea algoritmului 2.5

32

Metodenumericenelectronic

/* Funcia ntoarce:
2 cnd derivata este nul
1 cnd nu pot afla rdcina cu precizia dorit
0 n caz de succes
*/
int NewtonRaphsonF( double (*f)(double),
double x0,
int niter,
double err,
double *soluie)
{
double xn,xn_1,aux;
int cont=1;
xn=x0;
do
{
xn_1=xn;
if( (aux=Derf(f,xn_1))==0) return 2;
xn=xn_1-f(xn_1)/aux;
cont++;
}
while( ( fabs(xn-xn_1)>err) && (cont<=niter));
if (cont>=niter) return 1;
*soluie=xn;
return 0;
}

2.2.5. METODA NEWTON-RAPHSON PENTRU POLINOAME


Aceast metod mai poart numele i de metoda Birge - Vieta.
Fie ecuaia polinomial P( x ) 0
P( x ) amx m am1x m1 ... a1x a0

Aplicm formula de calcul (2.36)


x n+1 x n

P xn

P' x n

(2.38)

Pentru calculul valorii unui polinom ntr-un punct dat x0 , aplicm urmtorul
procedeu:
(2.39)
P( x ) ( x x0 )( bmx m1 bm1x m 2 ... b2 x b1 ) b0 , iar P( x0 ) b0
Pentru determinarea lui b0 , identificm coeficienii polinoamelor din (2.39) i rezult:
am bm
ai bi x0bi 1 ,

i m 1, m 2,...,2,1,0

Rezolvarea numeric a ecuaiilor algebrice

33

Pentru calculul coeficienilor bi utilizm formulele :


bm am
bi ai x0bi 1 i m 1, m 2,...,2,1,0
valoarea lui b0 este P( x0 ) .

Pentru calculul P' ( x0 ) utilizm formula (2.39 ):


P( x0) ) ( x x0 )Q( x ) b0 unde Q( x ) bmx m1 bm1x m 2 ... b2 x b1

Prin derivarea expresiei obinute rezult :


P' ( x ) ( x x0 )Q ' ( x ) Q( x ) , iar valoarea derivatei polinomului n x0 se calculeaz
cu formula: P' ( x0 ) Q( x0 ) ceea ce duce la determinarea valorii lui Q( x o ) , polinom ai
crui coeficieni au fost obinui anterior.
Q( x ) ( x x0 )( cm x m 2 cm1x m 3 ... c3 x c2 ) c1

Aplicnd acelai procedeu ca anterior rezult:


cm bm

c1 b1 x0c j 1

j m 1, m 2,...,2.,1

iar valoarea lui c1 reprezint valoarea derivatei polinomului n punctul x0 .


Formula de iteraie (2.38) pentru calculul soluiei polinomului devine:
xn+1 xn b0 /c1

(2.40)

unde:
bm am
bi a i x0 bi 1

i m 1,...2,1,0

cm bm
ci bi x0 ci 1

i m 1,...2,1

2.2.5.1.Algoritmul 2.6. Newton-Raphson pentru polinoame


//Se utilizeaz funcia Valpol si Derpol din ANEXA 1//
{Variabile
n:gradul polinomului, ntreg;
A: coeficienii polinomului, vector;
x0:valoarea de start, real;
er: eroarea de calcul, real;
xn:valoarea curent a rdcinii, real;
xn_1:valoarea precedent a rdcinii, real;
nmax:numrul maxim de iteraii, ntreg;
i:contor, ntreg;
rad:rdcina ecuaiei, real;
{
i=0;
xn:=x0;

(2.41)

34

Metodenumericenelectronic
repet
xn_1=xn;
dac Derpol(n,A,xn_1)=0 atunci
{
ecuaia nu se poate rezolva;
stop;
}
xn=xn_1-Valpol(n,A,xn_1)/Derpol(n,A,xn_1);
i=i+1;
pn cnd (abs(xn-xn_1)<er) sau (i>nmax);
dac i>nmax atunci
{
Nu avem precizia cerut;
stop;
}
rad=xn;
scrie soluia este rad;
}

2.2.5.2. Implementarea algoritmului 2.6


/* Funcia ntoarce:
2 cnd derivata este nul
1 cnd nu pot afla rdcina cu precizia dorit
0 n caz de succes
*/
int NewtonRaphsonP( int grad,
double coef[],
double x0,
int niter,
double err,
double *soluie)
{
double xn,xn_1,aux;
int cont=1;
xn=x0;
do
{
xn_1=xn;
if(( aux=ValDerPol(grad,coef,xn_1))==0) return 2;
xn=xn_1-ValPol(grad,coef,xn_1)/aux;
cont++;
}

35

Rezolvarea numeric a ecuaiilor algebrice


while( ( fabs(xn-xn_1)>err) && (cont<=niter));
if (cont>=niter) return 1;
*soluie=xn;
return 0;
}

2.2.6.METODA NEWTON-RAPHSON PENTRU RDCINI


FOARTE APROPIATE
Dac dou rdcini ale ecuaiei sunt foarte apropiate atunci este foarte greu s gsim
intervalul n care ecuaia are o singur rdcin, sau rdcinile apropiate . Cum funcia
n cele dou rdcini apropiate ia aceeai
valoare egal cu zero, conform teoremei lui
y
Rolle exist cel puin un punct x a1 , a 2
astfel ca derivata funciei s se anuleze (fig
2.8).
f x x x
yx
f a1 a1 a1 0

f a2 a2 a2 0

a1

a2

Rezult c exist un x a1 , a2 pentru care

f ' ( x ) 0 . Rezult c f ' x ' x 1 adic

' x 1 .

Vom

calcula

soluia

ecuaiei

x 1 , aplicnd aceeai metod Newton '

Fig.2.9. Graficul funciei cu dou


rdcini foarte apropiate.

Raphson, scriind ecuaia derivatei egal cu

unitatea, sub forma:


x x '(x) 1

(2.42)

Considerm rdcina acestei ecuaii x c (a1, a2 ) pe care o putem lua cu aproximaie


la mijlocul distanei dintre rdcinile a1 i a2 . Lund distana dintre
rdcini egal cu 2d, atunci c d i c d sunt dou valori foarte apropiate de
rdcinile ecuaiei a1 , respectiv a2 , pe care le putem lua ca valori de start . Problema
care se pune este determinarea valorii lui d , deoarece rdcinile ecuaiei a1, a2 nu sunt
cunoscute. Pentru aceasta se dezvolt n serie Taylor funcia x n jurul punctului c,
soluie a ecuaiei (2.41)
x c

x-c
1!

x-c 2
2!

'' c...

(2.43)

Se iau n considerare primii trei termeni ai dezvoltrii. Lund x c d , rezult:


( c d ) ( c ) d ' ( c ) d 2 / ( 2 !) "( c ) ,
sau

c d ( c ) d ( d 2 / 2) "( c ) ,

36

Metodenumericenelectronic

expresie care se poate scrie sub forma:


d=

2 c- c

(2.44)

Cu ajutorul formulei obinute (2.44) se poate determina valoarea lui d dac se cunoate
soluia ecuaiei (2.42) i se pot calcula valorile de start c d i c d pentru cele dou
soluii a1 respectiv a2 .

2.2.7. METODA LUI BAIRSTOW


Aceast metod determin toate rdcinile att reale ct si complexe ale unei ecuaii
polinomiale cu coeficieni reali. Fie ecuaia:
Pn ( x ) x n an 1x n 1 an 2 x n 2 ... a1x a0 0
(2.45)
care admite soluiile x1, x2 , x3,..., x n (2.46), care pot fi reale si complexe. Rdcinile
complexe sunt conjugate dou cte dou. Principiul metodei const n scrierea
polinomului sub forma unui produs de dou polinoame unul de gradul doi i celalalt
de gradul n-2. Deci va rezulta o ecuaie de gradul doi pe care o vom rezolva uor
aplicnd formulele de calcul ale soluiilor i o ecuaie de gradul n-2 pentru care vom
proceda la fel pentru descompunere. n acest mod, din aproape n aproape, vom obine
toate soluiile ecuaiei polinomiale iniiale. Problema principal a metodei este
determinarea coeficienilor polinomului de gradul doi i a celui de gradul n-2. Ecuaia
(2.45) poate fi scris astfel:
Pn ( x ) ( x 2 sx p )( x n 2 bn 1x n 3 bn 2 x n 4 ... b3x b2 ) Rs S
(2.47)
Prin identificarea coeficienilor de acelai grad a ecuaiilor (2.45) si (2.47) se obin
expresiile recursive dintre coeficienii celor dou polinoame pentru determinarea
coeficienilor bi , i n 1, n 2,...,2, R i S funcie de s i p . Determinarea valorilor
lui s i p se face astfel ca R i S s se anuleze. n acest caz soluiile polinomului de
gradul doi sunt soluii i pentru ecuaia dat.
an 1 bn 1 s
an 2 bn 2 sbn 1 p
an 3 bn 3 sbn 2 pbn 1

a2 b2 sb3 pb4
a1 R sb2 pb3

(2.48)

a0 S pb2

Din relaiile (2.48) se pot deduce relaiile recursive pentru calculul coeficienilor celor
dou polinoame n care s-a descompus polinomul iniial:

Rezolvarea numeric a ecuaiilor algebrice


bn 1 an 1 s
bn 2 an 2 sbn 1 p
bn 3 an 3 sbn 2 pbn 1

b2 a2 sb3 pb4

37

(2.49)

R a1 sb2 pb3
S a0 pb2

Pentru uniformizarea formulelor de calcul (2.49) se face substituia formal :


R b1 a1 sb2 pb3
S b0 sb1

(2.50)

rezultnd sistemul neliniar:


bn 1 an 1 s

bn 2 an 2 sbn 1 p
bk ak sbk 1 pbk 2
k n 3, n 4,...,2,1,0

(2.51)

unde R(s,p) i S(s,p) au expresiile (2.50).


Determinarea coeficienilor s i p se face astfel ca restul Rx S s fie zero,
obinnd n acest mod un produs de dou polinoame, unul de gradul doi i cellalt de
gradul n-2 egal cu zero. Pentru c Rx S 0 pentru orice x rezult:
R(s,p)=0
(2.52)
S(s,p)=0
Sistemul neliniar (2.52) se rezolv cu metoda lui Newton sau a matricei funcionale
prezentat n capitolul 3. Din sistemul neliniar (2.52) se obine urmtorul sistem liniar
n s k i p k :
R( s k , p k )
R( s k , p k )
s k
p k R ( s k , p k )
s
p
S ( sk , p k )
S (sk , pk )
s k
p k S ( s k , p k )
s
p

(2.53)

unde sk sk 1 sk iar pk pk 1 pk , k reprezint gradul iteraiei.


(2.54)
Se pornete cu o soluie de start ( s0 , p0 ) care se nlocuiete n sistemul (2.53) i se
obin iterativ cu ajutorul formulelor (2.54) , soluiile sistemului.
Din expresia lui R( s, p ) i a lui S(s,p) se deduc derivatele pariale n raport cu s i p .

38

Metodenumericenelectronic
R( s, p) b1

s
s
R( s, p) b1

p
p
b0 b1

S ( s, p )

b1
s
s
s
S ( s, p) b0 b1

.s
p
p p

(2.55)

Se observ c n ambele derivate pariale a lui R(s,p) i S(s,p) n raport cu s i p avem


derivata pariala a lui bk , k=1,2,3,,n-1 n raport cu s i p.
bk
b
Dac notm t k k i q k
k=n-1,n-2,,2,1,0 se pot calcula valorile
p
s
expresiilor (2.55) prin derivarea expresiilor (2.51) .

t n 1 1
t n 2 s.t n 1 bn 1
t k s.t k 1 p.t k 2 bk 1

(2.56)

k n 3, n 4,...,1,0
qn 1 0
qn 2 1
qk s. qk 1 p. qk 2 bk 2
k n 3, n 4,...,1,0.

(2.57)

Coeficienii sistemului (2.53) se calculeaz mai nti n punctul de start astfel:


R ( s0 , p 0 ) b1 ( s0 , p 0 )
S ( s0 , p 0 ) b0 ( s0 , p 0 ) b1 ( s0 , p0 ) s0

S ( s0 , p 0 )
t 1 ( s0 , p 0 )
s
R ( s0 , p 0 )
q1 ( s0 , p 0 )
p
S ( s0 , p 0 )
t 0 ( s0 , p0 ) t 1 ( s0 , p0 ) s0 b1 ( s0 , p 0 )
s
S ( s0 , p 0 )
q 0 ( s0 , p 0 ) s0 q1 ( s0 , p 0 )
p

(2.58)

Se rezolv sistemul pentru soluia de start, iar din expresiile (2.54) se determin
soluiile sistemului pentru iteraia ntia s1 i p1 . Se continu procesul de iteraie pn
cnd | | sk 1 sk | i | pk 1 pk | unde este eroarea impus. Pentru aceste valori
ale soluiilor sistemului se consider S ( sk 1, pk 1 ) 0 i R( sk 1, pk 1 ) 0 . n aceste

39

Rezolvarea numeric a ecuaiilor algebrice

condiii, prin rezolvarea ecuaiei de gradul doi, se obin dou soluii reale sau
complexe ale ecuaiei iniiale (2.45). Continund la fel cu ecuaia de gradul n-2 se
obine n final un polinom de gradul doi dac n este par i un polinom de gradul nti
dac n este impar.
2.2.7.1. Algoritmul 2.7. Metoda lui Bairstow

{Variabile
a:vectorul coeficienilor ecuaiei de rezolvat;
b:vectorul coeficienilor polinomului obinut prin descompunere;
s, p :variaiile lui s i p;
s,p:coeficienii polinomului de gradul doi, reali;
R,S:coeficienii restului, reali;
R R
:derivatele pariale ale lui R n raport cu s i p, reale;
,
s p
S S
:derivatele pariale ale lui S n raport cu s i p, reale;
,
s p
s0 , p0 :soluiile de start pentru calculul lui s i p, reale;

: eroarea de calcul, real;


n,i,k:ntregi;
{
dac a n 1 atunci pentru k=n-1 pn la 0 a k :

ak
;
an

i:=n;
j:=-1;
repet
i:=i-2;
repet
j:=j+1;

bi1(s j ,p j ) a i1 s j
bi (s j ,p j ) a i s j .bi1 p j
pentru k: i 1 pn la 0

bk (s j ,p j ) a k s j .bk 1 p j .bk 2

t i1 1
t i s j . t i1 bi1
pentru k: i 1 pn la 0

t k s j . t k 1 p j . t k 2 bk 1

40

Metodenumericenelectronic

qi1 0
qi 1
pentru k: i 1 pn la 0 q k s j . q k 1 p j . q k 2 bk 2

R( s j , p j ) b1( s j , p j )
S ( s j , p j ) b0 ( s j , p j ) b1( s j , p j )s j

S ( s j , p j )
s
R( s j , p j )
p
S ( s j , p j )
s
S ( s j , p j )
p

t1( s j , p j )
q1( s j , p j )
t0 ( s j , p j ) t1( s j , p j )s j b1( s j , p j )
q 0 ( s j , p j ) s j q1( s j , p j )

rezolv sistemul
R( s j , p j )
R( s j , p j )
s j
p j R( s j , p j )
s
p
S ( s j , p j )
S ( s j , p j )
s j
p j S ( s j , p j )
s
p
s j 1 s j s j ;
p j 1 p j p j

pn cnd (| s j 1 s j | ) (| p j 1 p j | )
rezolv ecuaia x 2 s j 1 x p j 1 0
pn cnd (i-2<2)
Rezolv ecuaia de gradul 1 sau 2;
Tiprete soluiile;
}
}

2.2.7.2. Implementarea algoritmului 2.7


/* Funcia care ntoarce semnul unui numr real */
int Sign( double x)

Rezolvarea numeric a ecuaiilor algebrice


{
if (x>0) return 1;
if (x<0) return -1;
return 0;
}
/* Funcia Sign */
/* Funcia pentru rezolvarea ecuaiei de gradul doi */
void ECGR2( double a,
double b,
double c,
/* coeficienii ecuaiei */
double *xr1,
double *xi1,
double *xr2,
double *xi2
/* partea real i imag. a soluiilor */
)
{
double d; /* determinantul ecuaiei */
d=b*b-4*a*c;
switch ( Sign(d) )
{
case 1: {
*xr1=(-b+sqrt(d))/(2*a);
*xi1=0;
*xr2=(-b-sqrt(d))/(2*a);
*xi2=0;
break;
}
case 0: {
*xr1=-b/(2*a);
*xi1=0;
*xr2=*xr1;
*xi2=0;
break;
}
case -1:{
*xr1=-b/(2*a);
*xi1=sqrt(-d)/(2*a);
*xr2=*xr1;
*xi2=-(*xi1);
break;
}
} /* switch */
}; /* ECGR2 /*
/* Funcie care implementeaz efectiv metoda Bairstow pentru
rezolvarea ecuaiilor polinomiale furniznd att soluiile reale, ct i
complexe, simple sau multiple. Ea ntoarce urmtoarele coduri:

41

42

Metodenumericenelectronic

1 dac se obin soluiile aproximative ale ecuaiei


2 dac nu exista soluie unic (la determinant vezi alg)
3 dac nu este atins precizia dorit
*/
int Bairstow( int grad, /* grad polinom */
double coef[], /* coeficienii polinomului */
double szero, /* soluia de start pt s -vezi alg */
double pzero, /* soluia de start pentru p -vezi alg */
double eps, /* precizia dorit a soluiilor */
int nmax, /* numrul maxim de iteraii */
double alfar[], /* partea real a vect. soluie */
double alfai[] /* partea imaginara a vect soluie */
)
{
/* Se recomand a se vedea algoritmul */
double R; /* coeficientul lui x al restului funcie de r si s */
double S;
/* coeficientul liber al restului funcie de r si s */
double RS;
/* derivata n raport cu s a lui R */
double RP; /* derivata n raport cu p a lui R */
double SS;
/* derivata n raport cu s a lui S */
double SP; /* derivata n raport cu p a lui S */
double D;
/* determinantul de la rez. sist.*/
double DS;
/* delta_s necunoscuta 1 din sistem *
double DP;
/* delta_p necunoscuta 2 din sistem */
double s0;
/* soluia s la pasul anterior */
double p0;
/* soluia p la pasul anterior */
double s1;
/* soluia s la pasul actual */
double p1;
/* soluia p la pasul actual */
int sem1;
/* Semafor de ieire din bucla mare vezi algoritm */
int sem2;
/* Semafor de ieire din bucla mic vezi algoritm */
int k;
/* Un contor */
int j;
/* ordinul rdcinii curente; la un pas aflu rad.j */
/* si rad. j+1 */
int m;
/* ordinul polinomului la un moment dat */
int i;
/* numrul de iteraii curent */
double b[NrMax]; /* coeficienii polinomului de ordin m-2 */
double t[NrMax]; /* vectorul derivatelor coefic. b n raport cu s */
double q[NrMax];/*vectorul derivatelor coefic. B n raport cu p *
/* realizm normarea polinomului */
for(k=grad-1;k>=0;k--)coef[k]/=coef[grad];
coef[grad]=1;
/* end normare */
j=1;
sem1=0;
do
{

Rezolvarea numeric a ecuaiilor algebrice


m=grad
switch (Sign(m-2))
{
case -1:{ /* a rmas ec. de gr 1 */
alfar[j]=-coef[m-1];
alfai[j]=0;
sem1=1;
break;
};
case 0:{ /* a rmas ecuaie de gr 2 */
ECGR2(1.0,coef[m-1],coef[m-2],
&alfar[j],&alfai[j],
&alfar[j+1],&alfai[j+1]);
sem1=1;
break;
};
case 1:{ /* ecuaie de grad mai mare ca doi */
s0=rzero;
p0=szero;
i=1;
sem2=0;
do
{
b[m-2]=1;
b[m-3]=coef[m-1]-r0;
t[m-2]=0;
t[m-3]=-1;
q[m-2]=q[m-3]=0;
if(m>3)for(k=m-4;k>=0;k--)
{
b[k]=coef[k+2]-b[k+1]*s0-b[k+2]*p0;
t[k]=-b[k+1]-t[k+1]*s0-t[k+2]*p0;
q[k]=-q[k+1]*s0-q[k+2]*p0-b[k+2];
}
R=coef[1]-s0*b[0]-p0*b[1];
S=coef[0]-p0*b[0];
RS= -b[0]-s0*t[0]-p0*t1];
RP= -q[0]*s0-b[1]-p0*q[1];
SS= -p0*t[0];
SP= -b[0]-p0*q[0];
D=RR*SS-SR*RS;
if(D!=0)
{
DS=(-R*SS+S*RS)/D;
DP=(-S*RR+R*SR)/D;
s1=s0+DS;

43

44

Metodenumericenelectronic

p1=p0+DP;
if((fabs(DS)<=eps)&&(fabs(DP)<=eps) )
{
ECGR2(1,r1,s1,&alfar[j],&alfai[j],
&alfar[j+1],&alfai[j+1]);
j+=2;
sem2=1;
for(k=0;k<=m-2;k++)coef[k]=b[k];
}
else
{
i++;
if(i>nmax) return 3;
else
{
s0=s1;
p0=p1;
}
}
}
else return 2;
} while (sem2!=1);
break;
}
}; /* Case */
} while (sem1!=1);
return 1;
} /* end Bairstow */

2.3. APLICAII
1. Se consider un amplificator integrat, avnd n bucl deschis o amplificare de
forma:
H ( s)

338.6260295
3

s 0.5284s 0.05120153s 0.00096807437

S se determine polii funciei de amplificare.


Pentru rezolvare, mai nti determinm numrul de rdcini reale ale polinomului de la
numitorul fraciei aplicnd irul lui turm. Cu ajutorul funciei ce implementeaz irul
lui turm se obine urmtorul ir:

45

Rezolvarea numeric a ecuaiilor algebrice


f1 ( s ) s 3 0.5284 s 2 0.05120153s 0.00096807437;
f 2 ( s ) 3s 2 10568
s 0.05120153
.
f 3 ( s ) 0.027912 s 0.002038
f 4 ( s ) 0.009969

Se determin numrul variaiilor de semn ale irului lui turm la - i . Pentru


aceasta se realizeaz tabelul 2.1
Tabelul 2.1

s
-

f1

f2

f3

f4

Diferena dintre numrul de variaii la - i d informaii asupra numrului de


rdcini reale ale ecuaiei date. Pentru determinarea intervalelor n care se gsesc
soluiile ecuaiei date, facem irul derivatelor.
f ( s ) s 3 0.5284s 2 0.05120153s 0.00096807437;

.
f ' ( s ) 3s 2 10568
s 0.05120153
.
f '' ( s ) 6s 10568
f ''' ( s ) 6

Se determin soluiile ecuaiilor din irul derivatelor i se ine seama c ntre dou
rdcini consecutive ale derivatei unei funcii poate exista cel mult o rdcin a
funciei. Soluiile se determin cu eroarea 10 5 suficient pentru determinarea
intervalelor n care se gsesc soluiile. Pentru derivata de ordinul doi se consider
intervalul (-5,+5) i se determin soluia s1'' 0.17613 cu ajutorul metodei biseciei.
Pentru derivata nti se determin o soluie n intervalul (-5,0.17613) i cealalt n
intervalul (0.17613,5). Se obin soluiile:
s1' 0.29426 ; s2' 0.05800

Acum se pot determina intervalele n care se gsesc polii funciei de amplificare:


(-5,0.29426) ; (-0.29426,-0.05800) i (-0.05800,5)
Polii sunt determinai cu metodele:
Bisecie:

s1 0.409 ; s2 0.0943 ; s3 0.0251

46

Metodenumericenelectronic
s1 0.409 ; s2 0.0943 ; s3 0.0251

Aproximaii succesive:
Newton-Raphson:

s1 0.409 ; s2 0.0943 ; s3 0.0251

2. Se consider funcia de transfer a unui filtru analogic de tip Cebev dat sub forma:
H ( s)

0.04381
s 4 0.6192s 3 0.61401692s 2 0.20379268s 0.0491588

S se determine polii filtrului.


Filtrul admite poli compleci i pentru determinarea lor aplicm metoda lui
Bairstow. Se obin urmtorii poli ca soluii ale polinomului de la numitorul funciei de
transfer:
s12 0.090700 0.639041 i si

s34 0.218900 0.264732 i

3. Se d ecuaia
ex 1 / x 0

care are o soluie n intervalul (0.1, 1). S se calculeze soluia ecuaiei aplicnd metoda
bisectiei pentru ecuaii transcendente, metoda Newton-Raphson i metoda
aproximaiilor succesive. Eroarea de calcul se consider 0.0000000001 pentru toate
metodele. S se compare rezultatele.

3
REZOLVAREA NUMERIC A SISTEMELOR
DE ECUAII*
Fie funcia f : X Y , X Rn, Y Rn i f ( x ) 0 un sistem de ecuaii. Dup gradul necunoscutelor care intr n aceste ecuaii, sistemele sunt liniare, dac termenii
ecuaiilor sunt de gradul nti i neliniare dac exist ecuaii ce conin termeni de grad
mai mare ca unu.

3.1. REZOLVAREA NUMERIC A SISTEMELOR


LINIARE
Un sistem liniar de n ecuaii cu n necunoscute se prezint astfel:
a11 x1 a12 x2 ... a1n x n b1
a x a x ... a x b
21 1
22 2
2n n
2

a n1 x1 a n2 x2 ... a nn x n bn

(3.1)

AX=B

(3.2)

sau matriceal
unde:

a11 a12

a
a
A= 21 22

a n1 a n 2

x1

x2
X= x3


xn

(3.4)

... a1n

... a2n

... a nn

B=

b1

b2
b3


bn

(3.3)

(3.5)

Metodele de rezolvare a sistemelor liniare le putem mpri n dou categorii: metode


directe care presupun un numr finit de operaii i metode indirecte care
__________________________________
*) Bibliografie [3], [4], [5], [8], [9], [15], [17]

Metode numerice n electronic

48

implic un numr infinit de operaii. n realitate nici o metod nu poate avea un numr
infinit de operaii.Metoda indirect necesit un numr infinit de operaii pentru
obinerea soluiei exacte i din acest motiv operaiile se trunchiaz rezultnd o eroare
de trunchiere. Metodele directe determin, printr-un numr finit de operaii soluia
exact a sistemului dac aceasta exist.

3.1.1. METODE DIRECTE


Dintre metodele directe prezentm metoda pentru sisteme triunghiulare, metoda
eliminrii a lui Gauss, metoda lui Cholesky, metoda Gauss-Jordan, metoda lui Crout
i metoda QR.

3.1.1.1. Sisteme inferior triunghiulare


Aceste sisteme sunt de forma urmtore:
a11 x1 b1

a 21 x1 a 22 x 2 b2
a 31 x1 a 32 x 2 a 33 x 3 b3
..........................................

a n1 x1 a n 2 x 2 a n 3 x 3 ...... a nn x n bn

(3.6)

Pentru rezolvarea sistemului se aplic metoda substituiei. Se calculeaz soluiile cu


formulele:
i 1

x1

b1 i
a11

bi a ij x j
j 1

xi

a ii

i=1,2,3,n

3.1.1.1.1. Algoritmul 3.1. Sisteme inferior triunghiulare


{ Variabile
A: matricea necunoscutelor sistemului;
B: vectorul termenilor liberi;
X: vectorul soluiilor;
{

x1

calculeaz

b1 ;
a11

pentru i=2 ,, n
i 1

bi a ij x j
calculeaz

xi

j 1

a ii

(3.7)

Rezolvarea numeric a sistemelor de ecuaii

49

pentru i= 1, , n tiprete x i }
3.1.1.1.2.Implementarea algoritmului 3.1
/* Funcia implementeaz metoda de rezolvare a sistemelor inferior
triunghiulare. Funcia ntoarce determinantul matricei principale */
double TRIUNGHIINF (int or_mat,
double MAT[][NrMax],
double TL[],
double XX[])
{
int i;
/* indice de linie */
int j;
/* indice de coloan */
double d=1; /* determinant */
for (i=1;i<=or_mat;i++) d*=MAT[i][i];
if ( d==0 ) return 0;
for (i=1;i<=or_mat;i++)
{
XX[i]=TL[i];
for(j=1;j<=i-1;j++) XX[i]=XX[i]-MAT[i][j]*XX[j];
XX[i]=XX[i]/MAT[i][i];
}
return d;
}

3.1.1.2. Sisteme superior triunghiulare


Sistemele de tipul superior triunghiular sunt de forma:
a11 x1 a12 x 2 a13 x 3 ... a1n x n b1

a 22 x 2 a 21 x 2 ... a 2n x n b2

a 33 x 3 ... a 3n x n b3

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

a nn x n bn

(3.8)

Calculul soluiilor sistemului se fac printr-o retrosubstituie cu ajutorul umtoarelor


formule:
n

xn

bn
a nn

bi a ij x j
i

xi

j i 1

a ii

i=n-1,n-2,,1

(3.9)

Metode numerice n electronic

50

3.1.1.2.1. Algoritmul 3.2. Sistem superior triunghiular


{ Variabile
A: matricea necunoscutelor sistemului;
B: vectorul termenilor liberi;
X: vectorul soluiilor;
n,i,j:ntregi;
{
calculeaz

xn

bn ;
a nn
n

bi a ij x j
pentru i=n-1,, 1 calculeaz

xi

j i 1

a ii

pentru i= 1 ,, n tiprete x i
}
3.1.1.2.2. Implementarea algoritmului 3.2
/* Funcia ntoarce determinantul matricei principale */
double TRIUNGHISUP (int or_mat,
double MAT[][NrMax],
double TL[],
double XX[])
{
int i;
/* indice de linie */
int j;
/* indice de coloan */
double d=1;
/* determinant */
for (i=1;i<=or_mat;i++) d*=MAT[i][i];
if ( d==0 ) return 0;
/*retrosubstituia */
for (i=or_mat;i>=1;i--)
{
XX[i]=TL[i];
for(j=or_mat;j>=i+1;j--) XX[i]=XX[i]- MAT[i][j]*XX[j];
XX[i]=XX[i]/MAT[i][i];
}
return d;

Rezolvarea numeric a sistemelor de ecuaii

51

3.1.1.3. Metoda lui Gauss de eliminare


Aceast metod const n realizarea unui sistem triunghiular prin eliminarea
termenilor de sub diagonala principal, sistemul (3.1). Pentru aceasta se analizeaz toi
termenii ak1 , k=1,...,n , i ecuaia care are valoarea maxim a acestui coeficient este
adus pe primul loc. Dac toi a k 1 =0 pentru k=1,...,n sistemul este incompatibil. Prima
ecuaie a sistemului dup reordonare se nmulete pe rnd cu factorul :
mk 1

ak 1
, k=2,...,n
a11

(3.10)

i se scade din ecuaia de pe poziia k , obinnd pe coloana 1 toi termenii zero n


afar de a11 . Sistemul devine :
1
1
1
1
1
a11
x1 a12
x2 a13
x3 ... a1n xn b1
2
2
2
2
a22
x2 a23
x3 ... a2n
xn b2
2
2
2
2
a x a x ... a x b
32

33

3n

(3.11)

2
2
2
2
a x a x ... a x b
n2

n3

nn

Procedeul se continu cu aducerea pe locul lui a22 a celui mai mare termen din
coloana doi i se nmulete linia a doua cu :
mk 2

ak2
a 22

k=3,4,...,n

(3.12)

i se scade din ecuaia de pe pozitia k. Pentru coloana i dup aducerea celui mai mare
coeficient n locul lui aii se nmulete aceast coloan cu :
mki

a ki
a 22

k=i+1,...,n

(3.13)

i se scade din linia de pe poziia k .


Pentru i = n-1 se obine sistemul :
a 1 x a 1 x a 1 x ... a 1 x b1
1n n
1
11 1 12 2 13 3
2
2
2
2

a22 x2 a23 x3 ... a2 n xn b2

n x b n

ann
n
n

(3.14)

Soluiile se obin printr-o retrosubstituie , pornind de la ultima ecuaie


xn

bnn

a nn


x i b22

j i 1

a iii

a ij x j

(3.15)

Metode numerice n electronic

52

Observaie. Metoda lui Gauss de eliminare se poate aplica i fr a aduce pe locul a ii ,


i=1,2,...,,(n-1) celui mai mare termen , condiia este ca a ii 0 , dar n acest caz
precizia de calcul scade. Metoda este prezentat pentru cazul celei mai bune precizii
de determinare a soluiilor.
3.1.1.3.1. Algoritm3.3. Metoda lui Gauss de eliminare
{Variabile
A:matricea sistemului;
B:vectorul termenilor liberi;
X:vectorul soluiilor ;
n,i :ordinul sistemului, indicele liniei, ntregi;
k : indice suplimentar al liniei, ntreg;
j : indice coloan, ntreg;
m: multiplicator, real;
d: determinantul sistemului, real;
max: elementul maxim de pe coloana, real;
lp: indicele liniei cu element maxim, ntreg;
{
i=1; det=1;
repet
max= abs(A[i,i]);
lp=1;
pemtru k=i+1 n execut
dac max<abs(A[k,i]) atunci
{ max<A[k,i];
lp=k;}
dac max=0 atunci
{ GAUSS=0;
exit; }
dac lp<>i atunci
{ pentru j=i,..,,n execut
sc=A[i,j];A[i,j]=A[lp,j];A[lp,j]=sc;
sc=B[i];B[i]=B[lp];B[lp]=sc;
d= -d;
}
k=i+1;
repet
m=A[k,i]/A[i,i];
pentru j =i ,,n execut A[k,j]=A[k,j]-m*A[i,j];
B[k]=B[k]-m*B[I];
k=k+1;
pna cnd k>n;
i=i+1;

Rezolvarea numeric a sistemelor de ecuaii

pn cnd i>=n;
pentru i=1,,n execut
dac d=0 atunci
{
GAUSS=0;
exit; }
X[n]=B[n]/A[n,n];
pentru i=n-1,,1 execut
{ X[I]=B[I];
pentru j=n,,i+1 execut
X[i]=X[i]/A[i,i]; }
GAUSS=d;
}

53

d:=d*A[i,i];

X[I]=X[I]-A[I,j]*X[j];

3.1.1.3.2. Implementarea algoritmului 3.3


#define SCHIMB(a,b,temp) (temp)=(a);(a)=(b);(b)=(temp);
/* Funcia implementeaz metoda eliminrii a lui Gauss (pivotare
parial). Funcia ntoarce determinantul matricei principale */
double GAUSS(int or_mat,
double MAT[][NrMax],
double TL[],
double XX[])
{
int i;
/* indice de linie */
int j;
/* indice de coloan */
int k;
/* indice suplimentar de coloan */
double m; /* multiplicator */
double d; /* determinant */
double sc;
double max;
int lp;
/* indicele liniei n care se gsete pivotul */
i=1;
d=1;
do
{
max=fabs( MAT[i][i]);lp=i;
for(k=i+1;k<=or_mat;k++)
if( max< fabs(MAT[k][i]) )
{
max=MAT[k][i];
lp=k;
}
if (max==0) return 0;
if(lp!=i)

Metode numerice n electronic

54
{

for(j=i;j<=or_mat;j++)
SCHIMB(MAT[i][j],MAT[lp][j],sc);
SCHIMB(TL[i],TL[lp],sc);
d*=-1;
}
k=i+1;
do
{
m=MAT[k][i]/MAT[i][i];
for (j=i;j<=or_mat;j++)
MAT[k][j]=MAT[k][j]-m*MAT[i][j];
TL[k]=TL[k]-m*TL[i];
k++;
}
while (k<=or_mat);
i++;
}while (i<or_mat) ;
for (i=1;i<=or_mat;i++) d*=MAT[i][i];
if ( d==0 ) return 0;
/*retrosubstituia */
for (i=or_mat;i>=1;i--)
{
XX[i]=TL[i];
for(j=or_mat;j>=i+1;j--) XX[i]=XX[i]-MAT[i][j]*XX[j];
XX[i]=XX[i]/MAT[i][i];
}
return d;
}

3.1.1.4. Metoda lui Crout


Rezolvarea sistemului AX=B (3.16) const n descompunerea matricelor A=LU
i B=LD (3.17), L fiind o matrice inferior triunghiular iar U o matrice superior
triunghiular cu elementele diagonalei principale egale cu unitatea. Dup nlocuirea
relaiilor (3.17) n ecuaia (3.16) prin simplificare se obine ecuaia UX=D (3.18)
care este uor de rezolvat. Din sistemul matriceal format de ecuaiile (3.17) se
calculeaz elementele matricelor U i L.

Rezolvarea numeric a sistemelor de ecuaii


l11 0

l21 l22
l31 l32

ln1 ln2

0
l33

0
0

ln3 ln4

0 1 u12

0 0 1
0 0 0

1 0 0

55

u13 u1n a11 a12



u23 u2 n a21 a22
1 u3n a31 a32


0 1 an1 an2

l11 0

l21 l22
l31 l32

ln1 ln 2

l33

ln 3 ln 4

a1n

a2 n
a3n

ann

0 d1 b1

0 d2 b2
0 d3 b3

1 dn bn

(3.16)

(3.17)

Din ecuaiile (3.19) i (3.20) prin identificarea elementelor corespunztoare rezult


urmtoarele formule de calcul ale matricelor U i L.
li1 ai1 ; i 1,2,..., n ; u1 j
lij aij

di

j 1

a1 j
a11

lik ukj ; i j ; uij

k 1

; j 1,2,..., n ; d1

b1
; a11 0 ;
a11

i 1
1

aij lik ukj ; lii 0 ; i j ;

lii
k 1

i 1

1
b1 lik d k

lii
k 1

(3.18)
(3.19)
(3.20)

Soluiile sistemului se calculeaz printr-o retrosubstituie cu ajutorul urmtoarelor


formule:
di
xn dn ; xi

aij x j

j i 1

uii

; i n 1, n 2,...,2,1;

(3.21)

3.1.1.4.1. Algoritm 3.4. Metoda lui Crout


{Variabile
MAT:matricea coeficienilor necunoscutelor sistemului;
TL:vectorul termenilor liberi;
X:vectorul soluiilor sistemului;
U:matricea superior triunghiular cu diagonala principal unitar;
L:matricea inferior triunghiular ;
n:ordinul sistemului, ntreg;
i,j :indice de linie respectiv de coloan, ntreg;
k:indice suplimentar, ntreg;
{
dac a11 1 atunci scrie -sistem nerezolvabil
altfel
{ pentru i=1 ,, n

Metode numerice n electronic

56
pentru j=1 ,, n
{calculeaz
li1 ai1 ;
u1 j

a1 j

;
a11
b
d1 1 ; a11 0 ;
a11

}
dac ij atunci
{ calculeaz
lij aij

j 1

lik ukj ;

k 1

i 1

1
uij aij lik ukj ;

lii
k 1

di

i 1

1
b1 lik d k

lii
k 1

}
dac i<j atunci
{ calculeaz
uij

1
lii

i 1

aij lik ukj ;

k 1

}
}
calculeaz
{ xn dn ;
pentru i=n-1 ,, 1
di

calculeaz xi

aij x j

j i 1

uii

}
Tiprete soluiile
}
3.1.1.4.2. Implementarea algoritmului 3.4
/* Funcia ntoarce
0 dac nu se poate face descompunerea matricei
1 dac descompunerea matricei are loc */
int Crout( int or_mat,
double MAT[][NrMax],
double X[],
double TL[],

Rezolvarea numeric a sistemelor de ecuaii

57

double L[][NrMax],
double U[][NrMax])
{
int i,j,k;
double s;
static double Y[NrMax];
/* Pentru fiecare coloan - i - */
for(i=1;i<=or_mat;i++)
{
/* Se calculeaz elementele matricei L */
/* Pentru fiecare linie - j - */
for(j=i;j<=or_mat;j++)
{
s=0;
for(k=1;k<=i-1;k++)s+=L[j][k]*U[k][i];
L[j][i]=MAT[j][i]-s;
}
for(k=1;k<=i-1;k++)L[k][i]=0;
/* Se calculeaz elementele matricei R */
/* Pentru fiecare coloan - j - */
for(j=i+1;j<=or_mat;j++)
{
s=0;
for(k=1;k<=i-1;k++)s+=L[i][k]*U[k][j];
if ( L[i][i]==0 )return 0; else U[i][j]=(MAT[i][j]-s)/L[i][i];
}
for(j=1;j<=i-1;j++)U[i][j]=0;
U[i][i]=1;
}
if( TRIUNGHIINF(or_mat,L,TL,Y)==0 )return 2;
If( TRIUNGHISUP(or_mat,U,Y,X)==0 )return 2;
return 1;}

3.1.1.5. Metoda lui Cholesky


Metoda lui Cholesky se refer la matricele simetrice ce au proprietatea c
A T A i n acest caz

l ij u ji l jj ; i 1,2,..., n 1; j 1,2,..., n 1; i j ;

3.1.1.5.1. Algoritmul 3.5. Metoda lui Cholesky

Metode numerice n electronic

58

Algoritmul pentru metoda lui Cholesky este identic cu algoritmul Crout, dar
se ine cont c a ij a ji ; i, j 1,..., n

3.1.1.5.2.Implementarea algoritmului 3.5.


/* Funcia ntoarce
0 dac nu se poate face descompunerea matricei
1 dac descompunerea matricei are loc
2 dac matricea nu e simetric
3 dac sistemul nu se poate rezolva
*/
int Choleski( int or_mat,
double MAT[][NrMax],
double L[][NrMax],
double X[],
double TL[])
{
int i,j,k;
double s;
static double U[NrMax][NrMax],Y[NrMax];
/* Verificarea simetriei */
for(i=1;i<=or_mat;i++)
for(j=i+1;j<=or_mat;j++)
if( MAT[i][j]!=MAT[j][i] )return 2;
/* Pentru fiecare linie */
for(i=1;i<=or_mat;i++)
{
/* Calculm elementele de pe linie cu j<i */
for(j=1;j<=i-1;j++)
{
s=0;
for(k=1;k<=j-1;k++)s+=L[i][k]*L[j][k];
if( L[j][j]==0 ) return 0; else L[i][j]=(MAT[i][j]-s)/L[j][j];
}
/* Aflm elementul diagonal */
s=0;
for(k=1;k<=i-1;k++)s+=L[i][k]*L[i][k];
if( (MAT[i][i]-s)<0)return 0;else L[i][i]=sqrt(MAT[i][i]-s);
/* Umplu cu zero spatiile din matricea L pentru j>i */
for(k=i+1;k<=or_mat;k++)L[i][k]=0;
}
for(i=1;i<=or_mat;i++)
for(j=1;j<=or_mat; j++)
U[i][j]=L[j][i];

Rezolvarea numeric a sistemelor de ecuaii

59

if( TRIUNGHIINF(or_mat,L,TL,Y)==0 )return 3;


if( TRIUNGHISUP(or_mat,U,Y,X)==0 )return 3;
return 1;
}

3.1.1.6. Metoda Gauss-Jordan sau matriceal formal


Aceast metod se deosebete de metoda eliminrii a lui Gauss prin faptul c
matricea sistemului este adus la o matrice diagonal prin transformri elementare
aplicate ecuaiei matriceale (3.2) .
E n E n 1 E n 2 ... E2 E1 AX E n E n 1 E n 2 ... E2 E1 B

(3.22)

Transformrile elmentare se fac astfel ca


E n E n 1... E2 E1 A E

(matricea unitate)

(3.23)

Ecuaia (3.22) devine


X=C

(3.24)

C= E n E n 1 ...E 1 B

(3.25)

unde

Prin identificarea celor dou matrice se obin soluiile sistemului (3.2) .


Pentru obinerea matricei E (3.23) se fac urmatoarele transformri asupra
coeficienilor matricei A i B :
1
a ij a uj

a ij

k 1

a ij

k 1
a i , k 1
k 1
a k 1

k 1
a k 1,k 1
k
k 1
a k 1, j a k 1, j

k 1
k
ai, j aij

pentru ik-1 , j k-1

pentru j k-1
pentru j < k-1

1
bi bi
k 1
a i ,k 1 k 1
k
k 1
bi bi
bk 1

k 1
a k 1, k 1

pentru i k 1

k
k 1
bk 1 bk 1

pentru k = 2,3,... , n

(3.26)

Metode numerice n electronic

60

3.1.1.6.1. Algoritm 3.6. Metoda Gauss-Jordan


{Variabile
A : matricea sistemului;
B : vectorul termenilor liberi;
X: vectorul soluiilor;
n : numrul necunoscutelor (ordinul matricei), ntreg;
lin : indicele liniei, ntreg;
k : indice suplimentar al liniei, ntreg;
j : indice coloan, ntreg;
er1: indic dac e false c algoritmul poate continua ( s-a gsit pivot );
ok: indic dac e true succesul interschimbrii liniilor, boolean;
det : variabila n care se calculeaz determinantul sistemului, real ;
{
lin = 1;
er1 =false;
det = 1;
repet
dac A[lin,lin] = 0 atunci
{ ok = false;
k = lin+1;
repet
dac A[k,lin] 0 atunci {
INTERSCHIMBA LINIA lin cu LINIA k ;
ok = true;
}
altfe k = k+1;
dac k = n+1 atunci er1 = true ;
pn cnd (er1 = true) sau (ok = true)
}
dac er1 = false atunci {
k = lin+1;
repet
calculeaz m=

A k, lin

A lin, lin

pentru j = lin ... n calculeaz A[k,j]= A[k,j]-m A[lin,j]


B[k] = B[k]- m B[lin];
k= k+1;
pn cnd k = n+1;
}
lin = lin+1;
pn cnd (lin = n+1) sau (er1 = true );

Rezolvarea numeric a sistemelor de ecuaii

61

pentru lin = 1...n calculeaz det = det


dac det 0 atunci
{ B[n]=

A[lin.lin];

B n
;
A n, n

pentru lin = n-1


{
pentru j = n... lin+1 calculeaz B[lin]= B[lin]A[lin,j]B[j]
B[lin]=

B lin

A lin,lin

pentru lin = 1...n {


identific X[lin]= B[lin];
tiprete X[lin];
}
}
altfel tiprete Sistemul este incompatibil sau compatibil nedeterminat
}
3.1.1.6.2. Implementarea algoritmului 3.6
#define SCHIMB(a,b,temp) (temp)=(a);(a)=(b);(b)=(temp);
/* Funcia implementeaz metoda Gauss-Jordan pentru
rezolvarea sistemelor liniare.
Funcia ntoarce determinantul matricei principale */
double GAUSS_JORDAN(int or_mat,
double MAT[][NrMax],
double TL[],
double XX[])
{
int i;
/* indice de linie */
int j;
/* indice de coloan */
int k;
/* indice suplimentar de coloan */
double m; /* multiplicator */
double d; /* determinant */
double sc;
double max;
int lp;
/* indicele liniei n care se gsete pivotul */
i=1;
d=1;
do
{
max=fabs( MAT[i][i]);lp=i;
for(k=i+1;k<=or_mat;k++)

Metode numerice n electronic

62

for
m*MAT[i][j];

if( max< fabs(MAT[k][i]) )


{
max=MAT[k][i];
lp=k;
}
if (max==0) return 0;
if(lp!=i)
{
for(j=i;j<=or_mat;j++){
SCHIMB(MAT[i][j],MAT[lp][j],sc);}
SCHIMB(TL[i],TL[lp],sc);
d*=-1;
}
k=1;
do
{
if(k!=i)
{
m=MAT[k][i]/MAT[i][i];
(j=i;j<=or_mat;j++)MAT[k][j]=MAT[k][j]TL[k]=TL[k]-m*TL[i];
}

k++;
}
while (k<=or_mat);
i++;
}while (i<=or_mat) ;
for (i=1;i<=or_mat;i++) d*=MAT[i][i];
if ( d==0 )return 0;
for(i=1;i<=or_mat;i++)XX[i]=TL[i]/MAT[i][i];
return d;
}

3.1.1.7. Metoda factorizrii QR


Aceast metod face posibil rezolvarea sistemelor AX=B pentru cazul cnd
m
B R , m>n caz n care nu au soluie n general. Soluionarea se face cu
ajutorul matodei lui Householder ce are la baz urmtoarea teorem:
Teorema 3.1. Pentru orice matrice A Rmxn exist o matrice ortogonal H Rmxn
astfel nct H.A=R unde R Rmxn i este o matrice superior triunghiular.
Matricea H se construiete astfel:
A Rmxn i

Hp

p 1

(3.27)

Rezolvarea numeric a sistemelor de ecuaii

63

Matricea H p poart numele de reflector Householder i se determin cu formula:


H p I m 2.

v p . v Tp

(3.28)

v Tp . . v p

unde v este vectorul Householder de forma: v p (0,0,..., v pp ,..., vnp )

(3.29)

iar I m este matricea unitate de ordinul m. Reflectorii Hauseholder sunt simetrici


H pT H p

(3.30)

Produsul H.A se realizeaz iterativ i cu fiecare pas matricea A devine parial superior
diagonal pn la ordinul pasului. De exemplu, la pasul p matricea de ordinul p
cuprins n matricea A devine superior diagonal. Reflectorii Householder se
calculeaz cu formula (3.28) care detaliat arat astfel:
1 0 0.....0.....0

0 1. 0.....0.....0
......................
iar hqr 1 2 vqp . vrp

n
0 0 0... hpp ... hpn
vip2
.......................
i p

0 0 0.... h ... h

np
nn

Notm vectorul
i (a1i , a2i ,..., aii ,... ani ) T
H p . Ap H p .[1 2 ... p ... n. ] [ H p1 H p 2 ... H p p ... H p n ]

(3.31)

(3.32)
(3.33)

innd cont c printr-o transformare ortogonal,suma ptratelor elementelor unei linii


este invariant putem scrie urmtoarea egalitate:
m

p 1

i 1

i 1

i p

aip2 aip2 aip,2 din care rezult aip, aip2 s2p

Un element al matricei din expresia (3.33) pote fi scris astfel:

v p . v Tp . p

H p p I m 2. T

vp . vp

(3.34)

(3.35)

iar un element al expresiei (3.35) se poate exprima sub forma:


( H p . p )i aip

2
m

aip dac i p

aip . vip

vip2 i p

dac i p

(3.36)

i p

Se alege

v ip a ip dac i p

(3.37)

n acest caz rezul din expresia (3.36) v pp a pp s p unde s p se determin din relaia
(3.34) astfel ca v pp s aib valoarea maxim n valoare absolut, condiie ndeplinit
dac a pp i s p au acelai semn. n acest caz
m

s p sign(a pp ) aip2

(3.38)

i p

Componenta diagonal se calculeaz nlocuind n expresia (3.36) indicele i cu p i


rezult:

Metode numerice n electronic

64
a 'pp s p

(3.39)

Elementele de sub diagonal se fac zero iar cele situate n dreapta coloanei p se
calculeaz astfel:
H p . j j

2
m

vip2

.( v Tp . j ). v p

(j>p)

(3.40)

i p

sau pentru un element al matricei se poate scrie urmtoarea formul de calcul :


a ij dac i p

2
(3.41)
( ( H p . j ) j a ij m
. v ip . a ij . v ip dac i p (j>p)

v ip2 i p

i p
Matricea superior triunghiular este dat de R= An 1 iar matricea inferior

triunghiular este dat de Q=( Hn . Hn 1... H1. I m ) .


3.1.1.7.1. Algoritmul 3.7. Metoda factorizrii QR
{Variabile
A:matricea sistemului;
B:vectorul termenilor liberi;
Xvectorul soluiilor;
Q:matricea ortogonal de ordinul mxm;
R:matricea superior triunghiular de ordinul mxn;
k,i,n,m:indici, ntregi;
{
Construiete matricea Q ca matrice unitate de ordinul m;
pentru k=1 ,, m
{calculeaz
pentru i=k ,, m
{calculeaz s= aik2 ;
dac akk 0 atunci s= -s;
pentru i=1 ,, k-1 vi 0 ;
v k a kk s
a kk s ;
}
pentru i= k+1,, n
calculeaz vi aik ;
aik 0 ;
p=s* v k ;

}
calculeaz Ak 1 Qk * Ak ;

Rezolvarea numeric a sistemelor de ecuaii

65

bk 1 Qk * bk ;
Q ( K ) Qk * q ( 1) ;

}
rezolv sistenul Am * x bm ;
calculeaz R A T ;
calculeaz Q (Q ( m) ) T ;
Scrie soluiile;
}
3.1.1.7.2.Implementarea algoritmului 3.7
/*Funcia care impementeaz metoda QR*/
void QR( int m ,
/* nr de ecuaii */
int n,
/* nr de necunoscute m>n */
double A[][NrMax], /*matricea sistemului */
double x[],
/*vectorul necunoscutelor */
double b[],
/*termenii liberi */
double Q[][NrMax], /*matrice ortog. de ordin mxm */
double R[][NrMax]) /*matrice sup. triun. de ordin mxn */
{
int i,j,k;
double s,sumap;
static double v[NrMax];
double p,t;
for(i=1;i<=m;i++)
for(j=1;j<=m;j++)
{
if(i==j)Q[i][j]=1;
else Q[i][j]=0;
}
for(k=1;k<=n;k++)
s=0;
for(i=k;i<=m;i++)s+=pow(A[i][k],2);
s=sqrt(s);
if(A[k][k]<0) s=-s;
for(i=1;i<=k-1;i++)v[i]=0;
v[k]=A[k][k]+s;
for(i=k+1;i<=m;i++)v[i]=A[i][k];
/* Se transform matricea A */
A[k][k]=-s;
for(i=k+1;i<=m;i++)A[i][k]=0;

Metode numerice n electronic

66
p=s*v[k];
for(j=k+1;j<=n;j++)
{
t=0;
for(i=k;i<=m;i++)t+=v[i]*A[i][j]/p;
for(i=k;i<=m;i++)A[i][j]=A[i][j]-t*v[i];
}
/* Se transform termenul liber */
t=0;
for(i=k;i<=m;i++) t+=v[i]*b[i]/p;
for(i=k;i<=m;i++) b[i]=b[i]-t*v[i];
/* Se transform matricea Q */
for(j=1;j<=m;j++)
{
t=0;
for(i=k;i<=m;i++)t+=v[i]*Q[i][j]/p;
for(i=k;i<=m;i++)Q[i][j]=Q[i][j]-t*v[i];
}
}
/* Se rezolv sistemul triunghiular */
for(i=n;i>=1;i--)
{
s=0;
for(j=i+1;j<=n;j++)s+=A[i][j]*x[j];
x[i]=(b[i]-s)/A[i][i];
}

/* Se calculez matricea R (identic cu A ) */


for(i=1;i<=m;i++)
for(j=1;j<=n;j++)R[i][j]=A[i][j];
/* Se calculez matricea ortogonal Q */
for(i=1;i<=m;i++)
for(j=1;j<=m;j++)
{
s=Q[i][j];
Q[i][j]=Q[j][i];
Q[j][i]=s;
}
}

Rezolvarea numeric a sistemelor de ecuaii

67

3.1.1.8. Metoda de rezolvare a sistemelor tridiagonale


Un tip special de sisteme liniare l reprezint sistemele tridiagonale care au
diagonala principal i diagonalele vecine diferite de zero (3.30 ).
b1

a2
0

c1
b2
a3

0
0

0
c2
b3

0
0

0
0
c3

0
0

...
0
...
0
...
0

... a n 1
...
0

x1 d 1

x2 d 2
x3 d 3


c n 1 x n-1 d n-1

bn x n d n

0
0
0

0
0
0

bn 1
an

(3.42)

Metoda simpl de rezolvare a acestor probleme const n descompunerea matricii


tridiagonale n dou matrice L, U .
LU=A
(3.43)
Ecuaia (3.43) poate fi scris detaliat astfel :
l1 0

p2 l2
0 p3


0 0

0 0

0 ...
0 ...

0
0

l3 ...

0 ... pn-1
0 ... 0

0 1

0 0
0 0 0


ln-1 0 0

pn ln 0
0
0

u1 0 0 ... 0
1 u2 0 ... 0
0 1 u3 ... 0

0
0

0
0

0 ... 1
0 ... 0

0 b1

0 a2
0 0


un-1 0

1 0

c1 0 0 ...
b2 c2 0 ...

0
0

0
0

a3 b3 c3 ...

0
0

0 0 ... an-1 bn-1


0 0 ... 0 an

0
0

cn-1

bn

(3.44)

Fcnd nmulirea matricelor L, U i identificnd cu matricea A se obin relaiile de


recuren pentru calculul elementelor matricelor L i U:
pi a i
c
ui i
li

i=2 ,3,...,n
i=1,2 ,3,...,n

l1 b1
li bi a i ui-1

(3.45)

i=2 ,3,...,n

Condiia de existen a relaiilor este li 0


Sistemul (3.42) poate fi scris sub forma

i = 1,2,...,n

LUX=D

(3.46)

sau sub forma a dou sisteme


L Y=D

U X=Y

Cunoatem pe L i D, deci se calculez mai nti Y

(3.47)

Metode numerice n electronic

68
l1

a2
0

...

l2

...

a3

l3

...

... a n-1

l n-1

...

an

0 y1 d 1

0 y2 d 2
0 y3 d 3


0 y n-1 d n-1

ln y n d n

(3.48)

Prin identificarea n (3.48) se deduc urmtoarele relaii recursive de calcul :


d1

y1 l

d i a i y i-1

yi
, i=2 ,3,...n

ti

(3.49)

Din sistemul UX=Y scris detaliat :


1 u1

0 1
0 0


0 0

0 0

... 0

u2

... 0

u3

... 0

... 1 u n-1

... 0

0
0

un

x1 y1

x2 y2
x3 y3


x y
n-1 n-1
xn yn

(3.50)

rezult relaiile recursive de calcul ale rdcinilor. Prin retrosubtituie se obin :


xn yn

x i y i si x i 1 ,

i=n-1,...,1

(3.51)

care reprezint rdcinile sistemului tridiagonal (3.42)

3.1.1.8.1. Algoritm 3.8. Sisteme tridiagonale


{Variabile
a: vectorul elementelor subdiagonle din matricea sistemului(vezi
3.42);
b: vectorul elementelor diagonale din matricea sistemului(vezi 3.42);
c :vectorul elementelor supradiagonale din matricea sistemului
(vezi 3.42);
l: vectorul elementelor diagonale din matricea L (vezi 3.44);
p: vectorul elementelor subdiagonale din matricea L (vezi 3.44);
u :vectorul elementelor supradiagonale din matricea U (vezi 3.44);
y vectorul UX;
x vectorul soluiilor;
i :indice, ntreg;
eroare: semafor, boolean;

Rezolvarea numeric a sistemelor de ecuaii

69

n: ordinul matricei, ntreg;


{
pentru i = 2,...,3 calculeaz pi = a i ;
calculeaz l1 = b1 ;
dac l1 = 0 atunci scrie "Sistemul nu poate fi rezolvat prin metoda
aceasta " STOP;
altfel calculeaz u1 =

c1
;
l1

i=1 ; eroare = fals ;


repet
i = i+1 ;
calculeaz li = bi - ai si-1 ;
dac li = 0 atunci eroare = adevrat
altfel calculeaz ui =

ci
li

pn cnd i = n-1 sau eroare = adevrat


dac eroare = adevrat atunci
scrie "Sistemul nu poate fi rezolvat prin metoda
aceasta " STOP
altfel {
calculeaz ln = bn - an un-1
calculeaz y1

d1
l1

pentru i = 1,2,3, ... , n calculeaz y i

d i a i y i-1
li

calculeaz xn = y n
pentru i= n-1 .... 1 calculeaz xi = yi - si xi+1 ;
tiparete soluiile xi i=1,2,...,n
}
}
}
3.1.1.8.2. Implementarea algoritmului 3.8
/* Funcia care verific dac sistemul este sau nu tridiagonal
Funcia ntoarce :
0 dac sistemul nu este tridiagonal;
1 dac sistemul este tridiagonal;
*/
int IsTridi(int or_mat,
double MAT[][NrMax] )

Metode numerice n electronic

70
{
int i,j;

for(i=1;i<=or_mat;i++)
for(j=1;j<=or_mat;j++)
if( (abs(i-j)>1) && (MAT[i][j]!=0))return 0;
return 1;
}
/* Funcia care implementeaz metoda de rezolvare a sistemelor
liniare tridiagonale
Funcia ntoarce :
1 dac se gsesc soluiile
0 n caz de eec
*/
int SolveTridi(int or_mat,
double a[],
double b[],
double c[],
double TL[],
double sol[])
{
int i;
static double p[NrMax],t[NrMax],s[NrMax],teta[NrMax];
for(i=2;i<=or_mat;i++)p[i]=a[i];
t[1]=b[1];if( t[1]==0 )return 0 ;
s[1]=c[1]/t[1];
teta[1]=TL[1]/t[1];
for(i=2;i<=or_mat-1;i++)
{
t[i]=b[i]-a[i]*s[i-1];
if(t[i]==0) return 0;
s[i]=c[i]/t[i];
teta[i]=( TL[i]-a[i]*teta[i-1])/t[i];
}
t[or_mat]=b[or_mat]-a[or_mat]*s[or_mat-1];
if (t[or_mat]==0) return 0;
teta[or_mat]=(TL[or_mat]-a[or_mat]*teta[or_mat-1])/t[or_mat];
sol[or_mat]=teta[or_mat];
for(i=or_mat-1;i>=1;i--)sol[i]=teta[i]-s[i]*sol[i+1];
return 1;
}

3.1.2. METODE INDIRECTE

Rezolvarea numeric a sistemelor de ecuaii

71

Dintre metodele indirecte sau metodele iterative care rezolv un sistem de ecuaii
liniare amintim: metoda lui Jacobi, metoda Gauss-Seidel.

3.1.2.1. Metoda lui Jacobi


Fie sistemul liniar (3.1). Se expliciteaz fiecare necunoscut din sistem de pe
diagonala principal funcie de celelalte necunoscute ale sistemului .

b1
a
a
a
0 12 x 2 13 x 3 ... 1n x n
a11
a11
a11
a11
b2
a 21
a 23
a 2n
x2

x1 0
x 3 ...
xn
a 22 a 22
a 22
a 22
-----------------------------bn a n 2
a
xn

x1 ... nn-1 x n-1+


0
a nn a nn
a nn
x1

(3.52)

Se alege o soluie a sistemului oarecare x1 0 ,x 20 ,...,x n 0 , ce va reprezenta soluia de


start. Relaiile (3.52) vor reprezenta formulele de recuren pentru calculul rdcinilor
sistemului i se pot scrie sub forma :
Dac irurile dup k
x i( 0 ) ,x i( 1 ) ,x i( 2 ) ,...,x i(k) ,....
i=1,2 ,...,n
(3.54)
sunt convergente pentru k atunci limitele irurilor (3.53) reprezint soluiile
sistemului dat. Pentru obinerea condiiei de convergen a irurilor (3.53) se pleac de
la ecuaia matricial scris pentru sistemul (3.52):
X ( 1 ) CX ( 0 ) D

0
x
1


a 21
x
2
unde X ; C= - a 22


xn
- a n1

a nn

a12
a11
0

a n2
a nn

a13
a11
a 23
a 22
a n3
a nn
-

(3.54)

a1n
b1

a11
a11
a2n
b2
... a 22 ; D= a 22

-

b
n
...
0

a nn
... -

(3.55)

Continund operaia de iterare se obine


X ( 2 ) CX ( 1 ) D C 2 X ( 0 ) CD D

(k)

C X

(0)

(C

k-1

k-2

(3.56)

...... C I)D

Seria matriceal geometric S=I+C 1 C 2+....+C K-1 ... este convergent atunci cnd
norma sau toate valorile proprii ale matricei C sunt subunitare i are suma S=(I-C) -1 .

Metode numerice n electronic

72

Aceasta implic lim C k 1 0 ; X=(I-C)-1 D ; X=CX+D unde X sunt toate soluiile


k

ecuaiei date (3.54).


Condiia ca toate valorile proprii ale unei matrici s fie subunitare este :
gi

j=1
j i

a ij
a ii

1 pentru i = 1,2,...,n

(3.57)

Aceast condiie trebuie ndeplinit de sisteme pentru a putea fi rezolvate prin metoda
lui Jacobi.
3.1.2.1.1. Algoritm 3.9. Metoda Jacobi
{ Variabile
A: matricea sistemului;
B: matricea termenilor liberi;
S: matricea rezultat prin eliminaea elementului diagonal;
p: variabila care ine produsul elementelor de pe diagonal; real;
n,er:ordinul sistemului,er=1,A, er=0, F:ntregi;
i,k: indici, ntregi;
: ine suma, real (3.57);
X: vectorul soluiilor;
{
p=1;
pentru k = 1...n calculeaz p= p a k,k ;
dac p= 0 atunci scrie Sistemul nu se poate rezolva cu aceast
metod STOP.
i =1;
er =1
repet
n

calculeaz i

j=1
j i

a ij
a ii

dac i 1 atunci er = 0 ;
i = i+1;
pn cnd (i = n+1) sau (er = 1);
dac er = 1 atunci {
scrie Sistemul nu se poate rezolva cu aceast metod ;
STOP;
}
altfel { k = 0;
repet
i =1;
repet

Rezolvarea numeric a sistemelor de ecuaii

73

calculeaz xi k

bi
a i,i

pentru j= 1... n
calculeaz xi k xi k
i =i+1;
pn cnd i = n+1;
k = k+1;
pn cnd x i k x i k-1
k

scrie soluiile xi = x i
STOP
}}

a i,j
a i,i

x jk-1 ;

i = 1...n

i = 1... n

}
3.1.2.1.2. Implementarea algoritmului 3.9
/* Funcia care verific dac o matrice este dominant diagonal
Funcia ntoarce
0 n caz de eec
1 n caz de succes */
int DD(int or_mat,
double MAT[][NrMax])
{
int i,j;
double sum;
for(i=1;i<=or_mat;i++)
{
sum=0;
for(j=1;j<=or_mat;j++)sum+=fabs(MAT[i][j]);
if ( 2*fabs(MAT[i][i])<=sum )return 0; }
return 1;
}
/*Funcia care implementeaz metoda iterativ Jacobi
pentru rezolvarea sistemelor liniare.
Funcia ntoarce
0 n caz de reuit;
1 dac matricea nu e dominant diagonal
*/
int JACOBI(int or_mat,

Metode numerice n electronic

74
double MAT[][NrMax],
double TL[],
double x0[],
double err)
{
int i,j,k,sem;
static double x1[NrMax];
if( DD(or_mat,MAT)==0) return 1;
do
{
sem=1;
for(i=1;i<=or_mat;i++)
{
x1[i]=TL[i]/MAT[i][i];
for(j=1;j<=or_mat;j++)if(j!=i)
=(MAT[i][j]*x0[j])/MAT[i][i];
}
for(i=1;i<=or_mat;i++)
{
if( fabs(x1[i]-x0[i])>err)sem=0;
x0[i]=x1[i];
}
}while(sem==0);
return 0;
}

x1[i]-

3.1.2.2. Metoda Gauss-Seidel


Aceast metod difer de metoda lui Jacobi prin faptul c la fiecare iteraie se
utilizeaz valorile calculate la pasul anterior pentru variabilele ale cror valori nu sunt
cunoscute la pasul curent i valorile de la pasul curent pentru variabilele calculate.
Astfel formula de calcul (3.53) devine :

xi k

i-1 a
n a
bi
ij (k)
ij (k-1 )

xj
xj
a ii j=1 a ii
j=i+1 a ii

(3.58)

i = 1,2,...,n
k =1,2,...,n,...
n rest, metoda se identific cu metoda lui Jacobi.
Pentru acelai grad de precizie, viteza de convergen a metodei lui Gauss-Seidel este
de dou ori mai mare dect viteza de convergen a metodei lui Iacobi .

Rezolvarea numeric a sistemelor de ecuaii

75

3.1.2.2.1. Algoritm 3.10. Metoda Gauss-Seidel


{ Variabile
A: matricea sistemului;
B: matricea termenilor liberi;
S: matricea rezultat prin eliminaea elementului diagonal;
p: variabila care ine produsul elementelor de pe diagonal; real;
n,er:ordinul sistemului,er=1,A, er=0, F:ntregi;
i,k: indici, ntregi;
: ine suma, real (3.57);
X: vectorul soluiilor;
{
p=1;
pentru k = 1...n calculeaz p= p a k,k ;
dac p= 0 atunci scrie Sistemul nu se poate rezolva cu aceast
metod
STOP.
i =1;
er =1
repet
n

calculeaz i

j=1
j i

a ij
a ii

dac i 1 atunci er = 0 ;
i = i+1;
pn cnd (i = n+1) sau (er = 1);
dac er = 1 atunci {
scrie Sistemul nu se poate rezolva cu aceast metod ;
STOP;
}
altfel {
k = 0;
repet
i =1;
repet
calculeaz xi k

bi
a i,i

pentru j= 1... n
{
dac j < i atunci
calculeaz xi k xi k

ai,j
ai,i

k
xj ;

Metode numerice n electronic

76
dac j > i atunci

calculeaz xi k xi k
}
i =i+1;
pn cnd i = n+1;
k = k+1;
pn cnd x i k x i k-1
k

scrie soluiile xi = x i
STOP
}

a i,j
a i,i

x jk-1 ;

i = 1...n

i = 1... n

}
}

3.1.2.2.2. Implementarea algoritmului 3.10


/* Funcia care verific daca o matrice este dominant diagonal
Funcia ntoarce
0 n caz de eec
1 n caz de succes */
int DD(int or_mat,
double MAT[][NrMax])
{
int i,j;
double sum;
for(i=1;i<=or_mat;i++)
{
sum=0;
for(j=1;j<=or_mat;j++)sum+=fabs(MAT[i][j]);
if ( 2*fabs(MAT[i][i])<=sum )return 0;
}
return 1;
}
/* Funcia implementeaz metoda iterativ Gauss-Seidel
pentru rezolvarea sistemelor liniare
Funcia ntoarce
0 n caz de reuit;
1 dac matricea nu e dominant diagonal

Rezolvarea numeric a sistemelor de ecuaii

77

*/
int GAUSS_SEIDEL(int or_mat,
double MAT[][NrMax],
double TL[],
double x0[],
double err)
{
int i,j,k,sem;
double x1[NrMax],sum;
for(j=1;j<=or_mat;j++)
if( DD(or_mat,MAT)==0) return 1;
do
{
sem=1;
for(i=1;i<=or_mat;i++)
{
x1[i]=TL[i]/MAT[i][i];
{
if (j<i) x1[i]-=(MAT[i][j]*x1[j])/MAT[i][i];
if (j>i) x1[i]-=(MAT[i][j]*x0[j])/MAT[i][i];
}
}
for(i=1;i<=or_mat;i++)
{
if( fabs(x1[i]-x0[i])>err)sem=0;
x0[i]=x1[i];
}
}
while(sem==0);
return 0;
}

3.2. REZOLVAREA NUMERIC A SISTEMELOR


NELINIARE
n acest paragraf se studiaz rezolvarea numeric a sistemelor de ecuaii neliniare.
Fie
f ( x) 0 f : X Y, X ,Y R n
(3.59)
un sistem dat sub form vectorial. Vectorul x are n componente. Funcia f are
urmtoarele componente f 1 , f 2 , f 3 ... f n , n funcii definite pe domeniul X R n .
Sistemul scris cu ajutorul componentelor vectorilor se prezint astfel:

Metode numerice n electronic

78

f1

f2

f
n

x ,x ,...,x 0
x ,x ,...,x 0
1

(3.60)

---------------

x ,x ,...,x 0
1

Dac cel puin una din funciile f 1 , f 2 , f 3 ... f n sunt neliniare n variabilele x1 ,x 2 ,...,x n
sistemul de ecuaii (3.59) sau (3.60) se numete sistem de ecuaii neliniare.

3.2.1. METODA LUI NEWTON DE REZOLVARE A ECUAIILOR


NELINIARE
Presupunem c n vecintatea V X exist o soluie unic

x1 ,x 2 ,...,x n

(3.61)
sistemului f i x1 ,x 2 ,...,x n = 0 pentru i = 1,2,...,n
fi
; i , j = 1,2,...,n sunt continue pe V i iacobianul
Dac f i ( x1 ,x 2 ,...,x n ) i
xj
f1
f1
f1
...
x
x2
x n
1
F( x ) = ----------------
fn
fn
f n
...
x1 x 2

x n

(3.62)

are determinantul det(F(x)) 0 pentru x1 ,x 2 ,...,x n atunci funcia f : X Y este o


transformare regulat ntr-o vecintate a soluiei i are o invers care are aceeai
proprietate .
n acest caz putem aplica metoda Newton pentru sisteme ca o funcie de iteraie ce
poate fi scris

x k+1 x k F x k

f xk ,

k = 1,2,....

(3.63)

Prelucrnd aceast ecuaie se poate aduce la forma :


f i (x k )
x j k+1 x j k f i ( x k )
j=1 x j
n

i = 1,2,...,n , k = 0,1,2,....

(3.64)

Aceast ecuaie reprezint dezvoltarea n serie Taylor a funciei f ( x1 ,x 2 ,...,x n ) n


vecintatea punctului ( x k , x 2 k , ... x nk ) utiliznd termenii pn la derivata parial de

Rezolvarea numeric a sistemelor de ecuaii

ordinul doi, exclusiv. Dac notm

79

x j k+1 x j k = j,k

j = 1,2,...,n sistemul (3.64) se

poate scrie matriceal asfel :


f1
f1
f1
...

xn
x1 x 2
f2
f2
f2
...
x
x2
xn
1

f
n
n
n

...

x1 x 2 x n

X 1K f 1 x

X 2 K f 2 x

X nK f n x

(3.65)
x=x k

x=x k

Sistemul 3.65 este un sistem liniar n necunoscutele X 1K , X 2 K , ... , X nK .


Din aceste soluii se determin soluia sistemului la pasul k+1 ,
j = 1,2,...,n
(3.66)
x j k+1 x j k + X j,k ,
Procesul iterativ se continu pn cnd
jk j = 1,2,...,n unde > 0 este eroarea impus de operator .
La baza convergenei irului jk j = 1,2,...,n st urmtoarea teorem :
Teorema 1. (Teorema lui Kantorovici)
Dac n sfera nchis
u( x 0 , ) x V, x-x 0

(3.67)

sunt satisfcute condiiile :


f

xj

a) Matricea funcional F ( x) =
cu proprietatea ca 0

pentru x x 0 are o invers 0 F x 0 ,


1

A0 ;

b) 0 f x 0 x k x 0 B0 ;
2 f i x
C , i,j = 1,2,...,n i x u( x 0 ,g ) ;
p =1 x j x p
n

c)

d) Constantele A0 , B0 , i C0 satisfac inegalitatea


h0 = 2nA0 B0 C 1
Atunci pentru punctul de start x0 , irul iterativ :

x k+1 x k F x k

f ( xk )

k = 0,1,2,...

este convergent ctre soluia . Viteza de convergen este dat de relaia


1
xk
2

k-1

h02

B0 .

Demonstraia teoremei nu o prezentm, ea putnd fi gsit n literatura de specialitate.

Metode numerice n electronic

80

3.2.1.1. Algoritmul 3.11 pentru sisteme neliniare. Metoda lui Newton

{ Variabile
X : valorile soluiilor iterative , vector ;
X : valorile de modificare a soluiilor iterative , vector ;
X0 : soluia de start a sistemului , vector ;
det F : determinanatul matricei F(x) ;
{
k = 0;
Dac det F = det F( xk ) = 0 atunci scrie Alege alt soluie de start
STOP
altfel
{ repet
k = k+1;
calculeaz F ( xk-1 ) ;
{ rezolv sistemul liniar
f i ( x k-1 )
x j,k x j ,k-1 f i ( x k-1 ) i = 1,2,...,n
xj
j=1

calculeaz
x j,k x j,k-1 x j,k-1 ,

j = 1,2,...,n

}
pn cnd
x j,k x j,k-1 ,

j = 1,2,...,n

sau F(xk-1 ) = 0

}
Soluiile sistemului sunt
}
}

3.2.1.2. Implementarea algoritmului 3.11


/* Funcia care implementeaz metoda lui NEWTON de rezolvare a
sistemelor neliniare cu dou ecuaii i dou necunoscute.
Funcia ntoarce
0 dac determinantul este 0 sau nu s-a atins precizia
1 dac se obin soluiile
*/
int RezSistNelin( double(* ec1)(double x,double y),
/* prima ecuaie din sistem */

Rezolvarea numeric a sistemelor de ecuaii

81

double(* ec2)(double x,double y),


/* a doua ecuaie din sistem */
double(* dec1x)(double x,double y),
/*derivata primei ecuaii n raport cu prima variabil
double(* dec1y)(double x,double y),
/*derivata primei ecuaii n raport cu a doua variabil */
double(* dec2x)(double x,double y),
/*derivata ecuaiei a doua n raport cu prima variabil */
double(* dec2y)(double x,double y),
/*derivata ecuaiei a doua n raport cu a doua variabil */
double eroare,
/* eroarea de calcul a soluiei */
int NITER,
/* numrul maxim de iteraii */
double *startx, /* x start */
double *starty) /* y start */
{
int i ;
double deltax,deltay,det,detx,dety,xn_1,xn,yn_1,yn;
i=0;
xn=*startx;
yn=*starty;
do
{
xn_1=xn;
yn_1=yn;
det=dec1x(xn_1,yn_1)*dec2y(xn_1,yn_1)dec2x(xn_1,yn_1)*dec1y(xn_1,yn_1);
detx=ec1(xn_1,yn_1)*dec2y(xn_1,yn_1)+ec2(xn_1,yn_1)*dec1y(xn_1,yn_1);
dety=dec1x(xn_1,yn_1)*ec2(xn_1,yn_1)+dec2x(xn_1,yn_1)*ec1(xn_1,yn_1);
if (det==0) return 0;
deltax=detx/det;
deltay=dety/det;
xn=xn_1+deltax;
yn=yn_1+deltay;
}
while(((fabs(xn-xn_1)>eroare) || (fabs(yn-yn_1)>eroare) &&
i<=NITER));
if(i>=NITER) return 0;
*startx=xn;
*starty=yn;
return 1;
}

Metode numerice n electronic

82

3.3. APLICAII
1. Se d circuitul electric din figura 3.1 ce are urmtoarele componente:
. k, R4 1k,
R1 2.4k, R2 3.6k, R3 15
. k, R6 2.7k, R7 12
. k, R8 3k,
R5 18

V
V
V
10
,
12
,
15
E1
E2
E3

Se cer curenii prin fiecare latur a circuitului.


Aplicnd teoremele lui Kirchhoff pentru N-1 noduri deci 3 i pentru O=L-N+1 ochiuri
fundamentale deci O=4, unde N reprezint numrul total de noduri ale circuitului, iar
L numrul total de laturi ale circuitului, rezult urmtorul sistem liniar de apte ecuaii
cu apte necunoscute. Necunoscutele sunt curenii din cele apte laturi ale circuitului,
matricea necunoscutelor sistemului este format din valorile rezistoarelor din circuit,
iar termenii liberi ai sistemului sunt valorile surselor de alimentare.
R1

E1

R5
R2

R3
R4

E2

R7

R6

E3

R8

Fig.3.1.Circuitelectriccusursedeccirezistoare

R1 I 1 R2 I 2 0 I 3 0 I 4 0 I 5 0 I 6 0 I 7 E1
0 I R I R I R I 0 I 0 I 0 I 0
2
2
3
3
4 4
5
6
7
1
0 I 1 0 I 2 R3 I 3 0 I 4 0 I 5 R6 I 6 R7 I 7 E 2

0 I 1 0 I 2 0 I 3 0 I 4 R5 I 5 R6 I 6 0 I 7 E 3
I I I 0 I I I 0 I 0
2
3
4
5
6
7
1
I1 I 2 0 I 3 I 4 0 I 5 0 I 6 0 I 7 0
0 I 0 I 0 I 0 I I I I 0
2
3
4
5
6
7
1

Introducnd valorile numerice ale rezistenelor i ale surselor se obine sistemul:


2,4 I 1 3,6 I 2 0 I 3 0 I 4 0 I 5 0 I 6 0 I 7 10
0 I 3,6 I 1,5 I I 0 I 0 I 0 I 0
2
3
4
5
6
7
1
0 I 1 0 I 2 1,5 I 3 0 I 4 0 I 5 2,7 I 6 1,2 I 7 12

0 I 1 0 I 2 0 I 3 0 I 4 4,8 I 5 2,7 I 6 0 I 7 15
I I I 0 I I I 0 I 0
2
3
4
5
6
7
1
I1 I 2 0 I 3 I 4 0 I 5 0 I 6 0 I 7 0
0 I 0 I 0 I 0 I I I I 0
2
3
4
5
6
7
1

Rezolvarea numeric a sistemelor de ecuaii

83

Determinantul matricei sistemului este d=683.834400


Soluiile calculate cu ajutorul metodei eliminrii lui Gauss sunt:
i1 1685145
.
; i2 1654348
.
; i3 3949904
.
; i4 0.030797 ; i5 3.410878 ; i6 0.508228 ;
.
i7 3919107

Semnele minus arat c sensul curenilor luai pentru scrierea ecuaiilor lui
Kirchhoff este contrar celor din realitate. Sistemul nu ndeplinete condiia pentru a fi
rezolvat cu metodele iterative .
2. Se consider sistemul :
4.4 x1 0.4 x 2 x 3 0.7 x 4 3.2
0.23x1 5.4 x 2 15
. x 3 01
. x 4 2.7
13
. x1 0.34 x 2 6.2 x 3 0.3x 4 14
.
0.3x1 14
. x 2 0.34 x 3 2.8 x 4 2.1

Soluiile sistemului obinute cu metoda eliminrii lui Gauss sunt:


x1 0.683916 ; x 2 9.484220 ; x 3 0.077529 ; x 4 0.444124 ;
d=393.832664;
Prin metoda lui Jacobi, pentru care sistemul ndeplinete condiia de rezolvare, se
obin urmtoarele soluii: x1 0.683916 ; x 2 9.484220 ; x 3 0.077529 ; x 4 0.444124 ;
lund soluiile de start: x1 1 ; x 2 1 ; x 3 1 ; x 4 1 .

4
DERIVAREA NUMERIC*

n multe probleme tehnice este necesar s se cunoasc derivata ntr-un punct a unui
semnal eantionat. Rezultatele multor experimentri electronice sunt date sub form
de funcii tabelate: u f ( i ) , i g( u) etc. Calculul derivatelor acestor funcii ntr-un
anumit punct ne poate da informaii asupra unui parametru al circuitului cum ar fi
rezistena dinamic, inversul ei etc. Pentru determinarea derivatei funciilor tabelate
suntem nevoii s utilizm metodele numerice .
Metodele numerice de calcul al derivatei ntr-un punct dat, se pot aplica i
funciilor a cror expresie analitic este cunoscut, obinnd n acest mod tangenta la
curb n punctul de calcul.

4.1. DERIVATA NUMERIC PRIN DOU PUNCTE


Prin definiie derivata funciei f ( x ) n punctul x0 ,dac exist, este :
f 1 x0

lim

f(x0 x) f(x0 )
x

(4.1)

Pentru o valoare mic a lui x calculul expresiei :


f x 0 x f x 0
D+ =
(4.2)
x
poate aproxima destul de bine derivata funciei n punctul x0 , f ' ( x0 ) . Valoarea lui x
poate fi i negativ, derivata funciei f '( x0 ) putnd fi aproximat i cu expresia:
D- =

f x0 x f x0

(4.3)

n figura 4.1 se observ c la limit pentru x 0 ambele corzi ale curbei, PQ i


QR, devin tangente la curb n x0 , QT. Dac se consider coarda PR la curb, se
observ c ea aproximeaz mult mai bine derivata funciei n punctul x0 .
f ' ( x0 )

f x0 x f x0 x
2 x

D+ D 2

Dac notm 2x h , se obine derivata numeric n x0 :


*)Bibliografie: [6], [7], [15]

(4.4)

Derivarea numeric

85

f ' x0

f x0

f x0

2
h

(4.5)

Deoarece n formula de calcul a derivatei numerice intervin numai dou puncte


x0 h / 2 i x0 h / 2 , numim aceast formul derivata prin dou puncte a funciei
f (x) .
Pentru calculul derivatelor de ordin superior se aplic formula (4.5) pentru funcia
f ' ( x ). Pentru o mai bun nelegere se face un calcul complet al derivatei de ordinul
doi i trei a metodei de calcul a
derivatelor
de ordin superior.
y
P

h
h

f ' x0 f ' x0

2
2
f x0
h
f x0 h f x0 f x0 f x0 h

h2
f x0 h 2 f x0 f x0 h

(4.6)
h2
h
h

f '' x0 f '' x0

2
2
f ''' x0
h
''

y f ( x)

h
h
h
h
3
3

f x0 h 2 f x0 f x0 f x0 2 f x0 f x0 h
2
2
2
2
2
2


3
h
3
3
h
h

f xFig.4.1.GraficulderivateinpunctulQ
h 3 f x0 3 f x0 f x0 h
0 2

2
2
2

3
h

(4.7)

n acest mod se poate obine orice derivat de ordin superior .

4.1.1. EROAREA DE TRUNCHIERE A DERIVATEI PRIN DOU


PUNCTE
Dezvoltm n serie Taylor funcia f ( x ) n jurul punctului x0 , reinnd primii trei
termeni :

x-x0
x-x0 '
f ( x ) f ( x0 ) +
f x0
1!
2!

''

x0

3
x-x0

3!

f ''' ( )

(4.8)

Metode numerice n electronic

86
unde

x , x0 . Substituim

x x0

h
2

n dezvoltarea lui

f ( x ) , (4.8).

h
h
h 2 ''
h3 '''

f x0 f x0 f ' x 0
f x0
f 1

2
2
8
48
h

unde 1 x0 ,x0 .
2

h
n dezvoltarea lui f ( x ) , (4.8)
Substituim x x 0
2
h
h
h 2 ''
h 3 '''

f x0 f x0 f ' x0
f x0
f 2

2
2
8
48

unde

(4.9)

(4.10)

2 x0 ,x0 . Scznd membru cu membru relaiile (4.9) i (4.10) rezult:


2

h
h

f x0 f x0
'''
'''

h2 f 1 f 2
2
2
f ' x0

h
24
2
h
h

f x0 f x0
2

2
2 h
=

f '''
h
24
h
h

unde x0 ,x0 ,
2
2

(4.11)

rezult c eroarea de trunchiere a derivatei prin dou puncte este :


eT =

Dac

h 2 '''
f
24

(4.12)

h
h
h2

f ''' M pentru orice x x0 ,x0 atunci eT <


M
2
2
24

4.1.2. ALGORITMUL 4.1. DERIVATA PRIN DOU PUNCTE


{Variabile
x0 : punctul n care se calculeaz derivata , real;
h : pasul, real ;
der : variabila derivatei, real;
{
calculeaz

der =

}
Derivata este der ;
}

f x0 0 .5h f x0 0 .5h
h

Derivarea numeric

87

4.1.3. IMPLEMENTAREA ALGORITMULUI 4.1


/* Funcia care implementeaz derivata prin dou puncte.
Funcia ntoarce valoarea derivatei
*/
double Derivata2P( double (*f) (double),
double x0,
double h)
{
return((f(x0+0.5*h)-f(x0-0.5*h))/h);
}

4.2. DERIVATA NUMERIC PRIN TREI PUNCTE


Deoarece n calculul acestei derivate numerice intervin trei puncte o denumim
derivata numeric prin trei puncte .
Se pune problema determinrii derivatei numerice a funciei f ( x ) n punctul x0 , sub
forma:
f ' x0 af x0 h1 bf x0 cf x0 h2
(4.13)
unde x0 , h1 , h2 sunt date cunoscute, iar a , b, c necunoscute. Pentru determinarea
acestor necunoscute vom considera funcia f ( x ) , o constant, liniar i ptratic .
Pentru f ( x ) c f ' ( x ) 0, f ' ( x0 ) 0, iar ecuaia (4.13) devine:
0 abc,
(4.14)
pentru f ( x ) ( x x0 ) f ' ( x ) 1, f ' ( x0 ) 1 i
1 h1a 0b h2 c ,
(4.15)
pentru

f ( x ) ( x x0 )2 f ' ( x ) 2( x x0 ), f ' ( x0 ) 0 i
0 h12 a 0b h 22c

(4.16)
Deoarece h1, h2 > 0 i determinantul sistemului h1 h2 (h1 +h2 ) 0, sistemul
este unic determinat. Rezolvnd sistemul, se obin valorile necunoscutelor :
a

h22 h12
h1
h2
, b
, c
h1h2 (h1 h2 )
h2 h1 h2
h1 h1 h2

(4.17)

Formula derivatei numerice a funciei f ( x ) prin trei puncte este :


'

f ( x0 )

h12 f x0 h2 h22 h12 f x0 h22 f x0 h1


h1h2 h1 h2

(4.18)

care d o eroare de trunchiere nul pentru funciile constante, liniare i ptratice.


Pentru h1 h2 h / 2 se obine formula derivatei numerice prin dou puncte.

4.2.1. EROAREA DE TRUNCHIERE A DERIVATEI PRIN TREI

Metode numerice n electronic

88

PUNCTE
Pentru funciile de grad mai mare ca doi, eroarea de trunchiere o determinm din
dezvoltarea n serie Taylor a funciei f ( x ) :
f ( x ) f ( x0 )

( x x0 ) '
( x x0 )2 '
( x x0 )3 '
f ( x0 )
f ( x0 )
f ( )
1!
2!
3!

(4.19)

unde [x , x0 ] .
Substituim x x 0 h1 i rezult:

f ( x0 h1 ) f ( x0 )
unde 1 x0 -h1,x0 .

h1 '
h2
h3
f x0 1 f '' x0 1 f ''' 1
1!
2!
3!

f ( x0 h2 ) f ( x0 )

unde 2 x 0 ,x 0+h2 .

(4.20)

h2 '
h2
h3
f x0 2 f '' x0 2 f ''' 2
1!
2!
3!

(4.21)

Se nmulete egalitatea (4.20) cu - h22 i egalitatea (4.21) cu h12 i se adun. Rezult :


f ' ( x0 )

h12 f x0 h2 h22 h12 f x0 h22 f x0 h1


h1h2 h1 h2

Eroarea de trunchiere este dat de formula :


eT

Dac f ''' x M

h1h2
h2 f ''' 1 h1 f ''' 2
6 h1 h2

pentru orice x x0 -h ,x0 h2


eT

h1h2
h2 f ''' 1 h1 f ''' 2 (4.22)
6 h1 h2

(4.23)

atunci

h1h2
M
6

(4.24)

4.2.2. ALGORITMUL 4.2. DERIVATA PRIN TREI PUNCTE


{Variabile
x0 : punctul n care se calculeaz derivata , real ;
h1 : distana punctului din stnga fa de x0 , real ;
h2 : distana punctului din dreapta fa de x0 , real ;
der : variabila derivatei , real;
{
calculeaz
}

der =

h12 f x0 h2 h22 h12 f x0 h22 f x0 h1


h1h2 h1 h2

Derivarea numeric

89

4.2.3. IMPLEMENTAREA ALGORITMULUI 4.2

/* Funcia care implementeaz derivata prin trei puncte.


Funcia ntoarce valoarea derivatei
}
*/
double Derivata3P( double (*f) (double),
double x0,
double h1,
double h2)
{
return(h1*h1*f(x0+h2)+(h2*h2-h1*h1)*f(x0)-h2*h2*f(x0h1))/(h1*h2*(h1+h2));
}

4.3. DERIVATA NUMERIC PRIN CINCI PUNCTE


Pentru formula acestei derivate se utilizeaz cinci puncte, dou cte dou egal
distanate de punctul central, n care se calculeaz derivata :
x 0 2h, x 0 h, x 0 , x 0 h, x 0 2h
(4.25)
Formula derivatei numerice prin cinci puncte se caut sub forma :
(4.26)
f ' x0 af x0 2h bf x0 h cf x0 df x0+h+ef x0 2h

Pentru determinarea necunoscutelor a , b, c, d, e, particularizm funcia f ( x )


cu funcie: constant, liniar, ptratic, de gradul trei i de gradul patru .
Pentru f ( x) c f ' ( x ) 0, f ' ( x 0 ) 0 i ecuaia (4.26) devine:
0 abc d e
(4.27)
Pentru f ( x ) x x0 f ' ( x ) 1, f ' ( x0 ) 1 i
1 2ha hb 0c hd 2he
(4.28)
Pentru f ( x ) ( x x0 )2 f ' ( x ) 2( x x0 ), f ' ( x0 ) 0 i
0 4 h 2 a h 2 b 0 c h 2 d 4h 2 e
Pentru f ( x ) ( x x0 )3 f ' ( x ) 3( x x0 )2 , f ' ( x0 ) 0 i
0 8h3a h3b 0c h3d 8h3e
Pentru f ( x ) ( x x0 ) f ( x ) 4( x x0 ), f ' ( x0 ) 0 i
4

(4.29)
(4.30)

'

0 16h 4 a h 4 b 0c h 4 d 16h 4 e

(4.31)
Determinantul sistemului format de ecuaiile (4.27), (4.28), (4.29), (4.30), (4.31) este
= 144h10 0 pentru c h >0. Ca urmare sistemul dat este unic determinat i are
soluiile :
a = 12h9 , b = -96h9 , c = 0 , d = 96h9 , e = -12h9
(4.32)
Formula derivatei numerice prin cinci puncte a funciei f ( x ) este :
1
(4.33)
f ' ( x0 )
f x0 2h 8 f x0 h 8 f x0 h f x0 2h
12h

Metode numerice n electronic

90

Aceast formul de derivare numeric are eroarea de trunchiere zero pn la funcii de


gradul patru. Pentru funcii de grad mai mare ca patru, eroarea de trunchiere se
determin analog ca la derivatele precedente, obinndu-se valoarea :
24 4 IV
(4.34)
eT
h f
5
unde
x x0 2 h , x0 2 h
Dac numrul de puncte crete pentru calculul unei derivate, atunci eroarea de
trunchiere se micoreaz.

4.3.1. ALGORITMUL 4.3. DERIVATA PRIN CINCI PUNCTE


{Variabile
x0 : punctul n care se calculeaz derivata, real ;
h : pasul, real ;
der : variabila derivatei, real;
{
calculeaz der =

1
f x0 2 h 8 f x0 h 8 f x0 h f x0 2 h ;
12h

}
Derivata este der ;
}

4.3.2. IMPLEMENTAREA ALGORITMULUI 4.3


/* Funcia care implementeaz derivata prin cinci puncte.
Funcia ntoarce valoarea derivatei
*/
double Derivata5P( double (*f) (double),
double x0,
double h)
{
return(f(x0-2*h)-8*f(x0-h)+8*f(x0+h)-f(x0+2*h))/(12*h);
}

4.4. CALCULUL DERIVATEI FUNCIILOR TABELATE


Se tie c numai funciile continue au derivat. n practic ntlnim des cazuri cnd
o funcie continu este dat sub form de eantioane, fr a cunoate expresia analitic
a funciei. n acest caz, se poate calcula derivata funciei date sub form de tabel cu
ajutorul programului prezentat n paragraful 4.4.1. Deoarece eantioanele pot fi luate
la pai diferii, se utilizeaz metoda derivrii n trei puncte. Pentru ca derivata s fie

Derivarea numeric

91

ct mai exact este necesar ca pasul de eantionare s fie ct mai mic. In caz contrar,
derivata se va calcula cu eroare mare.

4.4.1. PROGRAM PENTRU CALCULUL DERIVATEI UNEI


FUNCII EANTIONATE
#include <stdio.h>
#include <conio.h>
#include <math.h>
{
double Derfcnr( double h1,
double h2,
double f1,
double f0,
double f2)
{
return (h1*h1*f2+(h2*h2-h1*h1)*f0-h2*h2*f1)/(h1*h2*(h1+h2);
}
void main(void)
{
double pas1,pas2,fc1,fco,fc2;
clrscr( );
printf(Dai pasul1) ; scanf(%lf,&pas1);
printf (Dai pasul2); scanf(%lf,&pas2);
printf (dai funcia in x0-h1);scanf(%lf,&fc1);
printf (Dai funcia in x0);scanf(%lf,&f0);
printf (Dai funcia in x0+h2);scanf(%lf,&fc2);
printf(derivata este %lf\n,Derfcnr(pas1,pas2,fc1,fc0,fc2));
getche( );
/

4.5. APLICAII
1. Se d caracteristica I-U a unei diode tunel n figura 4.2. Se cere rezistena dinamic
a diodei n punctele A,B,C,D,E,F,G,H,I,J,K,L.
Pentru calculul rezistenei dinamice a diodei n punctele cerute se utilizeaz programul
dat n paragraful 4.4.1. Acest program ndeplinete condiiile problemei deoarece nu
se cunoate expresia analitic a caracteristicii diodei tunel i se cere rezistena
dinamic n diferite puncte ale caracteristicii. Din grafic se determin, la diferite
distane h1 i h2 de punctul dat, valorile funciei. Aceste valori sunt date n tabelul
4.1

Metode numerice n electronic

92

h1

A
B
C
D
E
F
G
H
I
J
K
L

h2

f1

f0

f2

0.7
2.3
40
60

0.1
27
50
65
70
150
200
250
275
300
400
450

0.2
40
77
68

0.2
0.2
0.2
0.01

0.3
0.3
0.2
0.01

0.2
0.2
0.25
0.1

0.3
0.3
0.2
0.1

130
190
220
250

0.2
0.2

0.3
0.3

380
440

170
240
295
300
430
470

Tabelul 4.1.
Derivata
0.223333
29.33333
92.53333
400.3333

86.66667
83.33333
38.33333
500.8922

100.4356
56.34012

2. Se consider funcia
f(x) 2 x 2 exp( x ) sin( 3 x 1.2)

i se cere derivata funciei n punctul x 1 .


Derivata s-a calculat prin toate metodele i s-au obinut urmtoarele rezultate:
-derivata prin dou puncte h= 10 6 ; f ' (1) 15.628085
-derivata prin trei puncte h1 10 6 ; h2 15
. 6 ;
6

-dervata prin cinci puncte h 10 ;

f( 1 ) 15.628085

f 1 15.628085.

5
INTEGRAREA NUMERIC*
Metodele numerice de integrare se clasific dup tipul funciei de integrat i
valoarea limitelor de integrare.
I. Prima grup de metode se refer la funciile continue i cu limite finite de
integrare. Aceste metode se mpart la rndul lor n dou subgrupe n funcie de modul
de divizare a intervalului de integrare:
a) Metode ce mpart intervalul de integrare n subintervale de aceeai lungime,
numrul subintervalelor fiind impus de operator. Dintre aceste metode amintim:
metoda dreptunghiului, metoda trapezului, metoda lui Simpson i metoda lui
Richardson;
b) Metode ce mpart intervalul de integrare n aa fel nct eroarea de calcul s fie
minim. Dintre aceste metode amintim i studiem metoda cuadraturii a lui Gauss.
II. A doua grup de metode se refer la integralele improprii, adic la integrarea
funciilor cu discontinuiti de spea nti i a doua pe intervale de integrare finite sau
integrarea funciilor continue pe intervale de integrare infinite.
III. A treia grup de metode numerice de integrare se ocup cu integrarea dubl
a funciilor de dou variabile. Amintim n acest sens formulele de cubatur a
trapezului i a lui Simpson.

5.1. INTEGRAREA FUNCIILOR DE O SINGUR


VARIABIL. METODE CU DIVIZAREA CONSTANT
Aceste metode mpart intervalul de integrare ntr-un numr n de subintervale de
lungime egal. Numrul n are influen asupra preciziei rezultatului integralei astfel:
cu ct n este mai mare, cu att precizia rezultatului este mai mare, deci cele dou
mrimi sunt direct proporionale. Numrul n este ales de proiectant.

5.1.1. METODA DREPTUNGHIULUI


Aceast metod are erori de calcul mari pentru funcii diferite de o constant. n
cazul cnd se dorete o evaluare grosier a unei integrale, se poate aplica aceast
metod, iar dac numrul subintervalelor pentru intervalul de integrare crete, eroarea

*)Bibliografie: [6],[7],[15],[22]

de calcul scade. Aceast cretere a numrului de subintervale se face n detrimentul

94

Metode numerice n electronic

timpului de calcul. Se consider :


b

I= f ( x )dx

(5.1)

unde f ( x ) este o funcie continu pe a , b i a , b sunt finite.


I- reprezint aria haurat punctat din fig. 5.1.
Calculul numeric al acestei integrale se realizeaz prin divizarea intervalului a , b
n n subintervale de lungime egal cu
x i

ba
x i+1 x i h , i = 0,1,...,n-1.
n

(5.2)

Se calculeaz aproximativ aria fiecrui dreptunghi


si

ba
f ( xi )
n

(5.3)

i se nsumeaz
n 1

n 1

i 0

i= 0

si =h f ( xi )

(5.4)

unde x i a h i
Formula (5.4) reprezint formula
de integrare a dreptunghiului.
Pentru funcia constant metoda
dreptunghiului are eroarea de
calcul nul deoarece aria format
de funcie, axa Ox i verticalele
n capetele intervalului este egal
cu integrala din funcie pe
intervalul dat. Aceast metod
nu are aplicaii n practic
datorit erorilor mari, pe care le
introduce.

y
f ( x i 1 )
f ( xi )

xi

x i 1

b x

Fig.5.1.ReprezentareagraficaintegraleiI

5.1.1.1. Algoritmul 5.1. Metoda dreptunghiului


{ Variabile
ls: limita stng a intervalului de integrare, real;
ld: limita dreapt a intervalului de integrare, real;
n: numrul de subintervale, ntreg;
h: valoarea lungimii unui subinterval, real;
sum: valoarea integralei, real;
{

95

Integrarea numeric

sum=0;
calculeaz h

ld ls
n

pentru i=0, , n-1 calculeaz sum =sum +h* f (i )


tiprete valoarea integralei sum;
}
}
5.1.1.2. Implementarea algoritmului. Metoda dreptunghiului
/* Funcia care implementeaz metoda de integrare a dreptunghiului.
Funcia ntoarce valoarea integralei.
*/
double DreptunghiF(double (*f)(double),
double ls,
double ld,
int nrpas)
{
int i;
double suma=0,h;
h=(ld-ls)/nrpas;
for(i=0;i<=nrpas-1;i++)suma+=h*f(ls+i*h);
return suma;
}

5.1.2. METODA TRAPEZULUI


Fie

I f ( x )dx
a

unde f ( x ) este continu pe a , b i a , b sunt finite.

Funcia este reprezentat grafic n figura 5.2, iar integrala I reprezint aria haurat
i punctat.
Intervalul a , b se mparte n n subintervale de lungime egal
x i x i 1 x i

ba
h
n

, i=0,1,...,n-1

, x 0=a si x n =b

Aria Ii este aproximat cu aria trapezului ( x i , x i 1, f ( x i ), f ( x i 1 ))


f ( x i ) f ( x i 1 )
h
2
h n 1
h
I f ( x i ) f ( x i 1 ) f ( x 0 ) 2 f ( x1 ) ... 2( x n 1 ) f ( x n )
2 i0
2
Ii

(5.5)
(5.6)

96

Metode numerice n electronic

Aceast expresie prezint formula de integrare numeric prin metoda trapezului i are
eroare de trunchiere nul pentru funcii pn la gradul nti inclusiv.
Metoda
de
integrare
a
y
trapezului este superioar din
punct de vedere al erorilor de
trunchiere fa de metoda
dreptunghiului, dar ca timp de
f ( x i 1 )

calcul este comparabil cu


f ( xi )
aceasta, pentru un acelai
numr de pai de integrare.
Simplitatea
ei
o
face
utilizabil n numeroase cazuri,
precizia ei depinznd de
numrul de subintervale ales.
Cu ct acest numr este mai
b
mare cu att precizia este mai
bun, dar timpul de calcul
x i1
a xi
x
al
integralei crete. Aceast in
tegral
st la baza metodei lui
Fig.5.2.Reprezentareagraficametodeideintegrare
Richardson.
atrapezului

5.1.2.1. Eroarea de trunchiere pentru metoda trapezului


Vom calcula eroarea de trunchiere pentru Ii (5.5). Pentru aceasta vom dezvolta funcia
f ( x ) n jurul punctelor x i i x i 1 :
( x xi )
( x-x i ) 2
f ( x i )+
f ( x i ) ...
1!
2!
( x x i 1 )
( x x i 1 ) 2
f(x) f ( x i 1 )
f ( x i 1 )
f ( x i 1 ) ...
1!
2!
f ( x )=( x i )

(5.7)
(5.8)

Cu ajutorul celor dou dezvoltri (5.7) i (5.8) vom construi o nou funcie, media
acestor funcii care aproximeaz cel mai bine funcia n intervalul ( x i , x i 1 ) .
Considernd x i 1 x i h putem scrie noua funcie astfel:
f ( x i+1 ) f ( x i )
f ( x i ) f ( x i 1 )
( x xi )
h f ( x i 1 )
2
2
f ( x i ) f ( x i 1 )
f ( x i 1 ) h 2
( x xi )2
h ( x xi )

f ( x i 1 ) ...
4
2
4
f ( x )=

Prin integrarea acestei funcii (5.9) de la x i la x i1 se obine urmtorul rezultat:


xi 1

f ( x )dx

xi

f ( x i 1 ) f ( x i )
f ( x i 1 ) f ( x i ) 2 f ( x i 1 ) 2
h
h
h
2
4
2

f ( x i+1 ) f ( x i ) 3 f ( x i 1 ) 3 f ( x i 1 ) 3
h
h
h ...
12
4
4

(5.9)

97

Integrarea numeric

f ( x i 1 ) f ( x i )
f ( x i 1 ) f ( x i ) 2 f ( x i 1 ) f ( x i ) 3
h
h
h ... (5.10)
2
4
12

Observm c eroarea de trunchiere este


eTi

f ( x i 1 ) f ( x i ) 2 f ( x i 1 ) f ( x i ) 3
h
h ...
4
12

(5.11)

Considerm c eroarea de trunchiere este de forma:


eTi k h 2 f ( x i 1 ) f ( x i )

(5.12)

unde k se determin astfel ca formulele (5.11) i (5.12) s fie egale. Considerm o


funcie pentru care avem eroare de trunchiere prin metoda trapezului. Aceasta este
funcia ptratic f ( x ) x 2 . innd cont c x i 1 x i h rezult :
xi 1

x 2 dx

xi

x3
3

xi 1
xi

x i3 3 x i3
h3
x i2 h h 2 x i
3
3

(5.13)

Aplicnd metoda trapezului aceleai funcii avem:


xi 1

2
x dx

xi

2
2
( x i+
h2
1 xi )
h eTi x i2 h x i h 2
eTi
2
2

Din relaiile (5.13) i (5.14) rezult eTi h 3 / 6

(5.14)
(5.15)

Aplicnd formula (5.12) pentru f ( x ) x 2 rezult


eTi k h 2 ( 2 x i 1 2 x i ) 2 k h 3

(5.16)

1
12
Eroarea de trunchiere pentru trapezul ( x i , x i 1 , f ( x i ), f ( x i 1 )) este
1
eTi h 2 f ( x i 1 ) f ( x i )
(5.17)
12
iar pentru ntreaga integral pe intervalul a , b avem cu aproximaie eroarea de

Din formulele (5.16) i (5.15) rezult

trunchiere:

k=-

eT (1 / 2) h 2 f ' ( b) f ' ( a )

(5.18)

Aceast eroare reprezint aproximativ suma ariilor cuprinse ntre curb i coarda dus
prin punctele ( x i , f ( x i )), ( x i 1 , f ( x i 1 )) , i = 0,1,...,n-1

5.1.2.2. Eroarea de rotunjire pentru metoda trapezului


Formula de calcul a integralei numerice prin metoda trapezului este dat n expresia
(5.6). Construim graful de procedur a formulei de calcul considernd c f ( x i ) au
erorile relative i , i = 0,1,...,n , nodurile n care se realizeaz operaiile ri , i
=1,2,...,n+3.
E I ((( ...(((1

f ( x1 )
f ( x2 )
f ( x1 ) f ( x 2 )
2
r1 )

f ( x1 ) f ( x 2 )
f ( x1 ) f ( x 2 )
f ( x1 ) f ( x 2 ) f ( x 3 )

98

Metode numerice n electronic


+ 3

f ( x3 )
f ( x1 ) f ( x 2 ) ... f ( x n 2 )
r2 )... rn 3 )

f ( x1 ) f ( x 2 ) f ( x 3 )
f ( x1 ) f(x 2 ) ... f(x n 2 ) f ( x n 1 )

f ( x n1 )
2 f ( x1 ) 2 f ( x 2 ) ... 2( x n1 )
rn2 rn1 )

f ( x1 ) f ( x 2 ) ... f ( x n1 )
f ( x 0 ) 2 f ( x1 ) ... 2 f ( x n1 ) f ( x n )

n1

( 0

f ( x0 )
f (xn )
f ( x0 ) f ( x n )
n
rn )

f ( x 0 ) f ( x1 )
f ( x0 ) f ( x n )
f ( x 0 ) 2 f ( x1 ) ... 2 f ( x n 1 ) f ( x n )

rn 1 h rn 2 rn 1 h rn 2 rn

f ( x0 )
f ( xn )

f ( x0 ) 2 f ( x1) ... 2 f ( xn1) f ( xn ) n f ( x0 ) 2 f ( x1) ... 2 f ( xn1) f ( xn )

(rn2 rn1 )

+rn-3

+ rn-4

f ( x0 ) f ( xn )

f ( x 0 ) 2 f ( x1 ) ... 2 f ( x n 1 ) f ( x n )

2 f (x1 )+2 f (x2 ) ... 2 f (xn1 )


2 f (xn1 )
n1

f (x0 ) 2 f (x1 ) ... 2 f (xn1 ) f (xn )


f (x0 ) 2 f (x1 ) ... 2 f (xn1 ) f (xn )

2 f ( x1 )+f ( x2 ) ... f ( xn2 )


f ( x0 ) 2 f ( x1 ) ... 2 f ( xn1 ) f ( xn )
2 f ( x1 )+f ( x2 ) ... f ( xn3 )
f ( x0 ) 2 f ( x1 ) ... 2 f ( xn1 ) f ( xn )
1

n-2

2 f ( xn2 )

f ( x0 ) 2 f ( x1 ) ... 2 f ( xn1 ) f ( xn )

...2

2 f ( x2 )

f ( x0 ) 2 f ( x1 ) ... 2 f ( xn1 ) f ( xn )

2 f ( x1 )
f ( x 0 ) 2 f ( x1 ) ... 2 f ( x n 1 ) f ( x n )

innd cont c eroarea relativ este I


calcula eroarea absolut:
e I ( rn 1 h n 2 ) I rn

eI
I

(5.19)

, unde eI este eroarea absolut, putem

h f ( x 0 ) f ( x n )
2

h f ( x0 )

n-1 h f ( x n 1 ) ( rn 1 rn 2 ) h f ( x1 ) f ( x 2 ) .... f ( x n 1 )

n 2 h f ( x n 2 ) rn 3 h f ( x1 ) f ( x 2 ) .... f ( x n 2 )
n 3 h f ( x n 3 ) rn 4 h f ( x1 ) f ( x 2 ) .... f ( x n 3 ) ....

2 h f ( x 2 ) 1 h f ( x1 ) r1 h [ f ( x1 ) f ( x 2 )]

(5.20)

99

Integrarea numeric

Fig.5.3.Grafuldeprocedurpentrumetodatrapezului

Dac considerm c toate erorile relative ce intervin n calcul se obin tot prin rotunjire
i sunt mai mici ca 5.10-t unde t este mantisa calculatorului i f ( x i ) pentru i =
0, 1, 2,...., n , atunci rezult urmtoarea margine a erorii absolute:
e I 5 10 t [3 I h (

2 ( n 1) ( n 2 )
2
( n 3) ( n 4) ... 2 )]

5 10 t [ 3nh 5 h / 2 h ( n 2 3 n 8 ) / 2 ]

5 10 t h. ( n 2 9 n 3) / 2
e I 5 10 t h ( n 2 9 n 3) / 2

(5.21)

Se observ c eroarea de rotunjire depinde proporional de valoarea lui n ( numrul de


puncte ale diviziunii ). Cnd n crete, eroarea de rotunjire se mrete datorit creterii
numrului de operaii de calcul.

5.1.2.3. Algoritmul 5.2. Metoda trapezului


{ Variabile
ls: limita stng a intervalului de integrare, real;
ld: limita dreapt a intervalului de integrare, real;

100

Metode numerice n electronic

n: numrul de subintervale, ntreg;


h: valoarea lungimii unui subinterval, real;
sum: valoarea integralei, real;
{
calculeaz h

ld ls
n

calculeaz sum

f (ls ) f (ld )
h
2

pentru i=1 pn la n-1 calculeaz sum =sum +h* f (ls+i*h);


tiprete valoarea integralei sum;
}

5.1.2.4. Implementarea algoritmului 5.2


/* Funcia care implementeaz metoda de integrare a trapezului.
Funcia ntoarce valoarea integralei
*/
double TrapezF(double (*f)(double),
double ls,
double ld,
int nrpas)
{
int i;
double suma,h;
h=(ld-ls)/nrpas;
suma=0.5*h*(f(ls)+f(ld));
for(i=1;i<=nrpas-1;i++)suma+=h*f(ls+i*h);
return suma;
}

5.1.3. METODA LUI RICHARDSON


Aceast metod d o precizie mai bun de calcul a integralei numerice dect
metoda trapezului i s-a obinut prin modificarea metodei trapezului.
Se pleac de la eroarea de trunchiere a metodei trapezului (5.18), eT = Ch2 pentru
diviziunea h = (b-a)/n.
Pentru o alt diviziune k = (b-a)/m se obine eroarea de trunchiere
Ca urmare

eT=Ck2

(5.22)

I=Ih+Ch2
I=Ik+Ck2

(5.23)

101

Integrarea numeric

Prin scdere se calculeaz C=

I h -I k
k 2 h2

I Ih

i nlocuind n formula integralei I rezult:

Ih Ik

(5.24)

k
1
h

expresie ce poart denumirea de formula lui Richardson i are o precizie mai mare
dect metoda trapezului.

5.1.3.1. Algoritmul 5.3. Metoda lui Richardson


{ Variabile
ls: limita stng a intervalului de integrare, real;
ld: limita dreapt a intervalului de integrare, real;
n: numrul de subintervale, ntreg;
m: numrul de subintervale, ntreg;
h: valoarea lungimii unui subinterval cu diviziunea n, real;
k: valoarea lungimii unui subinterval cu diviziunea m, real;
sumh: valoarea integralei cu diviziunea h, real;
sumk: valoarea integralei cu diviziunea k, real;
sum: valoarea integralei, real;

ld ls
n
ld ls
calculeaz k
m

{ calculeaz h

;
;

f (l s ) f (ld )
h
2
f (l s ) f (ld )
calculeaz sumk
k
2

calculeaz sumh

pentru

i=1

pn

la

n-1

;
;
calculeaz

sumh

=sumh

+h* f (ls+i*h);
pentru i=1

pn la m-1 calculeaz sumk=sumk+k*

f (ls+i*k);

calculeaz sum=sumh+(sumh-sumk)/((k/h)*(k/h)-1);
tiprete valoarea integralei sum;
}

5.1.3.2. Implementarea algoritmului 5.3


/* Funcia care implementeaz metoda de integrare a lui Richardson.
Funcia ntoarce valoarea integralei

102

Metode numerice n electronic

*/
double RichardsonF(double (*f)(double),
double ls,
double ld,
int nrpash,
int nrpask)
{
int i;
double suma,sumah,sumak,h,k;
h=(ld-ls)/nrpash;
k=(ld-ls)/nrpask;
sumah=0.5*h*(f(ls)+f(ld));
sumak=0.5*k*(f(ls)+f(ld));
for(i=1;i<=nrpash-1;i++)sumah+=h*f(ls+i*h);
for(i=1;i<=nrpask-1;i++)sumak+=k*f(ls+i*k);
suma=sumah+(sumah-sumak)/(((k*k)/(h*h)-1));
return suma;
}

5.1.4. METODA LUI SIMPSON


Metoda lui Simpson utilizeaz tot procedeul mpririi intervalului de integrare n
subintervale egale, dar aproximarea este aici fcut cu aria de sub o parabol, pentru
dou intervale adiacente. Parabola trece prin trei puncte consecutive ale diviziunii.
Formula de calcul a metodei lui Simpson se poate deduce mult mai uor utiliznd
formula lui Richardson. Aceast formul se utilizeaz pentru dou diviziuni ntre care
avem relaiile:
k 2h ,

ba
m

, h

ba
n

(5.25)

Scriem formula metodei trapezului pentru fiecare diviziune n parte:


h
f ( x 0 ) 2 f ( x1 ) 2 f ( x 2 )+2 f ( x 3 )+... 2 f ( x n 1 ) f ( x n )
2

(5.26)

I k h f ( x 0 ) 2 f ( x 2 ) 2 f ( x 4 )+2 f ( x 6 )+... 2 f ( x n 2 ) f ( x n )

(5.27)

Ih

Aplicm formula lui Richardson (5.23):


f ( xn )
f ( x0 )

I h
f ( x1 ) f ( x 2 )+f ( x 3 )+f ( x 4 )+... f ( x n 1 )
2
2
f ( xn )
1
1
1
1
f ( x0 ) 1

h
f ( x1 ) f ( x 2 )+ f ( x 3 )+ f ( x 4 )+... f ( x n 1 )
3
3
3
3
3
6
6

103

Integrarea numeric

2
2
2
1
1

h - f ( x 0 )- f ( x 2 )- f ( x 4 ) -... f ( x n 2 ) f ( x n )
3
3
3
3
3

h
f ( x 0 ) 4 f ( x1 ) 2 f ( x 2 )+4 f ( x 3 )+... 4 f ( x n 1 ) f ( x n )
3

(5.28)

Expresia reprezint formula de calcul numeric al integralei pentru metoda lui Simpson.

5.1.4.1. Algoritmul 5.4. Metoda lui Simpson


{ Variabile
ls: limita stng a intervalului de integrare, real;
ld: limita dreapt a intervalului de integrare, real;
n: numrul de subintervale, ntreg;
h: valoarea lungimii unui subinterval, real;
suma: valoarea integralei, real;
{ Variabile
ls: limita stng a intervalului de integrare, real;
ld: limita dreapt a intervalului de integrare, real;
n: numrul de subintervale, ntreg;
h: valoarea lungimii unui subinterval, real;
suma: valoarea integralei, real;
{
calculeaz h

ld ls
n

calculeaz sum h.

f (ls ) f (ld )
3

pentru i=1 pn la n-1


dac i = par atunci calculeaz sum =sum
+(2/3)*h* f (ls+i*h);
altfel calculeaz sum=sum+(4/3)*h* f (ls+i*h);
tiprete valoarea integralei sum;
}
}

5.1.4.2. Implementarea algoritmului 5.4


/* Funcia care implementeaz metoda de integrare a lui Simpson.
Funcia ntoarce valoarea integralei. */
double SimpsonF(double (*f)(double),
double ls,
double ld,

104

Metode numerice n electronic

int nrpas)
{
int i;
double suma,h;
h=(ld-ls)/nrpas;
suma=h*(f(ls)+f(ld))/3.0;
for(i=0;i<=nrpas-1;i++)suma+=2*(1+i%2)*h*f(ls+i*h)/3.0;
return suma }

5.2.INTEGRAREA FUNCIILOR DE O SINGUR


VARIABIL CU METODE CU DIVIZAREA
VARIABIL
Dintre aceste metode se prezint metoda cuadraturii lui Gauss. Aceast metod
determin punctele de divizare ale intervalului de integrare astfel ca eroarea de calcul
a integralei s fie minim.

5.2.1. METODA CUADRATURII GAUSSIENE CU DOU PUNCTE


Aceast metod reduce orice interval de integrare a , b la intervalul -1,1 cu ajutorul
formulei de substituie:
2 x (b a )
ba
Pentru x = a rezult y =-1, iar pentru x = b rezult

(5.29)
y =1. Substituia este dat de

formula:
1
1
(b a ) y (b a )
2
2
1
dx (b a )dy
2

(5.30)
(5.31)

I f ( x )dx

Ca urmare, integrala

se transform n integrala:

+1
1

+1

f 2 ( b a ) y 2 ( b a ) 2 ( b a )dy ( y )dy

(5.32)

105

Integrarea numeric

z a 0 a1 y

z ( y)

y0

y1

Fig.5.4.Reprezentareagraficafunciei z ( y ) iapunctelordedivizare

Formula de calcul a integralei o demonstrm pentru cazul a dou puncte n intervalul


de integrare, puncte ce le determinm astfel ca integrala

I ( y )dy

s dea

eroarea zero pn la un polinom de gradul trei inclusiv. Alegerea punctelor de divizare


a intervalului -1,1 se face astfel ca ntre ariile S1 , S2 , S3 s avem relaia
S1=S2+S3
(5.33)
pn la o funcie ( y) de gradul trei.
Integrala prin metoda cuadraturii o calculm cu formula: I=k0(y0)+k1(y1)
unde y 0 i y1 sunt punctele de divizare a intervalului, iar k0 , k1 sunt nite ponderi,
toate necunoscute pe care le vom determina.
1

Calculm valoarea exact a integralei I ( y )dy innd cont de formula (5.33)


1

+1

+1

-1

-1

I= ( y )dy= (a 0 a1 y )dy

(5.34)

unde z a 0 a1 y reprezint ecuaia dreptei care trece prin punctele ( y 0 , ( y 0 )) i


( y1 , ( y1 )) .
Considerm funcia ( y ) de gradul trei, pentru care integrala se calculeaz cu eroarea
zero:
(5.35)
( y )=b0+b1 y+b2 y 2+b3 y 3
Aceast funcie o putem scrie i sub forma urmtoare:
( y ) = a 0+a1 y+( y-y 0 )( y-y1 )( 0 1 y )
(5.36)

106

Metode numerice n electronic

punnd n eviden trecerea curbei (u) prin punctele ( y 0 , ( y 0 )) i ( y1 , ( y1)) ale


dreptei z a 0 a1 y .
Egalitatea (5.34) se scrie sub forma:
1

+1

(a 0 a1 y)dy a 0 a1 y ( y y 0 )( y-y1 )( 0 1 y)dy

(5.37)

i, pentru ca aceast egalitate s fie satisfcut pentru orice 0 i 1 , trebuie ca


+1

( y y 0 )( y y1 )dy 0

(5.38)

y( y y 0 )( y y1 )dy 0

(5.39)

1
+1

Din aceste dou ecuaii se obine sistemul:


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

(5.40)

sau

cu soluiile

y 0 y1 0

3
y 0 y1 0
1
1
y0
i
y1
3
3

(5.41)
(5.42)

Pentru calculul ponderilor k0 , k1 utilizm egalitatea


+1

+1

I = ( y ) dy = ( a 0 a1 y )dy k 0 (
-1
+1

-1

(a 0 a1 y)dy (a 0 y

a1 2
y )
2

+1
1

) k 1 (

2a 0

1
3

(5.43)
(5.44)

nlocuind n (5.43) rezult:


k 0 (a 0

1
3

a1 ) k 1 (a 0

1
3

a 1 ) 2a 0

(5.45)

Prin identificare se obine sistemul:


k 0 k1 2

k 0 k1 0
k 0 1 , k1 0

(5.46)

cu soluiile:
(5.47)
Formula de calcul a integralei prin metoda cuadraturii gaussiene cnd utilizm dou
puncte de divizare este:
b

I f ( x ) dx

unde:

( y)dy (

( y)

1
3

) (

1
(b a ) f ( y )
2

1
3

(5.48)
(5.49)

107

Integrarea numeric

5.2.1.1.Eroarea de trunchiere a formulei cuadraturii gaussiene prin


dou puncte
Integrala dintr-un polinom pn la gradul trei are eroarea de trunchiere nul. Pentru
polinoame de grad mai mare ca trei este:
, -1 1
(5.50)
eT k (IV) ( )
Pentru determinarea lui k lum ( y ) y 4
1

( y ) dy y 4 dy

( y ) dy

y5
5

y 4 dy (

1
3

2
5

) (

(5.51)
1
3

) eT

2
e
9 T

(5.52)

Din egalitile (5.51) i (5.52) rezult:


eT

8
45

Aplicnd formula (5.55) pentru ( y ) y 4 unde ( IV ) ( y ) 24 avem:


8
k 24
45

de unde rezult

1
135

Eroarea de trunchiere pentru formula cuadraturii gaussiene prin dou puncte este:
eT

1 ( IV )

( )
135

-11

(5.53)

5.2.2. Metoda cuadraturii gaussiene cu mai multe puncte de divizare


n acest caz
b

n 1

i0

f ( x)dx (u)du k i ( yi )

(5.54)

utiliznd n puncte de divizare i n ponderi.


Valorile punctelor de divizare n intervalul -1,1 sunt rdcinile polinoamelor lui
Legendre care sunt definite prin relaia de recuren:
P0 ( y ) 1 , P1 ( y ) y
1
Pn ( y ) (2n 1) yPn 1 ( y ) (n 1) Pn 2 ( y )
n

iar ponderile sunt date de formula:

(5.55)

108

Metode numerice n electronic


ki

2
(1 y i2 ) Pn ( y i )

(5.56)

Pentru polinoamele lui Legendre pn la gradul 16 sunt date rdcinile i ponderile n


funcia de implementare a metodei.
n cazul a n puncte de divizare a intervalului de integrare -1,1 eroarea de trunchiere
este zero pentru toate integralele polinoamelor de grad mai mic dect 2n-1, inclusiv
2n-1.

5.2.2.1.Eroarea de trunchiere pentru formula cuadraturii gaussiene cu


mai multe puncte de divizare
Considerm un polinom de gradul 2n pentru care integrala gaussian are eroarea de
e T k ( 2 n) ( ) ,
-11
(5.57)
trunchiere:
Calculm integrala pentru ( y ) y 2 n
1

y 2 n 1
(2n 1)

n 1

i 0

( y )dy y

2n

dy

1
1

2
2n 1

( y )dy y 2n dy k i yi 2n eT

(5.58)

(5.59)

Din egalarea relaiilor (5.58) i (5.59) rezult:


eT

Aplicnd formula (5.57) , unde


rezult:
k

n 1
2
k i yi2 n
2n 1 i 0

(5.60)

(2n)()=(2n)! i egalnd-o cu (5.60)

n 1

1 2
k i ui2 n

(2n)! 2n 1 i 0

(5.61)

iar eroarea de trunchiere


eT

(2n) ( )

n 1

k i ui2 n
(2n)! 2n 1 i 0

5.2.2.2. Algoritmul 5.5. Metoda cuadraturii a lui Gauss


{ Variabile
ls: limita stng a intervalului de integrare, real;
ld: limita dreapt a intervalului de integrare, real;
n: gradul polinomului lui Legendre;
A[n, i]:matricea ponderilor, reali;

(5.62)

109

Integrarea numeric

U[n, i]:matricea soluiilor polinoamelor lui Legendre, reale;


sum: valoarea integralei, real;
{ Construiete matricea A[n, i];
Construiete matricea Y[n, i];
suma=0;
pentru i=1 pn la n calculeaz
sum=sum+A[n,i]*(1/2)*(ld-ls)*f((1/2)*(ldls)*Y[n,i]+(1/2)(ls+ld));
tiprete valoarea integralei sum;
}
}

5.2.2.3. Implementarea algoritmului 5.5


/* Funcia care implementeaz metoda cuadraturii lui Gauss
pentru integrarea funciilor reale de variabil real
*/
double CuadraturaGauss(double (*f)(double),
double ls,
double ld,
int ord_pol)
{
static double A[17][17]=
{
/* n=0 */
{ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
/* n=1 */
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
/* n=2 */
{1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
/* n=3 */
{ 5.0/9.0,8.0/9.0,5.0/9.0,0,0,0,0,0,0,0,0,0,0,0,0,0},
/* n=4 */
{0.347854854137454
0.652145145862564
0
0
0
0

0.652145145862564
0.347854854137454
0
0
0
0

110

Metode numerice n electronic

0
0
/* n=5 */
{0.236926885056189,
0.568888888888889,
0.236926885056189
0,
0,
0,
0,
0,
/* n=6 */
{ 0.17132449237917,
0.467913934572691,
0.360761573048139,
0,
0,
0,
0.
0,
/* n=7 */
{0.12948496616887,
0.381830050505119,
0.381830050505119,
0.12948496616887,
0,
0,
0,
0,
/* n=8 */
{0.101228536290376,
0.313706645877887,
0.362684783378362,
0.222381034453374,
0,
0,
0,
0,
/* n=9 */
{ 0.08127438361574,
0.260610696402935
0.33023935500126
0.260610696402935,
0.08127438361574,
0,

0
0}
0.478628670499366
0.478628670499366,
0,
0,
0,
0,
0,
0}
0.360761573048139,
0.467913934572691,
0.17132449237917,
0,
0,
0,
0,
0}
0.279705391489277,
0.417959183673469,
0.279705391489277,
0,
0,
0,
0,
0}
0.222381034453374,
0.362684783378362,
0.313706645877887,
0.101228536290376,
0,
0,
0,
0},
0.180648160694857
0.312347077040003,
0.312347077040003,
0.180648160694857,
0,
0,

111

Integrarea numeric

0,
0,
/* n=10 */
{0.066671344308688,
0.219086362515982,
0.295524224714753,
0.269266719309996,
0.14945134915058,
0,
0,
0,
/* n=11 */
{0.055668567116,
0.186290210928,
0.26280454451,
0.26280454451,
0.186290210928,
0.055668567116,
0,
0,
/* n=12 */
{0.047175336387,
0.160078328542,
0.233492536538,
0.249147045813,
0.203167426723,
0.106939325995,
0,
0,
/* n=13 */
{0.040484004765,
0.13887351022,
0.207816047537,
0.232551553231,
0.207816047537
0.13887351022,
0.040484004765,
0,
0,
/* n=14 */
{0.035119460332,
0.121518570688,
0.185538397478,
0.215263853463,
0.205198463721,

0,
0},
0.14945134915058
0.269266719309996,
0.295524224714753,
0.219086362515982,
0.066671344308688,
0,
0,
0},
0.125580369465,
0.233193764592,
0.272925086778,
0.233193764592,
0.125580369465,
0,
0,
0},
0.106939325995,
0.203167426723,
0.249147045813,
0.233492536538,
0.160078328542,
0.047175336387,
0,
0},
0.092121499838,
0.178145980762,
0.226283180263
0.226283180263,
0.178145980762,
0.092121499838
0,
0},
0.08015808716,
0.157203167158,
0.205198463721,
0.215263853463,
0.185538397478,

112

Metode numerice n electronic

0.157203167158,
0.08015808716,
0,
/* n=15 */
{0.030753241996,
0.107159220467,
0.166269205817,
0.198431485327,
0.198431485327,
0.166269205817,
0.107159220467,
0.030753241996,
/* n=16 */
{0.027152459412,
0.095158511682,
0.149595988817,
0.182603415045,
0.189450610455,
0.169156519395,
0.124628971256,
0.062253523939,
static double U[17][17]=
{
/* n=0 */
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
/* n=1 */
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
/* n=2 */
{0.5773502692,
0,
0,
0,
0,
0,
0,
0,
/* n=3 */
{
0.7745966692,
-0.7745966692
0,
0,
0,
0,
0,

0.121518570688,
0.035119460332,
0},
0.070366047488,
0.139570677926,
0.186161000016,
0.202578241926,
0.186161000016,
0.139570677926,
0.070366047488,
0},
0.062253523939,
0.124628971256,
0.169156519395,
0.189450610455,
0.182603415045,
0.149595988817,
0.095158511682,
0.027152459412};

-0.5773502692,
0,
0,
0,
0,
0,
0,
0},
0,
0,
0,
0,
0,
0,
0,

113

Integrarea numeric

0,
/* n=4 */
{0.861136311594053,
-0.339981043584856,
0,
0,
0,
0,
0,
0,
/* n=5 */
{0.906179845938664,
0,
-0.906179845938664,
0,
0,
0,
0,
0,
/* n=6 */
{0.932469514203152,
0.238619186083197,
-0.661209386466265,
0,
0,
0,
0,
0,
/* n=7 */
{0.949107912342759,
0.405845151377397,
-0.405845151377397,
-0.949107912342759,
0,
0,
0,
0,
/* n=8 */
{0.96269856497336,
0.525532409916329,
-0.18343464249565,
-0.796666477413627,
0,
0,
0,

0},
0.339981043584856,
-0.861136311594053,
0,
0,
0,
0,
0,
0}
0.538469310105683,
-0.538469310105683,
0,
0,
0,
0,
0,
0},
0.661209386466265,
-0.238619186083197,
-0.932469514203152,
0,
0,
0,
0,
0},
0.741531185599394,
0,
-0.741531185599394,
0,
0,
0,
0,
0},
0.796666477413627,
0.18343464249565,
-0.525532409916329,
-0.96269856497336,
0,
0,
0,

114

Metode numerice n electronic

0,
/* n=9 */
{0.968160239507626,
0.613371432700591,
0,
-0.613371432700591,
-0.968160239507626,
0,
0,
0,
/* n=10 */
{0.973906528517172,
0.679409568299024,
0.148874338981631,
-0.433395394129247,
-0.865063366688985,
0,
0,
0,
/* n=11 */
{0.978228658146,
0.730152005574,
0.269543155952,
-0.269543155952,
-0.730152005574,
-0.978228658146,
0,
0,
/* n=12 */
{0.981560634247,
0.769902671494,
0.367831498998,
-0.125233408511,
-0.587317954287,
-0.90411725637,
0,
0,
/* n=13 */
{0.984183054719,
0.801578090733,
0.448492751036,
0,
-0.448492751036,
-0.801578090733,
-0.984183054719,
0,

0},
0.836031107326636,
0.324253423403809,
-0.324253423403809,
-0.836031107326636,
0,
0,
0,
0},
0.865063366688985,
0.433395394129247,
-0.148874338981631,
-0.679409568299024,
-0.973906528517172,
0,
0,
0},
0.887062599768,
0.519096129207,
0,
-0.519096129207,
-0.887062599768,
0,
0,
0},
0.90411725637,
0.587317954287,
0.125233408511,
-0.367831498998,
-0.769902671494,
-0.981560634247,
0,
0},
0.917598399223,
0.64234933944,
0.230458315955,
-0.230458315955,
-0.64234933944,
-0.917598399223,
0,
0},

115

Integrarea numeric

/* n=14 */
{0.986283808697,
0.82720131507,
0.515248636358,
0.108054948707,
-0.319112368928,
-0.687292904812,
-0.928434883664,
0,
/* n=15 */
{0.98799251802,
0.84820658341,
0.570972172609,
0.201194093997,
-0.201194093997,
-0.570972172609,
-0.84820658341,
-0.98799251802,
/* n=16 */
{0.989400934992,
0.865631202388,
0.617876244403,
0.281603550779,
-0.095012509838,
-0.458016777657,
-0.755404408355,
-0.944575023075,

0.928434883664,
0.687292904812,
0.319112368928,
-0.108054948707,
-0.515248636358,
-0.82720131507,
-0.986283808697,
0},
0.937273392401,
0.72441773136,
0.394151347078,
0,
-0.394151347078,
-0.72441773136,
-0.937273392401,
0},
0.944575023075,
0.755404408355,
0.458016777657,
0.095012509838,
-0.281603550779,
-0.617876244403,
-0.865631202388,
-0.989400934992}};

int i;
double suma=0;
for(i=1;i<=ord_pol;i++)
suma+=0.5*(ld-ls)*A[ord_pol][i-1]*f(0.5*(ld-ls)*
U[ord_pol][i-1]+0.5*(ls+ld));
return suma;
}

5.3.COMPARAREA METODELOR DE INTEGRARE

NUMERIC A FUNCIILOR DE O SINGUR


VARIABIL
Dintre toate metodele de integrare numeric, metoda cuadraturii gaussiene este cea
mai precis, realiznd aceeai precizie ca i metoda lui Simpson cu un numr dublu de
puncte de divizare i ca metoda trapezului cu un numr de patru ori mai mare de
puncte de divizare.

116

Metode numerice n electronic

Pentru aceeai precizie de calcul a integralei numerice, eficiena crete sau timpul
de calcul al calculatorului scade dup cum utilizm n ordine metoda trapezului,
metoda lui Simpson i metoda cuadraturii gaussiene.

5.4. CALCULUL NUMERIC AL INTEGRALELOR


IMPROPRII
Definiia 5.1: Se numete integral improprie, integrala pentru care cel puin una
dintre limitele de integrare este infinit i funcia este continu pe intervalul de
integrare sau funcia are puncte de discontinuitate de spea nti sau a doua i limitele
de integrare sunt finite.
Integralele improprii de forma

f ( x )dx

f ( x )dx

f ( x)dx

(5.63)

pot fi aduse la forma

f ( x)dx

(5.64)

Ca atare, se va studia integrala improprie de aceast form.


Dac funcia de integrat definit pe intervalul a, este integrabil pe acest interval i
exist limita:
A

f ( x )dx k
A
lim

(5.65)

f ( x)dx k

atunci

(5.66)

n acest caz integrala improprie este convergent. Cnd limita nu exist sau este
infinit, atunci integrala improprie este divergent.Valoarea lui A se poate lua suficient
de mare pentru ca

f ( x)dx

(5.67)

unde este o constant pozitiv suficient de mic. n acest caz integrala improprie

f ( x ) dx f ( x ) dx

(5.68)

integral ce poate fi calculat cu una dintre metodele studiate n paragraful 5.1.


Funciile care pe intervalul de integrare a , b au un punct de discontinuitate de spea
nti c a,b au proprietatea c:

117

Integrarea numeric

f (c 0) lim f ( x )

iar f (c) f (c 0) sau


n cazul acestor funcii:

f (c 0) lim f ( x )

x c
x c

x c
x c

(5.69)

f ( c ) f ( c 0) i f ( c ) f ( c 0) sau f ( c ) f ( c 0) .
b

f ( x)dx f 1 ( x)dx f 2 ( x)dx

(5.70)

unde
axc

pentru
f ( x)
f 1 ( x)
f (c 0) pentru

xc

pentru c x b
f ( x)
f 2 ( x)
f ( x c) pentru x c

Dac integrala (5.70) exist, spunem c integrala improprie este convergent i


valoarea ei poate fi calculat cu ajutorul unei metode studiat n paragraful 5.1.
Funcia f ( x ) are un punct de discontinuitate de spea a doua c a,b dac cel puin
una din limitele (5.69) are valoarea infinit. n acest caz
b

ce

ce

f ( x)dx f ( x)dx f ( x)dx


unde poate fi luat suficient de mic astfel ca

(5.71)

f ( x)dx

1 , 1 0

de valoare foarte mic, care reprezint i eroarea de calcul a integralei. Integrala (5.71)
poate fi rezolvat cu una dintre metodele studiate n paragraful 5.1. (metoda
dreptunghiului, metoda trapezului, metoda lui Richardson, metoda lui Simpson sau
metoda cuadraturii).

5.5. CALCULUL NUMERIC AL INTEGRALELOR


DUBLE
Pentru simplitate vom considera domeniul de integrare al funciei de dou
variabile un dreptunghi (Fig. 5.5)

Metode numerice n electronic

118

bd

f ( x,y)dx f ( x,y)dxdy
D

c
a

a c

(5.72)
reprezint
integrala
dubl din funcia de
dou variabile f ( x , y ) .
Pentru calculul valorii
acestei integrale vom
utiliza
formula
de
cubatur a trapezului sau
formula de cubatur a
lui Simpson care sunt
prezentate n continuare.

Fig.5.5.Reprezentareagraficadreptunghiuluide
integrare

5.5.1. FORMULA DE CUBATUR A TRAPEZULUI


Se mpart n subintervale de lungimi egale intervalele a , b i c, d
h

ba
,
n

d c
m

(5.73)

xi , yi , xi 1 , yi , xi 1 , yi 1 , xi , yi 1 ,

i se consider dreptunghiul cu vrfurile


unde x i a i h , y j c j k .

Pentru dreptunghiul dat care conine vrful x i , y i se calculeaz integrala IIJ aplicnd
formula trapezului.
y j 1

xi 1

I ij

dx

xi

xi 1

f ( x,y )dxdy

yj

xi

k
f ( x,y j ) f ( x,y j 1 ) dx

x
xi 1

k i 1
f ( x , y j )dx f ( x , y j 1 )dx
2x

xi
i

k h
f ( x i ,y j ) f ( x i ,y j 1 ) f ( x i 1 ,y j ) f ( x i 1 ,y j 1 )
4
Integrala pe ntreg dreptunghiul a , b, c, d este:

n1m1

I Iij
i 0 j 0

(5.74)

kh n1m1
f (xi,yj ) f (xi ,yj1) f (xi1,yj ) f (xi1,yj1)
4 i 0 j 0

expresie cunoscut sub numele de formula de cubatur a trapezului.

(5.75)

Integrarea numeric

119

5.5.1.1. Algoritmul 5.6. Metoda cubaturii trapezului


{Variabile
a: limita stng a intervalului de integrare pe axa Ox, real;
b: limita dreapt a intervalului de integrare pe axa Ox, real;
c: limita stng a intervalului de integrare pe axa Oy, real;
d: limita dreapt a intervalului de integrare pe axa Oy, real;
n: numrul de subintervale pe axa Ox, ntreg;
m: numrul de subintervale pe axa Oy, ntreg;
h: valoarea lungimii unui subinterval cu diviziunea n, real;
k: valoarea lungimii unui subinterval cu diviziunea m, real;
sum: valoarea integralei, real;
{
calculeaz h

b a
n

calculeaz k

dc
m

sum=0;
pentru i=1 pn la n-1
pentru j=1 pn la m-1
calculeaz
sum=sum+((h*k)/4)*(f(a+i*h,c+j*k)+f(a+i*h,c+(j+1)*k) +
+f(a+(i+1)h,c+j*k)+f(a+(i+1)h,(j+1)*k))
tiprete valoarea integralei sum;
}
}

5.5.1.2. Implementarea algoritmului 5.6


/* Funcia care implementeaz metoda de cubatur a trapezului */
/* Funcia ntoarce integrala unei funcii de dou variabile */
double CubaturaTrapez( double (*f)(double,double),
double sx,
double dx,
double sy,
double dy,
int nx,
int ny)
{double suma=0,h,k;
int i,j;
h=(dx-sx)/nx;

Metode numerice n electronic

120

k=(dy-sy)/ny;
for(i=0;i<=nx-1;i++)
for(j=0;j<=ny-1;j++)
suma+=0.25*h*k*( f(sx+i*h,sy+j*k)+f(sx+i*h,sy+(j+1)*k)+
f(sx+(i+1)*h,sy+j*k)+f(sx+(i+1)*h,sy+(j+1)*k));
return suma;
}

5.5.2. FORMULA LUI SIMPSON DE CUBATUR


Pentru acelai dreptunghi a , b, c, d reprezentat n fig. 5.5 vom aplica formula lui
Simpson de integrare. Vom considera dreptunghiul de integrare cu vrfurile
xi , yi , xi 1 , yi , xi 1 , yi 1 , xi , yi 1 i cu punctul central xi , yi

xi 1 y j 1

I ij

f ( x,y ) dxdy

xi 1 y j 1

xi 1

xi 1

k
f ( x,y j 1 ) 4 f ( x,y j ) f ( x,y j 1 ) dx
3

kh
f ( x i 1 ,y j 1 ) f ( x i 1 ,y j 1 ) f ( x i 1 ,y j 1 ) f ( x i 1 ,y j 1 )
9

4 f ( x i ,y j 1 ) f ( x i ,y j 1 ) f ( x i 1 ,y j ) f ( x i 1 ,y j ) 16 f ( x i ,y i )

Integrala pe ntreg dreptunghiul a , b, c, d


Simpson:
n1m1

I Iij
i 0 j 0

( 5.76)
este dat de formula de cubatur a lui

kh n1m1
f (xi 1,y j 1) f (xi 1,y j 1) f (xi 1,y j 1) f (xi 1,y j 1)
9 i 0 j 0

4 f ( xi ,y j 1 ) f ( xi ,y j 1 ) f ( xi 1,y j ) f ( xi 1,y j ) 16 f ( xi ,y j )

5.5.2.1. Algoritmul 5.7. Metoda lui Simpson de cubatur


{ Variabile
a: limita stng a intervalului de integrare pe axa Ox, real;
b: limita dreapt a intervalului de integrare pe axa Ox, real;
c: limita stng a intervalului de integrare pe axa Oy, real;
d: limita dreapt a intervalului de integrare pe axa Oy, real;
n: numrul de subintervale pe axa Ox, ntreg;
m: numrul de subintervale pe axa Oy, ntreg;
h: valoarea lungimii unui subinterval cu diviziunea n, real;
k: valoarea lungimii unui subinterval cu diviziunea m, real;
sum: valoarea integralei, real;

(5.77)

Integrarea numeric

121

b a
;
n
dc
;
calculeaz k
m

{ calculeaz h

sum=0; i=1;
repet
j=1;
repet
sum=sum+((h*k)/9)*(f(a+(i-1)*h,c+(j-1)*k)+f(a+(i+1)*h,c+(j-1)*k) +
+f(a+(i-1)h,c+(j+1)*k)+4*(f(a+ih,(j+1)*k))+
+f(a+i*h,c+(j-1)*k)+f(a+(i-1)*h,c+j*k)+f(a+(i+1)*h,j*k)+
+ 16*f(a+i*h,c+j*k))
j=j+2;
pn cnd j>m-1;
i=i+2;
pn cnd i>n-1;
tiprete valoarea integralei sum;
}
}

5.5.2.2. Implementarea algoritmului 5.7


/* Funcia care implementeaz metoda lui Simpson de cubatur.
Funcia ntoarce valoarea integralei duble.*/
double CubaturaSimpson( double (*f)(double,double),
double sx,
double dx,
double sy,
double dy,
int nx,
int ny)
{
double suma=0,h,k;
int i,j;
h=(dx-sx)/nx;
k=(dy-sy)/ny;
for(i=1;i<=nx-1;i+=2)
for(j=1;j<=ny-1;j+=2)
suma+=h*k*( f(sx+(i-1)*h,sy+(j-1)*k)+f(sx+(i+1)*h,sy+(j-1)*k)+
f(sx+(i-1)*h,sy+(j+1)*k)+f(sx+(i+1)*h,sy+(j+1)*k)+

Metode numerice n electronic

122

4*f(sx+i*h,sy+(j+1)*k)+4*f(sx+i*h,sy+(j-1)*k)+
4*f(sx+(i-1)*h,sy+j*k)+4*f(sx+(i+1)*h,sy+j*k)+
16*f(sx+i*h,sy+j*k))/9;
return suma;
}

5.6. APLICAII
1.Se d funcia

f ( x)

2
x3
.e x .(1 sin x 2 )
1 cos(1 x )

pentru care se cere integrala de la 0 la 3.


Valoarea integralei este dat n tabelul 5.1
Tabelul 5.1.
Metoda
Dreptunghiului
Trapezului
Richardson
Simpson
Cuadratura Gauss

Numrul de
subintervale
10000
10000
5000 i 10000
10000
Grad pol Legendre
n=15

Valoarea integralei
1394.642843
1395.704297
1395.703984
1395.703984
1395.7031

2. Se consider funcia de dou variabile:


f ( x,y )

x2 y2
. exp(1 x ). sin( x y 2)
1 2.x.y

Se cere valoarea integralei din funcia dat pe domeniul x [0,2]; y [0,2].


Valoarea integralei este dat n tabelul 5.2.
Tabelul 5.2
Metoda
Cubatura trapezului
Cubatura Simpson

Nr. Pct. Pe Ox
100
100

Nr. Pct. Pe Oy
100
100

Valoarea integralei
-24.730047
-24.733155

6
INTERPOLAREA*
Interpolarea este una dintre metodele de aproximare a funciilor. Considerm dat o
funcie sub form de tabel. Cunoscnd valorile funciei n anumite puncte pentru care
funcia este definit, se pune problema cunoaterii valorilor funciei n alte puncte ale
domeniului de definiie, n care funcia este necunoscut. Aceast problem se pune n
cazul reprezentrii grafice a funciei tabelate sau n cazul necesitii cunoaterii valorii
funciei ntr-un punct n care nu este cunoscut.
n cazul cunoaterii expresiei analitice a funciei y f ( x ) , valorile necunoscute ale
funciei se calculeaz prin introducerea argumentului corespunztor n funcie. Dac
nu se cunoate expresia analitic a funciei, se aproximeaz funcia cu o alt funcie,
care o aproximeaz cel mai bine pe prima ntre punctele unde dorim valoarea funciei.
Aproximarea funciei date cu o funcie liniar sau cu o funcie polinomial de un
anumit grad poate da valori foarte apropiate de valorile funciei.

6.1. INTERPOLAREA POLINOMIAL


Se consider funcia dat prin tabelul 6.1:
x
y

x0
y0

x1
y1

.
.

xk
yk

Tabelul 6.1.
xn
.
.

yn

Cunoatem valoarea funciei n n+1 puncte. Prin n+1 puncte se poate duce un polinom
de gradul n, unic determinat.
Fie polinomul:
Pn ( x) a n x n a n 1 x n 1 ... a1 x a 0
Conform tabelului 6.1 avem sistemul:
a n x 0 n a n 1 x 0 n 1 a1 x 0 a 0 y 0

n
n 1
a n x1 a n 1 x1 a1 x1 a 0 y1

a n x nn a n 1 x nn 1 a1 x n a 0 y n

________________________________
*) Bibliografie: [1],[6],[7],[15],[21],[22]
Acest sistem are n+1 ecuaii cu n+1 necunoscute, a 0 , a1 , a 2 ,..., a n 2 , a n 1 , a n .
Considerm sistemul omogen:

Metode numerice n electronic

124

a n x 0 n a n 1 x 0 n 1 a1 x 0 a 0 0

a n x1 n a n 1 x1 n 1 a1 x1 a 0 0

a n x nn a n 1 x nn 1 a1 x n a 0 0

(6.3)

Determinantul sistemului omogen este diferit de zero. Dac determinantul sistemului


ar fi zero, ar nsemna c polinomul de gradul n ar avea n+1 soluii x 0 , x1 , x 2 ,..., x n
ceea ce este imposibil. Acest sistem omogen admite numai soluii banale, ca urmare,
determinantul sistemului este diferit de zero. Acest determinant este i determinantul
sistemului (6.2) rezultnd c acest sistem este un sistem Cramer cu soluii unic
determinate. Deci, polinomul de grad n este unic determinat. Pentru simplificarea
calculului scriem polinomul sub forma urmtoare:
(6.4)
Pn ( x ) x n a n 1 x n 1 ... a1 x a 0 .
El este obinut din polinomul (6.1) prin mprire cu a n lsnd notaia neschimbat a
coeficienilor dup mprire.
Considerm urmtoarele polinoame:
0 ( x ) ( x x1 )( x x 2 )...( x x n )
1 ( x ) ( x x 0 )( x x 2 )...( x x n )

n ( x ) ( x x 0 )( x x1 )...( x x n 1 )

(6.5)

Formm polinomul Pn ( x ) sub forma:


Pn ( x ) b0 0 ( x ) b11 ( x )... bk k ... bn n ( x )

(6.6)

Trebuie s determinm coeficienii b0 , b1 ,..., bn .

b0

Pn ( x0 )
P (x )
P (x )
, b1 n 1 ,...,bk n k ,...,
0 ( x0 )
1 ( x1 )
k ( xk )

bn

Pn ( x n )
n ( xn )

(6.7)

Ca urmare,

x x
n

Pn (x) Pn (xi )
i 0

i (x)
yi
i (xi ) i 0
n

j 0, j i

x x
n

yi
i 0

x xj

j 0, j i

xi x j

j 0, j i

Polinomul de gradul n care trece prin n+1 puncte date, numit i polinomul de
interpolare al lui Lagrange, are forma:
n
n
x xj
.
(6.8)
Pn x y i
x
i 0
j 0, j i i x j
Expresia polinomului lui Lagrange este funcie de coordonatele punctelor cunoscute i
de variabila x . Cu ajutorul formulei determinate (6.8) a polinomului, care
aproximeaz o funcie, se poate calcula valoarea funciei n orice punct necunoscut
cuprins ntre x0 i x n .

6.1.1. EROAREA DE TRUNCHIERE N INTERPOLAREA


LAGRANJIAN

Interpolarea

125

Eroarea de trunchiere este dat de diferena dintre funcia f ( x ) de interpolat i


polinomul de interpolare al lui Lagrange.
n

x xj

eT f x y i
i0

j 0, j i x i x j

F x

(6.9)

Construim funcia
G ( x ) ( x x 0 )( x x1 )...( x x n )

(6.10)

Cu funciile F ( x ) , (6.9) i G( x ) , (6.10) formm urmtoarea funcie :


(6.11)
H ( t ) F ( x )G( t ) F ( t )G( x )
care are proprietile :
1. H ( x j ) 0 pentru j = 0, . . . ,n, deoarece nlocuind x x j n formula (6.9)
rezult F ( x j ) 0 ; j = 0, 2, . . . ,n i G( x j ) 0 ; j=0, 2, . . . ,n;
2. H ( x ) 0
Pe baza teoremei valorii medii rezult c exist n+2 puncte 0 , 1 , 2 ,..., n1 pentru
care derivata H'(t)=0, H ' (0 ), H ' (1 ), H ' (2 ),..., H ' (n ), H ' (n 1 ) i [ x0 , x n ] , i = 0,..,n+1.
Continund aplicarea teoremei valorii medii, se ajunge n final la egalitatea :
H ( n 1) ( ) 0 unde
x0 xn
Din (6.11) rezult:
H

n 1

t F x G n1 t F n1 t G x ( n 1)! F x f n1 t G x
n 1
H ( n 1) 0 ( n 1)! F x f G x
sau
eT F x

n 1

( n 1)!

x0 xn

(6.12)

(6.13)

formul ce reprezint eroarea de trunchiere pentru interpolarea lagranjian.

6.1.2 EROAREA DE ROTUNJIRE N INTERPOLAREA


LAGRANJIAN
Considerm polinomul lui Lagrange dat de relaia (6.8) pe care o scriem sub forma:
P( x )

n 1

n 1

x xj

i0

j 0 ,j i

xi x j

yi zi unde zi

i pi yk z k , P( x ) pn
k0

(6.14)

Construim graful de procedur pentru calculul erorii de rontunjire a expresiei (6.14)


care reprezint produsul de ordinul i din expresia polinomului lui Lagrange. In
expresia produsului exist operaii de scdere, mprire i nmulire. Pentru fiecare
nod al grafului unde se realizeaz o operaie aritmetic se d eroarea de rotunjire de tip
simetric. Pentru calculul erorii de rotunjire totale a expresiei polinomului lui Lagrange
se realizeaz un graf de procedur i pentru expresia sumei din (6.14).

Metode numerice n electronic

126

-1
-1

xi

zj

j1

Fig.6.1. Graful de procedur a expresiei z.

Considerm
ki

toate

valorile

xi ,

i=1,2,...

,n,

fr

erori

notm

cu

, k 0... n 1; i 0,1,... n 1 , erorile termenilor produsului. n aceste condiii pentru z 0

avem eroarea de rotunjire 0 =0, deoarece z0 iniializat este 1 i are eroarea zero.
0 0
i
i
i
2 31
41
0i 11i 21
i
i
i
32
42
0i
1i 12i 22

(6.15)

ni 1 1i, n 1 2i , n 1 3i , n 1 4i , n 1 ni 2
n expresia (6.15) lipsete termenul ii . Din (6.15) rezult:
n 1

ni 1 1 j 2 j 3 j 4 j
j 0
i j

(6.16)

Dac considerm kj 10 t unde t este mantisa calculatorului i notm cu i


eroarea produsului z i , avem

i 4 n 1

(6.17)

sau pentru z i , i=0,1,2,n-1, avem


i 4 n 1

i=0,1,2,...,n-1
Construim graful de procedur pentru expresia pi .

(6.18)

Interpolarea

127

zi

zi yi
pi

pi 1
pi

yi

pi

pi-1

Fig.6.2. Graful de procedur al expresiei pi

n 1

y k zk

k0

Se consider eroarea iniial n punctul pi nul, erorile de rotunjire n nodurile 5,6 le


notm cu 5i , 6i , i 0,1,.., n 1 i notm cu i , i 0,1,... n 1 erorile termenilor sumei.
0 0 e0 50

z0 y0
60
p0

z1 y1
p
1 1 61
p1
p2
z n y n 1
p
n 1 n 2 6,n 1
pn 1
pn 1

1 1 e1 31
n 1 n 1 en 1 5, n 1

(6.19)

tim c i 4 n 1 pentru i=0,1,..,n-1 i considerm c ei e pentru i=0.1.,n-1.


n aceste condiii avem : kj
n 1

n 1

n 1

n 1

i 0

i 0

i 0

i 0

n 1| pn1| 4n 3 e zi yi pi 4n 3 e pi pi

Se mai poate face majorarea

n 1

| pi | npn 1

i rezult:

i0

n 1 2n 2n 1 en
expresie care reprezint eroarea de rotunjire pentru interpolarea lagranjian.

(6.20)

6.1.3. PARTICULARIZRI ALE POLINOMULUI LUI LAGRANGE


Dac considerm dou puncte, interpolarea devine liniar
y y1

x x2
x x1
y2
x1 x 2
x 2 x1

Eroarea de trunchiere a interpolrii liniare devine:


f
eT

2!

x x1 x x2

(6.21)

x1 x 2

(6.22)

Metode numerice n electronic

128
i eroarea de rotunjire:

2 12 2e

(6.23)

unde i e sunt date n paragraful 6.1.2.


Pentru trei puncte, interpolarea devine ptratic.

6.1.4.ALGORITMUL 6.1. POLINOMUL LUI LAGRANGE


{Variabile
n : numrul de puncte cunoscute, ntreg ;
x : abscisele punctelor cunoscute, vector ;
y : ordonatele punctelor cunoscute, vector ;
x : punctul n care se calculeaz interpolarea, real ;
i,j : contori, ntregi ;
sum : variabil ce reine suma, real ;
prod : variabil ce reine produsul, real ;
{ sum=0;
pentru i=0..n
{ prod=1;
pentru j=0..n dac j i atunci
calculeaz prod prod

x xj
xi x j

sum sum y i prod ;


}
Valoarea interpolat este sum;
}.

6.1.5. IMPLEMENTAREA ALGORITMULUI 6.1


/* Funcia care implementeaz metoda lui Lagrange de interpolare
Funcia ntoarce valoarea interpolat */
double Lagrange(int n,
double x[],
double y[],
double point)
{
int i,j;
double sum=0,prod;
for(i=0;i<=n;i++)
{

Interpolarea

129
prod=1;
for(j=0;j<=n;j++)if(j!=i)prod*=(point-x[j])/(x[i]-x[j]);
sum+=y[i]*prod;
}
return sum;
}

6.2. POLINOMUL DE INTERPOLARE DE SPEA


NTI AL LUI NEWTON
Acest polinom de interpolare se exprim funcie de diferenele finite. Fie

f : a , b R i reeaua x1, x2 , x3 ,..., xn cu pasul constant h.

Definiia 6.1. Se numete diferen finit de ordinul nti expresia :


f x f x h f x

(6.24)

unde h este pasul constant, iar diferena finit de ordinul n expresia :

n f x n 1 f x

(6.25)

Diferenele finite au urmtoarele proprieti :


1. Operatorul diferen finit este liniar :

c1 f 1 c 2 f 2 c1 f 1 c 2 f 2

(6.26)

2. Diferena finit de ordinul n se calculeaz cu formula :


n

n f x 1 C nk f x n k h
k

k 0

(6.27)

3. Diferenele finite mai pot fi obinute i cu ajutorul tabelului 6.2


xi

yi

yi

x0

y0

y0

x1

y1

x2

2 yi

3 yi

y1

2 y 0

3 y 0

y2

y 2

2 y1

x3

y3

y3

x4

y4

x5

y5

x6

y6

Tabelul 6.2

4 yi

5 yi

3 y1

4 y 0

5 y 0

2 y2

3 y 2

4 y1

5 y1

y 4

2 y3

3 y3

4 y 2

y5

2 y 4

6 y i

6 y 0

Definiia 6.2. Se numete putere generalizat de ordinul n a lui x expresia:


x n x x h x 2h... x n 1 h

Pentru h=0 puterea generalizat coincide cu puterea obinuit.

(6.28)

Metode numerice n electronic

130
1. Diferena finit a puterii generalizate este:
x n nhx n 1

(6.29)

2. Diferena finit de ordinul k a puterii generalizate este:


k x n n n 1 n 2... n k 1 x n k

(6.30)
Fie funcia tabelat dat n tabelul (6.1), unde reeaua x 0 , x1, x2 , x3 ,..., x n este cu
pasul constant h.
Prin cele n+1 puncte trece un polinom de gradul n pe care l cutm sub forma
(6.31)
Pn ( x ) C0 C1( x x0 )[1] C2 ( x x0 )[2] ... Cn ( x x0 )[n ]
, i =1, 2, ...n
unde
( x x0 )[i ] ( x x0 )( x x1 )...( x xi 1 )
i coeficienii C0 , C1,..., Cn sunt necunoscute pe care le vom calcula. Se observ c
Pn ( x0 ) y0 C0
(6.32)
Calculm diferena finit de ordinul nti :
Pn ( x ) C1h 2C2 h( x x0 )[1] ... nCn h( x x0 )[ n 1]
(6.33)
Fcnd substituia x x0 rezult Pn ( x0 ) C11!h .
C1

Se poate calcula

Pn x 0
1! h

(6.34)

Se continu calculul diferenelor finite n punctul x0 i se observ c :


Ck

k
Pn x 0

k !h k

k Pn x 0 k y 0 , k=0, 1, 2, ... n.

(6.35)

innd cont de formulele de calcul ale coeficienilor, polinomul lui Newton de


interpolare de spea nti poate fi scris astfel:
Pn x 0 y 0

y 0
2 y
n y
x x 0 1 20 x x 0 2 n0 x x 0 n
1! h
2!h
n !h

(6.36)

Deoarece n calculul coeficienilor s-au utilizat diferenele finite la dreapta


(tabelul 6.2), polinomul poart denumirea de polinom a lui Newton de interpolare de
spea nti.

6.2.1. ALGORITMUL 6.2. NEWTON 1


{Variabile
n:numrul de puncte cunoscute, ntreg;
h:pasul constant ntre abscisele cunoscute, real;
y:ordonatele punctelor, vector;
xp:abscisa punctului n care se face interpolarea;
x0:abscisa primului punct cunoscut, real ;
sum:variabila ce reine sumele pariale, real;
prod:variabila ce reine produsele, real;
i, j:contoare, ntregi;
{ sum=y0 ;
prod=1 ;
pentru i=1...n
{pentru j=0...n-i

Interpolarea

131
calculeaz yj=yj+1-yj

1 1
prod prod * x p x0 i 1 * h * * ;
h i
sum=sum+y0*prod; }
valoarea interpolat este sum ;
} }.

6.2.2. IMPLEMENTAREA ALGORITMULUI 6.2


/* Funcia care implementeaz metoda de interpolare a lui Newton
de spea ntia.
Funcia ntoarce valoarea interpolat
*/
double Newton1(int n,
double vi,
double pas,
double y[],
double point)
{
double sum=y[0],prod=1;
int i,j;
for(i=1;i<=n;i++)
{
for(j=0;j<=n-i;j++)y[j]=y[j+1]-y[j];
prod*=(point-(vi+(i-1)*pas))/(i*pas);
sum+=y[0]*prod;
}
return sum;
}

6.3. POLINOMUL DE INTERPOLARE DE SPEA A


DOUA AL LUI NEWTON
Pentru funcia dat n tabelul 6.1 se caut un polinom de gradul n care trece prin
cele n+1 puncte, sub forma:
Pn ( x ) C0 C1( x xn ) C2 ( x xn )( x xn 1 )... Cn ( x xn )( x xn 1 )...( x x1 )
(6.37)
Polinomul mai poate fi scris i funcie de puterea generalizat astfel
Pn ( x ) C0 C1( x xn )[1] C2 ( x xn 1 )[2] C3 ( x xn 2 )[3] ... Cn ( x x1 )[n ]
(6.38)
Se observ c
Pn ( xn ) yn C0
(6.39)
Calculm diferena finit de ordinul nti
Pn ( x ) C11!h 2C2h( x xn 1 )[1] 3C3h( x xn 2 )[2] ... nCn h( x x1 )[n 1]
(6.40)

Metode numerice n electronic

132

y n 1
.
1! h
Continund calculele diferenelor finite n punctele xn 2 , xn 3 ,..., xn k , pentru rangul k

Pn ( x n 1 ) y n 1 C11!h pentru x xn 1 i rezult C1

rezult formula de calcul al coeficientului Ck :


Ck

k y n k

(6.41)

k !h k

Substituind k 0,1,2,.., n n formula (6.41) se obin coeficienii polinomului. innd


cont de formula (6.41) polinomul de gradul n (6.38) poate fi scris sub forma :
2
n
y
1 y n 2
x xn1 2 yn0 x x1 n (6.42)
Pn x y n n 1 x x n
2
1!h
2!h
n!h
Acest polinom este numit polinomul lui Newton de interpolare de spea a doua
deoarece s-au utilizat diferenele finite la stnga (tabelul 6.2). Dac punctul de
aproximare a funciei se gsete n apropierea lui xn , se recomand utilizarea metodei
se spea a doua deoarece d erori mai mici.

6.3.1. ALGORITMUL 6.3. NEWTON 2


{Variabile
n:numrul de puncte cunoscute, ntreg;
h:pasul constant ntre abscisele cunoscute, real;
y:ordonatele punctelor, vector;
xp:abscisa punctului n care se face interpolarea;
xn :abscisa maxim a punctelor cunoscute, real ;
sum:variabila ce reine sumele pariale, real;
prod:variabila ce reine produsele, real;
i, j:contoare, ntregi;
{ sum=yn ;
prod=1 ;
pentru i=1...n
{pentru j=n...i
calculeaz yj=yj-yj-1

prod prod * x p x n i 1 * h *

1 1
* ;
h i

sum=sum+yn*prod;
}
valoarea interpolat este sum ;
}
}.
6.3.2. IMPLEMENTAREA ALGORITMULUI 6.4
/* Funcia care implementeaz metoda de interpolare a lui Newton

Interpolarea

133
de spea a doua.
Funcia ntoarce valoarea interpolat
*/
double Newton2(int n,
double vi,
double pas,
double y[],
double point)
{
double sum,prod,vf;
int i,j;
vf=vi+n*pas;
sum=y[n];prod=1;
for(i=1;i<=n;i++)
{
for(j=n;j>=i;j--)y[j]=y[j]-y[j-1];
prod*=(point-(vf-(i-1)*pas))/(i*pas);
sum+=y[n]*prod;
}
return sum;
}

6.4. POLINOMUL LUI NEWTON DE INTERPOLARE CU


DIFERENE DIVIZATE
Fie funcia f ( x ) dat sub forma celei prezentate n tabelul (6.1) unde reeaua
x0 , x1 , x2 ,..., xn din domeniul de definiie al funciei nu are pas constant.
Definiia 6.3. Se numete diferen divizat de ordinul k+i a funciei f expresia :
f x i 1 , x i , x i 1 , ..., x i k

f x i , x i 1 , ..., x i k f x i 1 , x i ,..., x i k 1
x i k x i 1

(6.43)

Se determin polinomul de gradul n, de forma :


Pn ( x ) C0 C1( x x0 ) C2 ( x x0 )( x x1 )... Cn ( x x0 )( x x1 )...( x xn 1 ) (6.44)
cunoscnd n+1 puncte ( xi , yi ) , i=0, ...,n , care verific polinomul.
Se observ c Pn ( x0 ) y0 C0 .
Calculm diferena divizat de ordinul nti pentru polinomul Pn ( x ) i se face x x1
Pn ( x0 , x1 ) C1 .
Calculnd n continuare, se determin diferena divizat de ordinul k i lund pe
x xk se obine valoarea coeficientului Ck :
Ck Pn ( x0 , x1, x2 ,..., xk ) ,
k=0, 1, ...,n.
(6.45)
innd cont de formula (6.45), polinomul (6.44) se scrie sub forma:

Metode numerice n electronic

134

Pn ( x ) y0 Pn ( x0 , x1 )( x x0 ) Pn ( x0 , x1, x2 )( x x0 )( x x1 )...

Pn ( x0 ,..., x n )( x x0 )( x x1 )...( x x n 1 )

(6.46)

unde fiecare diferen divizat se calculeaz cu ajutorul formulei (6.43). Polinomul


obinut (6.46) poart numele de polinomul lui Newton de interpolare cu diferene
divizate.

6.4.1. ALGORITMUL 6.4. NEWTON 3


{Variabile
n : numrul de puncte date ale funciei, ntreg ;
x : abscisele punctelor date, vector ;
y : ordonatele punctelor date, vector ;
x : punctul n care se interpoleaz funcia, real ;
i,j : contoare, ntregi ;
sum : variabil ce reine sumele pariale, real ;
prod : variabil ce reine produsele pariale, real ;
{ sum=y0;
prod=1;
pentru i=1...n
pentru j=0...n-i

calculeaz y j

y j 1 y j
x j i x j

prod= prod*( x -xi-1);


sum=sum+y0*prod;

}
valoarea interpolat este sum;
}

6.4.2. IMPLEMENTAREA ALGORITMULUI 6.4


/* Funcia care implementeaz metoda de interpolare a lui Newton
cu diferene divizate.
Funcia ntoarce valorea interpolat.
*/
double NewtonDD(int n,
double x[],
double y[],
double point)
{
int i,j;
double sum,prod;
sum=y[0];prod=1;
for(i=1;i<=n;i++)

Interpolarea

135
{
for(j=0;j<=n-i;j++)y[j]=(y[j+1]-y[j])/(x[j+i]-x[j]);
prod*=(point-x[i-1]);
sum+=y[0]*prod;
}
return sum;
}

6.5. METODA LUI AITKEN DE INTERPOLARE


Metoda lui Aitken de interpolare d acelai rezultat ca i metoda lui Lagrange de
interpolare doar c prin aceast metod nu se determin un polinom, ci se realizeaz
mai multe interpolri liniare. Cu fiecare interpolare, numrul punctelor rmase se
micoreaz cu o unitate, iar funcia ce trece prin dou puncte de la etapa curent
crete n grad, astfel c n final, dac sunt date n+1 puncte, se obine o funcie de
gradul n.
Considerm funcia dat n tabelul 6.1
x
x0

Tabelul 6.3

y0

x1

y1

y 01

x2

y2

y02

y012

x3

y3

y03

y013

y0123

x4

y4

y04

y014

y0124

-----

----

----

----

----

xn

yn

y0 n

y01n

y012 n

y0 j

xj x
x j x0

y0

xj x

x x0
yj
x j x0

----------

j=1, 2, 3, ..., n

x x1
j=2, 3, ..., n
y0 j
x j x1
x j x1
- - - - - - - - - - - - - - - ---------------x x
x x n 1
y 012...n n
y 012...n 2 n 1
y 012...n 2 n
x n x n 1
x n x n 1
y 01 j

y 01

Valoarea interpolat a funciei tabelate n punctul x este y012...n .

6.5.1. ALGORITMUL 6.5. METODA LUI AITKEN


{Variabile

y0123...n

(6.47)

(6.48)

Metode numerice n electronic

136

n : numrul de puncte date ale funciei, ntreg ;


x :abscisele punctelor date, vector ;
y : ordonatele punctelor date, vector ;
xp: punctul n care se interpoleaz funcia, real ;
i,j : contoare, ntregi ;
{
pentru i=1...n
pentru j=i...n
calculeaz
y j y i 1

xp x j

x i 1 x j

yj

x p x i 1
x j x i 1

}
valoarea interpolat este yn ;
}

6.5.2. IMPLEMENTAREA ALGORITMULUI 6.5


/* Funcia care implementeaz metoda lui Aitken de interpolare
Funcia ntoarce valoarea interpolat */
double Aitken(int n,
double x[],
double y[],
double point)
{
int i,j;
for(i=1;i<=n;i++)
for(j=i;j<=n;j++)
y[j]=y[i-1]*(point-x[j])/(x[i-1]-x[j])+y[j]*(point-x[i-1])/(x[j]-x[i-1]);
return y[n];
}

6.6. INTERPOLAREA CU FUNCII SPLINE


Cuvntul splin provine din englez i nseamn o rigl elastic de care dac se
aga greuti poate fi fcut s treac prin diferite puncte dorite, cuprinse ntre
capetele riglei.
Considerm dat o funcie tabelat, reprezentat n tabelul 6.4.
Tabelul 6.4

x
y

x1

x2

x3

y1

y2

y3

-------

xn
yn

Interpolarea

137

Considerm x1 a i xn b , [a , b] fiind intervalul de definiie a funciei f , iar


abscisele x1,x2,...,xn o diviziune a intervalului de definiie. Valorile funciei sunt
yi f ( xi ) , i 1,2,..., n
(6.49)
Definiia 6.4. Se numete funcie spline de ordinul n relativ la diviziunea
a intervalului [a, b] o funcie S: [a, b] R de clas Cm-1 [a, b] ale crei restricii Si(x)
pe fiecare interval [xi , xi 1 ] al diviziunii sunt polinoame de ordinul m, adic:
S i ( x ) Pmi ( x ) ,

dac
(6.50)
x [xi , xi 1 ] , i =1,2,...,(n-1)
Funcia S(x) este neted pe poriuni deoarece are primele (m-1) derivate continue pe
[a , b] , iar derivata de ordinul m este discontinu n xi , i =1,2,...,n. Gradul de netezire
al funciei este m. Restriciile funciei sunt polinoamele:
Si(x)=Aixm + Bixm-1 + Cixm-2 + Eixm-3 + ... +Ri
(6.51)
dac, x [xi , xi 1 ] , i =1,2,...,(n-1)
Aceste funcii sunt derivabile pn la (m-1) i sunt continue mpreun cu derivatele.
Derivata de ordinul (m-1) a lui Si(x) pe intervalul [xi , xi 1 ] este o funcie liniar i trece
prin punctele ( xi , Di ) i ( xi 1, Di 1 ) unde,
Rezult ecuaia liniar:
S i( m1) ( x )

Di Si( m1) ( x ) i =1,2,...,n.

Di 1 ( x x i ) Di ( x i 1 x )
hi

(6.52)

unde hi=xi+1-xi , i =1,2,...,(n-1)


Integrnd de m-1 ori relaia (6.52) se obine:
S i( m 2 ) ( x )

Si

( m 3)

Si(x)

Di 1 ( x x i ) 2 Di ( x i 1 x ) 2
C1i
2 hi

( x)

Di 1 ( x xi ) 3 Di ( xi 1 x) 3
C1i x C 2i
6hi

Di1(x xi )m1 (1)m2 (xi1 x)m1 Di C1i x m3 C2i x m4

...Cm1,i
(n 1)!hi
(m 3)! (m 4)!

Si ( x )

(6.53)
(6.54)
(6.55)

Di1 ( x xi ) m ( 1) m1 ( xi1 x ) m1 Di C1i x m 2 C2i x m3

.. Cm 2,i x Cm1,i (6.56)

n!hi
( m 2 )! ( m 3)!

Pentru ntreg intervalul [a, b] rezult un sistem liniar punnd condiia ca Si(xi)=yi ,
i=1,2,..,n i continuitatea celor (m-1) ecuaii n toate punctele xi . n extremele x1 i
x2 se scrie polinomul lui Lagrange, l derivm pn la m-1 i aflm corespunztor
valorile derivatelor n x1 i xn . Rezult necunoscutele:
Di , Di+1 , C1i ,..., Cm-1,i pentru fiecare interval. n acest caz sunt n+(m-1)+ (n-1)
necunoscute i n+(m-1)+(n-1) ecuaii. Sistemul fiind liniar se rezolv cu una din
metodele de la capitolul 3.
Algoritmul i programul s-au realizat pentru restriciile Si polinoame de gradul 3.
n acest caz:
Si(x)=Aix3 + Bix2 + Cix + Ei
(6.57)

Metode numerice n electronic

138
S i ( x)

Di 1 ( x xi ) Di ( xi 1 x)
hi

S i( x)

Di 1 ( x xi ) 2 Di ( xi 1 x) 2
C1i
2hi

Si (x)

Di 1 ( x x i ) 3 Di ( x i 1 x ) 3
C1i x C2i
6 hi

(6.58)

Din S ( x i ) y i i S ( x i 1 ) y i 1 rezult:
C1i

y i 1 y i Di 1 Di

hi
6
hi

C2 i

x i 1 y i x i y i 1 Di x i1 Di1 x i

hi
6
hi

Din identificarea relaiilor (6.57) i (6.58) rezult :


D x Di 1 x i
D Di
;
Bi i i 1
Ai i 1
2hi
6hi
Ci

Di 1 x i2 Di x i21 y i 1 y i Di 1 Di

hi
2hi
6
hi

Ei

x i31 Di x i3 D i 1 y i x i 1 y i 1 x i Di x i 1 D i 1 x i

hi
6 hi
6
hi

(6.59)

(6.60)

Din continuitatea primei derivate n punctul xi , S i' 1( xi ) Si' ( xi ) rezult:


y y i y i y i 1
hi 1 Di 1 2( hi hi 1 ) Di hi Di 1 i 1

6
hi
hi 1

(6.61)

Considernd derivatele de ordinul nti n punctele x1 i x2 egale cu:


y1

y 2 y1 y 3 y 2 y 3 y1

x 2 x1 x 3 x 2
x 3 x1

(6.62)

respectiv
y n

y n 1 y n 2 y n y n 1 y n y n 2

x n 1 x n 2 x n x n 1 x n x n 2

rezult sistemul tridiagonal n Di i 1,2,3,..., n

(6.63)

Interpolarea

139

y2 y1

y1
2h1 D1 h1 D2 6
h

y 4 y3 y3 y 2

h1D1 2 (h1 h2 )D2 h2 D3 6


h3
h3

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

yi1 yi yi yi1

hi1 Di1 2 (hi1 hi )Di hi Di1 6


hi
hi

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

yn y n1 y n1 yn2

hn2 Dn2 2 (hn2 hn1 )Dn1 hn1 Dn 6


hn1
hn1

y n y n1

hn1 Dn1 2hn1 Dn 6 y n


hi

(6.64)

unde y1 i yn sunt date de expresiile (6.62), respectiv (6.63) .


Din sistemul (6.64) rezult valorile lui Di , i =1,2,...,n. Din (6.59) rezult
coeficienii restriciilor pe fiecare interval, restricii care aproximeaz funcia dat.
Dac se d x n care trebuie calculat funcia, se stabilete intervalul n care se
gsete x i se calculeaz valoarea restriciei funciei pe acest interval n punctul x .

6.6.1. ALGORITMUL 6.6. FUNCII SPLINE


{ Variabile
n : numrul de puncte date ale funciei, ntreg ;
x :abscisele punctelor date, vector ;
y : ordonatele punctelor date, vector ;
xp: punctul n care se interpoleaz funcia, real ;
A,B,C: vectorii elementelor diagonale ale sistemului tridiagonal;
TL:vectorul termenilor liberi al sistemului tridiagonal;
h:vectorul pailor punctelor pe abscis;
S:vectorul soluiilor sistemului tridiagonal;
derx1:derivata n punctul x1, real;
derx2:derivata n punctul x2, real;
num:variabila ce d numrul intervalului n care se gsete xp, ntreg;
valint:variabil ce reine valoarea polinomului de gradul trei n punctul
xp, real;
i,j : contoare, ntregi;
{ pentru i = 1 pn la n-1
calculeaz hi x i 1 x i ;
calculeaz derx1

y 2 y1 y 3 y 2 y 3 y1

;
x 2 x1
x3 x 2
x 3 x1

Metode numerice n electronic

140
calculeaz derxn

y n 1 y n 2
y y n 1 y n y n 2
n

;
x n 1 x n 2
x n x n 1
x n x n2

construiete sistemul tridiagonal


y2 y1

derx1 )
2.h1.D1 h1.D2 0.D3 0.Dn 6( h
1

y3 y2 y2 y1

)
0.D1 h1.D2 2(h1 h2 )D2 h2 D3 0.D4 0.Dn 6(
h2
hi 1

y n y n 1

)
0.D1 0.D2 0.D3 hn 1Dn 1 2.hn 1.Dn 6(derxn h
n 1

Rezolv sistemul conform algoritmului (3.8) din capitolul 3.


Calculeaz S=Tridiagonal(A,B.C.TL);
/* Se caut intervalul care conine punctul de interpolare*/
i =1
repet
i=i+1;
pn cnd xp<x[i];
Cu formulele (6.59) calculeaz valorile Ai , Bi , Ci , E i pentru i gsit;
calculeaz val int As . xp 3 Bs . xp 2 C s . xp E s ;
tiprete valint
}

6.6.2. IMPLEMENTAREA ALGORITMULUI 6.6


/* Funcia care implementeaz interpolarea prin funcii spline cubice
Funcia ntoarce
1 dac se gsete valoarea ;
0 dac sistemul tridiagonal nu se poate rezolva;
2 dac valoarea de interpolat nu se afl n interval;
*/
int SPLINE(int ord,
double xi[],
double yi[],
double point,
double *valoare
)
{
static double a[NrMax],b[NrMax],c[NrMax],d[NrMax],der2[NrMax];

Interpolarea

141
int i,cod,loc;
double d1,d2;
if( (point<xi[1])||(point>xi[ord]) )return 2;
/*Pregtesc sistemul tridiagonal pentru aflarea derivatei a doua */
/*Calculez prima derivat n capete */
d1=(yi[2]-yi[1])/(xi[2]-xi[1])-(yi[3]-yi[2])/(xi[3]-xi[2])+(yi[3]-yi[1])
/(xi[3]-xi[1]);
d2=-(yi[ord-1]-yi[ord-2])/(xi[ord-1]-xi[ord-2])+(yi[ord]-yi[ord-1])
/(xi[ord]-xi[ord-1])+(yi[ord]-yi[ord-2])/(xi[ord]-xi[ord-2]);
/*Calculez coeficienii primei linii */
a[1]=0;
b[1]=2*(xi[2]-xi[1]);
c[1]=xi[2]-xi[1];
d[1]=6*( (yi[2]-yi[1])/(xi[2]-xi[1])-d1);
/*Calculez coeficienii liniilor 2...ord-1*/
for(i=2;i<=ord-1;i++)
{
a[i]=xi[i]-xi[i-1];
b[i]=2*(xi[i+1]-xi[i-1]);
c[i]=xi[i+1]-xi[i];
d[i]=6*( (yi[i+1]-yi[i])/(xi[i+1]-xi[i])-(yi[i]-yi[i-1])
/(xi[i]-xi[i-1]) );
}
/* Calculez coeficienii ultimei linii */
a[ord]=xi[ord]-xi[ord-1];
b[ord]=2*(xi[ord]-xi[ord-1]);
c[ord]=0;
d[ord]=6*(d2-(yi[ord]-yi[ord-1])/(xi[ord]-xi[ord-1]));
cod=SolveTridi(ord,a,b,c,d,der2);
if(cod==0)return 0;
/*Calculez coeficienii funciilor Spline locale
Utilizez aceleai variabile ca pentru sistemul tridiagonal */
for(i=1;i<=ord-1;i++)
{
a[i]=(der2[i+1]-der2[i])/( 6*(xi[i+1]-xi[i]));
b[i]=(der2[i]*xi[i+1]-der2[i+1]*xi[i])/(2*(xi[i+1]-xi[i]));
c[i]=( der2[i+1]*pow(xi[i],2)-der2[i]*pow(xi[i+1],2) )
/(2*(xi[i+1]-xi[i]))+(yi[i+1]-yi[i])
/(xi[i+1]-xi[i])-a[i]*pow(xi[i+1]-xi[i],2);
d[i]=(der2[i]*pow(xi[i+1],3)-der2[i+1]*pow(xi[i],3))
/(6*(xi[i+1]-xi[i]))+(yi[i]*xi[i+1]-yi[i+1]*xi[i])
/(xi[i+1]-xi[i])-b[i]*pow( ( xi[i+1]-xi[i]),2)/3;
}
/*Localizez valoarea de interpolat pentru a afla ce funcie i aplic */
loc=1;

Metode numerice n electronic

142

while (point<xi[loc]) loc++;


*valoare=a[loc]*pow(point,3)+b[loc]*pow(point,2)+c[loc]*point+d[loc];
return 1;
}

6.7. INTERPOLAREA FUNCIILOR PERIODICE


Se consider funcia periodic f :[a , b] R cu proprietatea c f ( a ) f ( b) unde
T b a este perioada funciei.
Experimental s-au obinut n valori ale funciei pe perioada [a, b] prezentate n
tabelul 6.5 i se cere o valoare a funciei f ntr-un punct x p [a , b] , dar x p xi ,
i 1,2,..., n .
Tabelul 6.5

x
y

x1 a

x2

x3

y1

y2

y3

-------

x 2n b
y 2n

Pentru determinarea acestei valori se determin un polinom de interpolare a


funciei periodice.
Definiia 6.5. Se numete sistem fundamental de funcii periodice irul de funcii ,
i=0,1,2,...,n definite pe [a , b] , dac: sunt continue, liniar independente pe [a , b] ,
( a ) ( b) pentru orice i =1,2,...,n , iar funcia
n

H ( x ) a i i

a i2 0

cu

(6.65)

i0

i0

are cel mult n rdcini pe [a , b] .


Se face transformarea

2 ( x a )
ba

pentru a transforma intervalul [a , b] n

intervalul 0,2. n acest caz se consider sistemul de funcii periodice fundamental


pe [a , b] .
1 , cos x, sin x, cos 2x, sin 2x, ... , cos nx, sin nx
(6.66)
Propoziia 1: Fie funcia periodic f: 0,2R i punctele ( x i , f ( x i ) ), i=0,1,...,n
unde x i o,2 , x i x j . Atunci polinomul de interpolare a funciei date este:
n

sin

i 0

j 0
j i

sin

I n f ( xi )

x xj
2
xi x j

(6.67)

2
Se observ o analogie ntre polinomul de interpolare al lui Lagrange i polinomul
de interpolare a funciilor periodice (6.67).

6.7.1. ALGORITMUL 6.7. FUNCII PERIODICE


{Variabile

Interpolarea

143
a : limita stng a intervalului, real ;
b : limita dreapt a intervalului, real ;
n : numrul de valori cunoscute ale funciei, ntreg ;
x : abscisele punctelor cunoscute, vector ;
y : ordonatele punctelor cunoscute, vector ;
x : punctul de interpolare a funciei, real;
i,j : contoare, ntregi ;
sum : variabil pentru a reine sumele, real;
prod : variabil pentru a reine produsele, real ;

{T
;
ba

sum=0;
pentru i=0,1,...,n
{prod=1;
pentru j=0,1,...,n dac ji atunci
calculeaz

prod prod

sin T ( x x j )

sin T ( x i x j )

calculeaz
sum=sum+yiprod;
}
valoarea interpolat este sum
}
}

6.7.2. IMPLEMENTAREA ALGORITMULUI 6.7


/* Funcia care implementeaz metoda de interpolare a funciilor
periodice.
Funcia ntoarce valoarea interpolat */
double IFPer(int n,
double x[],
double y[],
double T,
double point)
{
int i,j;
double sum=0,prod;
for(i=0;i<=n;i++)
{
prod=1;
for(j=0;j<=n;j++)
if(j!=i)prod*=sin( pi*(point-x[j])/T )/sin (pi*(x[i]-x[j])/T);
sum+=y[i]*prod;

Metode numerice n electronic

144
}
return sum;
}

6.8. INTERPOLAREA FUNCIILOR DE MAI MULTE


VARIABILE
Vom considera o funcie de dou variabile: f : ER unde ER2 de forma
f g ( x, y ) . Se consider urmtoarele puncte cunoscute ( xi , y j , f ( xi , y j )) pentru
i 0,1,2,..., n i j 0,1,..., n .
Se pune problema determinrii unui polinom de gradul n care s satisfac condiiile
Pn ( xi , yi ) f ( xi , yi ) cu i, j 0,1,2,..., n . Fie polinomul de grad n n dou variabile:
Pn ( x, y ) a 00 a10 x a 01 y a11xy .. a1n xy n

(6.68)

Coeficienii polinomului pot fi pui sub form matriceal astfel:


a 01
a 02 a 03 ... a 0( n 1 ) a 0 n
a 00

a11
a12 a13
0
... a1( n 1)
a10


a( n 2 )0 a( n 2 )1 a( n 2 )2 0
0
0
. ..

0
0
0
...
a( n 1)0 a( n 1)1 0

0
0
0
0
0
...
a n0

(6.69)

( n 1)( n 2)
ecuaii.
2
Aceste ecuaii le putem obine numai din punctele date x i , y i , f ( x i , y i ) care trebuie

Pentru determinarea acestor coeficieni avem nevoie de

s fie tot n numr de

( n 1)( n 2)
.
2

Ca urmare, punctele n care se cunoate funcia este necesar s se dea sub form
triunghiular:
( x0 , y0 )
( x 0 , y1 )
x 0 , y 2 ... x 0 , y n

( x1 , y 0 )
x1 , y1
x1 , y 2 ... 0


(x , y )
0
0
...
x n1 , y1
n 1 0

(x , y )

0
0
0
...
n 0

(6.70)

Interpolarea

145

n acest caz punctele nu sunt aezate pe o curb de gradul n ceea ce conduce la un


determinant 0 , deci la o determinare unic a coeficienilor polinomului (6.68). Se
caut un polinom de gradul n sub forma:
Pn ( x , y ) a 00 a10 ( x x 0 )1 a 01 ( y y 0 )1 a 20 ( x x 0 ) 2

a11 ( x x 0 ) 1 ( y y 0 ) 1 a 02 ( y y 0 ) 2 ... a 0 n ( y y 0 ) n

(6.71)

Aplicm diferenele finite pentru funciile de dou variabile:


ixi yj j f ( x 0 , y 0 ) ixi yj j Pn ( x 0 , y 0 ) a ij h i k j i ! j !

(6.72)

innd cont de formula (6.72) n expresia (6.71) rezult:


a ij

ixi yj j f ( x 0 , y 0 )
h i k j i! j !

Introducnd coeficienii calculai n expresia polinomului (6.71) rezult polinomul de


interpolare pentru funcii de dou variabile:
n

Pn ( x , y )

i i j j f ( x 0 , y 0 )
x y

hi k j i! j !

i, j 0
i jn

i
j
( x x 0 ) ( y y 0 )

(6.73)

Formula se poate extinde la funcii multidimensionale, dar trebuie s fim ateni la


modul de selecie a punctelor n care se alege funcia pentru a putea fi posibil calculul
coeficienilor polinomului de interpolare.
n aplicaii se utilizeaz des pentru interpolarea funciilor de dou variabile,
polinomul lui Lagrange extins. Considerm (n+1)(m+1) puncte distincte n care este
dat funcia f ( xi , y j ), i 0,1,..., n ; j 0,1,..., n. Se caut polinomul P( x, y ) de grad cel mult
n n x i m n y astfel ca: P( xi , y j ) f ( xi , y j ), i 0,1,..., n; j 0,1,2,..., m. Polinomul
lui Lagrange pentru dou variabile are forma:
L( x, y )

x xk
i xk

f ( xi , y j ) x

i 0 j 0

k0
ki

y yk
.
j yk

k0
k j

(6.74)

Pentru acest polinom sunt prezentate n continuare algoritmul i implementarea


algoritmului n limbaj C.

6.8.1. ALGORITMUL 6.8. FUNCII DE DOU VARIABILE


{Variabile
n,m:intregi,numrul de puncte pe Ox i Oy ;
x:vectorul coordonatelor punctelor pe Ox;
y:vectorul coordonatelor punctelor pe y;

Metode numerice n electronic

146

z:matricea valorilor funciei;


pcx:coordonata pe Ox a punctului de interpolare;
pcy:coordonata pe Oy a punctului de interpolare;
i,j,k:intregi,contori;
prodx,prody:produse pariale;
valoare:sume pariale;
{
valoare=0;
pentru i=0 la n
{
prodx=1;
pentru k=0 la n dac k i
calculeaz prodx=(pcx-x[k])/(x[i]-x[k]);
pentru j=0 la m
{
prody=1;
pentru k=0 la m dac kj
calculeaz prody=(pcy-y[k])/(y[j]-y[k]);
calculeaz valoare=z(i,j)*prodx*prody;
}
}
funcia n punctul de interpolare este valoare;
}
6.8.2. IMPLEMENTAREA ALGORITMULUI 6.8
double Lagrange2(int n, int m,
double x[],
double y[],
double z[][NMAX],
double pcx,
double pcy
)
{
int i,j,k;
double prodx,prody,valoare;
valoare=0;
for(i=0;i<=n;i++)
{
prodx=1;
for(k=0;k<=n;k++)if(k!=i)
prodx*=(pcx-x[k])/(x[i]-x[k]);
for(j=0;j<=m;j++)
{

Interpolarea

147
prody=1;
for(k=0;k<=m;k++)
if(k!=j)
prody*=(pcy-y[k])/(y[j]-y[k]);
valoare+=z[i][j]*prodx*prody;
}
}
return valoare;
}

6.9. APLICAII
1. Se consider datele experimentale obinute pentru caracteristica rezistenei
termice jonciune termic R jt [ C / W ] funcie de lungimea terminalului l[ inch ],
pentru o dioda Zener prezentate n tabelul urmtor:
Tabelul 6.6

l
[inch]
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
Rjt
[oC/w] 70
140
175 200
225
250
265
280 290
300
Se cere s se determine puncte ntre valorile date pentru o reprezentare grafic ct mai
precis.
S-a determinat valoarea funciei pentru l=0.45 inch. S-au obinut pentru rezistena
termic jonciune terminal urmtoarele valori:
cu metoda lui Lagrange
238.3757 C / W ;
cu metoda lui Newton de spea nti
238.3770 C / W ;
cu metoda lui Newton de spea a doua 238.3783 C / W ;
cu metoda lui Aitken
238.3757 C / W ;

7
METODE DE OPTIMIZARE*
Metodele de optimizare se clasific, n raport cu problema care se pune pentru
funcia int sau scop, astfel:
1. Metode ce determin expresia analitic a funciei, care aproximeaz cel mai bine
o funcie tabelat dat prin puncte;
2. Metode ce determin diferii parametri ai funciei scop (int), pentru a obine un
extrem al funciei.

7.1. METODA CELOR MAI MICI PTRATE


Presupunem c avem o funcie definit printr-un tabel de valori. Dac tabelul este
obinut n urma unor msurtori fizice, atunci elementele lui pot avea erori. Elementele
care difer mult de celelalte pot fi eliminate. Problema care se pune este s
determinm funcia analitic care aproximeaz cel mai bine datele din tabel sau curba
care trece prin punctele tabelului.
Considerm c funcia tabelat poate fi aproximat cu funcia: y f x .
Deoarece funcia tabelat este cunoscut numai n anumite puncte, n numr de m, n
aceste puncte avem urmtoarele erori:

e y y y f x
1
1
1
1
1
e y y y f x
2
2
2
2
2

em y m y m y m f x m

(7.1)

care ar putea fi calculate dac am cunoate funcia y f x .


Pentru determinarea funciei, vom anticipa nti o funcie care s se asemene foarte
mult cu curba realizat cu punctele tabelului. Aceast funcie poate fi: liniar,
hiperbolic, logaritmic, exponenial geometric, trigonometric etc.
Al doilea pas este determinarea funciei din condiiile ca suma abaterilor:
________________

*)

Bibliografie: [7], [14],[15],[20]


m

e = yi yi
i=1

(7.2)

149

Metode de optimizare

s fie minim.
n cazul unei drepte dat prin dou puncte, abaterea (7.2) este nul pentru toate
dreptele ce trec prin mijlocul segmentului format de cele dou puncte. Ca urmare
problema nu este unic determinat. Aceast problem se elimin dac considerm
valoarea absolut a erorilor:
m

e yi y i

(7.2a)

i=1

Inconvenientul n cazul formulei (7.2a) l prezint funcia valoare absolut care nu are
derivat n punctele n care se anuleaz funcia. Pentru eliminarea acestor
inconveniente s-a trecut la suma ptratelor erorilor, pe care o notm cu E.
m

i=1

E yi yi

(7.3)

Metoda de optimizare a primit denumirea de metoda celor mai mici ptrate, conform
formulei (7.3) pentru c determin funcia y f x pentru eroarea maxim i mai
poart denumirea i de regresie deoarece problema este de deducere a funciei
cunoscnd valorile ei ntr-un anumit numr de puncte.

7.1.1. REGRESIA LINIAR


Se consider funcia tabelat:
Tabelul 7.1

x1

x2

x3

x4

y1

y2

y3

y4

..
..

xm

ym

unde m reprezint numrul de msurtori sau de valori ale funciei. Se cere s se


determine funcia liniar de forma general
y ax b
(7.4)
care s aproximeze cel mai bine funcia tabelat (tabelul 7.1) asfel ca eroarea:
m

E axi b y i

(7.5)

i=1

s fie minim. Necunoscutele a i b se determin din condiia de minim a lui E care


se realizeaz pentru anularea derivatelor pariale n raport cu a i b ale lui E:
m
E
a 2axi b y i 1 0
i=1

(7.6)
m
E
2axi b y i xi 0

a i=1

Rezult sistemul n necunoscutele a i b :

150

Metode n electronic
m

m
m b+ x i a= y i
i=1 i=1

m
m

m
x i b+ x i2 a= x i y i
i=1 i=1 i=1

(7.7)

Soluiile sistemului liniar (7.7) n a i b sunt:


b

i=1

i=1

i=1

i=1

x i2 y i x i x i y i
m

m x i y i x i

yi

i=1

x i2

xi
i=1
m

i=1

i=1

i=1
2

m
m x i2 x i
i=1
i=1
m

(7.8)

(7.9)

Numitorii expresiilor lui a i b se anuleaz numai dac x i sunt identice, caz exclus.
nlocuind valorile lui a i b n ecuaia (7.4) avem funcia liniar care aproximeaz cel
mai bine funcia tabelat dat (7.1).

7.1.1.1. Algoritm 7.1. Regresia liniar


{Variabile
x:abscisele funciei,vector;
y:ordonatele funciei,vector;
m: numrul experienelor, ntreg;
sx: variabila pentru suma absciselor, real;
sy: variabila pentru suma ordonatelor, real;
sxx:variabila pentru sumele de forma x2, real;
sxy: variabila pentru sumele de forma xy, real;
a:coeficientul lui x, real;
b: termenul liber, real;
i: contor, ntreg;
{
sx= 0; sy = 0; sxy = 0; sxx = 0;
pentru i = 1... m
{
calculeaz sx= sx+xi;
calculeaz sy = sy+yi;
calculeaz sxy= sxy+xi*yi;
calculeaz sxx = sxx+xi*xi;
}

151

Metode de optimizare

calculeaz

a=

calculeaz b =

m s xy -s x s y
m s xx -s x s x
s xx s y -s x s xy
m s xx -s x s x

;
;

}
Funcia este y = ax +b;
}

7.1.1.2. Implementarea algoritmului 7.1


/*Funcia ce implementeaz regresia liniar */
void RegLin(int nrp,
double x[],
double y[],
double *coef1,
double *coef2)
{
double sx=0,sy=0,sxx=0,sxy=0;
int i;
for (i=1;i<=nrp;i++)
{
sx+=x[i];
sy+=y[i];
sxy+=x[i]*y[i];
sxx+=x[i]*x[i];
}
*coef1=(nrp*sxy-sx*sy)/(nrp*sxx-sx*sx);
*coef2=(sy*sxx-sx*sxy)/(nrp*sxx-sx*sx);
}

7.1.2. REGRESIA POLINOMIAL


Dac regresia liniar nu este satisfctoare se caut o funcie polinom de un anumit
grad (2, 3, 4n).
Fie funcia dat n tabelul (7.1). Considerm c reprezentarea grafic a acestei
funcii se aseamn foarte mult cu curba unui polinom de gradul n de forma:
y a n x n a n 1 x n 1 ...... a1 x a 0
(7.10)
Notm cu y i expresia:
y i = a n x in a n-1 x in-1 ... a1 x i a 0

Se minimizeaz funcia int:

(7.11)

152

Metode n electronic
m

E = yi a n xin -a n-1 xin-1 ... a1 xi a 0


i=1

unde m reprezint numrul de valori ale funciei tabelate.


Necunoscutele sunt: a n, a n-1,..., a 0.
Se deriveaz n raport cu necunoscutele (7.13) i se obine sistemul:

(7.12)
(7.13)

m
m

ma 0 x i a1 x i2 a 2 x ik a k x in a n y i

i=1
i=1
i=1
i=1

m
m
m
m
m

x i a 0 x i2 a1 x i3 a 2 x ik+1 a k x in+1 a n x i y i

i=1
i=1

i=1
i=1
i=1


m
m
m
m
m
x p a x p+1 a x p+2 a x p+k a x p+n a x p y
i
i
i
i
k
0
i i
1
2

i=1

i=1

i=1

i=1 i
n
i=1

_____________________________________________________
m
m
m
m
m
x n a x n+1 a x n+2 a x n+k a x 2 n a x n y
i
i
i
i
k
0
i i
1
2
i=1
i=1

i=1 i n

i=1

i=1

(7.14)
Sistemul obinut este un sistem liniar n necunoscutele a 0, a 1, a 2.,..., a n i se rezolv
cu una dintre metodele cunoscute n capitolul 3.
7.1.2.1. Algoritmul 7.2.Metoda polinomial
{Variabile
X: abscisele funciei, vector;
Y: ordonatele funciei, vector;
m: numrul de puncte cunoscute ale funciei, ntreg;
n: gradul polinomului, ntreg;
{
pentru i = 1. ... n+1
{
B[i] = 0;
pentru j = 1,....,n+1 A[i] = 0
}
pentru i = 1. ... n+1
{
pentru k = 1. ... m calculeaz B[i] = B[i]+ yk *pow(xk, i-1);
pentru j = 1,....,n+1
pentru k = 1. ... m calculeaz A[i,j] = A[i,j]+ pow(xk, i+j-2);
}
Metoda_Rez_Sist.(n+1,A,B,Sol); (*se rezolv sistemul*)
}
coeficienii polinomului sunt Sol;
}

153

Metode de optimizare

7.1.2.2. Implementarea algoritmului 7.2


/* Funcia ntoarce:
0 dac gradul polinomului este mai mare ca numrul de puncte
1 n caz de succes
*/
int RegPol(int nrp,
double xx[],
double yy[],
int grdp,
double coef[])
{
static double mat[NrMax][NrMax],b[NrMax];
int i,j,k,putere;
if (nrp<=grdp) return 0;
for(i=1;i<=grdp+1;i++)
for(j=1;j<=grdp+1;j++)
{
mat[i][j]=0;
putere=i+j-2;
for(k=1;k<=nrp;k++)mat[i][j]+=pow(xx[k],putere);
}
for(i=1;i<=grdp+1;i++)
{
b[i]=0;
putere=i-1;
for(k=1;k<=nrp;k++)b[i]=b[i]+yy[k]*pow(xx[k],putere);
}
GAUSS(grdp+1,mat,b,coef);
return 1;
}

7.1.3. REGRESIA HIPERBOLIC


Fie funcia numeric dat n tabelul 7.1. Reprezentarea grafic prin puncte a
acestei funcii se aseamn foarte bine cu o funcie hiperbolic. Se pune problema
determinrii funciei hiperbolice
y

1
ax+b

(7.15)

care aproximeaz cel mai bine funcia numeric. Pentru comoditatea calculului se
inverseaz funcia hiperbolic i se construiete funcia eroare:

154

Metode n electronic
m 1

E ax i b
i=1 y i

(7.16)

Prin derivare n raport cu a i dup aceea cu b se obine sistemul liniar:


m 1

m
mb+ xi a=

i=1 i=1 yi

m
m
m

x b+ x 2 a= xi
i
i
i=1 i=1 i=1 yi

(7.17)

Soluiile sistemului (7.17) sunt:


m

xi

i=1

i=1

m x
1
i
m
yi
i=1 y i
2

x i m x i2
i=1
i=1
m
1 m 2 m xi m

xi xi
i=1 y i i=1
i=1 y i i=1
m

i=1

x i2

m
xi
i=1

(7.18)

(7.19)

nlocuim valorile lui a i b n funcia hiperbolic (7.15) i se obine funcia care


aproximeaz cel mai bine funcia numeric din tabelul 7.1.

7.1.3.1. Algoritm 7.3. Regresia hiperbolic


{Variabile
x:abscisele funciei numerice, real;
y:ordonatele funciei numerice, real;
m: numrul experienelor, ntreg;
sx: variabila ce conine sumele absciselor, real;
sy: variabila ce conine suma inverselor ordonatelor, real;
sxx:variabila ce conine ptratul absciselor, real;
sxy: variabila ce conine suma raportului dintre abscise i ordonate, real;
a,b:coeficienii funciei hiperbolice, real;
i: contor, ntreg;
{
sx= 0; sy = 0; sxy = 0; sxx = 0;
pentru i = 1... m
{
calculeaz sx= sx+xi;
calculeaz sy = sy+

1
;
yi

calculeaz sxy= sxy+

xi
;
yi

calculeaz sxx = sxx+xi*xi;

155

Metode de optimizare

}
calculeaz a =
calculeaz

b=

Funcia este y

s x s y -m s xy
m s xx -s x s x
s xx s y -s xy s x

m s xx -s x s x

1
;
ax+b

7.1.3.2. Implementarea algoritmului 7.3


/* Regresia hiperbolic */
Programul principal poate fi realizat
de ctre cititor ca un exerciiu. n continuare este dat funcia:
/* Funcia ce implementeaz regresia hiperbolic */
void RegHip(int nrp,
double *x,
double *y,
double *coef1,
double *coef2)
{
double sx=0,sy=0,sxx=0,sxy=0;
int i;
for (i=1;i<=nrp;i++)
{
sx+=x[i];
sy+=1/y[i];
sxy+=x[i]/y[i];
sxx+=x[i]*x[i];
}
*coef1=(nrp*sxy-sx*sy)/(nrp*sxx-sx*sx);
*coef2=(sy*sxx-sx*sxy)/(nrp*sxx-sx*sx);
}

7.1.4. REGRESIA EXPONENIAL


Se constat c funcia numeric din tabelul 7.1 reprezentat grafic, se aseamn
foarte mult cu o exponenial. Considerm funcia exponenial de forma general:
y=a b x
(7.20)

156

Metode n electronic

n care a i b sunt constante pozitive.


Pentru un calcul comod al constantelor a i b se logaritmeaz funcia (7.20)
y ln a x ln b

(7.21)

i se determin constantele asfel ca eroarea:


m

E ln a+xi ln b ln y i

(7.22)

i=1

s fie minim.
Prin derivarea parial a funciei E n raport cu a i b se obine urmtorul
sistem:
m

m
m ln a+ xi ln b= ln y i

i=1
i=1
(7.23)
m
m
m

2
xi ln a+ xi ln b= xi ln y i
i=1
i=1
i=1
Soluiile sistemului obinut (7.23) sunt:
m
m
m

ln y x 2 x ln y x
i
i
i
i i
i=1
i=1
i=1

a exp

2
m
m

m x i x i

i=1
i=1

m
m

m
m x i ln y i x i ln y i
i=1
i=1
i=1

b exp

m
m

2
m x i x i

i=1
i=1

(7.24)

(7.25)

7.1.4.1. Algoritm 7.4. Regresia exponenial


{Variabile
x:abscisele funciei numerice, real;
y:ordonatele funciei numerice, real;
m: numrul absciselor funciei, ntreg;
sx:variabil a sumei absciselor, real;
sxx: variabil a sumei ptratelor absciselor, real;
sln y: variabil a sumei logaritmilor din ordonate, real;
sxln y:variabil a sumei absciselor nmulite cu logaritmul ordonatelor,
real;
{
sx= 0; sln y = 0; sxln y = 0; sxx = 0;
pentru i = 1... m
{
calculeaz sx= sx+xi;

157

Metode de optimizare

calculeaz sxx = sxx+xi*xi;


calculeaz slny = slny+ln yi;
calculeaz sxln y= sxln y+ xiln yi;

sln y s xx -s x s x ln y
;
m s xx -s x s x
ms x ln y -s x ln y

calculeaz b = exp
;
m s xx -s x s x

calculeaz a = exp

Funcia este y = abx ;


}
7.1.4.2. Implementarea algoritmului 7.4
/* (Regresia exponenial )*/
/*Funcia ce implementeaz regresia exponenial */
void RegExp(int nrp,
double x[],
double y[],
double *coef1,
double *coef2)
{
double sx=0,sy=0,sxx=0,sxy=0;
int i;
for (i=1;i<=nrp;i++)
{
sx+=x[i];
sy+=log(y[i]);
sxy+=x[i]*log(y[i]);
sxx+=x[i]*x[i];
}
*coef2=exp((nrp*sxy-sx*sy)/(nrp*sxx-sx*sx));
*coef1=exp((sy*sxx-sx*sxy)/(nrp*sxx-sx*sx));
}

7.1.5. REGRESIA GEOMETRIC


Dac funcia numeric din tabelul 7.1 se aseamn cu o funcie de tip geometric,
vom cuta s determinm funcia de forma:
y ax b
(7.26)
care s aproximeze cel mai bine funcia numeric.
Se logaritmeaz cel mai bine funcia (7.26) i se construiete funcia:

158

Metode n electronic
m

E ln a+b ln xi ln y i

(7.27)

i=1

Se calculeaz valorile lui a i b asfel ca funcia E s fie minim. Prin derivarea


parial n raport cu a i b a expresiei E i egalarea derivatelor cu zero se obine
urmtorul sistem n necunoscutele a i b:

m
m
m ln a+b ln xi = ln y i

i=1
i=1
m
2
m
m

ln x ln a+b ln x = ln x ln y

i
i
i
i
i=1
i=1
i=1

Rezolvnd sistemul se obin urmtoarele valori pentru a i b:


m

m
m 2
m
ln y i ln x i ln x i ln x i ln y i

i=1
i=1
i=1
i=1
a exp
2
m
m


m ln 2 x i ln x i

i=1
i=1
b

m
m
m ln y i ln x i ln x i ln y i
i=1

i=1
i=1

m
m
m ln 2 x i ln x i

i=1
i=1

(7.28)

(7.29)

(7.30)

Cu aceste valori funcia y ax b aproximeaz cel mai bine funcia tabelat (7.1) care
se aseamn cel mai bine cu o funcie de tip geometric.

7.1.5.1. Algoritmul 7.5. Regresia geometric


{ Variabile
x:abscisele funciei numerice, vector;
y:ordonatele funciei numerice, vector;
m: numrul de abscise, ntreg;
slnx: variabil a sumei logaritmilor absciselor, real;
sln y: variabil a sumei logaritmilor ordonatelor, real;
slnxlny: variabil sumei produsului logaritmilor absciselor i a
logaritmilor ordonatelor, real;
slnxlnx: variabila sumei ptratelor logaritmilor absciselor, real;
a,b: coeficienii, real;
i: contor, ntreg;
{
slnx = 0; sln y = 0; slnxlny = 0; slnxlnx= 0;
pentru i = 1... m
{
calculeaz slnx= slnx+ln(xi );
calculeaz slnxlnx = slnxlnx+ln(xi)*ln(xi);
calculeaz slny = slny+ln yi;

159

Metode de optimizare

calculeaz slnxlny=slnxlny +ln(xi )* ln(yi);


}
calculeaz

calculeaz

sln y sln

a = exp

b=

m sln

x ln x -sln x
x ln

sln

x -sln x sln

m s ln x ln y -s ln x s ln y
m s ln x ln x -s ln x s ln x

x ln y
x

Funcia este y = axb ;


}

7.1.5.2. Implementarea algoritmului 7.5


/*Funcia ce implementeaz regresia geometric */
void RegGeo(int nrp,
double x[],
double y[],
double *coef1,
double *coef2)
{
double sx=0,sy=0,sxx=0,sxy=0;
int i;
for (i=1;i<=nrp;i++)
{
sx+=log(x[i]);
sy+=log(y[i]);
sxy+=log(x[i])*log(y[i]);
sxx+=log(x[i])*log(x[i]);
}
*coef2=(nrp*sxy-sx*sy)/(nrp*sxx-sx*sx);
*coef1=exp((sy*sxx-sx*sxy)/(nrp*sxx-sx*sx));
}

7.1.6. REGRESIA TRIGONOMETRIC


Se consider funcia numeric dat n tabelul 7.1 i funcia trigonometric de
forma:
y a b cos x
(7.31)
care aproximeaz cel mai bine funcia numeric.
Se determin constantele a i b asfel ca funcia de a i b
m

E y i a-b cos x i
I=1

s fie minim.

(7.32)

160

Metode n electronic

Prin egalarea cu zero a derivatelor pariale n raport cu a i b ale funciei E se obine


urmtorul sistem n necunoscutele a i b :

m
m
ma+ cos x i b= y i

i=1
i=1

m
m
m

cos x a+ cos 2 x b= y cos x


i
i
i
i=1
i=1
i=1 i

(7.33)

Soluiile sistemului (7.32) sunt:


a

= 2 f =

m m
m
m

2
y i cos x i cos x i y i cos x i
i=1 i=1
i=1
i=1

m
m

m cos 2 x i cos x i
i=1
i=1

m
m
m
m y i cos x i cos x i y i
i=1
i=1
i=1

2
T

m
m

m cos 2 x i cos x i
i=1
i=1

(7.34)

(7.35)

unde f -frecvena, - pulsaia, iar T -perioada. se stabilete

funcie de periodicitatea funciei numerice date.

7.1.6.1. Algoritmul 7.6. Regresia trigonometric


{ Variabile
x:abscisele funciei numerice, vector;
y:ordonatele funciei numerice, vector;
m: numrul absciselor funciei numerice, ntreg;
: pulsaia, real;
s y: suma ordonatelor funciei numerice, real;
scos 2x: suma ptratelor cosinusurilor din abscise, real;
scos x: suma cosinusurilor din abscise, real;
sycosx:suma produsului ordonatelor cu cosinusul absciselor
corespunztoare, real;
a,b: coeficienii funciei, real;
i: contor, ntreg;
{
s y = 0; scos 2x = 0; scos x = 0; sycos x = 0;
pentru i = 1... m
{
calculeaz s y = s y + yi ;
calculeaz scos 2x = scos 2x + cos x i * cos x i ;
calculeaz scos x = scos x + cos x i ;

161

Metode de optimizare

calculeaz sycos x = sycos x + yi* cos x i ;


}
calculeaz

a=

calculeaz

b=

s y scos

s y cos x

2 x -scos x

m scos

2 x -scos x

scos x

m s y cos x -scos x s y
m scos

2 x -scos x

scos x

}
Funcia este f a+b cos x ;
}

7.1.6.2. Implementarea algoritmului 7.6


void reg_trig( int n,
double x[],
double y[],
double ,w
double *coef1,
double *coef2)
{
int i;
double sx=0,sy=0,sxx=0,sxy=0;
for(i=1;i<=n;i++)
{
sx+=cos(w*x[i]);
sy+=y[i];
sxy+=y[i]*cos(w*x[i]);
sxx+= cos(w*x[i])*cos(w*x[i]);
}
*coef1=(sy*sxx-sx*sxy)/(n*sxx-sx*sx);
*coef2=(n*sxy-sx*sy)/(n*sxx-sx*sx);
}

7.1.7. REGRESIA MULTIPL


Aceast regresie se refer la funciile de mai multe variabile. Considernd o funcie
numeric de n variabile y f ( x1 , x 2 ,.... , x n ) i un tip de funcie analitic de n
variabile care se aseamn cu cea numeric, se pune problema determinrii funciei
analitice asfel ca ea s aproximeze cel mai bine funcia numeric. Aceast funcie se
determin prin minimizarea sumei ptratelor erorilor n punctele funciei numerice.
Pentru exemplificare considerm funcia de dou variabile numeric ( x, y , z ) unde
z g ( x , y ) . Suprafaa punctelor z se poate asemna cu un plan, hiperboloid de rotaie,
elipsoid de rotaie, cilindru, con etc.
Vom considera funcia numeric dat n figura 7.1

162

Metode n electronic

z2n

z1n

z3n

z4n

znm

yn
z14

z24

z34

z44

zm4

z13

z23

z33

z43

zm3

z12

z22

z32

z42

zm2

z11

z21

z31

z41

zm1

y4
y3
y2
y1
O

x1

x2

x
x3

x4

xm

Fig.7.1.Reprezentarea funciei multiple.

Considerm c punctele z1 , z 2 ,..., z n se afl aproximativ pe un plan:


(7.36)
z Ax By C
Se pune problema determinrii acestui plan, adic a valorilor constantelor A, B, C
astfel ca planul s aproximeze cel mai bine funcia numeric dat n tabelul 7.2. Se
construiete funcia sumelor ptratelor erorilor n punctele reelei:
m n

E zij Ax i By j C
i=1 j=1

(7.37)

Prin egalarea derivatelor pariale ale funciei E n raport cu necunoscutele A, B, C,


rezult un sistem liniar funcie de aceste necunoscute:
m n

m
m
mnC+ x i nA+ y j mB= z ij

i=1
j=1
i=1 j=1

m
m
m m
m n

x i nC+ x i nA+ x i y j B= x i z ij
i=1 j=1
i=1 j=1
i=1
i=1
n
m n
m n

y j mC+ x i y j A+ y 2j mB= y j z ij
j=1
i=1 j=1

j=1
i=1 j=1

(7.38)

Utiliznd una dintre metodele numerice de rezolvare a sistemelor liniare din capitolul
3 se determin A, B, C, deci planul cutat.

7.1.7.1. Algoritmul 7.7. Regresia multipl

Metode de optimizare

{Variabile
x: argumentele pe axa Ox a funciei numerice, vector;
y: argumentele pe axa Oy a funciei numerice, vector;
z: valorile funciei numerice, matrice;
m: numrul de argumente pe Ox, ntreg ;
n: numrul de argumente pe Oy, ntreg;
sx : sumele argumentelor de pe Ox, real;
sy: suma parial a argumentelor de pe Oy, real;
sxx: suma parial a ptratelor argumentelor x, real;
sxy: suma parial a produselor argumentelor, real;
syy: suma parial a ptratelor argumentelor y, real;
sz,sxz,syz: sume pariale ale termenilor liberi ai sistemului;
i: contor, ntreg;
{
sx= 0; sy = 0; sxy = 0; sxx = 0; syy = 0; sxz=0; syz=0 ;sz=0;
pentru i = 1,..., m
pentru j=1,..,m
calculeaz sx= sx+xi;
calculeaz sxx = sxx+xi*xi;
calculeaz sy = sy+ yi;
calculeaz syy = syy + yi * yi;
calculeaz sxy= sxy+ xi*yi;
calculeaz sz=sz+zij; calculeaz sxz=sxz+xi*zij;
calculeaz syz=syz+yj*zij;
}
{ METODA (n,m, sx; sy; sxy; sxx; syy, SOL ); // rezolv sistemul
}
Planul este z = Ax + By + C
}

7.1.7.2. Implementarea algoritmului 7.7


/* Funcia ntoarce -1 n caz de eroare 0 altfel */
int reg_mul( int m, /* pe Ox */
int n, /* pe Oy */
double x[],
double y[],
double z[][NMAX],
double *coef1,
double *coef2,
double *coef3)
{
int i,j;
double mat[4][4], tl[4],det,det1,det2,det3;
for(i=1;i<=3;i++)
{

163

164

Metode n electronic
tl[i]=0;
for(j=1;j<=3;j++) mat[i][j]=0;
}
mat[1][1]=n*m;
for(i=1;i<=m;i++)
{
mat[1][2]+=n*x[i];
mat[2][2]+=n*x[i]*x[i];
}
for(j=1;j<=n;j++)
{
mat[1][3]+=m*y[j];
mat[3][3]+=m*y[j]*y[j];
}
for (i=1;i<=m;i++ )
for(j=1;j<=n;j++)
{
mat[2][3]+=x[i]*y[j];
tl[1]+=z[i][j];
tl[2]+=x[i]*z[i][j];
tl[3]+=y[j]*z[i][j];
}
mat[2][1]=mat[1][2];
mat[3][1]=mat[1][3];
mat[3][2]=mat[2][3];
det=mat[1][1]*mat[2][2]*mat[3][3]+mat[2][1]*mat[3][2]*mat[1][3

]+
mat[1][2]*mat[2][3]*mat[3][1]-mat[3][1]*mat[2][2]*mat[1][3]mat[1][1]*mat[3][2]*mat[2][3]-mat[2][1]*mat[1][2]*mat[3][3];
if (det==0 ) return -1;
det1=tl[1]*mat[2][2]*mat[3][3]+tl[2]*mat[3][2]*mat[1][3]+
mat[1][2]*mat[2][3]*tl[3]-tl[3]*mat[2][2]*mat[1][3]tl[1]*mat[3][2]*mat[2][3]-tl[2]*mat[1][2]*mat[3][3];
det2=mat[1][1]*tl[2]*mat[3][3]+mat[2][1]*tl[3]*mat[1][3]+
tl[1]*mat[2][3]*mat[3][1]-mat[3][1]*tl[2]*mat[1][3]mat[1][1]*tl[3]*mat[2][3]-mat[2][1]*tl[1]*mat[3][3];
det3=mat[1][1]*mat[2][2]*tl[3]+mat[2][1]*mat[3][2]*tl[1]+
mat[1][2]*tl[2]*mat[3][1]-mat[3][1]*mat[2][2]*tl[1]mat[1][1]*mat[3][2]*tl[2]-mat[2][1]*mat[1][2]*tl[3];
*coef1=det1/det;
*coef2=det2/det;
*coef3=det3/det;
return 0;
}

165

Metode de optimizare

7.2. OPTIMIZAREA NELINIAR FR RESTRICII


n cadrul acestui paragraf vor fi studiate dou metode pentru aflarea minimului
unei funcii de n variabile n lipsa relaiilor de restricie. In general, problemele de
minimizare sunt cu relaii de restricie, dar aceste probleme pot fi reduse la probleme
de optimizare fr restricii ntr-o serie de aplicaii.
n condiiile n care nu sunt restricii, funcia int
F ( X ) F ( x1 , x 2 ,..., x n )
(7.39)
care are derivatele pariale continue, are un minim local ntr-un punct X k dac este
ndeplinit inegalitatea:
F( X k ) F( X )
(7.40)
pentru orice vector X din vecintatea lui X k .
Din analiza matematic cunoatem condiia necesar pentru ca o funcie F ( X ) s aib
un minim ntr-un punct X din domeniul de definiie al funciei:
-existena i rezolvabilitatea sistemului
F(x)
(7.41)
0 , i 1,2 ,...,n;
xi
-matricea
2 F ( x) 2 F ( x) 2 F ( x)
...

2
x1 x1 x 2 x1 x n
J
2

2
2
F ( x) F ( x) F ( x )
...
x x x x
x n2
2
n
n 1

(7.42)

s fie pozitiv definit.


Dintre metodele de optimizare neliniar fr restricii amintim: metode aleatoare de
cutare, metode de cutare unidirecional i metode de gradient.
Metodele aleatoare de cutare au la baz o schimbare aleatoare a
componentelor vectorului X, pentru care se calculeaz valoarea funciei F(X) i se
compar cu valoarea precedent a funciei.
Metodele de cutare unidimensional constau n modificarea succesiv a
componentelor vectorului i compararea valorilor funciei n punctele respective.
Metodele de gradient efectueaz modificarea simultan a componentelor
vectorului X, n aa fel nct s rezulte o evoluie a funciei F(X) opus gradientului.
Aceste metode se bazeaz pe generarea aleatoare a unor numere ntr-un domeniu
prestabilit.

7.2.1. METODE ALEATOARE DE CUTARE


Procesul este iterativ i pentru fiecare etap se genereaz o succesiune de numere
aleatoare avnd o densitate de probabilitate uniform n domeniul de variaie admis, cu
care se modific componentele vectorului.

166

Metode n electronic

Metoda drumului aleator, una dintre metodele des utilizate, const n modificarea
vectorului de poziie pentru noul punct astfel:
(7.43)
X k 1 X k r
unde r este vectorul unitate care are direcia aleatoare, X k este vectorul de poziie al
punctului anterior i un scalar. Se calculeaz valoarea funciei n noul punct i se
compar cu valoarea funciei n vechiul punct. Dac, dup un anumit numr de iteraii
valoarea lui F nu se micoreaz, se reduce scalarul pn ce valoarea lui devine mai
mic dect o eroare de calcul dat, er > 0.

7.2.1.1. Algoritmul 7.8. Metoda drumului aleator


{ Variabile
X:vectorul de poziie al punctului curent;
alfa:scalarul, real;
er:eroarea de calcul, real;
sol:souia optimizrii, real;
i:contor, ntreg;
minim:minimul dintre valorile funciilor, real;
valcurent:valoarea minim curent a funciei, real;
xcurent[2];valoarea anterioar i curent a abscisei punctului, real;
maxiter:numrul maxim de iteraii, ntreg;
{
maxiter=1000;
atta timp ct ( alfa0>eps )
{contor=0
minim=F(x0[0],x0[1]);
calculeaz
xcurent[0]=x0[0]+alfa0*r;
xcurent[1]=x0[1]+alfa0*r;
val_curenta=F(xcurent[0],xcurent[1]);
ii+1;
}atta timp ct ((contor<=maxiter) i (valcurenta>minim) );
dac (valcurenta<minim)
{
minim=valcurenta;
x0[0]=xcurent[0];
x0[1]=xcurent[1];
}
dac (contor>maxiter)alfa0-=0.001;
}
sol[0]=x0[0];
sol[1]=x0[1];
stop
}

Metode de optimizare

167

7.2.1.2. Implementarea algoritmului 7.8


int cutare_aleatoare( double (*f)( double, double),
double x0[],
double gama0,
double eps,
double rez[])
{
double minim,val_curenta,x_curent[2];
int contor,maxiter;
maxiter=1000;
while( gama0>eps )
{ contor=0
minim=f(x0[0],x0[1]);
do{
x_curent[0]=x0[0]+gama0*rand(101)/100*pow(-1,rand(101) % 2);
x_curent[1]=x0[1]+gama0*rand(101)/100*pow(-1,rand(101) % 2);
val_curenta=f(x_curent[0],x_curent[1]);
contor++;
}while ((contor<=maxiter) && (val_curenta>minim) );
if (val_curenta< -1e10) return 1;
if(val_curenta<minim)
{ minim=val_curenta;
x0[0]=x_curent[0];
x0[1]=x_curent[1];
}
if (contor>maxiter)gama0-=0.001;
}
rez[0]=x0[0];
rez[1]=x0[1];
return 0;
}

7.2.2. METODA CUTRII UNIDIMENSIONALE


Aceast metod determin minimul unei funcii F ( X ) prin modificarea
componentelor vectorului X pe rnd, ncepnd cu prima component. Se modific
prima component atta timp ct se obine o valoare mai mic a funciei n punctul
curent dect n cel precedent. Cnd aceast condiie nu mai este ndeplinit se trece la
urmtoarea component a vectorului X i se procedeaz la fel pn se baleiaz toate
componentele vectorului considernd, n acest caz, c s-a realizat un ciclu. Se poate

168

Metode n electronic

ncepe un nou ciclu lund ca punct iniial minimul obinut. La fiecare iteraie se
determin un nou punct funcie de precedentul asfel:
X k 1 X k pas E k
(7.44)
unde E k reprezint vectorul E k =(0,0, ,1,,0), cifra 1 fiind pe locul k, k=0,1,,n,
iar pas reprezint pasul cu care se modific componentele. Dup un ciclu ncheiat se
trece la un nou ciclu cu vectorul iniial cel pentru care s-a obinut minimul n ciclul
ncheiat (precedent), lund un nou pas mai mic, obinut din pasul precedent nmulit cu
o raie subunitar. Se continu iteraia pn cnd pas< sau numrul de iteraii
depete un numr maxim dat. reprezint eroarea de calcul a punctului de minim.

7.2.2.1. Algoritmul 7.9. Metoda cutrii unidimensionale


{Variabile
X:vectorul coordonetelor punctelor;
pas:pasul de modificare al cooronatelor, real;
E: maticea unitate de ordinul n ce are pe orizontal vectorii E k ;
k:contor, ntreg;
minimcurent:minimul obinut pn la pasul respectiv, real;
Maxiter:numrul maxim de iteraii, ntreg;
t:valoare subunitar cu care se multiplic pasul, real;
p:valoarea iniial a pasului, real;
{Maxiter=1000;
t=0.1;
repet
pas=p;
minimcurent=F(X[0],X[1]);
pentru k=1 pn la n calculeaz
X[1]=X[0]+pas* E k ;
valcurent=minimcurent;
p=p*t;
pn cnd pas< er;
}
minimul este valcurent;
}

7.2.2.2. Implementarea algoritmului 7.9


int cutare_unidimensional( double (*f)( double, double),
double x0[],
double pas,
double eps,
double rez[])

Metode de optimizare

{
double min_prec,min_curent,min_ant;
int i,nrp,st,dr;
min_curent=f(x0[0],x0[1]);
do
{
min_ant=min_curent;
for(i=0;i<2;i++)
{
nrp=0;
st=0;
dr=1;
do
{
nrp++;
x0[i]+=-st*pas+dr*pas;
min_prec=min_curent;
min_curent=f(x0[0],x0[1]);
if ( (nrp==1) && (min_curent>min_prec) )
{
x0[i]-=2*pas;
nrp++;
min_curent=f(x0[0],x0[1]);
st=1;
dr=0;
}
}
while ( (min_curent<min_prec) );
x0[i]+=st*pas-dr*pas;
min_curent=f(x0[0],x0[1]);
}
if (min_curent<-1e10) {
rez[0]=x0[0];
rez[1]=x0[1];
return 1;
}
}
while( fabs(min_ant-min_curent)>eps);
rez[0]=x0[0];
rez[1]=x0[1];
return 0;
}

7.3. APLICAII

169

170

Metode n electronic

1.Se dau datele experimentale din tabelul 7.2:


x
y

1
1.44

2
1.728

3
2.0736

4
2.4883

5
2.9859

6
3.5831

7
4.2998

Tabelul 7.2.
8
9
5.1597
6.191

Analiznd rezultatele vedem c funcia are evoluia unei funcii exponeniale. Se


aplic programul pentru regresia exponenial i se obine funcia:
y 12
. (12
. )x

2.Se d funcia:
z x 2 y 2 2x 4 y 3

S se determine minimul funciei cu metoda drumului aleator, lund punctul de start


(15,34) i = 0.000001 i cu metoda cutrii unidimensionale lund punctul se start
(10,10) i = 0.001.
Cu metoda drumului aleator s-a obinut minimul n punctul (0.99518, 1,99978), iar
minimul funciei z min =-1.99977.
Aplicnd metoda cutrii unidimensionale s-a obinut minimul n punctul (1, 2), iar
minimul funciei z min =-2.

8
REZOLVAREA NUMERIC A ECUAIILOR
I SISTEMELOR DIFERENIALE*
n acest capitol sunt prezentate metodele de rezolvare a ecuaiilor difereniale
ordinare, a ecuaiilor cu derivate pariale i a sistemelor de ecuaii difereniale.

8.1. REZOLVAREA NUMERIC A ECUAIILOR


DIFERENIALE ORDINARE DE ORDINUL NTI
Se consider ecuaiile de tipul:
y ' f ( x, y)

(8.1)

cu condiia iniial:
y( x 0 ) y 0
(8.2)
Ecuaia diferenial (8.1) definete o curb n planul xOy . n fiecare punct al
curbei se d valoarea derivatei funcie de x i y . Ecuaia este satisfcut de o familie
de curbe, iar condiia (8.2) d curba din familie care trece printr-un anumit punct din
plan ( x 0, y 0 ). Soluia analitic a ecuaiei (8.1) este o expresie a lui y funcie de x .
Metodele numerice ne ajut s determinm puncte ale soluiei ecuaiei date.
O soluie numeric a ecuaiei se poate obine plecnd din punctul dat ( x 0, y 0 ),
tiind c dac nlocuim valorile date, n ecuaia diferenial (8.1) se poate obine panta
curbei cutate n acest punct. Dup calculul pantei curbei n punctul x 0 se avanseaz
cu un pas mic pe tangenta n punctul ( x 0, y 0 )
y f ( x 0 , y 0 )( x x 0 ) y 0
(8.3)
Dac considerm punctul de coordonate ( y1 , x1 ) pe tangent i pasul de cretere al lui
x1 fa de x 0 , h avem
x1 x 0 h i y1 f(x 0 ,y 0 )h y0
(8.4)
deci un nou punct cunoscut ( x1 , y1 ), foarte aproape de curba soluiei cutate cu ct h
este mai mic, (fig. 8.1). Procedeul de calcul se repet cu calculul pantei la curb n
punctul
( x1 , y1 ) i determinarea unui alt punct pe tangenta la curb n punctul
( x1 , y1 ) cu x 2 x1 h i y 2 corespunztor. Continund n acest mod se obine o
succesiune de segmente de dreapt care aproximeaz curba soluie a ecuaiei
difereniale.
__________________________
*)

Bibliografie :[6], [7], [9], [12], [17]

Aproximarea curbei soluie cu segmente de dreapt poate da erori i succesiunea de


segmente de dreapt poate s se deprteze considerabil de curba soluiei. Aceast
problem reprezint problema stabilitii procesului de rezolvare a ecuaiei difereniale

172
Metode numerice n electronic
i trebuie s-i acordm o atenie deosebit. Trebuie implementat o metod prin care,
n loc s aproximm soluia printr-o succesiune de drepte, s se ia n considerare i
curba soluie adevrat.
Exist dou tipuri de metode:
a) Metode directe n care soluia nu se itereaz i se folosete numai o informaie
asupra curbei ntr-un punct. Astfel de metode constau n rezolvarea ecuaiilor prin serii
Taylor, care ns nu sunt practice. Metode practice Runge-Kutta pretind un mare
numr de evaluri ale funciilor,iar eroarea este dificil de evaluat.
b) Metode indirecte n care se poate estima punctul urmtor de pe curb folosind
mai puine estimri ale funciei, dar care necesit iteraii pentru a ajunge la o valoare
suficient de precis. Aceste metode sunt denumite predictor-corector i prin aplicarea
lor se poate obine o estimare a erorii.

8.1.1. METODA SERIILOR LUI TAYLOR


Aceast metod asigur soluia oricrei ecuaii difereniale, dar are o aplicabilitate
redus din cauza dificultilor de rezolvare. Totui, aceast metod servete pentru
compararea cu metodele practice pentru a le stabili ordinul metodei.
Dezvoltm pe y(x) n vecintatea lui x x m ,
y x y m y 'm x-x m

j+1
j
y m
y ''m
y m
j
2
x-x

x-x

m
m
x-x m j+1
2!
j!
j+1!

(8.5)

unde y m( j ) este derivata de ordinul j a lui y ( x ) n punctul x x m , iar x m x


Utilznd relaia x x m h obinem:
y m+1 y m hy 'm

j+1
j
y m j+1
y
h 2 ''
y m m h j
h
2
j!
j+1!

(8.6)

Ultimul termen al relaiei (8.6) reprezint eroarea de trunchiere. Aproximaia va fi cu


att mai bun cu ct j este mai mare.
y 'm f x m ,y m
(8.7)
Derivnd funcia y ' f ( x, y ) obinem:
f x,y f x,y d y
y ''

fx fy f
x
y
dx
f
f
unde
i
fx
fy
x
y
Pentru x x m rezult:
y ''m f x f y f

Pentru j = 2 rezult:
y m+1 y m hy 'm

sau

y ''' 3
h 2 ''
ym
h
2
6

(8.8)
(8.9)

(8.10)

(8.11)

Rezolvarea numeric a ecuaiilor i sistemelor difereniale

y m+1 y m h f+ f x f f y
2

cu eroarea de trunchiere
eT

y '''
6

h3 ,

173
(8.12)

xm x

(8.13)
Punnd m = 0 n ecuaia (8.12) se obine pentru x1 x 0 h valoarea soluiei y1
deci punctul ( x1, y1 ). Pentru m = 1 rezult punctul ( x 2 , y 2 ). Continund, se obin
punctele soluiei ecuaiei difereniale, cu erorile de trunchiere corespunztoare, care se
mresc n timp. Aceast metod este direct deoarece pentru calculul lui y m1 sunt
necesare numai valorile lui y m i x m . Pentru o eroare mai mic trebuie s mrim
ordinul termenilor utilizai n dezvoltarea Taylor. Dac dorim y '''m acesta are expresia:

y '''m f xx 2 f f xy f 2 f yy f x f y f f y2

(8.14)

unde s-a notat: f xx 2f , f xy f i f yy f


x
xy
y 2
Complexitatea acestor derivate face practic inutilizabil aceast metod.
2

8.1.2. METODELE RUNGE-KUTTA


Metodele Runge-Kutta se caracterizeaz prin urmtoarele proprieti:
1. Sunt metode directe, deci pentru calculul lui y m1 sunt necesare informaiile de la
punctul precedent x m i y m .
2. Sunt echivalente cu seriile Taylor pn la termenii h p , unde p este diferit pentru
metode diferite i se numete ordinul metodei.
3. Nu necesit evaluarea nici unei derivate a funciei f , ci numai valoarea funciei.
Proprietatea a treia a metodelor Runge-Kutta le recomand pentru utilizarea lor
practic. Se pune problema evalurii funciei soluie a ecuaiei difereniale (8.1) n mai
multe puncte. Geometric, problema const n determinarea punctului ( x m1, y m1 )
cunoscnd punctul ( x m , y m ) i c x m1 x m h . n punctul ( x m , y m ) se duce tangenta
la curb deoarece tim panta curbei n acest punct.
y y m y m' ( x x m )
(8.15)
unde
y 'm f x m ,y m
x m1 x m h
i
nlocuind n (8.15) relaiile (8.16) i (8.17) rezult:
x m1 x m h

iar eroarea este dat de segmentul e.


Dac n dezvoltarea lui Taylor lum j = 1 rezult:
y '' 2
'
y m1 y m hy m
h
2

(8.16)
(8.17)
(8.18)

(8.19)

174

Metode numerice n electronic


(8.20)

x m < < x m1

unde

ym

x m1

xm

Fig.8.1.Determinarea grafic a soluiei ecuaiei difereniale.

Comparnd relaiile (8.19) i (8.20) rezult eroarea de trunchiere pentru metoda


aplicat:
y '' 2
(8.21)
eT
h
2

Formula (8.19) reprezint metoda lui Euler de rezolvare a ecuaiilor difereniale de


ordinul nti. Metoda este veche, are eroare de trunchiere relativ mare i eroarea de
rotunjire sau trunchiere se mrete odat cu mrirea lui x .

8.1.2.1. Algoritm 8.1. Metoda lui Euler


{Variabile
x0: abscisa punctului de start, real;
y0: ordonata punctului de start, real;
h: pasul ntre abscisele punctelor de calcul ale soluiei, real;
y: ordonatele soluiei numerice, vector;
x: abscisele soluiei numerice, vector;
n: numrul de puncte n care se calculez soluia, intreg;
{
x[0]= xo; y[0]= y0; h=const;
pentru i = 1,2,...n
calculeaz x[i]= x0+i*h;
calculez
y[i+1]= y[i]+ h*f( x[i-1],y[i-1]);
Soluiile numerice sunt x[i]; y[i]; i=0,1,2,...n;
}

175

Rezolvarea numeric a ecuaiilor i sistemelor difereniale

}
8.1.2.2. Implementarea algoritmului 8.1
/* Funcia care implementeaz algoritmul de rezolvare a ecuaiilor
difereniale ordinare prin metoda Euler.
*/
void EULERED( double(*f)(double x, double y),
double x0,
double y0,
double pas,
int nrp,
double sol[])
{
int i;
sol[0]=y0;
for(i=1;i<=nrp;i++)
sol[i]=sol[i-1]+pas*f(x0+(i-1)*pas,sol[i-1]);
}

8.1.3. METODELE RUNGE-KUTTA DE ORDINUL DOI


Aceste metode se numesc de ordinul doi deoarece sunt echivalente cu dezvoltarea
n serie Taylor pn la termenii de ordinul doi.

8.1.3.1. Metoda lui Euler mbuntit


Aceast metod face parte din acest grup de metode i utilizeaz media pantelor din
punctele ( x m , y m ) i ( x m1 , y m1 ) unde x m1 x m h iar y m1 y m hy 'm ordonat
obinut din ecuaia tangentei n punctul M la curb cu panta y m' f ( x m , y m ) . Grafic
metoda este prezentat n figura 8.2. n acest punct H de coordonate ( x m1 , y m hy m' )
se calculeaz panta la curb care este:
(8.22)
y ' m+1 f x m+h,y m hy 'm
Se face media dintre panta n punctul M (dreapta ML1)i panta n punctul H (dreapta
HL2)i o notm cu

zm

1
'
f x m ,y m f x m+h,y m hy m
2

(8.23)

176

Metode numerice n electronic


y

xm

x m1

Fig.8.2.Calculul grafic al soluiei prin metoda lui Euler mbuntit.

Dreapta de pant z m este HT. Cu acest pant z m se traseaz coarda prin M i se


intersecteaz cu dreapta x x m1 rezultnd punctul R, de coordonate ( x m1 , y m+1 ) al
doilea punct de pe curba soluie, primul fiind considerat ( x m , y m ). Ecuaia coardei

y y m 0.5 f x m ,y m f x m+h,y m hy 'm

MR este:

x x

(8.24)

Punctul R, care reprezint soluia numeric a ecuaiei difereniale, are ordonata:

y m+1 y m 0.5 h f x m ,y m f x m+h,y m hy m'

(8.25)

unde
f x m ,y m .
Aceast formul (8.25) reprezint formula de calcul a soluiilor numerice pentru o
ecuaie diferenial ordinar de ordinul nti.
y 'm

8.1.3.1.1. Precizia metodei lui Euler mbuntit


Se dezvolt n serie Taylor funcia de dou variabile f ( x , y ) :
f ( x, y ) f ( x m , y m ) x x m f x ( x m , y m ) y y m f y ( x m , y m )

1
x - x m 2 f xx 0 ,0 2 x - x m y-y m f xy 0 ,0 y-y m 2 f yy 0 ,0
2
0 x ,x m i 0 y ,y m
unde

(8.26)

'
x x m h iar y y m h y m

Dac notm
unde
rezult:

y 'm f(x m ,y m )

f x m+h,y m hy 'm f+hf x hff y

(8.27)

1 2
h f xx 0 ,y 0 2 ff xy 0 ,y 0 f 2 f yy 0 ,0 (8.28)
2

177

Rezolvarea numeric a ecuaiilor i sistemelor difereniale


f
f
unde
f f ( xm , ym ) , f x
x ,y , f y y x m ,y m
x m m

(8.29)

nlocuind acest rezultat n (8.23) i (8.24) rezult:

3
h
h
y m+1 y m h f+ f x ff y
f xy 0 ,y 0 2 ff xy (0 , 0 ) f 2 f yy 0 ,0
2
4
unde
0 x m ,x m+1 i 0 y m ,y m+1

y m+1 y m h f 0.5h f x ff y

(8.30)

(8.31)

reprezint formula de calcul din dezvoltarea Taylor de ordinul doi care este
echivalent cu formula de calcul a lui Runge-Kutta (8.25) i are eroarea de trunchiere:
y ''' ( ) 1

(8.32)
eT h 3

f xy (0 , 0 ) 2 ff xy (0 , 0 ) f 2 f yy (0 , 0 )

Dac presupunem c f xy , f xx , f yy i y ''' sunt mai mici dect o constant rezult:


eT k h 3

(8.33)

8.1.3.1.2. Algoritmul 8.2. Metoda lui Euler mbuntit


{
x0: abscisa punctului prin care trece graficul soluiei, real;
y0: ordonata punctului prin care trece graficul soluiei, real;
h: pasul ntre abscisele punctelor de calcul ale soluiei, real;
y: ordonatele solutiei numerice, vector;
x: abscisele solutiei numerice, vector;
n: numrul de puncte n care se calculez soluia, ntreg;
{
x[0]= xo; y[0]= y0; h=const;
pentru i = 1,...n
{
calculeaz x[i]= x[i -1]+i*h;
calculez
y[i]= y[i-1]+ 0.5*h*(f[ x[i-1],y[i-1])+ f( x[i-1]+h, y[i-1]+h*f(x[i1],y[i1])));
}
Soluiile numerice sunt x[i], y[i] , i=0,1,2,...n;
}
}
8.1.3.1.3. Implementarea algoritmului 8.2
/* Funcia care implementeaz algoritmul de rezolvare a ecuaiilor
difereniale ordinare prin metoda Euler mbuntit.

178

Metode numerice n electronic


*/
void EULERIED( double(*f)(double x, double y),
double x0,
double y0,
double pas,
int nrp,
double sol[])
{
int i;
sol[0]=y0;
for(i=1;i<=nrp;i++)
sol[i]=sol[i-1]+0.5*pas*( f(x0+(i-1)*pas,
sol[i-1])+f(x0+i*pas,sol[i-1]+pas*f(x0+(i-1)*pas,sol[i-1])));
}

8.1.3.2. Metoda lui Euler modificat


n cadrul acestei metode nu se mediaz pantele, ci se evalueaz panta ntr-un punct
care reprezint media a dou puncte. Considerm curba din figura 8.3 n care se d
punctul iniial prin care s treac curba soluie a ecuaiei difereniale i dorim s
determinm cel de al doilea punct al soluiei. Prin punctul ( x m , y m ) dat, cunoscut sau
determinat, se duce tangenta MH i se determin pe aceast tangent punctul H de
coordonate ( x m1 , y m1 )
Tangenta MH are ecuaia
y y m f ( x m , y m )( x x m )
(8.34)
Prin intersecia cu dreapta x x m h rezult coordonatele punctului H
( x m1 x m h , y m1 y m hf ( x m , y m )
(8.35)
prezentat n figura (8.3).
Metoda face media coordonatelor punctelor M i H i determin punctul
h
h

P x p x m , y p y m f x m , y m

2
2

(8.36)

Se calculeaz panta soluiei y n acest punct P i rezult:


h
h

(8.37)
z m f x m , y m f x m , y m

2
2
Se scrie ecuaia dreptei care trece prin M de pant z m i o intersectm cu dreapta
y x m 1 x m h

Dreapta MN are ecuaia:


h
h

y y m f x m , y m f x m , y m x x m

2
2
Prin intersecia cu dreapta x x m1 x m h rezult ordonata:
h
h

y m 1 y m h f x m , y m f x m , y m

2
2

care reprezint formula de calcul a ordonatelor soluiei ecuaiei difereniale.

(8.38)

(8.39)

179

Rezolvarea numeric a ecuaiilor i sistemelor difereniale

P
x

xm

x m2

x m1

Fig.8.3.Calculul grafic al soluiei ecuaiei difereniale prin metoda lui Euler modificat.

Aceast metod d aceleai soluii ca i metoda lui Taylor pn la h2, deci este o
metod Runge-Kutta de ordinul doi.
xm+h/2

8.1.3.2.1. Algoritmul 8.3. Metoda lui Euler modificat


{Variabile
x0: abscisa punctului prin care trece graficul soluiei, real;
y0: ordonata punctului prin care trece graficul soluiei, real;
h: pasul ntre abscisele punctelor de calcul ale soluiei, real
y: ordonatele soluiei numerice, vector;
x: abscisele soluiei numerice, vector;
n: numrul de puncte ale soluiei, ntreg;
{
x[0]= xo; y[0]= y0;
pentru i = 1,...n
{
calculeaz x[i]= x[i -1]+i*h;
calculez
y[ i ]= y[i-1]+ h*f( x[i-1]+0.5*h, y[ i-1]+0.5*h*f(x[i-1],y[i-1])) ;
}
Soluiile numerice ale ecuaiei sunt x[ i ], y[ i ] , i=0,...n;
}
}
8.1.3.2.2. Implementarea algoritmului 8.3

180

Metode numerice n electronic


/* Funcia care implementeaz algoritmul de rezolvare a ecuaiilor
difereniale ordinare prin metoda Euler modificat.
*/
void EULERMED( double(*f)(double x, double y),
double x0,
double y0,
double pas,
int nrp,
double sol[])
{
int i;
sol[0]=y0;
for(i=1;i<=nrp;i++)
sol[i]=sol[i-1]+pas*f(x0+(i-1)*pas+0.5*pas,sol[i-1]
+0.5*pas*f(x0+(i-1)*pas,sol[i-1]));
}

8.1.3.3. Asemnri ntre metodele Euler mbuntit i modificat


Ambele metode au formula de calcul a ordonatelor soluiilor ecuaiei difereniale
y m 1 y m h u
(8.40)
unde u este panta zm sau vm care poate fi scris astfel:
u a1 f ( x m , y m ) a 2 f ( x m b1 h, y m b2 h) y m'
(8.41)
'
ym
f ( xm , ym )
1
i b1 = b2 =1 avem panta zm, n cazul aplicrii metodei
Pentru valorile a1 a 2
2
Euler mbuntit, iar pentru valorile: a1 0, a 2 1 i b1 b2 1 / 2 avem panta

unde

vm, n cazul aplicrii metodei Euler modificat.


Dezvoltm n serie Taylor funcia f ( x , y ) n jurul punctului ( x m , y m ), dezvoltare
prezentat n expresia (8.26) unde O( h 2 ) este restul i facem substituiile:
x x m b1 h i y y m b2 hf
n aceast expresie:
f(x m b1 h, y m b2 hf) f b1 hf x b2 hff y O(h 2 )

(8.42)

Expresia lui u conform formulei (8.41) devine:


u a1 f a 2 f a 2 b1 hf x a 2 b2 hff y O(h 2 )

(8.43)

nlocuind n formula (8.40) de calcul a valorilor funciei soluie a ecuaiei difereniale


rezult:
y m1 y m h ( a1 a 2 ) f h ( a 2 b1 f x a 2 b2 ff y ) O h 2
(8.44)

Dac comparm aceast formul (8.44) cu formula lui Taylor (8.30) rezult:
a1 a 2 1 ;

a 2 b1 a 2 b2

1
;
2

(8.45)

181
Deoarece avem trei ecuaii cu patru necunoscute, alegem n mod arbitrar una din ele i
exprimm pe celelalte funcie de aceasta. Lum a 2 w i rezult

Rezolvarea numeric a ecuaiilor i sistemelor difereniale

a1 1 w , b1 b2

1
2w

(8.46)

Formula de calcul (8.44) devine:

h
h

y m1 y m h 1 w f x m , y m wf x m
, ym
f x m , y m O h 3

2
w
2
w

(8.47)

Expresia (8.47) reprezint formula de calcul a metodei Runge-Kutta de ordinul doi


general. Pentru w

1
se obine metoda lui Euler mbuntit, iar pentru w 1 se
2

obine metoda lui Euler modificat. Eroarea de trunchiere este:


eT k h 3

(8.48)

n mod analog se pot dezvolta metodele Runge-Kutta de ordinul trei i patru.

8.1.4. METODA RUNGE-KUTTA DE ORDINUL PATRU


Formula de calcul numeric a soluiei ecuaiei difereniale (8.1) este dat de expresia
(8.49)
x m1 x m h

y m1 y m

unde

h
k 2k 2 2k 3 k 4
6 1

(8.49)

k1 f ( xm , ym )
h
h

k 2 =f x m , y m k 1

2
2

(8.50)

h
h

k 3=f x m , y m k 2

2
2

k 4 =f x m h, y m hk 3

Eroarea de trunchiere a metodei este:


eT k h 5

8.1.4.1. Algoritmul 8.4. Metoda Runge-Kutta de ordinul 4


{ Variabile
x0 :abscisa punctului prin care trece soluia, real;
y0 : ordonata punctului prin care trece soluia, real;
h : pasul ntre abscisele punctelor de calcul ale soluiei, real;
y : ordonatele soluiei numerice, vector;
x : abscisele soluiei numerice, vector;
n : numrul de puncte n care se calculeaz soluia, ntreg;

(8.51)

182

Metode numerice n electronic


{
x[0]= xo; y[0]= y0 ;
pentru i = 1,,n
{
calculeaz x[ i-1 ]=x0+i*h;
calculez
k1 = f(x[ i-1 ], y[ i-1 ]);
calculeaz
k2 = f(x[ i-1 ]+0.5*h, y[ i-1 ]+ 0.5*h*k1);
calculeaz
k3 = f(x[ i-1 ]+0.5*h, y[ i-1 ]+ 0.5*h*k2);
calculeaz
k4 = f(x[ i-1 ]+h, y[ i-1 ]+ h*k4);
calculeaz
y [i ] yi 1

h
k1 2k 2 2k 3 k 4 ;
6

}
Soluiile numerice ale ecuaiei sunt x[ i ], y[ i ] , i=1,2,...n;
}
}

8.1.4.2. Implementarea algoritmului 8.4


/* Funcia care implementeaz algoritmul de rezolvare a ecuaiilor
difereniale ordinare prin metoda Runge-Kutta de ordinul 4.
*/
void RK4( double(*f)(double x, double y),
double x0,
double y0,
double pas,
int nrp,
double sol[])
{
int i;
double k1,k2,k3,k4;
sol[0]=x0;
for(i=1;i<=nrp;i++)
{
k1=f(x0+(i-1)*pas,sol[i-1]);
k2=f(x0+(i-1)*pas+0.5*pas,sol[i-1]+0.5*pas*k1);
k3=f(x0+(i-1)*pas+0.5*pas,sol[i-1]+0.5*pas*k2);
k4=f(x0+i*pas,sol[i-1]+pas*k3);
sol[i]=sol[i-1]+pas*(k1+2*k2+2*k3+k4)/6.0;
}
}

183
Concluzie: Putem spune despre metodele Runge-Kutta c sunt metode cu vitez de
calcul mare, deoarece calculul unui punct curent de pe curba soluiei se face numai cu
valorile calculate la punctul precedent. Precizia metodelor depinde de eroarea de
trunchiere.
Dac considerm c n punctul x x 0 h valoarea exact a soluiei este y m , cu
metoda clasic de ordinul unu rezult:

(8.52)
y m y mh kh 2

Rezolvarea numeric a ecuaiilor i sistemelor difereniale

unde y m h arat c y m s-a calculat cu pasul h. Se repet calculul pentru pasul h/2 i
avem
h2
y m y m(h/ 2 ) k
4

(8.53)

Din egalitatea relaiilor (8.52) i (8.53) rezult:


3
y m(h ) y mh/ 2 - h 2
4

iar eroarea de trunchiere devine:


eT kh 2

4 h/ 2
h
y m y m
3

(8.54)

Aplicnd metodele Runge - Kutta de ordinul doi rezult:


eT kh 3

8 h/ 2

y
y mh
7 m

(8.55)

Metoda Runge - Kutta de ordinul patru are o eroare de trunchiere care poate fi
estimat cu relaia:

eT kh 5

32 h/ 2

y
y mh
31 m

(8.56)

dedus prin acelai procedeu ca i la metoda Runge - Kutta de ordinul nti.


n anumite condiii metodele Runge - Kutta pot da rezultate foarte imprecise chiar
dac erorile de trunchiere i rotunjire sunt mici. Aceasta se datoreaz faptului c
erorile de trunchiere sau rotunjire pot crete odat cu x. Acest fenomen, care apare
referitor la devierea mare a soluiei a primit denumirea de instabilitate parial,
autorul fiind Mayers D.F. n acest caz instabilitatea depinde de ecuaia diferenial,
algoritm i dimensiunea intervalului.

8.1.5. METODE PREDICTOR-CORECTOR


Aceste metode prezic o valoare pentru soluie la pasul m 1 , y m1 , apoi se
utilizeaz o formul pentru corecia ei. Formula de corecie se poate utiliza de mai
multe ori pentru recorectri. Acest proces de iteraie poate fi fcut eficient dac se
alege dimensiunea intervalului pentru un numr minim de iteraii.
Considerm formula predictor- corector de ordinul doi:
0
y m+
(8.57)
1 y m-1 2hf x m ,y m
n care indicele (0) arat prima estimare a lui y m1 .
Deoarece este necesar s se cunoasc un punct anterior lui x0 se utilizeaz pentru
pornirea metodei, metoda Runge-Kutta de ordinul doi.

184

Metode numerice n electronic


y

x m1 , y m1
y y( x)

x
Fig. 8.4 Determinarea grafic a soluiei prin metoda predictor - corector

Punctul prezis de prima estimare se calculeaz astfel: se duce tangenta ET, n punctul
E ( x m , y m ) dup care se duce coarda FR paralel cu tangenta ET prin punctul
0
F ( x m1 , y m1 ) i intersecteaz dreapta x x m1 n punctul P( x m+1 ,y m+
1 ) obinndu-se
0
dac se
prima valoare prezis la estimarea zero. Se poate mbunti valoarea y m+1
0
consider panta n punctul ( x m+1 ,y m+
1 ) i se face media cu panta n ( x m ,y m ). Prin

punctul ( x m ,y m ) ducem o coard cu aceast pant care intersecteaz dreapta x x m1


1

n punctul ( x m+1 ,y m+
1 ) unde y m+1 este estimarea de ordinul 1. Continund acest
1

k
procedeu se poate estima valoarea lui y m+
1 pn la o valoare k, pn cnd

y mk1 y m0 1

(8.58)

unde este o eroare impus.


Cu panta f ( x m , y m ) din punctul E se duce coarda prin F
y y m1 f ( x m , y m )( x x m1 )

(8.59)

Punctul de abscis x m1 pe aceast coard are ordonata


0
y m+1 y m1 2hf ( x m , y m ) care reprezint prima estimare a soluiei.

Ducem prin E coarda de pant

1
0
f x m ,y m f x m+1 ,y m+
1
2
Punctul de abscis x m1 pe aceast coard are ordonata
zm

1
y m+
1 ym

h
0
f x m ,y m f x m+1 ,y m+
1
2

Procednd n mod analog pentru a k-a estimare avem


k
y m+
1 ym

h
k-1
f x m ,y m f x m+1 ,y m+
1
2

(8.60)

(8.61)

(8.62)

k
k-1
Dac
y m+
(8.63)
1 -y m+1 < unde > 0,
orict de mic, iteraiile se opresc. Relaia (8.63) este satisfcut cnd metoda
predictor-corector este convergent.

Rezolvarea numeric a ecuaiilor i sistemelor difereniale


h
k-1
k-1
k-2
k
y m+1 - y m+
f x m+1 ,y m+
1 =
1 f x m+1 ,y m+1
2

185

Aplicnd teorema valorii medii obinem


h f k 1

y mk1 y mk11
y mk12
y
2 y m1
f
k-1 k
este evaluat n x x m1 i y y m+
unde
1 ,y m+1 .
y
f
Dac
este mrginit de M >0 astfel ca:
y

(8.65)

f
M
y

(8.66)

k
k-1
y m+
1 -y m+1

rezult

(8.64)

M h k-1
k-2
y m+1 y m+1 .
2

(8.67)

h M k-2
k-3
y m+1 y m+
1
2

(8.68)

Analog

k-1
k-2
y m+
1 y m+1

k
k-1
y m+
1 -y m+1

sau

h M

k-2
k-3
y m+
1 y m+1 .

(8.69)

Continund calculul prin acest procedeu se ajunge la rezultatul:


k
k-1
y m+
1 -y m+1

h M

k-1

1
0
y m+
1 y m+1

Dac dimensiunea intervalului h este bine aleas adic h

2
M

(8.70)
(8.71)

atunci metoda este convergent. Viteza de convergen este cu att mai mare cu ct h
este mai mic.

8.1.5.1. Eroarea de trunchiere a metodei predictor-corector


Pentru determinarea erorii de trunchiere se dezvolt n serie Taylor funcia y ( x ) n
jurul punctului x x m
y x y x m y 1 x m x-x m

unde
Considernd

x xm

x-x m 2 16 x-x m 3 y '''

(8.72)

x x m1 x m h rezult:

y x m+1 y x m h y 1 x m

unde
Pentru

y '' x m

xm

h 2 ''
h 3 '''
y xm
y
2
6

(8.73)

h 2 ''
h 3 '''
y xm
y 2
2
6

(8.74)

x m+1

x x m1 x m h rezult:

y x m-1 y x m h y 1 x m

186
unde
x m-1 2 x m
Scznd din expresiile (8.67) i (8.68) rezult:

y x m+1 y x m-1 2h y 1 x m

tiind c

y ''' 1 y ''' 2
2

y '''

Metode numerice n electronic

h 3 '''
y
3

(8.75)

unde x m-1 x m+1

Comparnd (8.69) cu (8.57) rezult c eroarea metodei predictor- corector este :

eT

h 3 '''
y
3

unde x m-1 x m+1

(8.76)

Formula (8.61) este analoag formulei de la integrarea prin metoda trapezului unde am
determinat eroarea

eTc

h 3 '''
y h
12

unde x m-1 h x m+1

(8.77)

Calculm valoarea adevrat ym n punctul m


y m y m0

h 2 '''
y
3

(8.78)

h 2 '''
y h
12

(8.79)

iar dup (8.71) avem


y m y mk

Scznd relaiile (8.72) i (8.73) rezult:


y mk y m0

Considernd y
se obine:

'''

h 3 '''
y h 4 y '''
12

aproximativ constant pentru x m-1 x x m+1


5 h 3 '''


y y mk y m0
12

sau

eTc

h 3 ''' 1 0

y y m y mk
12
5

(8.80)

Convergena metodei este mai rapid cu ct h este mai mic. Numrul de iteraii nu
trebuie s fie mare. Exist dovezi care arat c cel mai eficient numr de iteraii pentru
metoda predictor-corector este doi.

8.1.5.2. Algoritm 8.5. Metoda predictor-corector


{Variabile
x0 :abscisa punctului prin care trece soluia, real;
y0 : ordonata punctului prin care trece soluia, real;
h : pasul ntre abscisele punctelor de calcul ale soluiei, real;
y : ordonatele soluiei numerice, vector;
x : abscisele soluiei numerice, vector;

187

Rezolvarea numeric a ecuaiilor i sistemelor difereniale

n : numrul de puncte n care se calculeaz soluia, ntreg;


er : eroarea de calcul, real;
{
x[0]= xo; y[0]= y0;
pentru i = 0,1,2,...,n
{

yi 0 yi-1 2*h*f xi-1,yi-1

k = 1;
repet
calculeaz

yi k yi-1 0.5* f xi-1,yi-1 f xi ,yi k-1

k = k+1;
pn cnd
k
k-1
yi y i
e

}
k
Soluiile numerice ale ecuaiei sunt x[ i ], y i , i=0,1,2,...n;
}
}

8.1.5.3. Implementarea algoritmului 8.5


/* Funcia care implemeneteaz rezolvarea ecuaiilor difereniale prin
metoda predictor-corector 1.
*/
void PRED_COR( double(*f)(double x, double y),
double x0,
double y0,
double pas,
double eps,
int nrp,
double sol[])
{
int i;
double prec;
/* start */
sol[0]=y0;
sol[1]=sol[0]+0.5*pas*(f(x0,sol[0])+f(x0+pas,sol[0]+
pas*f(x0+pas,sol[0])));
for(i=2;i<=nrp;i++)

188

Metode numerice n electronic


{
sol[i]=sol[i-2]+2*pas*f(x0+(i-1)*pas,sol[i-1]);
do
{
prec=sol[i];
sol[i]=sol[i-1]+0.5*pas*( f(x0+(i-1)*pas,sol[i-1]+f(x0+i*pas,prec));
}
while( fabs(sol[i]-prec)>eps );
}
}

8.1.6. METODA MILNE


Aceast metod folosete o pereche de formule de precizare i corectare, utilizeaz
o integrare dup metoda lui Simpson.

4h
y k+1 y k-3 2 y 'k-2 y 'k-1 2 y 'k
3
y k+1

h
y k-1 y 'k-1 4 y 'k y 'k+1
3

(8.81)

Pentru aplicarea metodei din start trebuie cunoscute patru valori y k , y k 1 , y k 2 , y k 3


care se obin cu o metod direct. Corecia soluiei se face pn cnd diferena dintre
dou valori consecutive ale soluiei ntr-un punct devine mai mic dect o eroare
impus.

8.1.6.1. Algoritmul 8.7. Metoda lui Milne


{Variabile
x0 :abscisa punctului iniial al soluiei, real;
y0 : ordonata punctului iniial al soluiei, real;
h : pasul dintre punctele soluiei, real;
n : numrul de puncte n care se calculeaz soluia, ntreg;
{x[0]= xo; y[0]= y0;
pentru k = 1, . .. 3
h
2

{ calculeaz y k y k-1 f x m ,y m f x m h,y m hy m' ;


i = 3;
repet
4h
2 y i-'2 y i-'1 2 y i' ;
3

0
calculeaz y i+
1 y i-3

j = 1;
repet

189

Rezolvarea numeric a ecuaiilor i sistemelor difereniale

calculeaz

'

h
j
j-1
yi+1 yi-1 yi-'1 yi' yi+1 ;
3

j = j+1;
pn cnd
j j-1

y i+1 y i+1 e 0 ;

i = i +1;
pn cnd i = n;
}
valorile unice ale soluiei sunt yi , i = 1, 2, . .., n
}
}

8.1.6.2. Implementarea algoritmului 8.7


/* Funcia care implementeaz metoda de rezolvare a ecuaiilor
difereniale ordinare prin metoda Milne
*/
void MILNE( double(*f)(double x, double y),
double x0,
double y0,
double pas,
double eps,
int nrp,
double sol[])
{
int i;
double prec;
/* start */
sol[0]=y0;
for(i=1;i<=3;i++)
sol[i]=sol[i-1]+0.5*pas*( f(x0+(i-1)*pas,sol[i-1])
+f(x0+i*pas,sol[i-1]+pas*f(x0+(i-1)*pas,sol[i-1])));
for(i=4;i<=nrp;i++)
{
sol[i]=sol[i-4]+4*pas*( 2*f(x0+(i-3)*pas,sol[i-3])
-f(x0+(i-2)*pas,sol[i-2])+2*f(x0+(i-1)*pas,sol[i-1]))/3;
do
{
prec=sol[i];
sol[i]=sol[i-2]+pas*( f(x0+(i-3)*pas,sol[i-3])
+4*f(x0+(i-2)*pas,sol[i-2])+f(x0+i*pas,sol[i]))/3;
}
while( fabs(sol[i]-prec)>eps );

190

Metode numerice n electronic


}
}

8.2. INTEGRAREA NUMERIC A SISTEMELOR DE


ECUAII DIFERENIALE DE ORDINUL NTI I A
ECUAIILOR DIFERENIALE DE ORDINUL DOI
Ecuaiile de ordin superior cu condiii iniiale se refer la un sistem de ecuaii
difereniale de ordinul nti.
Considerm ecuaia diferenial de ordinul n de forma:

(8.82)
F x , y , y ' , y '' , , y n 0
cu condiiile iniiale:
x x 0 , y y 0 , y ' y' 0 ,....., y ( n 1) y ( n 1) .
(8.83)
Aceast ecuaie diferenial poate fi scris sub forma unui sistem de ecuaii
difereniale de ordinul nti cu n funcii necunoscute.
Pe lng funcia cutat y (soluia ecuaiei) mai introducem (n-1) necunoscute
auxiliare:
y1 , y 2 , .... , y n-1
(8.84)
legate de y prin ecuaiile:

d y1
d y2
d y n-2
dy
y1 ,
y2 ,
y3 , ,
y n-1 .
dx
dx
dx
dx

(8.85)

Se observ c
yk

dk y
dx k

k
y

Ecuaia (8.82) o putem scrie sub forma

n
n-1
y f x , y , y ' , y '' , , y

(8.86)

sau

dy n-1
f x , y , y1 , y 2 , , y n-1
dx

(8.87)

Ecuaiile (8.87 ) i (8.85 ) formeaz un sistem de n ecuaii difereniale de ordinul nti


cu n funcii necunoscute. Dintre ecuaiile sistemului numai ultima are o form mai
general, celelalte fiind mai speciale.
Condiiile iniiale ale sistemului vor fi:
pentru x x 0 , rezult
n-1
n-1
y ' y 01 y10 , y '' y ''0 y 20 , , y y 0 y n-10

(8.88)

Pentru fiecare ecuaie se poate aplica una dintre metodele studiate pentru ecuaiile
difereniale de ordinul nti. Dac aplicm metoda Runge - Kutta de ordinul patru se
pleac de la ultima ecuaie (8.89) spre prima din (8.88).
Pentru i = 0,1,2,. .., p rezult:

191

Rezolvarea numeric a ecuaiilor i sistemelor difereniale


1 ( n 1)
( i 1)
(i)
2k 2( n 1) 2k 3( n 1) k 4( n 1)
y n 1 y n 1 6 k1

y ( i 1) y ( i ) 1 k ( n 2 ) 2k ( n 2 ) 2k ( n 2 ) k ( n 2 )
n2
2
3
4
n2
6 1

1
y1( i 1) y1( i ) k1(1) 2k 2(1) 2k 3(1) k 4(1)
6

( i 1)
1
y ( i ) k1 2k 2 2k3 k 4
y
6

(8.89)

unde

k ( n 1) hf x , y , y ( i ) , y ( i ) ,..., y ( i )
i
i 1
m
2
1

(1)
( n 1)

k 2( n 1) hf x i h , y i( i ) k1 , y1( i ) k1 ,..., y n( i ) k1

2
2
2
2

k (1)
k ( n 1)
k
h
( n 1)

hf x i , y i 2 , y1( i ) 2 ,..., y n( i ) 2
k 3
2
2
2
2

( n 1)
hf x i h, y i k3 , y1( i ) k3(1) , y 2( i ) k 3( 2 ) ,..., y m( i ) k 3( n 1)
k 4
k1( n 2 ) hy n( i)1

n-1
i
n- 2
k1
h y n
k 2
1

n-1

k n- 2 h y i k 2
3
n1

n- 2
i
n-1
h y nk 4
1 k3

(8.90)

(8.91)

Analog se calculeaz i celelalte valori ale lui k i dup nlocuire n y i 1 se obine


formula de recuren pentru calculul soluiilor numerice ale ecuaiei difereniale.
Cazul general de tratare a problemei este foarte laborios, dar pentru cazul unei
ecuaii difereniale de ordinul doi sau trei, calculele se simplific mult. Pentru o
ecuaie de ordinul doi
y '' f x , y , y ' ,
(8.92)

rezolvat cu metoda Runge - Kutta de ordinul patru, rezult sistemul de ecuaii de


ordinul trei:
dy1
dx f ( x , y , y1 )

dy y
1
dx

corespunztor lui (8.84) i (8.85).

(8.93)

192
Relaiile de calcul (8.90) i (8.91) devin:

y1i+1 y1i
yi+1 yi

Metode numerice n electronic

1 1
k 2 k 21 2 k 31 k 41
6 1

1
k 2k 2 2k 3 k 4
6 1

(8.94)

unde
k1' hf ( x i , y i , y1i )

'
k1 i k11
h

h
f
x
+
,
y
+
, y1+
2
i
i 2
2
2

'
x i+ h , y i + k 2 , y1i+ k 2
k
h
f

2
2
2

'
i
1
k 4 hf ( x i h, y i k3 , y1 k 3 )

(8.95)

k1 hy1i

k h y i k1
1

k h y i k 2
1

k 4 h( y1i k3 )

(8.96)

nlocuind (8.95 ) n (8.94 ) rezult formulele de calcul:


yi+1 yi

1
k1 k 2 k 3
6

i = 0,1,2,. .., n

unde

y i+1 y i 1 k 2k k k
1 2 3 4
1
1
6

k1 h f x i , y i , y1 i

h
h i i k1

k 2 h f x i+ , y i y1 , y1

2
2
2

h
h i h

i k
k 3 h f x i+ , y i y1 k1 , y1 2

2
2
4
2

i
i
k 4 h f x i+h , y i h y1 k 2 , y1 k3

8.3. REZOLVAREA NUMERIC A ECUAIILOR


DIFERENIALE CU DERIVATE PARIALE

(8.97)

193
Vom considera ecuaiile difereniale cu derivate pariale de ordinul doi de dou
variabile ce au forma general:
2u
2u
2u
u
u
a x , y

d x , y
e x , y
f x , y u=0
b
x
,
y
c
x
,
y

2
2
x
x y
y
x
y
(8.98)
unde
a ( x , y ), b( x , y ), c( x , y ), d ( x , y ), e( x , y ), f ( x , y )
sunt funcii date ntr-un domeniu plan D. Funcia necunoscut u( x , y ) i derivatele
pariale apar n ecuaie la puterea nti. Ecuaia are proprietatea c dac u1 ( x , y ) i
u 2 ( x , y ) sunt dou soluii ale ecuaiei, atunci i combinaia liniar
c1 u1 c2 u 2
(8.99)
este tot o soluie a ecuaiei unde c1 i c2 sunt constante. Aceste tipuri de ecuaii se
clasific dup semnul valorii determinantului ataat formulei (8.98).

Rezolvarea numeric a ecuaiilor i sistemelor difereniale

a (x ,y )
b (x ,y )

b (x ,y )
c (x ,y )

(8.100)

1. Dac 0 ecuaia se numete de tip eliptic


2. Dac 0 ecuaia se numete de tip hiperbolic
3. Dac 0 ecuaia se numete de tip parabolic

8.3.1. METODA DIFERENELOR FINITE


Aceast metod const n acoperirea domeniului D i o frontier a lui C, cu o reea
de drepte paralele cu axele de coordonate. Paii reelei sunt constani, de valoare h
pentru axa Ox i de valoare k pentru axa Oy. Nodurile reelei se mpart i ele n dou
categorii: una n care punctele au toate vecinele n interiorul lui D i a doua pentru
care cel puin unul dintre vecinele lui este exterior domeniului D i aceasta formeaz
frontiera C1 a reelei. Se aproximeaz derivatele pariale de ordinul unu i doi din
ecuaia (8.98) cu diferenele finite corespunztoare:
2 u u x+y , y 2u x+y u x-h , y

x2
h2
2 u u x,y+h 2u x,y u x, y-h

y2
k2
u x+h ,y+h u x,y+h u x+h ,y u x, y
2u

hk
x y

u u x+h ,y u x, y

h
x
u u x,y+k u x, y

k
y
Ecuaia (8.98) scris cu ajutorul diferenelor finite devine

(8.101)

194

Metode numerice n electronic


u x , y

[k au x+h , y k 2 au x-h , y
2

2k 2 a+2h 2 c+2hkb+hk 2 d+kh 2 e+k 2 h 2 f

h 2 cu x , y+k k 2 cu x , y-k 2 khbu x+h , y+k 2 khbu x , y+k 2kh bu x+h , y


k 2 hdu x+h , y kh 2 eu x , y+h ]

(8.102)
Pentru cazul egalitii valorilor pailor h = k n ecuaia obinut (8.102 ) rezult:
u x , y

1
2a+2 c+2 b+h d+h e+h 2 f

[a u x+h , y au x-h , y c u x , y+h

c u x , y-h 2b u x+h , y+h 2b u x , y+h 2 b x+h , y

(8.103)

h du x+h , y h e u x , y+h ]

Dac se consider reeaua prezentat n figura 8.1 i se ine seama de condiiile la


limit, atunci pentru nodul (1,1) se obine ecuaia:
u(11
, )

1
2a1 2c1 2b1 hd1 he1 h 2 f1

a1u( 2,1) c1 1,2 c1 2b1u 2,2 2b1u1,2 2b1u( 2,1) d1u( 2,1) eu(11,2)

(8.104)

unde am considerat h=k=1 pentru reeaua din figura 8.5. Procednd la nlocuiri n
fiecare punct al domeniului D se obine un sistem din care calculm valorile funciei
soluie a ecuaiei (8.98). Funcie de semnul lui se rezolv tipuri de ecuaii eliptice,
hiperbolice sau parabolice.
Pentru a ( x , y ) 1, b( x , y ) 0, c( x , y ) 1, d ( x , y ) 0, e( x , y ) 0, f ( x , y ) 0 rezult o
particularizare a ecuaiei (8.98) obinndu-se ecuaia lui Laplace.

Fig 8.5 Reeaua domeniului funciei soluie i condiiile la limit

8.3.1.1. Ecuaia lui Laplace


2u 2u

0
(8.105)
x2 y2
Aplicnd relaiile 8.101, ecuaia lui Laplace se scrie funcie de diferenele finite astfel:
u x , y

1
u x+h , y u x-h , y u x , y+h u x , y-h
4

(8.106)

195

Rezolvarea numeric a ecuaiilor i sistemelor difereniale

Considerm reeaua din fig.8.6 i notm cu u11, u12, u13, u21, u22, u23, u31, u32, u33
y
u (x, 0,4)=0

0,4
0,3
u (0, y)=0 0,2

u11

u12

u13

u21

u22

u23

u31

u32

u33

u (0,4, y)=0

0,1
0

0,1

0,2

0,3

0,4

u (x,0)=1
Fig.8.6 Reeaua domeniului funciei i condiiile la limit pentru ecuaia lui Laplace.

valorile funciei n punctele 1, 2, 3, 4, 5, 6, 7, 8, 9. Se obine sistemul (8.107) care este


un sistem iterativ de tip Jacobi (Capitolul 3).
Prin rezolvarea recursiv a sistemului, rezult valorile funciei soluie a ecuaiei
difereniale cu derivate pariale Laplace n punctele reelei. Reeaua se poate realiza cu
un pas mai mic ceea ce duce la un sistem cu multe ecuaii i necunoscute, determinnd
valorile funciei soluie n punctele mai fine ale reelei.
1

u11 4 0 u12 0 0 0 0 0 0 0 1

u 1 u 0 u 0 u 0 0 0 0 1
13
22
12 4 11

1
u13 0 u12 0 0 0 u23 0 0 0 1
4

1
u21 u11 0 0 0 u22 0 u31 0 0 0
4

u22 4 0 u12 0 u21 0 u23 0 u32 0

u23 1 0 0 u13 0 u22 0 0 0 u33 0

1
u31 0 0 0 u21 0 0 0 u32 0 0
4

1
u32 0 0 0 0 u22 0 u31 0 u33 0
4

u32 4 0 0 0 0 u22 0 u31 0 u33 0

u 1 0 0 0 0 0 u 0 u 0 0
23
32
33 4

(8.107)

196

Metode numerice n electronic

8.3.1.1.1. Algoritmul 8.8. Ecuaia Laplace


{ Variabile
lsx:limita stng a domeniului pe Ox, real;
ldx:limita dreapt a domeniului pe axa Ox, real;
lsy:limita stng a domeniului pe axa Oy, real;
ldy:limita dreapt a domeniului pe axa Oy, real;
nrx:numrul de subintervale pe Ox, ntreg;
nry:numrul de subintervale pe Oy, ntreg;
h:pasul pe Ox, real;
k:pasul pe Oy, real;
{calculeaz h=(ldx-lsx)/nrx;
k=h;
pentru i=0 pn la nrx
{
u( lsx ih,0) 1 ;

u(lsx ih, ldy ) 0


}
pentru j=1 pn la nrt
u( 0, lsy jk ) 0 ;
u( ldx , lsy jk ) 0 ;
}
pentru i=1 pn la nrx
pentru j=1 pn la nrt
{
calculeaz

1
( u( lsx ( i 1)h, lsy jh ) u( lsx ( i 1)h, lsy jh )
4
u( x ih, lsy ( i 1)h ) u( lsx ih, lsy ( j 1)h )

u( x i , y j )

}
construiete sistemul iterativ i -l rezolv cu metoda Iacobi sau
Gauss-Seidel
tiprete uij pentru i=0 pn la nrx
j=0 pn la nrt;
}
8.3.1.1.2. Implementarea algoritmului 8.8
/*
Funcia care implementeaz metoda de rezolvare a ecuaiilor
difereniale de tip eliptic
*/
void ELIPTIC( int ord,

Rezolvarea numeric a ecuaiilor i sistemelor difereniale

197

double Domeniu[][NrMax]
)
{
int i,j,nrp,lung;
double mat[NrMax][NrMax];
lung=ord-2;
for(nrp=1;nrp<=ord*ord-4*ord+4;nrp++)
{
for(i=1;i<=ord-2;i++)
for(j=1;j<=ord-2;j++)
{
if ( (nrp/lung==(i-1)) && (nrp%lung==j) )
{
mat[i][j]=-1;
mat[i-1][j]=mat[i+1][j]=mat[i][j+1]=mat[i][j-1]=0.25;
}
else mat[i][j]=0;
}
}
i=20;
}

8.3.1.2. Ecuaii difereniale cu derivate pariale de tip parabolic


Vom considera ecuaia cldurii ntr-o bar de lungime l ce reprezint o ecuaie cu
derivate pariale de tip parabolic:
1 u 2u

0
(8.108)
a2 t x2
u(x,t) reprezint temperatura funcie de coordonata punctului i timp. Prin schimbarea
de variabil t= a 2 t ' ecuaia (8.108) se pote scrie:
u 2u

0
(8.109)
t x2
Pentru rezolvarea ecuaiei se aplic metoda diferenelor finite pe reeaua prezentat n
figura (8.7) cu paii h

l
pe axa Ox i k h 2 pe axa Ot. =1/6 reprezint
n

constanta pentru care eroarea este minim dac rezolvarea se face cu metoda
diferenelor finite.

198

Metode numerice n electronic


t

k
h
0

Fig.8.7.Reeaua domeniului pe care se integreaz ecuaia diferenial cu derivate


pariale de tip parabolic.

Presupunem date condiia iniial u(x,0 ) f(x ) i condiiile la limit:


u( 0,t) s(t), u( 1,t) z(t) .
Ecuaia (8.109), scris cu diferene finite, devine:
ui , j 1 ui , j

ui 1, j 2. ui , j ui 1, j

(8.110)
h2
. h
Din ecuaia (8.110) se deduce formula de calcul a valorilor funciei n punctele reelei:
2

uij 1

1
(ui 1, j 4ui , j ui 1, j )
6

(8.111)

Pentru calculul valorilor funciei se ine seama de condiiile iniiale i de cele la limit.
8.3.1.2.1. Algoritmul 8.9. Ecuaii cu derivate pariale de tip parabolic
{Variabile
lsx:limita stng a domeniului pe Ox, real;
ldx:limita dreapt a domeniului pe axa Ox, real;
lst:limita stng a domeniului pe axa Ot, real;
ldt:limita dreapt a domeniului pe axa Ot, real;
nrx:numrul de subintervale pe Ox, ntreg;
nrt:numrul de subintervale pe Ot, ntreg;
h:pasul pe Ox, real;
k:pasul pe Ot, real;
{pentru i=0 pn la nrx
calculeaz ui 0 f (lsx i * h) ;
calculeaz k=(1/6)*h;
pentru j=1 pn la nrt
{
calculeaz u0 j s(lst j * k ) ;
calculeaz ulj z(lst j * k ) ;
}
pentru i=1 pn la nrx

199

Rezolvarea numeric a ecuaiilor i sistemelor difereniale

pentru j=1 pn la nrt


1
6

calculeaz uij (ui 1, j 1 4ui , j 1 ui 1, j 1 ) ;


tiprete uij pentru i=0 pn la nrx
j=0 pn la nrt;
}
8.3.1.2.2. Implementarea algoritmului 8.9
/* Funcia care implementeaz metoda de rezolvare a ecuaiilor
difereniale
cu derivate pariale de tip parabolic.
*/
void Parabolica( double (*F)(double),
double (*S)(double),
double (*Z)(double),
double lims,
double limd,
int nrx,
int nry,
double sol[][NMax]
)
{
int i,j;
double h,k;
h=(limd-lims)/nrx;
k=h*h/6;
for(i=0;i<=nrx;i++)sol[i][0]=f(lims+i*h); /*pe orizontala de jos */
for(j=1;j<=nry;j++)
{
sol[0][j]=s(j*k); /* verticala stanga */
sol[nrx][j]=z(j*k); /*verticala dreapta */
}
for(j=1;j<=nry;j++)
for(i=1;i<=nrx-1;i++)
sol[i][j]=(sol[i-1][j-1]+4*sol[i][j-1]+sol[i+1][j-1])/6;
}

8.3.1.3. Ecuaiile cu derivate pariale de tip hiperbolic


O ecuaie de acest tip este ecuaia oscilaiilor libere ale unei bare omogene finite:
2
2u
2 u

a
0
t2
x2

(8.112)

200

Metode numerice n electronic


care are condiiile la iniiale: u( x ,0) f ( x ) u t' (x,0 ) g(x), 0 x l i condiiile la
limit: u(0, t ) s(t ), u(1, t ) z(t ),0 t . Se poate lua acelai domeniu de integrare dat
n figura 8.7. Ecuaia cu derivate pariale (8.112) poate fi transcris cu ajutorul
diferenelor finite, aplicate pe o reea dreptunghiular de pas hl/n pe axa Ox i de pas
k ntreg oarecare astfel:
ui,j 1 2ui,j ui,j 1
k

a2

ui 1,j 2ui,j ui 1,j


h2

(8.113)

Dac se alege h = ka, ecuaia (8.113) se simplific la forma:


ui , j 1 ui 1, j ui , j 1 ui 1, j .

(8.114)

Cu ajutorul formulei de calcul (8.114) se obin valorile funciei u(x,t) n punctele


domeniului dat astfel ca funcia s verifice ecuaia (8.112).
8.3.1.3.1. Algoritmul 8.10. Ecuaii cu derivate pariale de tip hiperbolic
{Variabile
lsx:limita stng a domeniului pe Ox, real;
ldx:limita dreapt a domeniului pe axa Ox, real;
lst:limita stng a domeniului pe axa Ot, real;
ldt:limita dreapt a domeniului pe axa Ot, real;
nrx:numrul de subintervale pe Ox, ntreg;
nrt:numrul de subintervale pe Ot, ntreg;
h:pasul pe Ox, real;
k:pasul pe Ot, real;
{

l
;
nrx
h
calculeaz k ;
a

calculeaz h=

pentru i=0 pn la nrx


{
calculeaz ui 0 f ( lsx i * h ) ;
calculeaz ui , 1 k * g ( lsx i * h ) ui 0
}
pentru j=1 pn la nrt
{
calculeaz u0 j s( lst j * k ) ;
calculeaz ulj z ( lst j * k ) ;
}
pentru i=1 pn la nrx

Rezolvarea numeric a ecuaiilor i sistemelor difereniale

pentru j=1 pn la nrt


calculeaz uij ( ui 1, j 1 ui , j 2 ui 1, j 1 ) ;
pentru i=0 pn la nrx
pentru j=0 pn la nrt tiprete uij
}
8.3.1.3.2. Implementarea algoritmului 8.10
/*
Funcia care implementeaz metoda de rezolvare a ecuaiilor
difereniale cu derivate pariale de tip hiperbolic
*/
void Hiperbolica( double (*F)(double),
double (*S)(double),
double (*Z)(double),
double lims,
double limd,
int nrx,
int nry,
double a,
double sol[][NMax]
)
{
int i,j,k1;
double h,k;
h=(limd-lims)/nrx;
k=k1;
for(i=0;i<=nrx;i++)sol[i][0]=f(lims+i*h); /*pe orizontala de jos */
for(j=1;j<=nry;j++)
{
sol[0][j]=s(j*k); /* verticala stnga */
sol[nrx][j]=z(j*k); /*verticala dreapta */
}
for(i=1;i<=nrx-1;i++)
sol[i][1]=sol[i+1][0]+sol[i-1][0]-sol[i][0]+k*g(lims+i*h);
for(j=2;j<=nry;j++)
for(i=1;i<=nrx-1;i++)
sol[i][j]=(sol[i+1][j-1]-sol[i][j-2]+sol[i-1][j-1]);
}

201

202

Metode numerice n electronic

8.4. APLICAIE
Se consider un circuit R,L n serie alimentat de o surs de curent alternativ
f =50Hz, prezentat n fig.(8.8).

e 10 cos(100 t ) V,

Fig.8.8. Circuitul R,L

Cunoscnd R=10, L=10mH i c la t=0 i=0, s se calculeze valorile curentului la


t=0.001; 0.002; 0.003; 0.004; 0.005; 0.006; 0.007; 0.008; 0.009; 0.01s.
Se aplic circuitului electric legea a doua a lui Kirchhoff i se obine ecuaia
diferenial
L

di
Ri e
dt

Rezultatele obinute prin metoda lui Euller modificat sunt prezentate n tabelul (8.1)
t[s]
0.0000
0.00100
0.00200
0.00300
0.00400
0.00500
0.00600
0.00700
0.00800
0.00900
0.001000

Tabelul 8.1
i[A]
0.00000
0.48770
0.65941
0.63249
0.447665
0.24065
- 0.03564
-0.31683
-0.57124
-0.77188
-0.89808

9
REZOLVAREA NUMERICA A ECUAIILOR
INTEGRALE*
Ecuaiile integrale sunt ecuaii n care funcia necunoscut se gsete sub semnul
integralei. Ecuaiile integrale liniare se clasific n funcie de tipul limitelor de
integrare i modul de apariie n ecuaie a funciei necunoscute astfel :
1 - ecuaii integrale la care limitele de integrare sunt constante i se numesc ecuaii
de tip Fredholm ;
2 - ecuaii integrale la care o limit de integrare este variabil i se numesc ecuaii
de tip Volterra.
n ambele cazuri, dac funcia necunoscut este numai sub integral, spunem c
ecuaiile sunt de spea ntia, iar dac funcia necunoscut este i n afara integralei,
spunem c ecuaiile sunt de spea a doua.

Ecuatii de tip Fredholm

spea II
integrale
liniare

spea I

de tip Volterra spea I

spea II

9.1. INTEGRAREA ECUAIEI FREDHOLM


NEOMOGEN DE SPEA A DOUA PRIN
METODA APROXIMAIILOR SUCCESIVE
Se consider ecuaia:
b

x f ( x ) S ( x , y ) ( y )dy
a

(9.1)

unde f i S sunt funcii date , este funcia necunoscut pe care o determinm i


un parametru numeric suficient de mic, astfel c pentru nceput poate fi aproximat
soluia :
1 ( x ) f ( x )
(9.2)
Se obine formula de recuren
_______________________
*Bibliografie [12], [17], [18], [22]

205

Rezolvarea numeric a ecuaiilor integrale


b

k ( x ) f ( x ) S ( x , y ) k-1 (y)dy

(9.3)

Pentru convergena irului de soluii aproximative se scad funciile (9.1) i (9.3)


obinndu-se eroarea :
b

k ( x ) ( x ) k ( x ) S ( x , y ) k-1 (y)dy
Dac S x , y M oricare ar fi

(9.4)

x , y a , b a , b atunci

S ( x , y ) k-1 ( y )dy S b-a Ek-1

(9.5)

unde Ek este maximul lui k x din [a, b] .


Convergena irului de soluii este satisfcut dac
M b-a 1 .
(9.6)
Utiliznd pentru integrare o metod de cuadratur cunoscut se obine din ecuaia
(9.3) ecuaia :
b

i f i S ( x , y ) ( y )dy f i h A j S ( x i , y j ) ( y j )
j= 0

sau

i f i Cij j

(9.7)

i = 0,1,...,n

j= 0

care reprezint un sistem n necunoscutele i . Sistemul se poate rezolva iterativ


aplicnd formula de iteraie:
n
k
k-1
i f i l Cij j

i = 0,1,2,...,n

(9.8)

j= 0

Procesul de iteraie se continu pn cnd


k
k+1
i i

unde 0 reprezint eroarea de calcul .

9.1.1. ALGORITMUL 9.1. METODA LUI FREDHOLM


{Variabile
l : constanta ecuaiei ;
x : vectorul punctelor de pe 0x, real ;
y : vectorul punctelor de pe 0y, real ;
M : matricea punctelor format de vectorul x i y ;
Cij : valorile funciei cunoscute S(x,y) n punctele matricei M reale
nmulit cu ponderile din metoda cuadraturii, real ;
a : limita stng de integrare, real ;
b : limita dreapt de integrare, real ;

(9.9)

206

Metode numerice n electronic

0 : valooarea iniial a funciei soluie, real ;


fi : valorile funciei cunoscute n variabilele vectorului x, real ;
sum : suma parial, real ;
: eroarea, real ;
n : numrul de puncte n care se calculeaz soluia, ntreg ;
{ 0 = ;
i = 1;
repet

i k 0 ;

k = 1;
repet
{ calculeaz fi = f( xi );
pentru j = 1... n
{calculeaz sum = sum + * Ai *S(xi ,yj )*
k +1

calculeaz i
}
k = k+1;
k +1

pn cnd i

k -1

xi ;

fi sum ;

k
i ;

i = i + 1;
pn cnd i = n;
tiprete soluia i( k 1) i=1 pn la n;
}

9.1.2.IMPLEMENTAREA ALGORITMULUI 9.1. METODA LUI


FREDHOLM
{void Fredholm(double (*f)(double),
double (*S)(double,double),
double lims,
double limd,
int np,
double lam,
double sola[]
)
{
double h,sum;
int i,j,sem,cont;
int niter=10000;
double eps=1e-15;
static double mat[NMax][NMax];

207

Rezolvarea numeric a ecuaiilor integrale

static double tl[NMax];


static double solp[NMax];
h=(limd-lims)/np;
for (i=1;i<=np+1;i++)
{
tl[i]=f(lims+(i-1)*h);
sola[i]=0;
for(j=1;j<=np+1;j++)
}
if ( (j==1)||(j==np+1) ) mat[i][j]=0.5*lam*h*S(lims+(i-1)*h,lims+
(j-1)*h);
else mat[i][j]=lam*h*S(lims+(i-1)*h,lims+(j-1)*h);
}}
cont=0;
do
{
sem=1;
for(i=1;i<=np+1;i++)solp[i]=sola[i];
for(i=1;i<=np+1;i++)
{
sum=0;
for(j=1;j<=np+1;j++)if(j!=i)sum+=mat[i][j]*solp[j];
sola[i]=(tl[i]+sum)/(1-mat[i][i]);
}
for(i=1;i<=np+1;i++) if(fabs(sola[i]-solp[i])>eps)sem=0;
cont++;
}
while ((sem==0)&&(cont<niter))
}
}

9.2. INTEGRAREA ECUAIEI DE TIP VOLTERRA


NEOMOGEN DE SPEA A DOUA PRIN METODA
APROXIMAIILOR SUCCESIVE
Fie ecuaia
x

( x ) f ( x ) S ( x , y ) ( y )dy .

(9.10)

Diferena finit pentru ecuaia (9.10) este dat de relaia :

( x ) x-h f ( x ) f ( x h )

S ( s, y ) ( y ) d y

x-h

Aplicnd o formul de cuadratur pentru integral pe intervalul h rezult :

(9.11)

208

Metode numerice n electronic


i

i i-1 f i f i-1 Cij j


j=0

(9.12)

Din aceast relaie prin explicitarea lui j i se obine

i- 2

1
f i f i-1 (1 Ci,i-1 ) i-1 Cij j
1 Cii
j= 0

(9.13)

f C10 f 0
1
f1 f 0 (1 C10 ) 0 1

1 C11
1 C11

(9.14)

Din ecuaia iniial (9.10) rezult c a f a deci 0 f 0 . Ca urmare, din ultima


relaie (9.13 ) rezult :

Aceast valoare este utilizat ca valoare de start pentru ecuaia de recuren (9.13 ) .

9.2.1. ALGORITM 9.2. METODA LUI VOLTERRA


{Variabile
n : numrul de puncte n care se calculeaz soluia , ntreg ;
x : vectorul punctelor de pe 0x , real ;
y : vectorul punctelor de pe 0y , real ;
M : matricea punctelor format de vectorul x i y ;
Cij : valorile funciei cunoscute S(x , y) n punctele n care se
calculeaz prin metoda cuadraturii mulit cu ponderile, real ;
fi : valorile funciei f(xi ) , real ;
h :intervalul de integrare , real ;
i :valoarile funciei soluie , real ;
: eroarea de calcul , real ;
sum : suma parial , real ;
{
sum = 0 ;
calculeaz f1 , f0 ;
calculeaz 1

f 1 C10 f 0
;
1-C11

i = 1;
repet
pentru j = 0 la i -2
{calculeaz sum = sum + Cij j ;
calculeaza i

1
f f i-1 ( 1 Ci,i-1 ) i-1 sum ;
1 Cii i

}
i = i + 1;
pn cnd i = n;
Valorile funciei soluie sunt i pentru i = 1 , ... , n;

209

Rezolvarea numeric a ecuaiilor integrale

9.2.2. IMPLEMENTAREA ALGORITMULUI 9.2


{void Volterra(double (*f)(double),
double (*S)(double,double),
double lambda,
double lims,
double h,
int np,
double sola[]
)
{
int i,j;
double sum;
sola[0]=f(lims);
sola[1]=(f(lims+h)+0.5*f(lims)*S(lims,lims)*lambda)
/(10.5*S(lims+h,lims+h)*lambda );
for(i=2;i<=np;i++)
{
sum=0;
for(j=0;j<=i-2;j++)sum+=sola[j]*S(lims+i*h,lims+j*h)*lambda;
sum=sum-0.5*sola[0]*S(lims,lims)*lambda;
sola[i]=(f(lims+i*h)-f(lims+(i-1)*h)+(1+S(lims+i*h,lims+
(i-1)*h))*lambda*sola(i1)+sum)/(10.5*lambda*S(lims+i*h,lims+i*h));
}

9.3. APLICAIE
S se rezolve ecuaia integral de tip Fredholm
1

( x ) x 0.05 x 0.025 01
. ( x 2 y 2 ) ydy
2

pentru care lims=0,limd=1,lambda=0.1, nr=5.


Rezultatele obinute sunt :

( 0.0) 0.001038, ( 0.2) 0.201042, ( 0.4) 0.401055,


( 0.6) 0.601076 ( 0.8) 0.801106., (1.0) 1.001145.

Aceste rezultate sunt valorile funciei soluiei n punctele de diviziune ale


intervalului
[0 1].

10
VECTORI I VALORI PROPRII*
Se consider o matrice ptrat

MR

M Rn n de ordinul n

a11

a 21

a n1

a12
a 22
a n2

... a1n

... a 2 n
-

... a nn

(10.1)

i un vector
X =[ x1 , x 2 , x3 ,..., x n ]
(10.2)
Problema care se pune este s determinm valorile i vectorii X pentru care
transformarea fcut de matrice asupra vectorului X s ne dea un vector X adic
(10.3)
un vector coliniar cu el . Ca urmare A X X
sau scris matriceal :
T

a11

a 21

a n1

... a1n x1
x1


... a 2 n x 2
x2


--
- --


... a nn x n
xn

a12
a 22
a n2

Relaiile (10.4) se mai pot scrie i sub forma :


a12
...
a11

a
a

...
22
21

a n1

a n2

a1n x1

a 2n x 2

0
- --

... a nn x n

(10.4)

(10.5)

Sistemul obinut (10.5) este un sistem omogen care admite ntotdeauna soluia banal
x1 x 2 x3 x n 0 .
Suntem interesai de soluiile diferite de zero ale sistemului. Pentru ca sistemul (10.5)
s admit soluii diferite de soluiile banale este necesar i suficient ca determinantul
sistemului s fie nul. Determinantul n necunoscuta prezint un polinom de grad n
i se numete prin definiie polinom caracteristic, iar egalat cu zero poart numele de
ecuaie caracteristic a matricei A. Ecuaia (10.6) reprezint polinomul caracteristic
iar P( ) 0 ecuaia caracteristic. Pentru fiecare valoare proprie determinat din
ecuaia caracteristic se pot determina valori proprii care verific ecuaia AX X .
Pentru o valoare proprie , exist o infinitate de vectori proprii.
__________________________
*Bibliografie : [6], [10], [11], [22], [23]

211

Vectori i valori proprii


a11

a 21
P

a n1

a12

a1n

a 2n
-

... a nn
...

a 22 ....
a n2

(10.6)

Vectorii i valorile proprii sunt utili pentru simplificarea operaiilor cu matrice ce se


ntlnesc n rezolvarea diferitelor sisteme de ecuaii difereniale i n alte operaii mai
complicate .

10.1. TIPURI DE MATRICE


n continuare sunt date definiiile unor tipuri de matrici, mai des utilizate n
cercetare i proiectare i unele proprietile mai importante a lor.

10.1.1. MATRICE SIMILARE


Dou matrice A i B M n n S unde S R sau S C (complex ) se numesc
similare dac exist o matrice nesingular P M n n S astfel nct
(10.7)
B = PA P-1
Teorema1: Dou matrice similare au aceleai valori proprii. Matricea vectorilor
proprii :
x11
1
x2
V=
-
1
xn

x12
x 22
-x n2

... x1n

... x 2n
... --

... x nn

(10.8)

se numete matricea modal iar matricea valorilor proprii A se numete matricea


diagonal:
0
0
...
1

...
0
0
2
A
(10.9)

... n
0
0

Relaia ntre cele dou matrice este :


AV=V
(ecuaia modal)
(10.10)
(10.11)
sau
A = V V-1
Matricea modal a vectorilor proprii i matricea diagonal a valorilor proprii sunt
similare .

10.1.2. MATRICE SIMETRICE


O matrice ptratic A este simetric dac

AT A
(adic transpusa este egal cu matricea ) .

(10.12)

212

Metode numerice n electronic

Teorema 2: Valorile proprii ale unei matrice simetrice A M Rnn sunt reale .
Corolar 1: Dac A M Rn n este simetric, atunci exist o transformare similar
P A P-1 = unde P M Rn n este o matrice ortogonal i M n n este diagonal .

10.1.3. MARTRICE ORTOGONALE


O matrice ptratic A se numete ortogonal dac

AT A 1

(10.13)

Aceste matrice sunt utile pentru transformrile similare .

10.1.4. MATRICE SUPERIOR TRIUNGHIULARE


Sunt matricele cu toate elementele nule sub diagonala principal. Pentru aceste
matrice valorile proprii sunt elementele de pe diagonal .

10.1.5. MATRICE INFERIOR TRIUNGHILARE


Sunt matricele cu toate elementele nule deasupra diagonalei principale. Valorile
proprii sunt elementele de pe diagonal .

10.1.6. MATRICEA DIAGONAL


Este matricea cu toate elementele nule deasupra i dedesubtul diagonalei
principale. Valorile proprii sunt elementele de pe diagonal .

10.1.7. MATRICEA HERMITIC


Matricea A este hermitic dac A A H unde
a ij a ji ,
iar pentru elementele de pe diagonala principal avem
a ii aii ,
adic sunt reale .
Dac
A M n n este o matrice hermitic triunghiular, atunci pentru orice X C
expresia X H AX este real .
Dac A este matricea hermitic, atunci :
-este pozitiv definit dac pentru
X
rezult
X H AX 0
-este semipozitiv definit dac pentru X
rezult
X H AX 0 .

10.1.8. MATRICEA SINGULAR

213

Vectori i valori proprii

A M n n este o matrice

singular dac i numai dac admite o valoare proprie

nul. Prin definiie urma unei matrice A M n n este suma elementelor de pe


diagonala principal :
n

tr A = a ii

(10.14)

i=1

Prin definiie spectrul radial S(A) al unei matrice A M n n este dat de este valoarea
| i | unde i este valoarea absolut maxim dintre valorile proprii .

10.2. LOCALIZAREA VALORILOR PROPRII


Teorema 3 : Fiecare valoare proprie a unei matrice A M n n se gsete n cel
puin un disc circular, Li cu centrul n a ii i raz i unde
n

i li a ij

i=1,2,..., n

j=1
j i

(10.15)

sau un disc circular C j cu centrul n a jj i raz c j


n

j c j a ij
i=1
i j

j = 1,2, ... ,n

(10.16)

Toate valorile proprii s se gseasc n reuniunea cercurilor :

Li z , z-a ii li i

i = 1,2, ... ,n

(10.17)

j=1,2,...,n

(10.18)

sau n reuniunea cercurilor :


C j z , z-a jj c j

10.3. METODE DE DETERMINARE A VALORILOR I


VECTORILOR PROPRII AI UNEI MATRICE
Valorile proprii ale unei matrice A, deci soluiile ecuaiei ei carcteristice pot fi
reale sau complexe. Din acest punct de vedere clasificm matricele n :
a) Matrice hermitice care admit numai valori proprii reale, iar vectorii asociai sunt
distinci i ortogonali. Aceste matrice pot fi diagonalizate cu matrice ortogonale .
b) Matrice nehermitice ale cror valori proprii nu sunt toate reale, iar vectorii
asociai nu au proprieti particulare .

214

Metode numerice n electronic

10.3.1. METODE DE DETERMINARE A VALORILOR I


VECTORILOR PROPRII ALE MATRICELOR HERMITICE
Dintre aceste metode se prezint metoda puterii, metoda lui Krlov, metoda
Hauseholder, metoda RT i metoda LR.

10.3.1. METODA PUTERII


Considerm ecuaia (10.3) n care reprezint valoarea proprie iar X vectorul
propriu al matricei A. Pentru rangul n al matricei A presupunem existena a n valori
proprii distincte i a n vectori proprii X , independeni. Rezult c un vector
oarecare Y din spaiul n poate fi scris ca o combinaie liniar de cei n vectori proprii
ai matricei A:
Y 1 x1 2 x 2 ... n x n
(10.19)
nmulim ecuaia (10.19) cu matricea A i rezult:
AY A1 x1 A 2 x 2 ... A n x n 11 x1 2 2 x 2 ... n n x n
(10.20)
Continum nmulirea ecuaiei (10.20) cu A pn la un rang k cnd se obine
urmtoarea ecuaie:
A k Y A k 1 x1 A k 2 x 2 ... A k n x n 1 1k x1 2 2k x 2 ... n nk x n (10.21)
Ecuaia (10.21) se mai poate scrie i astfel:
k



A k Y 1k (1 x1 2 2 x 2 ... n n x n ) 1k 1 x1
1
1

(10.22)

dac valoarea lui 1 este cea mai mare valoare proprie i k este mare.
Se poate face aceeai aproximare i pentru ecuaia:


A Y (1 x1 2 2
1
k 1

k 1
1

k 1


x 2 ... n n
1

k 1

x n ) 1k 11 x1 (10.23)

Din mprirea ecuaiei (10.22) la (10.23) rezult valoarea proprie maxim pentru
matricea A. Vectorul Y este un vector coloan i prin mprirea vectorilor
corespunztori ecuaiilor (10.22) i (10.23) vom realiza mprirea componentelor
vectorilor a cror valoare este aproximativ egal cu valoarea proprie maxim.
Dac maticea A este nesingular atunci ecuaia (10.3) mai pate fi scris i asfel:
A 1 X 1 X
(10.24)
Calculnd valoarea caracteristic maxim pentru ecuaia (10.24) rezult valoarea
caracteristic minim a matricei A. Cu aceast metod se poate determina cea mai
mare i cea mai mic valoare careacteristic a unei matrice date.

10.3.1.1. Algoritmul 10.1. Metoda puterii

Vectori i valori proprii

{Variabile
n,k:rangul matricei,contor, ntregi;
A:matrice;
y:vector;
p:vectorul produs;
:vectorul valorilor proprii;
{
p[0]=y
pentru i=1,, k
/* presupunem valoarea maxim a valorilor proprii 1 */
calculeaz p[i]=A*p[i-1] ;
calculeaz [1]=p[k]/p[k-1];
/* mprirea vectorilor const n mprirea componrntelor*/
}
}

10.3.1.2. Implementarea algoritmului 10.1. Metoda puterii


/* Funcia ntoarce :
0 dac s-a gsit valoarea proprie cu precizia dorit,
1 daca s-a gsit o valoare proprie, algoritmul terminndu-se
dup numrul de iteraii specificat.
*/
int PowerDirVP(int or_mat,
/*ordinul matricei */
double MAT[][NrMax], /*matricea */
double VECS[NrMax], /*vectorul de start */
double eps,
/* precizia */
int maxiter,
/* numrul maxim de iteraii */
double *valpr
/* valorile propri */
)
{
int i,j,k,sem;
static double XN[NrMax],XN_1[NrMax];
k=0;
for(i=1;i<=or_mat;i++)XN[i]=VECS[i];
do
{sem=1;
k++;
for(i=1;i<=or_mat;i++)XN_1[i]=XN[i];
for(i=1;i<=or_mat;i++)
{
XN[i]=0;
for(j=1;j<=or_mat;j++)XN[i]+=MAT[i][j]*XN_1[j];
}

215

216

Metode numerice n electronic


for(i=1;i<=or_mat;i++)if(XN_1[i]==0)sem=0;
if(sem!=0)for(i=2;i<=or_mat;i++)
if( fabs( XN[1]/XN_1[1]-XN[i]/XN_1[i]) >eps)sem=0;
}while( (sem==0) && (k<maxiter) );
for(i=1;i<=or_mat;i++)VECS[i]=XN[i];
if(k>=maxiter)return 1;
*valpr=XN[1]/XN_1[1];
return 0;
}

10.3.2. METODA LUI KRLOV


Aceast metod determin coeficienii polinomului caracteristic. Dac se consider
polinomul caracteristic
n

p( ) ci i

cu

i0

cn 1

(10.25)

i substituim =A obinem ecuaia: P(A)=0


(10.26)
Se alege un vector de start X 0 cu care nmulim ecuaia obinut (10.26) i se obine
ecuaia:

ci A i X 0 0 cu condiiile cn 1 ; A 0 I

(10.27)

i 0
i

Notm
A X 0 X i unde componentele lui X i sunt calculate iterativ din X 0
astfel:
X 1 AX 0 ; X 2 AX 1 ; ....,X i AX i 1 ;
(10.28)
i au formulele de calcul:
n

k 1

k 1

k 1

x1 j a jk x 0 k ; j 1....n ; x 2 j a jk x1k : j 1...n; ...,x ij a jk x i 1,k ;j 1...n

(10.29)
Rezult sistemul:

n 1

x ki c k x ni ; i 1...n.

(10.30)

k 0

sau scris matriceal

x 01 x11 x31...x n 1,1 c1 x n1


x 02 x12 x 22 ...x n1,2 c2 x n 2


x 0 n x1n x 2 n ...x n 1,n cn x nn

(10.31)

unde Ci reprezint coeficienii polinomului caracteristic al maticei A.


Din rezolvarea sistemului se obin coeficienii polinomului caracteristic al matricei A.

10.3.2.1. Algoritmul 10.2. Metoda lui Krlov


{Variabile

Vectori i valori proprii


n:ordinul matricei, ntreg;
A:matrice;
V:vectorul de start ales;
C:vectorul coloan al coeficienilor polinomului caracteristic;
X: vector,produs de matrice A cu vector;
i,j,k:contori, ntregi;
{X[0]=V;
pentru i=1, , n
calculeaz X[i]=A*X[i-1];
formeaz sistemul [X[0],X[1],,X[n-1]]*C=-X[n];
Rezolv sistemul;
tiprete soluiile sistemului C[i]; i=1,,n ;
}
}

10.3.2.2. Implementarea algoritmului 10.2. Metoda lui Krlov


/*Funcia care implementeaz metoda lui Krilov pentru
determinarea coeficienilor polinomului caracteristic
*/
int Krilov(int ord,
double mat[][NrMax],
double X[],
double pol[])
{
static double A[NrMax][NrMax];
static double TL[NrMax];
static double V[NrMax];
int i,j,k;
for(i=1;i<=ord;i++)A[i][ord]=X[i];
for(i=1;i<=ord-1;i++)
{
for(j=1;j<=ord;j++)V[j]=X[j];
for(k=1;k<=i;k++)ProdMatVect(ord,mat,V);
for(j=1;j<=ord;j++)A[j][ord-i]=V[j];
}
for(i=1;i<=ord;i++)TL[i]=X[i];
for(i=1;i<=ord;i++)ProdMatVect(ord,mat,TL);
for(i=1;i<=ord;i++)TL[i]=-TL[i];
for(i=1;i<=ord;i++)
{
for(j=1;j<=ord;j++)
printf("%5.3lf ",A[i][j]);
printf("\n");
}

217

218

Metode numerice n electronic


getche();
for(i=1;i<=ord;i++) printf("%5.3lf\n",TL[i]);
getche();
if(GAUSS(ord,A,TL,V)==0) return 0;
for(i=1;i<=ord;i++)pol[i]=V[i];
return 1;
}

10.3.3. METODA LUI HOUSEHOLDER


Aceast metod determin valorile i vectorii proprii ai unei matrice simetrice
A A . Mai nti matricea A este adus cu ajutorul transformrilor ortogonale la o
matrice tridiagonal similar cu A. Se determin valorile proprii ale matricei
tridiagonale, care sunt identice cu cele ale matricei A, prin metoda irului lui turm i
prin metoda biseciei. Se trece la determinarea vectorilor proprii pentru matricea
tridiagonal din care se determin vectorii proprii ai matricei A.
Tridiagonalizarea se realizeaz cu ajutorul transformrilor ortogonale de tipul
T

B(k) E 2W (k) (W (k) ) T unde(W (k) ) T ( 0 ,..,0 ,wk(k)1 ,..,Wn(k) ); (W (k) ) T W (k) 1
(10.32)
Matricea B este o matrice simetric i ortogonal. Detaliat matricea se prezint ca n
expresia (10.33).
(k)

B(k)

0
0
0
0
...
1 0 0 ...

0
0
0
0
...
0 1 0 ...

(k) 2
(k)
(k)
(k)
(k)
(k)
(k)
0 0 0 ... 1 2(wk 1 ) 2.wk 1.wk 2 2.wk 1.wk 3 ... 2 wk 1.wn

(k)
(k)
(k) 2
(k)
(k)
(k)
0 0 0 ... 2.wk 2 .wk 1 1 2.(wk 2 ) 2.wk 2 .wk 3... 2wk 2 .wn
0 0 0 ... 2.w(k) .w(k)
2wk(k)3.wk(k) 2 1 2.(wk(k)3 )2 ... 2wk(k)3.wn(k)
k 3
k 1

0 0 0 ... 2.wn(k).wk(k)1 2.wn(k).wk(k) 2 2.wn(k).wk(k)3 ... 1 2.(wn(k) )2

k=1,2,,n-2.
(10.33)
Din produsul A
. B , punnd condiia ca matricea pe linia k i coloana k s aib
numai primii doi termeni rezult formulele de calcul ale elementelor wi(k) ; i k,..,n. Se
ine seama c suma ptratelor elementelor unei linii a unei matrice A este invariant la
transformarea similar ortogonal (B (k) )T A B (k) . n aceste condiii, se obin
urmtoarele formule de calcul:
pentru k1,2,,n-2
( k 1)

(k )

219

Vectori i valori proprii

a kj2 , wi(k) 0, pentru i 1,...,k ;


n

sum

j k 1

a
.sign(a k,k 1 )
1
( 1 k,k 1
);
2
sum

wk(k)1

a ki .sign(a k,k 1 )

wi(k)

ti
s

2.wk(k)1. sum

(10.34)

; i k 2,...,n;

a ij .w(k)
j , i k 1,...,n;

j k 1
n

wi(k).t i ;

i k 1

ri t i s.wi(k) ; i k 1,...,n;
k a kk ;

k sign(a k,k 1 ). sum ;


Cnd se ajunge la pasul n-2, tridiagonalizarea ia sfrit i se consider:
a n 1 a n 1,n 1 ; a n a nn ; n 1 a n 1,n ;

Matricea A (n 2 ) este tridiagonal iar matricea W se prezint astfel:


0
0
0 ... 0
0

(1)

0
0 ... 0
w2 0

(1)

(2)
0
0 ... 0
w3 w3

(1)
(2)
(n 2 )
W (W ,W ,...,W
)

(1)
(2)
3
w4 0 ... 0
w 4 w4


( 1 )

(2)
wn(3 ) wn(4 ) ... wn(n 2 )
wn wn

Valorile proprii ale matricei A se calculeaz ca soluiile ecuaiei:


1
1
0
0 ...
0
1
2
2
0 ...
0
0
3
3
3 ...
0

(10.35)

(10.36)

... n

Din ecuaia (10.36) se pot calcula minorii principali de la ordinul 1 pn la ordinul n


cu formulele:

f1 ( ) 1 ;

f 2 ( ) ( 2 ) f1 ( ) 12 ;
f i ( ) ( i ) f i1 ( ) i21 f i2 ( ), i 3,...n.

(10.37)

Expresiile minorilor principali (10.37) formeaz un ir turm asociat lui f n ( ) ce


reprezint polinomul caracteristic al matricei tridiagonale i al matricei iniiale date.

220

Metode numerice n electronic

Numrul de variaii de semn ale irului lui turm d numrul de valori proprii reale ale
matricei tridiagonale. Se calculeaz :
L max{|1| |1|,| i 1| |1| | i| i 2 ,3,...n 1,
| n 1| | n|}
(10.38)
Valorile caracteristice sunt cuprinse n intervalul (-L,L). Ca urmare pentru n valori
caracteristice reale, numrul de variaii de semn ale irului lui turm n puncul -L este
n, iar n L este zero. Dac se consider intervalul ( I i , S i ) n care este situat soluia
i se pornete cu I i L ; S i l pentru toate soluile. Se aplic metoda biseciei
pn cnd |S i I i| , fiind eroarea dat.
Vectorii proprii ai matricei tridiagonale se calculeaz prin rezolvarea sistemului
n 2
A .V V unde ia valorile calculate.
v1(j) 1;
v 2(j)

v k(j)1

( 1 1 );

j 1,...,n ; k 2 ,...,n 1;

(10.39)

(l i k ).v kj k 1.v k(j)1 );


k
Pentru calculul vectorilor proprii ai matricei iniiale A se ine seama de relaia de
calcul a matricei tridiagonale:
(10.40)
A(n 2 ) B(n2 ) B( 2 ) B( 1 ) A B( 1 ) B( 2 ) B(n 2 )
Din ecuaia
A(n 2 ) V (j) B(n 2 ) B( 2 ) B( 1 ) A.B( 1 ) B( 2 ) B(n 2 ) V (j) j V (j) (10.41)

A B( 1 ) B( 2 ) B(n 2 ) V (j) j B( 1 ) B( 2 ) B(n 2 ) V (j)

rezult:

Ecuaia (10.42) se reduce la ecuaia : A X (j) j X (j)

(10.42)
(10.43)

unde X (j) reprezint vectorii proprii ai matricei A .


Fcnd produsul iterativ se obine:

V (j) B(n 2 ) V (j) ; V (j) B(n 3 ) V (j) V (j) B( 1 ) V (j)

(10.44)

Pentru prima ecuaie din (10.44) rezult:


v (j) 1
0
1

v (j) v (j)
0
2 2


(j) (j) 2 0 . 0 0

v n2 v n2
(j)
(j) (j)
wn 1
v n 1 v n 1
(j)
(j) (j)
wn
vn vn

(j)

... 0 wn 1

wn(j)

1
(j)
v2


0 .

v n(j)1
(j)
vn

(10.45)

Dac notm suma wi(k) v i(j) , atunci vectorii proprii sunt:


i k 1

v i(j)

v i(j)

2 suma wi(k) pentru k=n-2,,1;i=k+1,,n;j=1,,n;

10.3.3.1. Algoritmul 10.3. Metoda lui Householder

(10.46)

221

Vectori i valori proprii

{Variabile
n:ordinul matricei, ntreg;
A:matrice simetric;
V:vectorul ;
X:vectorii proprii;
W:matrice cu coloane vectori;
i,j,k:contori, ntregi;
:vectorul valorilor proprii;
:vectorul elementelor de pe diagonala principal a matricei
tridiagonale;
:vectorul elementelor de pe prima i a doua diagonal;
t,r:vectori;
p,sum,suma:variabile, reale;
:eroare de calcul, real;
{
pentru k=1,, n-2
n

wi(k) 0,

{calculeaz sum a kj2 ,


j k 1

calculeaz

pentru i 1,...,k ;

a k,k 1 .sign(a k,k 1 )


1
(1
);
2
sum

(k)

w k 1

pentru i=k+2, , l
{

calculeaz

calculeaz

wi(k)

a ki .sign(a k,k 1 )
(k)

2.w k 1 . sum

t i a ij .w (k)
,
j
j k 1

calculeaz

wi(k) .t i ;

i k 1

calculeaz

ri t i s.wi(k) ;

}
calculeaz

a k a kk ;

calculeaz

bk sign(a k,k 1 ). sum ;

}
calculeaz n1 a n 1,n 1 ;

222

Metode numerice n electronic


calculeaz n a nn ;
calculeaz n1 a n1,n ;
pentru i = 2 ,, n-1
calculeaz

f 1(l) l a1 ;
f 2 (l) (l a2 ).f 1(l) b12 ;
f i (l) (l ai ).f i 1(l) bi21.f i 2 (l);

pentru i=2 ,, n-1


calculeaz
L max(|a1| |b1|,|bi 1| |a1| |bi|

|bn 1| |a n| )

pentru i=1 , , n
{
I i L;
S i L;

}
determin numrul de varaii de semn al irului;
pentru k=i pn la m compar k cu nv i modific
I k sau S k
Aplic metoda biseciei i calculeaz li , i=1, , n;
pentru j=1, , n
{
calculeaz
(j)

v1 1;
(j)

v2
(j)

1
(l a1 );
b1 1

v k 1

1
j
(j)
((l a k ).v k bk 1 .v k 1 );
bk i

}
pentru k=n-2, ,1
pentru j=1, , n
{
calculeaz
n

(j)

suma wi(k) .v i
i k 1
( j)
i

v i( j ) v
}
}
}
}

2. suma. wi( k ) ;

Vectori i valori proprii

10.3.3.2. Implementarea algoritmului 10.3


Funcia signatur
*/
int SGN(double x)
{
if(x>0) return 1;
if(x<0) return -1;
return 0;
}
/*
Funcia care ntoarce numrul de variaii de semn al polinoamelor
turm ntr-un punct dat
*/
int Nr_var(int ord, /* ordinul matricei*/
double valfa[],
double vbeta[],
/* Coeficienii alfa si beta ai matricei tridiagonale */
double Med)
{
int i,nv;
double q;
double eps=0.00001;
nv=0;
q=valfa[1]-Med;
if(q<=0)nv++;
for(i=2;i<=ord;i++)
{
if(q!=0)q=valfa[i]-Med-vbeta[i-1]*vbeta[i-1]/q;
else q=valfa[i]-Med-fabs(vbeta[i-1])/eps;
if(q<0) nv++;
}
return nv;
}
/*
Funcia care implementeaz metoda Householder pentru aflarea
valorilor proprii.
*/
void HOW( int n,
double mat[][NrMax],
/* matricea simetric */
double Lambda[])
/* vectorul valorilor proprii */
{
int i,j,k,VB1,VB2,nv,r;

223

224

Metode numerice n electronic


double spat,c;
double static W[NrMax][NrMax];
static double p[NrMax];
static double q[NrMax];
static double alfa[NrMax];
static double beta[NrMax];
double N0,T,M,LAM,suma;
static double S[NrMax];
static double D[NrMax];
double eps=0.000001;
static double v[NrMax][NrMax];
for(k=1;k<=n-2;k++) /* ciclul mare */
{
spat=0;
for(j=k+1;j<=n;j++)spat=spat+mat[k][j]*mat[k][j];
for(i=1;i<=n;i++)W[i][k]=0;
W[k+1][k]=sqrt( 0.5*(1+mat[k][k+1]*SGN(mat[k][k+1])/sqrt(spat) )

);
for(i=k+2;i<=n;i++)
W[i][k]=mat[k][i]*SGN(mat[k][k+1])/(2*W[k+1][k]*sqrt(spat));
for(i=k+1;i<=n;i++)
{
p[i]=0;
for(j=k+1;j<=n;j++)p[i]+=mat[i][j]*W[j][k];
}
c=0;
for(i=k+1;i<=n;i++)c=c+W[i][k]*p[i];
for(i=k+1;i<=n;i++)q[i]=p[i]-c*W[i][k];
alfa[k]=mat[k][k];
beta[k]=-SGN(mat[k][k+1])*sqrt(spat);
mat[k][k+1]=mat[k+1][k]=beta[k];
for(j=k+2;j<=n;j++)
{ mat[k][j]=0;
mat[j][k]=0;
}
for(i=k+1;i<=n;i++)
for(j=k+1;j<=n;j++)
mat[i][j]=mat[i][j]-2*W[i][k]*q[j]-2*q[i]*W[j][k];
}
alfa[n-1]=mat[n-1][n-1];
alfa[n]=mat[n][n];
beta[n-1]=mat[n-1][n];
/*.........................................................................*/
/* Se calculeaz intervalul (-N0 , N0) n care se afl valorile proprii */
N0=fabs(alfa[1])+fabs(beta[1]);
for(i=2;i<=n-1;i++)

225

Vectori i valori proprii


{
T=fabs(beta[i-1])+fabs(alfa[i])+fabs(beta[i]);
if(N0<T) N0=T;
}
T=fabs(beta[n-1])+fabs(alfa[n]);
if(N0<T) N0=T;
/*........................................................................*/
/*Iniializarea limitei stng si dreapt a intervalului n care se
gsesc valorile proprii */
for(i=1;i<=n;i++)
{
S[i]=-N0;
D[i]=N0;
}
/* M mijlocul intervalului - Se va aplica bisecia */
for(i=1;i<=n;i++)
{ while( fabs(D[i]-S[i])>eps )
{
M=(D[i]+S[i])/2;
nv=Nr_var(n,alfa,beta,M);
if(nv>=i) D[i]=M;
else S[i]=M;
}
}
for(j=1;j<=n;j++) Lambda[j]=D[j];
}

10.3.4. METODA RT
Aceast metod utilizeaz tridiagonalizarea matricei simetrice prin metoda
Householder, calculeaz coeficienii polinomului caracteristic i rezolv ecuaia
caracteristic cu metoda Birge -Vieta, determinnd astfel valorile proprii ale matricei
date. Din ecuaia (10.36) se calculeaz coeficienii polinomului caracteristic n mod
iterativ dup urmtoarele formule:
1; a1 1 ;
1;

a 2 a1 2 ; b2 2 a1 12 ;

1; a 3 a 2 3 ; b3 3 a 2 b2 22 ; c3 3b2 22 a1 ;
1; a 4 a 3 4 ; b4 4 a 3 b3 32 ; c4 4 b3 c3 32 a 2 ; d 4 4 c3 32 b2 ;

(10.47)

10.3.4.1. Algoritmul 10.4. Metoda RT

226

Metode numerice n electronic

{Variabile
n:ordinul matricei, ntreg;
A:matricea simetric;
:vectorul elementelor de pe diagonala principal,tridiagonal;
:vectorul elementelor de pe diagonalele simetrice,tridiagonale;
i,j:contori, ntregi;
C:matricea de calcul a coeficienilor polinomului caracteristic;
{pentru i=1, , n
C i 0 1;

pentru j=1, , n

Cij 0;

C11 1 ;
C22 2 . 1 12 ;
pentru i=3 , , n
calculeaz Cii i . Ci 1, i 1 i21 . Ci 2, i 2 ;
pentru i=2 , , n
calculeaz C i1 Ci 1,1 i ;
pentru i=3 , , n
calculeaz Ci 2 i . Ci 1,1 Ci 1, 2 i21 ;
pentru j=3 , , n
pentru i=j+1, , n
calculeaz

C ij i . C i 1, j 1 C i 1, j i21 . C i 2, j 2 ;
coeficienii polinomului caracteristic sunt

i Cn ,n i ; i 1,2,..., n;
}
}

10.3.4.2. Implementarea algoritmului 10.4


/*
Funcia care implementeaz metoda Householder pentru
aflarea vectorilor i valorilor proprii ale unei matrice simetrice
*/
void HOW2( int n,
double mat[][NrMax],
double Lambda[])
{

Vectori i valori proprii

227

int i,j,k,VB1,VB2,nv,r;
double spat,c;
double static W[NrMax][NrMax];
static double p[NrMax];
static double q[NrMax];
static double alfa[NrMax];
static double beta[NrMax];
double N0,T,M,LAM,suma;
static double S[NrMax];
static double D[NrMax];
double eps=0.000001;
static double v[NrMax][NrMax];
static double Coef[NrMax][NrMax];
static double Pol[NrMax];
for(k=1;k<=n-2;k++) /* ciclul mare */
{
spat=0;
for(j=k+1;j<=n;j++)spat=spat+mat[k][j]*mat[k][j];
for(i=1;i<=n;i++)W[i][k]=0;
W[k+1][k]=sqrt( 0.5*(1+mat[k][k+1]*SGN(mat[k][k+1])/sqrt(spat) )
);
for(i=k+2;i<=n;i++)
W[i][k]=mat[k][i]*SGN(mat[k][k+1])/(2*W[k+1][k]*sqrt(spat));
for(i=k+1;i<=n;i++)
{
p[i]=0;
for(j=k+1;j<=n;j++)p[i]+=mat[i][j]*W[j][k];
}
c=0;
for(i=k+1;i<=n;i++)c=c+W[i][k]*p[i];
for(i=k+1;i<=n;i++)q[i]=p[i]-c*W[i][k];
alfa[k]=mat[k][k];
beta[k]=-SGN(mat[k][k+1])*sqrt(spat);
mat[k][k+1]=mat[k+1][k]=beta[k];
for(j=k+2;j<=n;j++)
{ mat[k][j]=0;
mat[j][k]=0;
}
for(i=k+1;i<=n;i++)
for(j=k+1;j<=n;j++)
mat[i][j]=mat[i][j]-2*W[i][k]*q[j]-2*q[i]*W[j][k];
}
alfa[n-1]=mat[n-1][n-1];
alfa[n]=mat[n][n];
beta[n-1]=mat[n-1][n];
for(i=1;i<=n;i++)

228

Metode numerice n electronic


{

for(j=1;j<=n;j++) printf("%5.3lf ",mat[i][j]);


printf("\n");

}
getche();
for(i=1;i<=n;i++)
{
Coef[i][0]=1;
for(j=1;j<=n;j++)
Coef[i][j]=0;
}
Coef[1][1]=-alfa[1];
Coef[2][2]=alfa[2]*alfa[1]-beta[1]*beta[1];
for(i=3;i<=n;i++)
Coef[i][i]=-alfa[i]*Coef[i-1][i-1]-beta[i-1]*beta[i-1]*Coef[i-2][i-2];
for(i=2;i<=n;i++)
Coef[i][1]=Coef[i-1][1]-alfa[i];
for(i=3;i<=n;i++)
Coef[i][2]=-alfa[i]*Coef[i-1][1]+Coef[i-1][2]-beta[i-1]*beta[i-1];
for(j=3;j<=n;j++)
for(i=j+1;i<=n;i++)
Coef[i][j]=-alfa[i]*Coef[i-1][j-1]+Coef[i-1][j]
-beta[i-1]*beta[i-1]*Coef[i-2][j-2];
for(i=0;i<=n;i++)
{
Pol[i]=Coef[n][n-i];
printf("%5.2lf\n",Pol[i]);
}
getche();
Birge_Vieta(n,Pol,0,1000,0.00001,S);
for(i=1;i<=n;i++)
{
Lambda[i]=S[i];
printf("%5.2lf\n",S[i]);
}
getche();
for(j=1;j<=n;j++)
{
LAM=S[j];
v[1][j]=1;
for(k=2;k<=n-1;k++)
v[k+1][j]=((LAM-alfa[k])*v[k][j]-beta[k-1]*v[k-1][j])/beta[k];
}
for(j=1;j<=n;j++)
for(r=1;r<=n-2;r++)
{
k=n-1-r;
suma=0;

229

Vectori i valori proprii


for(i=k+1;i<=n;i++)
suma=suma+W[i][k]*v[i][j];
for(i=k+1;i<=n;i++)
v[i][j]=v[i][j]-2*suma*W[i][k];
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++) printf("%5.3lf ",v[i][j]);
printf("\n");
}
getche();
}

10.3.5.METODA LR (LEFT-RIGHT)
Aceast metod se bazeaz pe descompunerea matricei A1 n dou matrice una
inferior trunghiular cu elementele diagonalei principale egale cu unitatea L1 i una
superior trunghiular R1 .
A1 L1 .R1 ;
(10.48)
Se formeaz o nou matrice din matricele triunghiulare obinute:
A2 R1 .L1
(10.49)
Matricea A2 se descompune iari n dou matrice inferior i superior triunghiulare
L2 i respectiv R2 :
A2 L2 .R2
(10.50)
Se formeaz o nou matrice A2
A2 R2 .L2
(10.51)
Procedeul este iterativ i se obine irul:
A1 ,A2 ,...,An
(10.52)
Din ecuaia (10.48) rezult:
(10.53)
L1 A1 .R11 i R1 L11 .A1
innd cont de relaiile (10.53) avem:
A2 R1 .A1 .R11 sau A2 L11 .A1 .L1

(10.54)

Deci un element oarecare al irului (10.52) se poate scrie sub forma:


Ai (Ri 1 .Ri 2 . ... .R2 .R1 ).A1 .(Ri 1 .. ... .R2 .R1 ) 1 (L1 .L2 . ... Li 1 ) 1 A1 .(L1 .L2 . ...Li 1 )

(10.55)
ca urmare toate matricele irului (10.52) au aceleai valori caracteristice.
Produsul matricelor inferior triunghiulare L este tot o matrice inferior triunghiular cu
elementele diagonalei principale egale cu unitatea:

230

Metode numerice n electronic


n

L Li

(10.56)

i 1

iar produsul matricelor superior triunghiulare R, este o matrice superior triunghiular


n

R Ri

(10.57)

i 1

Dac n irul matricelor An , n , elementele diagonale ale matricei Rn tind la


valorile proprii ale matricei A1 .
n cadrul metodei se pune problema descompunerii matricei Ai n matricele Li i Ri
i calculul produsului Ri Li .
Calculul elementelor matricelor Li i Ri se realizeaz dup expresiile (10.58) iar
elementele produsului Ri Li dup expresiile (10.59).
l ii 1; i 1,2,...,n;
l ij 0; pentru i j;
l i1

a i1
; i 2,3,...,n; a11 0;
a11

r1i a1i ; i 1,2,...,n;


rij 0; i j;
rij a ij

l ij

(10.58)

i 1

l ik rkj ; i j;

k 1

i 1
1
(a ij l ik rkj ); rii 0; i j;
rii
k 1

a ij rij

rik .l kj ;

k j 1

a ij rij ; i j ;j n ;
a ij

i j; j n;

(10.59)

rik .l kj ; i j ;

k i

Valorile proprii ale matricei A1 sunt elementele diagonale ale matricei Rn1 dac se
ndeplinete condiia
|a ii(n) a ii(n 1 )| ; i 1,2 ,...,n ;
(10.60)
unde este eroarea de calcul.

231

Vectori i valori proprii

10.3.5.1. Algoritmul 10.5. Metoda LR


{Variabile
A:matrice;
L:matrice inferior triunghiular;
R:matrice superior triunghiular;
i,j,k:contori, ntregi;
:vectorul valorilor proprii;
:eroarea de calcul, real;
sum:sum parial, real;
{pentru i=1, , n
pentru j=1, , n
bij a ij ;
repet

a ij bij ;

pentru i=1, , n
pentru j=1, , n
{dac i>j atunci rij 0;
dac i<j atunci l ij 0 ;
}
pentru i=1, , n
pentru j=i , , n
{
sum=0;
pentru k=1, , i-1
calculeaz sum sum l ik . rkj ;
calculeaz rij a ij sum ;
}
dac rii 0 atunci
stop problema este nerezolvabil;
pentru j=i+1, , n
{
sum=0;
pentru k=1, , i-1
calculeaz sum sum l jk rki ;
calculeaz l ji

l ii 1 ;

a ji sum
rii

232

Metode numerice n electronic


}
pentru i=1, , n
pentru j-1, , n
dac ((i<j) i (j<n)) atunci
{
sum=0;
pentru k=j+1, , n
calculeaz sum sum rik . l kj ;
calculeaz bij rij sum ;
}
dac ((i<j) i (j=1)) atunci bij rij ;
dac (i>j) atunci
{ bij 0 ;
pentru k=1, , n
calculeaz bij a ij rik . l kj ;
}
pn cnd |bii a ii | e ;
scrie valorile proprii sunt rii pentru i=1, , n;
}
}

10.3.5.2. Implementarea algoritmului 10.5. Metoda LR


int LR(int n,
double A[][NrMax],
double L[][NrMax],
double R[][NrMax])
{int i,j,k;
double sum;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(i>j)R[i][j]=0;
if(i<j)L[i][j]=0;
}
for(i=1;i<=n;i++)
{
for(j=i;j<=n;j++)
{
{
sum=0;

233

Vectori i valori proprii


for(k=1;k<=i-1;k++)sum+=L[i][k]*R[k][j];
R[i][j]=A[i][j]-sum;
}
}
if (R[i][i]==0) return 0;
for(j=i+1;j<=n;j++)
{
sum=0;
for(k=1;k<=i-1;k++)sum+=L[j][k]*R[k][i];
L[j][i]=(A[j][i]-sum)/R[i][i];
}
L[i][i]=1;
}
return 1;
}
void ProdRL(int n,
double R[][NrMax],
double L[][NrMax],
double A[][NrMax])
{
int i,j,k;
double sum;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if ( ( i<=j ) && (j<n) )
{
sum=0;
for(k=j+1;k<=n;k++) sum+=R[i][k]*L[k][j];
A[i][j]=R[i][j]+sum;
}
if ( ( i<=j ) && (j==n) ) A[i][j]=R[i][j];
if ( i>j )
{
A[i][j]=0;
for(k=i;k<=n;k++) A[i][j]+=R[i][k]*L[k][j];
}
}
}
/* Funcia care implementeaz metoda descompunerii LR
pentru aflarea valorilor proprii
*/
int VPLR(int n,
double A[][NrMax],
double VP[])
{

234

Metode numerice n electronic


double static
r[NrMax][NrMax],l[NrMax][NrMax],A_1[NrMax][NrMax];
int i,j,sem;
double eps=0.00000001;
do
{
sem=1;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
A_1[i][j]=A[i][j];
if( LR(n,A,l,r)==0) return 0;
ProdRL(n,r,l,A);
for(i=1;i<=n;i++)if( fabs(A[i][i]-A_1[i][i])>eps)sem=0;
}
while(sem==0);
for(i=1;i<=n;i++)VP[i]=A[i][i];
return 1;
}

10.4. APLICAII
1. Se consider matricea:

1 2 3 5

1 2 4 3

A=
3 2 1 2

3 5 2 1
S se determine valorile i vectorii proprii ai matricei date.
Prin metoda puterii se obine cea mai mare valoare caracteristic:
max 7.225565 ;
Prin metoda lui Krlov se obine urmtorul polinom caracteristic:
P() 4 5 3 28 2 50 261
Rdcinile polinomului sunt determinate cu metoda lui Bairstow i se obin
urmtoarele valori caracteristice:
1 7.225565; 2 3.680183; 3,4 2.952874 i1046774
.
;
2. Se d matricea simetric:

235

Vectori i valori proprii

2
A=
3

2
3
2

3
2
4

4
5
3

Se cer valorile i vectorii proprii ai matricei A.


Prin metoda Householder se obin valorile proprii:
l1 6.429979; l2 3.741197; l3 6.029197; l4 9.659586;

i vectorii proprii:
x1 ( 1000
. ,2.011,2.573,0.924 ) ; x 2 ( 1000
. ,1016
. , 1719
. , 1797
.
);
x 3 ( 1,000,1626
. ,0.914 , 0128
. ); x 4 ( 1000
. ,3.720,9.950,5.602 );

Prin metoda puterii se obine urmtoarea valoare caracteristic maxim


max 9.659586;
Prin metoda lui Krlov se obine urmtorul polinom caracteristic:
P() 4 13 3 8 2 534 1401;
Valorile caracteristice sunt:
1 6.429979; 2 3.741197; 3 6.029197; 4 9.659586;
iar vectorii proprii sunt identici cu cei de la metoda Householder.
Prin metoda LR i TR s-au obinut aceleai valori proprii ca i n cazul metodei lui
Householder.

11
FUNCII SPECIALE *
Acest capitol cuprinde cteva funcii utilizate mai mult n aplicaii, i ale cror
valori este necesar s le cunoatem n diferite puncte ale domeniului de definiie. Ca
funcii speciale considerm funciile transcendentale (funcii definite prin integrale
improprii) sau funcii care reprezint soluii pentru diferite ecuaii difereniale de
ordinul doi. Deoarece n calculul acestor funcii se utilizeaz funcii mai simple,se
prezint i aceste funcii.

11.1. FUNCIA GAMMA


Funcia gamma este definit de integrala improprie:

( x ) t x 1e t dt

(11.1)

Pentru x N funcia gamma se calculeaz cu ajutorul formulei:

( n 1) n!

(11.2)
Ca urmare a acestei relaii, funcia factorial se poate calcula i cu ajutorul funciei
gamma. Argumentul funciei gamma poate fi i complex, deci x z C (mulimea
numerelor complexe) . Funcia gamma satisface urmtoarea relaie de recuren:
( z 1) z ( z )
(11.3)
Dac funcia gamma este cunoscut pentru Re(z)>1, ea poate fi calculat i pentru
Re(z)<1 cu ajutorul expresiei :

(1 z )

( z ) sin z

(1 z ) sin z

(11.4)

Calculul numeric al funciei gamma se poate face cu o formul aproximativ, funcie


de constantele ntregi r , k i de un ir de constante c1,c2 ,...,c k , cu condiia z > 0.

( z 1) z r

1
(z )
2

1
(z r )
2

c
c
c

2 c0 1 2 k (11.5)

z 1 z 2
zk

Pentru r = 5 i k = 6 se determin setul de coeficieni astfel ca eroarea


*Bibliografie [20], [22], [24]

|| 2 10 10 .

Funcii speciale

237

Pentru calculul valorii gamma se realizeaz calculul ln( ( x ) ) pentru x R . Se


ine seama de formula (11.3) din care se calculeaz ( x )

1
( x 1) i de (11.5).
x

11.1.1. ALGORITMUL 11.1. FUNCIA GAMMA


{Variabile
x: punctul n care se calculeaz funcia, real ;
coef:vectorul coeficienilor ;
j:contor, ntreg;
t,s:variabile pentru sume, real;
z,y:variabile pentru punctul de calcul, reale;
gamma:valoarea funciei gamma n x, real;
{coef[0]= 76.18009172947146;
coef[1]=-86.50532032941677C;
coef[2]=24.01409824083091;
coef[3]=-1.231739572450155;
coef[4]=0.1208650973866179e-2;
coef [5]=-0.5395239384953e-5
y:=x;
z:=x;
t=x+5.5;
t:=(x+0.2)*log(t)-t;
s:=1.000000000190015;
pentru j=1 pn la 5
{
calculeaz s:=s+coef[j]/(y+j+1);
}
calculeaz gamma=exp(-t+log(2.5066282746310005*s/x));
}
}

11.2.2. IMPLEMENTAREA ALGORITMULUI 11.1


#include <math.h>
/* Funcia ntoarce valoarea funciei gamma n punctul xx>0 */
float gammln( float xx)
{
double x,y ,tmp,ser;
static double coef[6]={ 76.18009172947146,
-86.50532032941677,
24.01409824083091,

238

Metode numerice n electronic


-1.231739572450155,
0.1208650973866179e-2,
-0.5395239384953e-5};
int j;
float valoare;
y=x=xx;
tmp=x+5.5;
tmp-=(x+0.5)*log(tmp);
ser=1.000000000190015;
for(j=0;j<=5;j++)ser+=coef[j]/++y;
valoare= - tmp+log(2.5066282746310005*ser/x);
return valoare;
}
int main(void)
{
float punct;
clrscr();
printf("Punctul de calcul : ");
scanf("%f",&punct);
printf(" Valoare funciei Gamma n punctul %.5f este
%.5f",punct,exp(gammln(punct)));
getche();
return 0;
}

11.2. FUNCIA FACTORIAL


Aceast funcie este definit pe mulimea numerelor naturale N. Pentru n=0
ia valoarea 1. Funcia factorial reprezint o funcie numeric calculabil cu expresia:
n! 1 2 3 n
(11.6)
Calculul valorii acestei funcii ntr-un punct al domeniului de definiie se poate realiza
cu ajutorul funciei gamma, expresia (11.2).

11.2.1. ALGORITMUL 11.2. FUNCIA FACTORIAL


{Variabile
x: punctul n care se calculeaz funcia gamma, real ;
coef:vectorul coeficienilor ;
j:contor, ntreg;
t,s:variabile pentru sume, real;
z,y:variabile pentru punctul de calcul, real;
n:punctul n care se calculeaz funcia factorial, ntreg;
fact:valoarea factorialului, ntreg;

Funcii speciale

239
{
gamma(x): funcia gamma
}
{f[1]=1.0;
f[2]=2.0;
f[3]=6.0;
f[4]=24.0;
dac n<0 atunci scrie eroare Stop;
dac (n>32) atunci f[n] = exp(gammaln(n+1.0);
atta timp ct (ntop<n )
{
j=ntop+1;
f[ntop]=f[j]*ntop;
}
fact=a[n];
}
}

11.2.2.IMPLEMENTAREA ALGORITMULUI 11.2


{Variabile
#include <math.h>
/* Funcia ntoarce valoarea funciei gamma n punctul xx>0 */
float gammln( float xx)
{
double x,y ,tmp,ser;
static double coef[6]={ 76.18009172947146,
-86.50532032941677,
24.01409824083091,
-1.231739572450155,
0.1208650973866179e-2,
-0.5395239384953e-5};
int j;
float valoare;
y=x=xx;
tmp=x+5.5;
tmp-=(x+0.5)*log(tmp);
ser=1.000000000190015;
for(j=0;j<=5;j++)ser+=coef[j]/++y;
valoare= - tmp+log(2.5066282746310005*ser/x);
return valoare;
}
/* ntoarce factorialul unui ntreg pozitiv utiliznd funcia Gamma */
float factrl(int n)
{

240

Metode numerice n electronic


static int ntop=4;
static float a[33]={1.0,1.0,2.0,6.0,24.0};
int j;
if(n<0){
printf("Eroare. Argument negativ");
getche();
return -1;
}
if (n>32) return exp(gammln(n+1.0));
while(ntop<n)
{
j=ntop++;
a[ntop]=a[j]*ntop;
}
return a[n];
}
int main(void)
{
int punct;
clrscr();
printf("Punctul de calcul : ");
scanf("%d",&punct);
printf(" Valoarea funciei factorial n punctul %d este
%.5f",punct,factrl(punct));
getche();
return 0;
}

11.3. COEFICIENII BINOMIALI


Coeficienii binomiali sunt definii astfel:
C(k,n)

n!
k!(n k)!

0k n ;

(11.7)

Valoarea coeficienilor binomiali se calculeaz cu ajutorul funciei factorial, ei fiind


definii tot pe mulimea numerelor naturale N. Pentru calculul valorilor coeficienilor
binomiali se logaritmeaz formula coeficienilor binomiali i se utilizeaz funciile:
fact(n) = exp(gammaln(n+1,0)) i factln(n) = gammaln(n+1.0)
(11.8)
De aceste expresii se ine seama n realizarea algoritmului metodei de calcul.

11.3.1. ALGORITMUL 11.3. COEFICIENII BINOMIALI


{Variabile
x: punctul n care se calculeaz funcia gamma ;

Funcii speciale
coef:vectorul coeficienilor , real;
j:contor, ntreg;
t,s:variabile pentru sume, real;
z,y:variabile pentru pumctul de calcul, real;
n:punctul n care se calculeaz funcia factorial, ntreg;
fact:valoarea factorialului, ntreg;
{
gamma(x): funcia gama;
}
calculeaz factln(n);
calculeaz floor(0.5+exp(factln(n)-factln(k)-factln(n-k)));
scrie coeficienii binomiali;
}
}

11.3.2. Implementarea algoritmului 11.3


#include <math.h>
/* Funcia ntoarce valoarea funciei gamma n punctul xx>0 */
float gammln( float xx)
{
double x,y ,tmp,ser;
static double coef[6]={ 76.18009172947146,
-86.50532032941677,
24.01409824083091,
-1.231739572450155,
0.1208650973866179e-2,
-0.5395239384953e-5};
int j;
float valoare;
y=x=xx;
tmp=x+5.5;
tmp-=(x+0.5)*log(tmp);
ser=1.000000000190015;
for(j=0;j<=5;j++)ser+=coef[j]/++y;
valoare= - tmp+log(2.5066282746310005*ser/x);
return valoare;
}
float factln(int n)
{
static float a[101];
if( n<0 ) {
printf("Eroare. Argument negativ");
return -1;

241

242

Metode numerice n electronic


getche();
}
if(n<=1) return 0;
else return gammln(n+1.0);
}
/* Funcia ntoarce coeficienii binomial Combinri de n luate cte k */
float coef_bin(int n, int k)
{
return floor(0.5+exp(factln(n)-factln(k)-factln(n-k)));
}
int main(void)
{
int nn,kk;
clrscr();
printf("n : ");scanf("%d",&nn);
printf("k : ");scanf("%d",&kk);
printf(" Valoare funciei coef_bin de %d luate cte %d este
%f",nn,kk,coef_bin(nn,kk));
getche();
return 0;
}

11.4. FUNCIA BETA


Funcia beta este definit de urmtoarea integral:
1

B( z,w ) B( w,z ) t z 1 (1 t ) w1 dt
0

(11.9)

i se calculeaz cu ajutorul funciei gamma dup urmtoarea formul:

B( z,w )

( z ) ( w )
( z w)

11.4.1. Algoritmul 11.4. Funcia beta


{ Variabile
z:argumentul funciei, real;
w:argumentul funciei, real;
sol:valoarea funciei beta, real;
{calculeaz gamma(z);
calculeaz gamma(w);
calculeaz gamma(z+w);
calculeaz sol=gamma(z)*gamma(w)/gamma(z+w);
}
scrie valoarea funciei sol;

(11.10)

Funcii speciale
}

11.4.2. Implementarea algoritmului 11.4


#include <math.h>
/* Funcia ntoarce valoarea funciei gamma n punctul xx>0 */
float gammln( float xx)
{
double x,y ,tmp,ser;
static double coef[6]={ 76.18009172947146,
-86.50532032941677,
24.01409824083091,
-1.231739572450155,
0.1208650973866179e-2,
-0.5395239384953e-5};
int j;
float valoare;
y=x=xx;
tmp=x+5.5;
tmp-=(x+0.5)*log(tmp);
ser=1.000000000190015;
for(j=0;j<=5;j++)ser+=coef[j]/++y;
valoare= - tmp+log(2.5066282746310005*ser/x);
return valoare;
}
/* Funcia ntoarce valoarea funciei beta(z,w) */
float beta( float z, float w)
{
return exp(gammln(z)+gammln(w)-gammln(z+w));
}
int main(void)
{
float zz,ww;
clrscr();
printf("z : ");
scanf("%f",&zz);
printf("w : ");
scanf("%f",&ww);
printf(" Valoarea funciei Beta( %.5f ,%.5f) este
%.5f",zz,ww,beta(zz,ww));
getche();
return 0;
}

243

244

Metode numerice n electronic

11.5. FUNCIILE BESSEL


Prin definiie, se numete ecuaia lui Bessel ecuaia diferenial:

x 2 y xy ' (x 2 2 )y 0

(11.11)
unde este un paremetru real sau complex, iar soluiile ecuaiei se numesc funcii
Bessel sau funcii cilindrice. Soluia ecuaiei (1) se caut sub forma:

y(x) x r C k x k , x C

(11.12)

k 0

n care r i C k se vor calcula. Prin nlocuirea expresiei (11.12) n ecuaia (11.11) se


ajunge la soluia :

2k
( 1) k
x

k 0 k!( k 1 ) 2

y(x)

(11.13)

Notaia y a funciei este nlocuit cu notaia J consacrat pentru funciile lui Bessel de
spea nti. Astfel, funcia
x
J (x)
2

k
1 2
x
4

k 0 k!(

(11.14)

k 1)

pentru 0, arg() [0,] are urmtoarele proprieti:


1) pentru =n N, J este o funcie ntreag;

2) pentru N, J

este olomorf pe D\T unde T este o semidreapt cu

originea n O.
Dac nu este ntreg se poate obine o nou soluie a ecuaiei Bessel ca o combinaie
de funcii Bessel J . Astfel, funcia

Y ( x )

J ( x ) cos n J ( x )
sin n

(11.15)

reprezint soluii ale ecuiei lui Bessel (11.11) i se numesc funcii Bessel de spea a
doua. i aceste funcii la limit pot fi date pentru ntreg. Pentru 0 x se fac
aproximrile:

1
x
;
( 1) 2
2
Y0 ( x ) ln x;

J ( x )

Y ( x )
Pentru x v se fac aproximrile:

( x ) x
;
2

(11.16)

Funcii speciale

245
1
1

cos x

2
4

2
1
1

sin x
Y

2
4
x

(11.17)

Pentru x se fac aproximrile:


J

3
3

2
9
3
3
6

2
3
3

1
3

1
3

0.4473

0.7748
3

(11.18)

Relaiile de recuren pentru calculul funciilor Bessel sunt:

2n
J ( x ) J n 1 ( x )
x n
(11.19)
2n
Yn1 ( x )
Y ( x ) Yn 1 ( x )
x n
Pentru 0< x< 8 se aproximeaz J 0 ( x ) i J 1 ( x ) prin funcii raionale n x .
Aceste aproximaii pentru Y0 ( x ) i Y1 ( x ) sunt:
2
2
1
i
Y0 ( x ) J 0 ( x ) ln x
Y1 ( x ) J1 ( x ) ln x

x
Pentru 8<x< se utilizeaz aproximaiile (n=0,1):
2 8

8
Jn (x)
Pn cos X n Qn sin X n

x
x
x
J n 1 ( x )

Yn ( x )

2 8

8
Pn sin X n Qn cos X n
x

x x

(11.20)

unde
Xn x

2n 1
;
4

8
1 ;
x

Calculul funciilor Bessel ntregi ncepe cu calculul funciilor J 0 ,J 1 ,Y0 ,Y1 , dup care
se aplic formulele de recuren.
1
x

1
x

Coeficienii polinoamelor Pn , Qn ,[24], sunt dai n cadrul programelor.


n continuare, se dau integral programele de calcul pentru funciile Bessel de spea
nti i de ordinul zero,de spea a doua i de ordinul zero, de spea nti i de ordinul
nti, i de spea a doua i ordinul nti notate respectiv J 0 , Y0 , J1 , Y1 .

11.5.1. PROGRAMUL PENTRU FUNCIA BESSEL J0

246

Metode numerice n electronic

#include <math.h>
/* Funcia ntoarce valoarea lui Jo(x) pentru x real */
float bessj0(float x)
{
float ax,z;
double xx,y, ans,ans1,ans2;
if ((ax=fabs(x)) <8.0
{
y=x*x;
ans1=57568490574.0+y*(-13362590354.0+y*(651619640.7
+y*(-11214424.18+y*(77392.33017+y*(-184.9052456)))));
ans2=57568490411.0+y*(-1029532985.0+y*(9494680.718
+y*(59272.64853+y*(267.8532712+y*(1.0)))));
ans=ans1/ans2;
}
else
{
z=8.0/ax;
y=z*z;
xx=ax-0.785398164;
ans1=1.0+y*(-0.1098628627e-2+y*(0.2734510407e-4+
y*(-0.2073370639e-5+y*0.2093887211e-6)));
ans2=-0.1562499995e-1+y*(0.1430488765e-3+
y*(0.6911147651e-5+y*0.7621095161e-6y*0.934935152e-7)));
ans=sqrt(0.636619772/ax)*(cos(xx)*ans1-z*sin(xx)*ans2);
}
return ans;
}
int main (void)
{
float punct;
clrscr();
printf("Dai punctul : ");
scanf("%f",&punct);
printf("Rezultat : %.5f",bessj0(punct));
getche();
return 0;
}

11.5.2. PROGRAMUL PENTRU FUNCIA BESSEL Y0


/* ntoarce Yo(x) pentru x>0 */

Funcii speciale
float bessy0( float x)
{
float z;
double xx,y,ans,ans1,ans2;
if (x<8.0)
{
y=x*x;
ans1=-2957821389.0+y*(7062834065.0+y*(-512359803.6+
y*(10879881.29+y*(-86327.92757+y*228.4622733))));
ans2=40076544269.0+y*(745249964.8+y*(7189466.438+
y*(47447.26470+y*(226.1030244+y*1.0))));
ans=(ans1/ans2)+0.636619772*bessj0(x)*log(x);
}
else
{
z=8.0/x;
y=z*z;
xx=x-0.785398164;
ans1=1.0+y*(-0.1098628627e-2+y*(0.2734510407e-4+
y*(-0.2073370639e-5+y*0.2093887211e-6)));
ans2=-0.1562499995e-1+y*(0.1430448765e-3+
y*(-0.6911147651e-5+ y*(0.7621095161e-6+
y*(-0.934945152e-7))));
ans=sqrt(0.636619772/x)*(sin(xx)*ans1+z*cos(xx)*ans2);
return ans;
}
}
int main (void)
{
float punct;
clrscr();
printf("Dai punctul : ");
scanf("%f",&punct);
printf("Rezultat : %.5f",bessy0(punct));
getche();
return 0;
}

11.5.3.PROGRAMUL PENTRU FUNCIA BESSEL J1


#include <math.h>
/* Funcia ntoarce valoarea lui J1(x) pentru x real */
float bessj1(float x)
{
float ax,z;

247

248

Metode numerice n electronic


double xx,y, ans,ans1,ans2;
if ((ax=fabs(x)) <8.0 )
{
y=x*x;
ans1=x*(72362614232.0+y*(-7895059235.0+y*(242396853.1
+y*(-2972611.439+y*(15704.48260+y*(- 30.16036606))))));
ans2=144725228442.0+y*(-2300535178.0+y*(18583304.74
+y*(99447.43394+y*(376.9991397+y*(1.0)))));
ans=ans1/ans2;
}
else
{
z=8.0/ax;
y=z*z;
xx=ax-2.356194491;
ans1=1.0+y*(-0.183105e-2+y*(0.3516396496e-4+
y*(-0.2457520174e-5+y*(-0.240337019e-6))));
ans2=0.04687499995+y*(-0.2002690873e-3+y*(0.8449199096e-5+
y*(-0.88228987e-6+y*0.105787412e-6)));
ans=sqrt(0.636619772/ax)*(cos(xx)*ans1-z*sin(xx)*ans2);
if (x<0.0) ans=-ans;
}
return ans;
}
int main (void)
{
float punct;
clrscr();
printf("Dai punctul : ");
scanf("%f",&punct);
printf("Rezultat : %.5f",bessj1(punct));
getche();
return 0;
}

11.5.4. PROGRAMUL PENTRU FUNCIA BESSEL Y1


#include <math.h>
/* Funcia ntoarce valoarea lui J1(x) pentru x real */
float bessj1(float x)
{
float ax,z;
double xx,y, ansj,ans1,ans2;
if ((ax=fabs(x)) <8.0 )
{y=x*x;

Funcii speciale

249
ans1=x*(72362614232.0+y*(-7895059235.0+y*(242396853.1
+y*(-2972611.439+y*(15704.48260+y*(-30.16036606))))));
ans2=144725228442.0+y*(-2300535178.0+y*(18583304.74
+y*(99447.43394+y*(376.9991397+y*(1.0)))));
ansj=ans1/ans2;
}
else
{
z=8.0/ax;
y=z*z;
xx=ax-2.356194491;
ans1=1.0+y*(-0.183105e-2+y*(0.3516396496e-4+
y*(-0.2457520174e-5+y*(-0.240337019e-6))));
ans2=0.04687499995+y*(-0.2002690873e-3+y*(0.8449199096e-5+
y*(-0.88228987e-6+y*0.105787412e-6)));
ansj=sqrt(0.636619772/ax)*(cos(xx)*ans1-z*sin(xx)*ans2);
if (x<0.0) ansj=-ansj;
}
return ansj;

}
/* Funcia ntoarce valoarea lui Y1(x) pentru x pozitiv */
float bessy1(float x)
{
float z;
double xx,y, ans,ans1,ans2,ansj;
if (x <8.0 )
{
y=x*x;
ans1=x*(-0.4900604943e13+y*(0.1275274390e13
+y*(-0.5153438139e11+y*(0.7349264551e9+y*(-0.4237922726e7
+y*0.8511937935e4)))));
ans2=0.2499580570e14+y*(0.4244419664e12+y*(0.3733650367e10
+y*(0.2245904002e8+y*(0.1020426050e6+y*(0.3549632885e3
+y)))));
ans=(ans1/ans2)+0.636619772*(ansj*log(x)-1.0/x);
}
else
{
z=8.0/x;
y=z*z;
xx=x-2.356194491;
ans1=1.0+y*(0.183105e-2+y*(0.3516396496e-4
+y*(-0.2457520174e-5+y*(-0.240337019e-6))));
ans2=0.04687499995+y*(-0.2002690873e-3+y*(0.8449199096e-5
+y*(-0.88228987e-6-y*0.105787412e-6)));

250

Metode numerice n electronic


ans=sqrt(0.636619772/x)*(sin(xx)*ans1+z*cos(xx)*ans2);
}
return ans;
}
int main (void)
float punct;
clrscr();
printf("Dai punctul : ");
scanf("%f",&punct);
printf("Rezultat : %.5f",bessy1(punct));
getche();
return 0;
}

11.6. APLICAII
n tabelul (11.1) sunt prezentate valorile funciilor J 0,Y0 ,J 1 ,Y1 pentru diferite
valori ale argumentului x .
Tabelul 11.1

x
0
0.1
0,2
0.5
0.9
1.0
1.2
1.5
1.9
2.0
2.4
3.0
3.5
4.0
4.5
5.0
5.5
6.0
6.5
7.0
7.5

Jo
1.00000
0.99750
0.99002
0,93847
0.80752
0.76520
0.67113
0.51183
0.28182
0.22389
0.00251
-0.26005
-0.38013
-0.39715
-0.32054
-0,17760
-0.00684
0.15065
0.26009
0.30008
0.26634

J1
0.00000
0.04995
0.09963
0.24420
0.41654
0.45426
0.52163
0.59930
0.65179
0.65487
0.62454
0.45084
0.20216
-0.10903
-0.43292
-0.70237
-0.84045
-0.77852
-0.48785
-0.01631
0.49928

Yo
-1.144e+308
-1.53424
-1.08111
-0.44452
0.00563
0.08826
0.22808
0.38245
0.49682
0.51038
0.51041
0.37685
0.18902
-0.01694
-0,19471
-0.30852
-0.33948
-0.28819
-0.17324
-0.02595
0.11731

Y1
-1.245+340
-6.38575
-3.22188
-1.36457
-0.84590
-0.78121
-0.67897
-0.55633
-0.40188
-0.36152
-0.18943
0.08754
0.30063
0.45621
0.52224
0.48350
0.34680
0.14059
-0.09077
-0.29687
-0.43262

Funcii speciale
8.0
8.5
9.0

251
0.17165
0.04194
-0.09033

0.23382
0.27226
0.24460

0.22352
0.27021
0.24994

-0.15806
-0.02617
0.10431

Calculnd mai multe valori ale funciilor date n intervalul (0,10) s-au obinut graficele
funciilor Bessel din fig.11.1.
Funcia Bessel

Fig.11.1. Graficele funciilor Bessel

Cu ajutorul programelor se poate determina valoarea funciilor Bessell n orice punct


din domeniul de definiie al funciilor.

12
TRANSFORMATA FOURIER DISCRET*
Un semnal discret este definit prin valorile acestuia la momente discrete de timp. n general,
timpul t este discretizat uniform dac t=nT cu n Z . Semnalele n timp discret sunt
reprezentate matematic prin secvene de numere notate astfel:
{x[nT ]}, n [ N 1 , N 2 ]
{x[n]}, n [ N 1 , N 2 ]

(12.1)

n [ N 1 , N 2 ]

x[ n],

Toate aceste reprezentri sunt identice dac n prima relaie se ia T=1.


Se va nota semnalul discret x[n] iar limitele intervalului n care este definit pot lua valori
ntregi, depinznd de suportul pe care este definit semnalul.
n studiul semnalelor i sistemelor n timp discret se utilizeaz cteva secvene de baz cum
ar fi :
1. Secvena impuls unitate, prezentat n figura (12.1), definit prin relaia (12.2) i cu o
importan mare ca i funcia Dirac ( t ) pentru semnalele analogice.
0, pentru n 0;
1, pentru n 0 ;

[ n]

(12.2)

2. Secvena treapt unitate, prezentat n figura (12.2) i definit prin relaia (12.3).
1,
u[ n]
0

pentru n 0;
pentru n 0 ;

(12.3)

Legtura ntre secvena unitate i secvena impuls este dat de relaia:


u[ n]

k 0

k 0

[ k ] sau u[n] [n k ]

(12.4)

Legtura invers, ntre secvena impuls i secvena treapt, este dat de relaia cu diferene finite
(12.5):
[n] u[n] u[n 1]
(12.5)
_____________________
*)Bibliografie: [5],[16],[24]

Transformata Fourier discret

253

Fig.12.1.Impulsulunitate

Fig.12.2.Impulsultreaptunitate

3. Secvena exponenial este definit prin relaia urmtoare:


n
A. , pentru n N, (0,1)
x[ n]
0,

pentru n 0;

(12.6)

iar secvena sinusoidal prin expresia :

x[n] A.cos( 0 n ), n Z
(12.7)
Datorit faptului c n=t / T este adimensional, reprezentnd numrul eantionului, pulsaia
trebuie luat n radiani / eantion sau frecvena n Hertz/eantion, iar calculul sau analiza
semnalului se face pentru 0 [0, 2 ] sau 0 [ , ] .
Periodicitatea n timp discret este definit prin relaia:
x[ n] x[n N ] n Z
(12.8)
unde N este ntreg. Testnd condiia de periodicitate, trebuie s avem:
(12.9)
x[n] Ae j 0n Ae j 0 ( n N )
deci
0 N 2 k
(12.10)
Din relaia (12.10) rezult c numai pentru anumite valori ale pulsaiei, N i k sunt ntregi.
Pulsaiile din intervalul [0,2] sunt date de setul de valori:
2 k
, k 0,1,2,..., N ;
0k
(12.11)
N

Sistemele care transfer o secven de intrare x[n] ntr-o alt secven de ieire y[n] se numesc
sisteme n timp discret. Notnd S[.] operatorul sistemului, acesta este descris
matematic prin relaia:
y[n]=S{x[n]}
(12.12)

254

Metode numerice in electronic

Pentru sistemele discrete n timp sunt importante urmtoarele proprieti:


1. Liniaritatea n timp, ce presupune satisfacerea condiiei:
S {c1 x1[n] c2 x 2 [n]} c1 y1[ n] c2 y 2 [ n]

(12.13)
2. Invariana n timp, care implic conservarea translaiei semnalului la trecerea prin
sistem. Dac x1[n] x[n n0 ] , atunci rspunsul este:
(12.14)
y1 [n] y[n n 0 ]
3. Cauzalitatea presupune un rspuns neanticipativ la orice secven de intrare.
Rspunsul la n n 0 depinde numai de intrrile la n n 0 .
4. Stabilitatea definit printr-un rspuns finit la o intrare finit.
5. Sisteme fr memorie sunt sistemele la care rspunsul depinde de intrare pentru
acelai numr n de eantioane.

12.1.ANALIZA N FRECVEN A SEMNALELOR N


TIMP DISCRET
Prelucrarea numeric a semnalelor i mrete domeniul de aplicabilitate dei evoluia
proceselor i n particular a semnalelor este continu. Evoluia rapid a componentelor
electronice digitale i a performanelor circuitelor de conversie analog/numeric au contribuit
decisiv la trecerea spre prelucrarea numeric a semnalelor. n ceea ce privete eantionarea
semnalului continuu, pentru a nu se produce interferarea lobilor secundari cu cel principal n
spectrul semnalului eantionat, este necesar ca frecvena maxim a spectrului s fie mai mic
sau cel mult egal cu frecvena lui Nyquist, care reprezint jumtate din frecvena de
eantionare. La fel ca i pentru semnalele continue este necesar s se cunoasc relaia dintre
semnalul numeric i spectrul semnalului numeric, relaie dat de transformata Fourier discret.

2.1.1. REPREZENTAREA SECVENELOR CU TRANSFORMAT


FOURIER
n acest paragraf frecvena i pulsaia sunt normate i nu apar apar relaii cu mrimi
nenormate. Intervalele de studiu sunt -0.5< f < 0.5 i - < < .
Majoritatea secvenelor utilizate n tehnic pot fi reprezentate n domeniul frecven cu ajutorul
transformatei Fourier (12.15):

F {x[n]} X ( e j ) x[n]e jn
n

(12.15)

unde X (e j ) poart numele de funcie densitate spectral sau spectrul secvenei x[n]. Relaia
(12.15) se refer la transformata Fourier a semnalelor n timp discret (notat i DTFT= Discrete
Time Fourier Transform).
Reprezentarea secvenelor prin formula (12.15) necesit existena transformatei deci:
| X ( e j )| pentru R
(12.16)
Aceast condiie se poate simplifica astfel:

Transformata Fourier discret

255

| X ( e j )| | x[n]e jn | | x[ n]|.| e jn |

(12.17)

unde | e jn | 1 . Ca urmare, condiia devine | x[n]|

(12.18)

Dac secvena x[n] este absolut sumabil, transformata Fourier exist i, de aici rezult c
intrrile i rspunsurile sistemelor stabile n timp discret sunt totdeauna reprezentabile n
domeniul frecven cu ajutorul transformatei Fourier. Condiia (12.16) se mai poate exprima i
prin urmtoarea limit:
j
j
lim | X ( e ) X M ( e )| 0

X M ( e j ) x[n]e jn

unde

n M

(12.19)

Dac x[n] este absolut sumabil, convergena seriei (12.15) este asigurat pentru orice . Teoria
dezvoltrii n serie exponenial [MA] asigur convergena n sensul erorii ptratice minime
pentru secvene de ptrat sumabil (de energie finit), adic satisfac condiia:

| x[n]|2

(12.20)

Mai general, relaia (12.19) poate fi scris sub forma (12.21):

j
j 2
lim | x( e ) X M ( e )| d 0

Transformatele Fourier sunt funcii continue de i periodice cu perioada 2. Dac este


cunoscut transformarea Fourier X (e j ) , se poate calcula x[n] cu ajutorul transformrii
inverse:
x[n] F 1{ X ( e j )} sau x[n]

1
2

j
jn
X ( e )e d

(12.21)

n caz general, transformata Fourier X ( e j ) este o funcie complex de . n analiza


semnalului intereseaz prile real i imaginar, respectiv modulul i faza:
X ( e j ) X R ( e j ) jX I ( e j )
(12.22)
X ( e j ) | X (e j )| e j ( )

sau

(12.23)

j )

j )

Funcia X (e reprezint spectrul n frecven al secvenei x[n] , | X (e | este spectrul de


amplitudine, iar ( ) arg( X (e j )) este spectrul de faz. Funcia spectrului de faz nu este
univoc determinat. Reprezentrile se fac pe o perioad.

12.1.1.1. Algoritmi de calcul al transformatei Fourier rapid FFT (Fast


Fourier Transform )
Pentru calculul transformatei Fourier discrete (DTFT):
N 1

X [k ]

n0

x[n]. WNnk

, k 0,1, ... , N 1, WN e

2
N

(12.24)

256

Metode numerice in electronic

sunt necesare un numr de N 2 nmuliri complexe i N(N-1) adunri complexe. Dac o


nmulire complex se efectueaz n patru nmuliri i dou adunri reale, rezult un numr de
4 N 2 nmuliri reale i 4 N 2 2 N adunri reale.
Avnd n vedere proprietile coeficienilor WN :
( 2 k 1).

WNkN 1 ; WN

N
2

WN2 e j 1; WNnk W Nn ;

(12.25)

exist algoritmi care permit efectuarea DTFT cu un numr mai mic de operaii. Aceti algoritmi
pleac de la descompunerea transformatei de ordinul N n transformate de ordin mai mic.
Componentele pot fi prime ntre ele sau pot avea divizori comuni. Un caz important este acela n
care N R P , unde R este numit baz. Pentru explicarea unei largi categorii de algoritmi se
poate porni de la reprezentarea indicilor sub forma:
(12.26)
n k 1n1 k 2 n 2 mod N ;
k k 3 k 1 k 4 k 2 (mod N )
12.1.1.1.1. Algoritmul n baz 2 cu decimare n timp
Algoritmul este ales pentru secvene reale. Secvenele x[n] reale au proprietile:
X [ k ] X * [ N k ], sau Re X [ k ] Re X [n k ], Im X [ k ] Im X [ N k }
(12.27)
iar X[0] [i X[N/2] au valori reale. Ca urmare, este suficient s se calculeze urmtoarele N valori:
X[0],Re X[1],Re X[2],,Re X[N/2-1],
X[N/2],Im X[1],Im X[2], Im X[N/2-1]
Algoritmul este:
N
X [ k1 k 2 ]
2

Pentru k 2 0 rezult:

N
1
2

n .k
x[2n1 ].W N1 1
n1 0
2

N
N
1
k2 2
2
k
WN .WN .
x[2. n1
n1 0

X [ k1 ] X ' [ k1 ] WN1 . X "[ k1 ]


'

nk

1].W N1 1 .

(12.28)

(12.29)

unde X [ k1 ] i X [ k 1 ] reprezint cele dou DTFT de ordinul doi. Pentru a pune n eviden
simetria circular par a acestor transformate:
X ' [k1 ] X '* [

N
N
k1 ] ; X '' [k1 ] X ''* [ k1 ]
2
2

(12.30)

i evalund avem:
X[

N
k1 ] X ' [k1 ] WN k1 . X '' [k1 ]
2

Prile reale i imaginare sunt:

(12.31)

Transformata Fourier discret

257

Re X [k1 ] Re X ' [k1 ] cos Re X '' [k1 ] sin Re X '' [k ]


Im X [k1 ] Im X ' [k1 ] sin Re X '' [k1 ] cos Im X '' [k1 ]
N
Re X [ k1 ] Re X ' [k1 ] cos Re X '' [k1 ] sin Re X ''' [k1 ]
2
N
Im X [ k1 ] Im X ' [k1 ] sin Im X '' [k1 ] cos Re X '' [k1 ]
2
2
k1
N

(12.32)

Se utilizeaz primele dou relaii pentru eantioanele de ordin 0,,N/4, lund k1 =0,,N/4,
apoi eantioanele N/4,,N/2, lund k1 =0,,N/4. Rezult fluturele de calcul cu structura din
figura 12.3.
Structuri mai simple se obin pentru k1 =0,N/4,N/8.
Pentru evaluarea complexitii calculului aritmetic trebuie avut n vedere c ntr-un etaj exist
un fluture de tipul k1 =0 caracterizat prin dou adunri, un fluture de tipul
k1 =N/4 care nu necesit operaii, un fluture de tipul k1 =N/8 care necesit dou nmuliri i ase
adunri i N/4 -2 fluturi compleci care necesit fiecare patru nmuliri i ase adunri. n final
rezult:
0
Re X [k1 ]

Re X [k1 ]

TFD
N /2
Im X [k1 ]

Re X [k1 ]

-1
-1

Re X * [k1 ]

cos( )

Re X [ N / 2 k1 ]
sin( )
sin( )

TFD
N /2

-1

Re X * [k1 ]

cos( )

-1

Im X [ N / 2 k1 ]

Fig.1.2.3. Structura fluturelui de calcul n algoritmul cu decimare n timp

258

Metode numerice in electronic


13
N 4
4
3
5
NAR[ N ] N log 2 N N 4
2
2

numrul de nmuliri reale(NMR), NMR[ N ] N log 2 N

(12.33)

numrul de adunri reale (NAR),

(12.34)

unde N= 2 n reprezint numrul total de eantioane. Numrul de operaii se micoreaz, prin


acest algoritm rezultnd o reducere a memoriei necesare ca urmare a utilizrii unor numere reale
n loc de numere complexe.
12.1.1.1.2. Programul pentru FFT cu decimare n timp
#include <math.h>
#include <graphics.h>
#define PI 3.141592653
/* Transformata Fourier rapid cu decimare n timp
pentru secvene de tipul 2^m
m ordinul secvenei
x vector cu dimensiunea 2^m care conine la intrare
partea real a semnalului n timp, iar la ieire
partea real a semnalului n frecven
y vector cu dimensiunea 2^m care conine la intrare
partea imaginar a semnalului n timp, iar la ieire
partea imaginar a semnalului n frecven
*/
void FFT_DT(int m, double x[],double y[])
{
int i,j,k,l,n1,n2,n;
double a,c,s,xt,yt,w;
n=pow(2,m);
j=1;
for(i=1;i<=n-1;i++)
{
if(i<j)
{
xt=x[j];
x[j]=x[i];
x[i]=xt;
xt=y[j];
y[j]=y[i];
y[i]=xt;
}
k=n/2;
while (k<j)
{
j-=k;

Transformata Fourier discret

259
k=k/2;
}

j+=k;
}
n1=1;
for(k=1;k<=m;k++)
{
n2=n1;
n1=n2*2;
w=PI/n2;
a=0;
for(j=1;j<=n2;j++)
{
c=cos(a);
s=sin(a);
a=j*w;
for(i=j;i<=n;i+=n1)
{
l=i+n2;
xt=c*x[l]+s*y[l];
yt=c*y[l]-s*x[l];
x[l]=x[i]-xt;
x[i]=x[i]+xt;
y[l]=y[i]-yt;
y[i]=y[i]+yt;
}
}
}
}
void main(void)
{
int i;
int gdriver = DETECT, gmode, errorcode;
double re[128],im[128], modul[128];
for(i=0;i<=127;i++)
{
re[i]=0;
im[i]=0;
}
/* Sunt date funciile impuls i triunghiular */
/* impuls */
for(i=0;i<=10;i++) re[i]=1;
/*sinus */
/* for(i=0;i<=127;i++) re[i]=0.2*sin(PI/4*i)+0.1*sin(PI/8*i);*/

260

Metode numerice in electronic

/* triunghi
for(i=0;i<10;i++) re[i]=i;
for(i=10;i<20;i++) re[i]=20-i; */
FFT_DT(7,re,im);
for(i=0;i<=127;i++)modul[i]=sqrt( pow(re[i],2)+pow(im[i],2) );
/* iniializare mod grafice */
initgraph(&gdriver, &gmode, "");
errorcode = graphresult();
if (errorcode != grOk)
{
printf("Eroare grafica: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}
putpixel(4,300-30*modul[1],YELLOW);
for(i=2;i<=127;i++)
{
lineto(4*i,300-30*modul[i]);
}
getche();
closegraph();
}
12.1.1.1.3. Algoritmul n baza 2 cu decimare n frecven
n acest caz se prezint indicii sub forma:
N
N
n2 , n1 0,1,..., 1 , n2 0,1;
2
2
N
k 2 k1 k 2 , k1 0,1,..., 1 , k 2 0,1;
2

nn

(12.35)

deci
N
2

X [ 2 k 1 k 2 ] x[n1
n1 0 n2 0

( 2 k1 k 2 )( n1 n2 )
N
2
n2 ].WN
2

din care rezult pentru k 2 0 i respectiv k 2 1

(12.36)

Transformata Fourier discret

X [2 k1 ]

N
1
2

{x[n1 ] x[n1

n1 0

261

N
N
nk
]}W N1 1 TFD N {x[n1 ] x[n1 ]}
2
2
2

(12.37)

N
1
2

N
N
n
nk
X [ 2 k1 1] {x[n1 ] x[ n1 ]}W N1 W N1 1 TFD N {( x[ n1 ] x[n1 ])Wnn1 }
2
2
n1 0
2

Transformata de ordin N se descompune n dou transformate de ordin N/2.Fiecare din cele


dou grupuri de cte N/2 semnale ce constituie intrrile transformatelor n N/2 puncte se divide
n dou dup acelai procedeu (primele N/4 i urmtoarele N/4).Vor rezulta un numr de
log 2 N etaje, n fiecare realizndu-se N/2 operaii de tip fluture structura fluturelui fiind dat
n figura 12.4.
Complexitatea calculelor aritmetice este dat de :
NMR[ N ] 2 log 2 N , NAR[ N ] 3 N log 2 N

(12.38)

n varianta 4/2 ,ca i la decimarea n timp, I


NMR[ N ] (3 / 2) N log 2 N , NAR[ N ] (7 / 2) N log 2 N
(12.39)
pentru varianta 3/3.
Pentru acest algoritm eantioanele semnalului se iau n ordinea natural, iar ale ieirii rezult n
ordinea invers a biilor.
ab

-1
b

Fig.12.4. Structura fluturelui de calcul n algoritmul cu decimare n frecven

12.1.1.1.4. Programul pentru FFT cu decimare n frecven


#include <math.h>
#include <graphics.h>
#define PI 3.141592653
/* Transformata Fourier rapid cu decimare n frecven
pentru secvene de tipul 2^m

( a b)WN1

262

Metode numerice in electronic


m ordinul secvenei
x vector cu dimensiunea 2^m care conine la intrare
partea real a semnalului n timp, iar la ieire
partea real a semnalului n frecven
y vector cu dimensiunea 2^m care conine la intrare
partea imaginar a semnalului n timp , iar la ieire
partea imaginar a semnalului n frecven
*/
void FFT_DF(int m, double x[],double y[])
{
int i,j,k,l,n1,n2,n;
double a,c,s,xt,yt,w;
n=pow(2,m);
n2=n;
for(k=1;k<=m;k++)
{
n1=n2;
n2=n2/2;
w=PI/n2;
a=0;
for(j=1;j<=n2;j++)
{
c=cos(a);
s=sin(a);
a=j*w;
for(i=j;i<=n;i+=n1)
{
l=i+n2;
xt=x[i]-x[l];
x[i]=x[i]+x[l];
xt=y[i]-y[l];
y[i]=y[i]+y[l];
x[l]=c*xt+s*yt;
y[l]=c*yt-s*xt;
}
}
}
j=1;
for(i=1;i<=n-1;i++)
{
if(i<j)
{
xt=x[j];
x[j]=x[i];
x[i]=xt;
xt=y[j];

Transformata Fourier discret

263
y[j]=y[i];
y[i]=xt;

}
k=n/2;
while(k<j)
{
j-=k;
k=k/2;
}
j+=k;
}
}
void main(void)
{
int i;
int gdriver = DETECT, gmode, errorcode;
double re[128],im[128], modul[128];
for(i=0;i<=127;i++)
{
re[i]=0;
im[i]=0;
}
/* impuls */
for(i=0;i<=10;i++) re[i]=1;
/*sinus */
/* for(i=0;i<=127;i++) re[i]=0.2*sin(PI/4*i)+0.1*sin(PI/8*i);*/
/* triunghi
for(i=0;i<10;i++) re[i]=i;
for(i=10;i<20;i++) re[i]=20-i; */
FFT_DF(7,re,im);
for(i=0;i<=127;i++)modul[i]=sqrt( pow(re[i],2)+pow(im[i],2) );
/* iniializare mod grafice */
initgraph(&gdriver, &gmode, "");
errorcode = graphresult();
if (errorcode != grOk)
{
printf("Eroare grafic: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}
putpixel(1,300-30*modul[1],YELLOW);
for(i=2;i<=127;i++)

264

Metode numerice in electronic


{
lineto(8*i,300-30*modul[i]);
}
getche();
closegraph();
}

12.1.2. ALGORITMUL GOERTZEL


Acest algoritm are viteza de calcul inferioar algoritmilor FFT prezentai, dar superioar
vitezei de calcul a transformatei DTFT. Codul algoritmului este simplu, ceea ce-l face util n
unele aplicaii.
Utiliznd egalitatea WNNk 1 , expresia transformatei Fourier discrete (12.23) devine:
N 1

X [ k ] x[n]WN k ( N n )

(12.40)

n0

Relaia (12.40) poate fi interpretat ca o convoluie discret a secvenei x[n] cu secvena


WN kn ,care reprezint funcia de transfer a unui filtru. Notnd rspunsul filtrului cu y k [n ]
pentru intrarea x[n] se obine:
N 1

y k [ n] x[ m]WN k ( n m)

(12.41)

m 0

Rspunsul filtrului la impulsul treapt u[n] este h f [n] WN kn u[n]

(12.42)

Aplicnd transformata z relaiei (12.42) se obine funcia de transfer a filtrului:

H k ( z ) WN kn u(n). z n

(12.43)

n0

innd cont de valorile lui u[n] i c suma este o serie geometric infinit, rezult:
H ( z)

(12.44)

1 WN k . z 1

Fcnd prelucrri asupra funciei de transfer (12.44), obinem:


H k ( z)

1
1 WN k . z 1

1 WNk . z 1
1 WNk . z 1

1 Wnk . z 1
(12.45)
2. . k 1
2
1 2.cos
.z z
N

Considernd
H k ( z)

Yk ( z ).V k ( z )
X k ( z ).V k ( z )

unde

Yk ( z )
1 WNk . z 1
Vk ( z)

(12.46)

rezult:
Vk ( z )

X k ( z)

1
2
.
. k 1

2
1 2.cos
. z z
N

(12.47)

Aplicnd transformata z invers relaiilor (12.46) i (12.47) se obin ecuaiile cu diferene finite:

Transformata Fourier discret

265

2. . k
v k [n] 2 cos
. v [n 1] v k [n 2] x[n] ;
N k
y k [ n]

(12.48)

v k [n] WNk v k [n 1];

Secvena y k [n ] reprezint spectrul semnalului x[n].Ecuaiile (12.48) pot fi


implementate prin schema filtrului numeric de ordinul doi din figura (12.5)
+

Vk [n]

z 1

X [n ]

Y [n ]

+
WNk

z 1

2 cos( 2k / N )

V k [ n 2]

Fig.12.5. Structura filtrului care implementeaz algoritmul lui Goertzel

12.1.2.1. Implementarea algoritmului


Void GOERTZEL (double R[],double I[],int N,int K)
{
double vr1,vr2,vi1,vi2,temp,yfr,yfi;
double c,s,phi,wn;
static double REAL[K],IMAG[K],MAG[K];
int j,k;
for(k=1;k<=k;k++)
{
vr1=vr2=0;
vi1=vi2=0;
phi=2*pi*k/N;
c=cos(phi);
s=sin(phi);
for(j=1;j<=N;j++)
{
temp=vr1;
vr1=2*c*vr1-vr2+R[j];
vr2=temp;
temp=vi1;

266

Metode numerice in electronic


vi1=2*c*vi1vi2+I[j];
vi2=temp;
}
yfr=c*vr1-vr2-s*vi1;
yfi=c*vi1-vi2+s*vr1;
REAL[k]=yfr;
IMAG[k]=yfi;
}
//Calculeaz magnitudinea semnalului de ieire
for(k=1;k<=K,k++)MAG[k]=sqrt(real[k]*REAL[k]+IMAG[k]*IMAG[k]);
AXE1(k,Mag);//reprezentarea grafic a magnitudinii
getche();
}

12.1.2.2. Erori de cuantizare n calculul transformatei Fourier discrete


Pentru transformata Fourier discret trebuie s calculm suma :
N 1

X [ k ] x[n].WNnk

n 0,1,..., N 1

(12.49)

n0

n care { x[n] } C i se consider numerele reprezentate n virgul fix, n complement fa de


doi. Dac x[n] este prezentat pe B+1 bii i este utilizat acelai format pentru reprezentarea
coeficienilor WNnk , dup fiecare nmulire efectuat exact ar trebui mrit formatul cu nc 8
bii. Din economie de memorie nu se procedeaz astfel, ci se face o rotunjire dup fiecare
inmulire la B+1 bii, ceea ce duce la o eroare echivalent cu un zgomot. Dac asociem cte o
surs de eroare pentru fiecare nmulire real i inem seama c numerele sunt complexe, rezult
urmtoarea valoare cuantizat a unui produs:
2 p nk
2 pnk
2 pnk
en,1 [k] Im {x[n]} sin
j{ Im {x[n]} cos
N
N
N
2 pnk
en,3 [k] Re {x[n]} sin
en,4 [k]}
N

Q(x[n]WNnk ) Re {x[n]} cos

(12.50)
iar eroarea corespunztoare este:
en [ k ] en ,1[ k ] en ,2 [ k ] j{en ,3 [ k ] en ,4 [ k ]} en ,r [ k ] jen , I [ k ]

(12.51)
Dac referitor la erorile de cuantizare rezultate din nmulirile reale, se fac ipotezele uzuale
pentru zgomotul de rotunjire :
-densitate de probabilitate uniform ntre 2 ( B 1) i 2 ( B 1) ;
-erorile mai provin de la operaii diferite care sunt necorelate;
-erorile sunt necorelate cu semnalul de la intrare
rezult valorile medii:

Transformata Fourier discret

267

1 2 B
.2
n2,i ; E{en [k ]} 0 ;
12
E{| en [k ]| 2 } E{en2,1 [k ]} E{en2,2 [k ]} E{en2,3 [k ]} E{en2,4 [k ]} 2 E{en,1 [k ]en,2 [k ]}
E{en,i [k ]} 0 ; E{en2,i [k ]}

E{en,3 [k ]en,4 [k ]}

1 2 B
2
B2 ,
3

ultima expresie reprezentnd variana (dispersia) erorii dintr-un nod oarecare.


Eroarea total este caracterizat prin:
F[ k ]

N 1

en [ k ], E {F[ k ]} 0 ,

n0

N 1

N 1
E {| F[ k ]|2 } E | en ,k [ k ]|2 E en2, R [ n]
n0

n0

N 1

N 1

n0

n0

en2, I [n] E {| en [ k ]|2 }

N 2 N
2
3

Lucrndu-se n virgul fix, trebuie avut n vedere problema scalrii.


N 1

innd cont de relaia | X [ k ]| | x[n]| N se pot evita depirile prin scalarea semnalelor de
n0

intrare cu 1/N.

12.2. APLICAII
1. Se consider semnalul EEG din figura 12.6 i eantioanele urmtoare :
119,128,126,131,131,126,136,128,128,129,117,125,125,125,129,122,
119,119,122,120,131,129,134,140,132,136,132,126,131,120,122,121,
131,129,128,134,123,129,131,126,131,126,130,133,128,134,128,127,
129,121,128,124,123,130,121,128,127,126,133,125,128,129,126,132,
123,127,131,124,131,128,131,134,127,134,129,128,133,125,132,130,
126,133,125,130,129,120,126,122,128,132,123,129,123,124,131,124,
130,125,124,133,126,131,131,128,133,126,129,131,124,130,127,130,
134,125,131,129,127,135,129,132,126,118,126,121,130,133,129,135
luate cu frecvena f=128Hz i msurate n V. Se cere analiza n frecven a semnalului EEG.

268

Metode numerice in electronic

U [V ]
140

t [s]

119
0.25

0.5

0.75

Fig.12.6. Semnal EEG pentru un subiect masculin

Prin algoritmul decimrii n timp s-a obinut rezultatul din figura (12.7 ) iar cu algoritmul
Goertzel rezultatul din figura (12.8)
U / U0

1
f / f0

0
0.5

Fig.12.7.Modulul semnalului EEG n frecven normat prin algoritmul decimrii n timp.

U / U0
1
f / f0

0
0.5

Fig. 12.8. Modulul semnalului EEG n frecven normat prin algoritmul Goert

Transformata Fourier discret

269

2. S se determine transformata Fourier discret pentru impulsul treapt din figura(12.9).


1

0.5

n
0
100

200

300

400

500

Fig.12.9.Impulsul treapt.

U [n ]
32

16

0
250
Fig.12.10.Transformata Fourier a impulsului treapt

500

Prin analiza figurilor, transformatelor Fourier, a semnalelor se pot trage concluzii asupra
comportrii n frecven a semnalelor, ceea ce n medicin nseamn diagnosticarea unor
afeciuni, iar n tehnic realizarea unor sisteme cu diferite proprieti.

Anexa 1

279

ANEXA 1
1. Programul pentru calculul valorii unui polinom ntr-un punct dat.
VALPOL
#include <conio.h>
#include <stdio.h>
#incude <math.h>
#define NrMax 10
/* Funcia ntoarce valoarea polinomului ntr-un punct dat */
double VALPOL(int grad,
double Coef[NrMax],
double point)
{int i;
double aux;
aux=Coef[grad];
for (i=grad-1; i>=0;i-- )
aux=Coef[i]+point*aux;
return aux;
}
int main(void)
{
int n,i;
double A[NrMax],pct;
clrscr();
printf( Dai gradul polinomului);
scanf( %d,&n);
printf( Dai coeficienii polinomului \n);
for (i=n;i>=0;i--)
{printf(A[%d]=,i );
scanf (%lf,&A[i]);
}
printf(Dai punctul de calcul);
scanf(%lf,&pct);
clrscr();
printf(Valoarea polinomului este
%6,5lf,VALPOL(n,A,pct));
getche();
return0;
}

280

Metode numerice n electronic


2. Programul pentru calculul valorii derivatei unui polinom ntr-un punct dat.
DERPOL
#include <conio.h>
#include <stdio.h>
#incude <math.h>
#define NrMax 10
/* Funcia ntoarce valoarea polinomului ntr-un punct dat */
double DERPOL(int grad,
double Coef[NrMax],
double point)
{int i;
double aux;
static double B[NrMax];
B[grad]=aux=Coef[grad];
for (i=grad-1; i>=0;i-- )
{B[i]=Coef[i]+point*auxB[i+1];
aux=B[i]+point*aux;
}
return aux;
}
int main(void)
{
int n,i;
double A[NrMax],pct;
clrscr();
printf( Dai gradul polinomului);
scanf( %d,&n);
printf( Dai coeficienii polinomului \n);
for (i=n;i>=0;i--)
{printf(A[%d]=,i );
scanf (%lf,&A[i]);
}
printf(Dai punctul de calcul);
scanf(%lf,&pct);
clrscr();
printf(Valoarea derivatei polinomului este
%6,5lf,DERPOL(n,A,pct));
getche();
return0;
}

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