Sunteți pe pagina 1din 276

Ioan RUSU

METODE NUMERICE
ALGORITMI N LIMBAJ C

2006
Cuprins VII

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
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 IX

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
X 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 XI

ANEXA 1 ......................................................................................................................... 279


BIBLIOGRAFIE ............................................................................................................. 281
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]
2 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:
| ex | | x x | . (1.3)
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*
x* (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.

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 3

sunt caracterizate de funcia de repartiie normal sau gaussian din expresia (1.7), a crei
reprezentare este dat n fig.1.1.
1
exp( 0.5.( / ) 2 ) , (1.7)
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 ntr-
un 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)!
4 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
scris sub forma: q f b x (1.11)
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 , . | f | 1 ;
01
q f 2 , x
1 / 2 | f | 1 ; (1.12)
q f 16 , x
1 / 16 | f | 1

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 5

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


pentru numere n baza zece.
6 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 g q 10 x-t 10 x-t
q 10 10 - t 101 t (1.16) Se
q f q 10 x 10 1 10 x
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 t
| f q |10 10 pentru |g q| 1/ 2
x

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 (1.19)
x t
Deci n ambele cazuri | eq | (1 / 2) 10 (1.20)
Limita maxim a erorii relative o putem calcula astfel :
eq 0.5 0 x-t 0.5 10 -t
q 5 10 -t (1.21)
q 10 1 10 x 10 1
Erori 7

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.23)


Notm cu c = am+1 a m+2 b ... -1
(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 (1.25) Dac c > (1 / 2)q atunci c q i
valoarea aproximativ a lui q este
q = a1bn a2 bn-m ... a m 1 bn-m+1 (1.26) n
ambele cazuri eroarea absolut eq (1 / 2)b n-m+1
(1.27)
O limit maxim a erorii relative se calculeaz astfel:
eq (1 / 2 ) b n-m+1
q (1 / 2 ) b1 m , (1.28)
q 1 bn
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 (1.30)

nmulirea:
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)
8 Metode numerice n electronic

x x ex x ex x+ex e y e2
1 2 ...

mprirea:
y y+e y y 1 e y /y y y y

x ex ey x e xe y ex e y
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 s-
y 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 1 ex / x

e x
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 x e y ey x y
x+y x x y
x y x y x x y y x y x y
x y
x+y x y (1.34)
x y x y
Scderea:
ex y x e y ey x y
x-y x x y
x y x y x x y y x y x y
x y
x-y x y (1.35)
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)

mprirea:

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
(1 / 2 ). x ( ex / x ) / x (1 / 2).( ex / x ) (1 / 2). e x
x
(1 / 2) x (1.38)
Erori 9

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 x i y ale mrimilor care se nsumeaz
i eroarea de rotunjire r .
Eroarea la ieirea grafului este
Fig.1.3. Graful operaiei de adunare x y
x+ y x y r
x x y x y
(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.
Fig.1.4. Graful operaiei de scdere n calculul erorii se ine seama de
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


10 Metode numerice n electronic

x y
x- y x y r
xy xy
(1.40)Marca grafului pentru operaia de
nmulire este totdeauna constant egal cu
x 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
(1.41)
Marca grafului pentru operaia de
mprire este totdeauna constant,
Fig.1.6. Graful operaiei de mprire
avnd valoarea 1 pentru demprit i -1
pentru mpritor. n figura 1.6 este
1 prezentat graful pentru operaia
aritmetic de mprire. Eroarea la
ieirea grafului este
x / y x y r (1.42)
Fig.1.7. Graful operaiei de extragere de
rdcin ptrat 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
x (1 / 2) x r (1.43)

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 MRIREA PRECIZIEI


CALCULELOR
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 , x 0
.

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.



eE x 0 x0 r1 a r2
ax02

ax0 bx0 c
2
b x 0 r3 bx0
ax0 bx0
2
r4

ax 02 bx 0

ax 02 bx 0 c
c
c
ax 02 bx 0 c

r5 d x0 6
dx
dx 0
0 f
( 1)

f r7 ( 1) r8
f
dx0 f
Dac considerm c erorile lui a , b, c, d , f , x0 sunt obinute ca erori de rotunjire, atunci
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 2dx 0
E 5 10 t 5
ax 0
2
bx 0 c 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
c f

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:
14 Metode numerice n electronic

A Rc h11 r Rc h11 r
. t 0,1
0,05 0,05 0,510
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.

. t 3bx 2a / bx a , v 510
R: u 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:
f 0 a , f 1 a , ... , f m a (2.4)
f 0 b , f 1 b ,... , f m b (2.5) n cazul funciei polinom
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
Rezolvarea numeric a ecuaiilor algebrice 19

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
Pb Pb Pb
g g 1

g k 1

0 Pb 0 ; Pb 0 ,
g 1 gk

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


sign Pbg+j
1 signP b
gk
k-j

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 .

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 .
bn an
lim 0 (2.11)
n 2n

lim bn (2.12)
n

lim a n (2.13)
n
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 ] .
xm Lungimea intervalului tinde la zero cnd n
tinde la infinit, limita capetelor intervalelor
Fig.2.1. Graficul funciei y f ( x ) pe fiind un punct a crui abscis este soluia
intervalul [a,b] 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 21

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);
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
f ( x ) 0 , se scrie sub forma: x ( x ) (2.14)
Pentru x o o aproximaie iniial, avem urmtoarele succesiuni de aproximaii:
x1 x0 , x2 x1 , x3 x2 , ... , xn xn-1 (2.15)
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:
m

xm , x 1-

x0 , x1
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
xn a x n-1 a
x n-1 a (2.19)

Aplicnd teorema lui Lagrange


x n-1 a
' unde x n-1 b
x n-1 a
avem
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
(2.20)

x n a n x0 a
Rezolvarea numeric a ecuaiilor algebrice 25

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 ,
n n n
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 x

x
x0 x1 x3 x0 x2 a x3 x1
Fig.2.2. Convergena pentru cazul Fig.2.3. Convergena pentru cazul
0< ' ( x ) <1 -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 ( x) y y ( x)
yx
y=x

a x
x
x2 x1 xo x0 a x1
Fig.2.4. Divergena pentru cazul Fig 2.5. Divergena pentru cazul
'(x) 1 ' ( x ) 1

sau cnd | f ( x n )| (2.22)


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 27

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;
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
x n+1 x n x (2.23)
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


y
(2.26) sau
yx k = 1 / (1- tan( )) . (2.27)
Tan poate fi exprimat cu ajutorul
funciei x :
a x n
y ( x) tan = '
T a-x n (2.28)
B
A unde x n a
formul obinut aplicnd teorema lui
x Lagrange .
kx Din expresiile (2.27) i (2.28) se obine
a x expresia lui k sub forma
1
k= (2.29)
xn 1 xn x n 1 1- '

Fig.2.6. Graficul iteraiei la pasul n unde ' poate fi aproximat funcie


de valorile cunoscute astfel :
xn xn
' ; xn-1 xn (2.30)
xn xn-1
Rezolvarea numeric a ecuaiilor algebrice 29

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

x n +1
xn xn ' xn (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 (2.34)
1 ' x
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 (2.35)
1 x
' 2

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= f (x)
y

y=x
y ( x)

x0 a x

x1
x

x0 a x2 x1
Fig.2.8. Determinarea grafic a soluiei
Fig.2.7. Determinarea grafic a soluiei prin
prin metoda tangentei.
metoda Newton-Raphson

f xn
x n+1 x n (2.36)
f ' xn
unde f ( x ) = x x = 0 . n acest caz formula (2.35) se scrie sub forma :

f '' x f x
g' x (2.37)
f x
' 2

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)
P xn
x n+1 x n (2.38)
P' x n
Pentru calculul valorii unui polinom ntr-un punct dat x0 , aplicm urmtorul
procedeu:
P( x ) ( x x0 )( bmx m1 bm1x m 2 ... b2 x b1 ) b0 , iar P( x0 ) b0 (2.39)
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
(2.41)
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;
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++;
}
Rezolvarea numeric a ecuaiilor algebrice 35

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).
yx f x x x
f a1 a1 a1 0
f a2 a2 a2 0
Rezult c exist un x a1 , a2 pentru care
c x
a1 a2 f ' ( x ) 0 . Rezult c f ' x ' x 1 adic
' x 1 . Vom calcula soluia ecuaiei
Fig.2.9. Graficul funciei cu dou x 1 , aplicnd aceeai metod Newton -
'

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 2
x c c '' c... (2.43)
1! 2!
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)
c
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
(2.48)
a2 b2 sb3 pb4
a1 R sb2 pb3
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 37

bn 1 an 1 s
bn 2 an 2 sbn 1 p
bn 3 an 3 sbn 2 pbn 1
(2.49)
b2 a2 sb3 pb4
R a1 sb2 pb3
S a0 pb2
Pentru uniformizarea formulelor de calcul (2.49) se face substituia formal :
R b1 a1 sb2 pb3
(2.50)
S b0 sb1
rezultnd sistemul neliniar:
bn 1 an 1 s
bn 2 an 2 sbn 1 p
(2.51)
bk ak sbk 1 pbk 2
k n 3, n 4,...,2,1,0

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
S(s,p)=0 (2.52)
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
(2.53)
S ( sk , p k ) S (sk , pk )
s k p k S ( s k , p k )
s p

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
(2.55)
S ( s, p ) b0 b1
b1
s s s
S ( s, p) b0 b1
.s
p p p

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.
b bk
Dac notm t k k i q k k=n-1,n-2,,2,1,0 se pot calcula valorile
s p
expresiilor (2.55) prin derivarea expresiilor (2.51) .
t n 1 1
t n 2 s.t n 1 bn 1 (2.56)
t k s.t k 1 p.t k 2 bk 1
k n 3, n 4,...,1,0

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

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 ) (2.58)
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

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
Rezolvarea numeric a ecuaiilor algebrice 39

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;
{
ak
dac a n 1 atunci pentru k=n-1 pn la 0 a k : ;
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 )
t1( s j , p j )
s
R( s j , p j )
q1( s j , p j )
p
S ( s j , p j )
t0 ( s j , p j ) t1( s j , p j )s j b1( s j , p j )
s
S ( s j , p j )
q 0 ( s j , p j ) s j q1( s j , p j )
p

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 41

{
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:
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 43

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;
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:
338.6260295
H ( s)
s 0.5284s 0.05120153s 0.00096807437
3 2

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:
Rezolvarea numeric a ecuaiilor algebrice 45

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 n

- - + - + 3

+ + + + 0

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

Aproximaii succesive: s1 0.409 ; s2 0.0943 ; s3 0.0251

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:

0.04381
H ( s)
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 gra-


dul 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
(3.1)

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

sau matriceal AX=B (3.2)


unde:
a11 a12 ... a1n

A= 21 22
a a ... a2n
(3.3)


a n1 a n 2 ... a nn
x1 b1

x2 b2
X= x3 (3.4) i B= b3 (3.5)


xn bn
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]
48 Metode numerice n electronic

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 (3.6)
..........................................

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

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


formulele:
i 1
bi a ij x j
b1 i j 1
x1 xi i=1,2,3,n (3.7)
a11 a ii

3.1.1.1.1. Algoritmul 3.1. Sisteme inferior triunghiulare

{ Variabile
A: matricea necunoscutelor sistemului;
B: vectorul termenilor liberi;
X: vectorul soluiilor;
{
b1 ;
calculeaz x1
a11
pentru i=2 ,, n
i 1
bi a ij x j
j 1
calculeaz xi ;
a ii
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 (3.8)
.................................

a nn x n bn

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


formule:
n
bi a ij x j
bn j i 1
xn i xi i=n-1,n-2,,1 (3.9)
a nn a ii
50 Metode numerice n electronic

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;
{
bn ;
calculeaz xn
a nn
n
bi a ij x j
j i 1
pentru i=n-1,, 1 calculeaz xi ;
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 :

ak 1
mk 1 , k=2,...,n (3.10)
a11
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
x3 ... a1n xn b1
1 1
a11 x1 a12 x2 a13
2 2 2
xn b2
2
a22 x2 a23 x3 ... a2n
a x a x ... a x b
2 2 2 2 (3.11)
32 2 33 3 3n n 3


a x a x ... a x b
2 2 2 2
n2 2 n3 3 nn n n

Procedeul se continu cu aducerea pe locul lui a22 a celui mai mare termen din
coloana doi i se nmulete linia a doua cu :
ak2
mk 2 k=3,4,...,n (3.12)
a 22
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 :
a ki
mki k=i+1,...,n (3.13)
a 22
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
11 1 12 2 13 3 1n n 1

a22 x2 a23 x3 ... a2 n xn b2


2 2 2
2
(3.14)

n x b n
ann
n n

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



bnn n 1
xn n x i b22 a ij x j (3.15)
a nn j i 1 a iii
52 Metode numerice n electronic

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 53

pn cnd i>=n;
pentru i=1,,n execut d:=d*A[i,i];
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,j]*X[j];
X[i]=X[i]/A[i,i]; }
GAUSS=d;
}

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)
54 Metode numerice n electronic

{
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 55

l11 0 0 0 0 1 u12 u13 u1n a11 a12 a1n



l21 l22 0 0 0 0 1 u23 u2 n a21 a22 a2 n
l31 l32 l33 0 0 0 0 1 u3n a31 a32 a3n (3.16)



ln1 ln2 ln3 ln4 1 0 0 0 1 an1 an2 ann

l11 0 0 0 0 d1 b1

l21 l22 0 0 0 d2 b2
l31 l32 l33 0 0 d3 b3 (3.17)



ln1 ln 2 ln 3 ln 4 1 dn bn

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


urmtoarele formule de calcul ale matricelor U i L.
a1 j b1
li1 ai1 ; i 1,2,..., n ; u1 j ; j 1,2,..., n ; d1 ; a11 0 ; (3.18)
a11 a11
j 1
1 i 1
lij aij lik ukj ; i j ; uij aij lik ukj ; lii 0 ; i j ; (3.19)
k 1 lii k 1
1 i 1
di b1 lik d k (3.20)
lii k 1
Soluiile sistemului se calculeaz printr-o retrosubstituie cu ajutorul urmtoarelor
formule:
n
di aij x j
j i 1
xn dn ; xi ; i n 1, n 2,...,2,1; (3.21)
uii

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
56 Metode numerice n electronic

pentru j=1 ,, n
{calculeaz
li1 ai1 ;
a1 j
u1 j ;
a11
b
d1 1 ; a11 0 ;
a11
}
dac ij atunci
{ calculeaz
j 1
lij aij lik ukj ;
k 1

1 i 1
uij aij lik ukj ;
lii k 1
1 i 1
di b1 lik d k
lii k 1
}
dac i<j atunci
{ calculeaz
1 i 1
uij aij lik ukj ;
lii k 1
}
}
calculeaz
{ xn dn ;
pentru i=n-1 ,, 1
n
di aij x j
j i 1
calculeaz xi ;
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


58 Metode numerice n electronic

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)

unde
C= E n E n 1 ...E 1 B (3.25)

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

k 1
k k 1 a i , k 1 k 1
a ij a ij a k 1
k 1 pentru ik-1 , j k-1
a k 1,k 1

k k 1
a k 1, j a k 1, j
pentru j k-1

pentru j < k-1 (3.26)


ai, j aij
k k 1

1
bi bi
k 1
k k 1 a i ,k 1 k 1
bi bi bk 1 pentru i k 1
k 1
a k 1, k 1
k k 1
bk 1 bk 1 pentru k = 2,3,... , n
60 Metode numerice n electronic

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
A k, lin
calculeaz m= ;
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 A[lin.lin];


dac det 0 atunci
B n
{ 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++)
62 Metode numerice n electronic

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];
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;
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
A Rmxn i B R , m>n caz n care nu au soluie n general. Soluionarea se face cu
m

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:
n
H Hp (3.27)
p 1
Rezolvarea numeric a sistemelor de ecuaii 63

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


v p . v Tp
H p I m 2. (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 (3.31)
0 0 0... hpp ... hpn n
....................... vip2
i p

0 0 0.... h ... h
np nn
Notm vectorul i (a1i , a2i ,..., aii ,... ani ) T (3.32)
H p . Ap H p .[1 2 ... p ... n. ] [ H p1 H p 2 ... H p p ... H p n ] (3.33)
innd cont c printr-o transformare ortogonal,suma ptratelor elementelor unei linii
este invariant putem scrie urmtoarea egalitate:
m p 1 m
aip2 aip2 aip,2 din care rezult aip, aip2 s2p (3.34)
i 1 i 1 i p

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


v p . v Tp . p
H p p I m 2. T
(3.35)
vp . vp
iar un element al expresiei (3.35) se poate exprima sub forma:
2 m aip dac i p
( H p . p )i aip aip . vip (3.36)
m
0 dac i p
vip2 i p
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:
64 Metode numerice n electronic

a 'pp s p (3.39)
Elementele de sub diagonal se fac zero iar cele situate n dreapta coloanei p se
calculeaz astfel:
2
H p . j j m .( v Tp . j ). v p (j>p) (3.40)
vip2
i p

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


a ij dac i p

2 m
( ( H p . j ) j a ij m . v ip . a ij . v ip dac i p (j>p) (3.41)
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;
66 Metode numerice n electronic

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 c1 0 0 ... 0 0 0 x1 d 1

a2 b2 c2 0 ... 0 0 0 x2 d 2
0 a3 b3 c3 ... 0 0 0 x3 d 3
(3.42)

0 0 0 0 ... a n 1 bn 1 c n 1 x n-1 d n-1

0 0 0 0 ... 0 an bn x n d n

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 0 ... 0 0 0 1 u1 0 0 ... 0 0 b1 c1 0 0 ... 0 0 0



p2 l2 0 ... 0 0 0 0 1 u2 0 ... 0 0 a2 b2 c2 0 ... 0 0 0
0 p3 l3 ... 0 0 0 0 0 1 u3 ... 0 0 0 a3 b3 c3 ... 0 0 0 (3.44)


0 0 0 ... pn-1 ln-1 0 0 0 0 0 ... 1 un-1 0 0 0 0 ... an-1 bn-1 cn-1

0 0 0 ... 0 pn ln 0 0 0 0 ... 0 1 0 0 0 0 ... 0 an bn

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 i=2 ,3,...,n
c
ui i i=1,2 ,3,...,n
li (3.45)
l1 b1
li bi a i ui-1 i=2 ,3,...,n
Condiia de existen a relaiilor este li 0 i = 1,2,...,n
Sistemul (3.42) poate fi scris sub forma
LUX=D (3.46)

sau sub forma a dou sisteme


L Y=D
(3.47)
U X=Y
Cunoatem pe L i D, deci se calculez mai nti Y
68 Metode numerice n electronic

l1 0 0 ... 0 0 0 y1 d 1

a2 l2 0 ... 0 0 0 y2 d 2
0 a3 l3 ... 0 0 0 y3 d 3
(3.48)

0 0 0 ... a n-1 l n-1 0 y n-1 d n-1

0 0 0 ... 0 an ln y n d n
Prin identificarea n (3.48) se deduc urmtoarele relaii recursive de calcul :
d1
y1 l
1
d i a i y i-1
(3.49)
yi , i=2 ,3,...n
ti
Din sistemul UX=Y scris detaliat :

1 u1 0 0 ... 0 0 0 x1 y1

0 1 u2 0 ... 0 0 0 x2 y2
0 0 1 u3 ... 0 0 0 x3 y3
(3.50)

0 0 0 0 ... 1 u n-1 0 x y
n-1 n-1
0 0 0 0 ... 0 1 un xn yn
rezult relaiile recursive de calcul ale rdcinilor. Prin retrosubtituie se obin :
xn yn
(3.51)
x i y i si x i 1 , i=n-1,...,1

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;
c1
altfel calculeaz u1 = ;
l1
i=1 ; eroare = fals ;
repet
i = i+1 ;
calculeaz li = bi - ai si-1 ;
dac li = 0 atunci eroare = adevrat
ci
altfel calculeaz ui =
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
d1
calculeaz y1
l1
d i a i y i-1
pentru i = 1,2,3, ... , n calculeaz y i
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] )
70 Metode numerice n electronic

{
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
x1 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 (3.52)
------------------------------
bn a n 2 a
xn x1 ... nn-1 x n-1+ 0
a nn a nn a nn

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 (3.54)

a12 a13 a1n b1


0 - - ... -
1
x a11 a11 a11 a11
a 21 a 23 a2n b2
2
x
unde X ; C= - a 22 a 22 ; D= a 22
0 - ... -
a 22 (3.55)

- - - -
xn - a n1 a n2 a n3 b
n
- - ... 0
a nn a nn a nn a nn
Continund operaia de iterare se obine

X ( 2 ) CX ( 1 ) D C 2 X ( 0 ) CD D
(3.56)
X (k)
C X k (0)
(C k-1
C k-2
...... 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 .
72 Metode numerice n electronic

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 :
a ij
gi 1 pentru i = 1,2,...,n (3.57)
j=1 a ii
j i

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 a ij
calculeaz i ;
j=1 a ii
j i

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

bi
calculeaz xi k
a i,i
pentru j= 1... n
a i,j
calculeaz xi k xi k x jk-1 ;
a i,i
i =i+1;
pn cnd i = n+1;
k = k+1;
pn cnd x i k x i k-1 i = 1...n
k
scrie soluiile xi = x i i = 1... n
STOP
}}
}

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,


74 Metode numerice n electronic

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) 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.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 :
bi i-1 a n a

xj
ij (k) ij (k-1 )
xi k xj (3.58)
a ii j=1 a ii j=i+1 a ii
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 a ij
calculeaz i ;
j=1 a ii
j i

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
bi
calculeaz xi k
a i,i
pentru j= 1... n
{
dac j < i atunci
ai,j k
calculeaz xi k xi k xj ;
ai,i
76 Metode numerice n electronic

dac j > i atunci


a i,j
calculeaz xi k xi k
x jk-1 ;
a i,i
}
i =i+1;
pn cnd i = n+1;
k = k+1;
pn cnd x i k x i k-1 i = 1...n
k
scrie soluiile xi = x i i = 1... n
STOP
}
}
}

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:
78 Metode numerice n electronic

f1

x ,x ,...,x 0
1 2 n

f2

x ,x ,...,x 0
1 2 n
(3.60)
---------------
f
n x ,x ,...,x 0
1 2 n

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 a


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

f1 f1 f1
x ...
1
x2 x n
F( x ) = ---------------- (3.62)
f n fn
...
fn
x1 x 2 x n

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

1
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 )

n
x j k+1 x j k f i ( x k ) , i = 1,2,...,n , k = 0,1,2,.... (3.64)
j=1 x j

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 79

ordinul doi, exclusiv. Dac notm x j k+1 x j k = j,k j = 1,2,...,n sistemul (3.64) se
poate scrie matriceal asfel :

f1 f1 f1
...
x1 x 2 xn X 1K f 1 x
f2 f2 f2
x X 2 K f 2 x
xn
... (3.65)
x2

1

f n f n f n X nK f n x
...
x1 x 2 x n
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 ,
x j k+1 x j k + X j,k , j = 1,2,...,n (3.66)
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
pentru x x 0 are o invers 0 F x 0 ,
1
a) Matricea funcional F ( x) =
xj
cu proprietatea ca 0 A0 ;
b) 0 f x 0 x k x 0 B0 ;
n 2 f i x
c) C , i,j = 1,2,...,n i x u( x 0 ,g ) ;
p =1 x j x p

d) Constantele A0 , B0 , i C0 satisfac inegalitatea

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


1
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

k-1
1 p
1
xk h02 B0 .
2
Demonstraia teoremei nu o prezentm, ea putnd fi gsit n literatura de specialitate.
80 Metode numerice n electronic

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 )

n
x j,k x j ,k-1 f i ( x k-1 ) i = 1,2,...,n
j=1 xj
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;
}
82 Metode numerice n electronic

3.3. APLICAII
1. Se d circuitul electric din figura 3.1 ce are urmtoarele componente:

R1 2.4k, R2 3.6k, R3 15 . k, R4 1k,


R5 18
. k, R6 2.7k, R7 12 . k, R8 3k,
E1 10 V , E2 12V , E3 15V
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 R5
E3

R2
E1 R3 R6 R8
E2 R7
R4

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
1 2 2 3 3 4 4 5 6 7
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
1 2 3 4 5 6 7
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
1 2 3 4 5 6 7
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
1 2 3 4 5 6 7
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
1 2 3 4 5 6 7
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
1 2 3 4 5 6 7
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
. x1 0.34 x 2 6.2 x 3 0.3x 4 14
13 .
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(x0 x) f(x0 )
f 1 x0 lim (4.1)
x
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:
f x0 x f x0
D- = (4.3)
x
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 x f x0 x D+ D -
f ' ( x0 ) (4.4)
2 x 2
Dac notm 2x h , se obine derivata numeric n x0 :
-
*)Bibliografie: [6], [7], [15]
Derivarea numeric 85

h h
f x0 f x0
2 2
f ' x0 (4.5)
h
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
y derivatelor de ordin superior.

P h h
f ' x0 f ' x0
2 2
f x0
''
h
Q
R f x0 h f x0 f x0 f x0 h

h2
f x0 h 2 f x0 f x0 h
(4.6)
y f ( x) h2
h h
x f '' x0 f '' x0
2 2
f ''' x0
h

3 h h h h 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 h h 3
h 3 f x0 3 f x0 f x0 h
f xFig.4.1.GraficulderivateinpunctulQ
0 2 2 2 2
3
(4.7)
h
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 :

f x0
x-x0 2
x-x0
3

x0
x-x0 '
f ( x ) f ( x0 ) + f ''
f ''' ( ) (4.8)
1! 2! 3!
86 Metode numerice n electronic

x , x0 . Substituim
h
unde x x0 n dezvoltarea lui f ( x ) , (4.8).
2
h h 2 '' h3 '''
f 1
h
f x0 f x0 f ' x 0 f x0 (4.9)
2 2 8 48
h
unde 1 x0 ,x0 .
2
h
Substituim x x 0 n dezvoltarea lui f ( x ) , (4.8)
2
h h 2 '' h 3 '''
f x0 f x0 f ' x0 f 2
h
f x0 (4.10)
2 2 8 48
h
unde 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
''' '''
f ' x0
2 2

h 24 2 (4.11)
h h
f x0 f x0
2 2 h
2
= f '''
h 24
h h
unde x0 ,x0 ,
2 2
rezult c eroarea de trunchiere a derivatei prin dou puncte este :
h 2 '''
eT = f (4.12)
24

h h h2
Dac 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;
{
f x0 0 .5h f x0 0 .5h
calculeaz der = ;
h
}
Derivata este der ;
}
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 :

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

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
(4.18)
h1h2 h1 h2
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


88 Metode numerice n electronic

PUNCTE

Pentru funciile de grad mai mare ca doi, eroarea de trunchiere o determinm din
dezvoltarea n serie Taylor a funciei f ( x ) :
( x x0 ) ' ( x x0 )2 ' ( x x0 )3 '
f ( x ) f ( x0 ) f ( x0 ) f ( x0 ) f ( ) (4.19)
1! 2! 3!
unde [x , x0 ] .
Substituim x x 0 h1 i rezult:
h1 ' h2 h3
f ( x0 h1 ) f ( x0 ) f x0 1 f '' x0 1 f ''' 1 (4.20)
1! 2! 3!
unde 1 x0 -h1,x0 .
h2 h3
f x0 2 f '' x0 2 f ''' 2
h2 '
f ( x0 h2 ) f ( x0 ) (4.21)
1! 2! 3!
unde 2 x 0 ,x 0+h2 .
Se nmulete egalitatea (4.20) cu - h22 i egalitatea (4.21) cu h12 i se adun. Rezult :

h12 f x0 h2 h22 h12 f x0 h22 f x0 h1
f ' ( x0 )
h1h2 h1 h2

h1h2
6 h1 h2

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

Eroarea de trunchiere este dat de formula :


eT
h1h2
6 h1 h2

h2 f ''' 1 h1 f ''' 2 (4.23)

Dac f ''' x M
pentru orice x x0 -h ,x0 h2 atunci
h1h2
eT M (4.24)
6

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(x0-
h1))/(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 :

f ' x0 af x0 2h bf x0 h cf x0 df x0+h+ef x0 2h (4.26)
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 (4.29)
Pentru f ( x ) ( x x0 )3 f ' ( x ) 3( x x0 )2 , f ' ( x0 ) 0 i
0 8h3a h3b 0c h3d 8h3e (4.30)
Pentru f ( x ) ( x x0 ) f ( x ) 4( x x0 ), f ' ( x0 ) 0 i
4 '

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 :
f ' ( x0 )
1
f x0 2h 8 f x0 h 8 f x0 h f x0 2h (4.33)
12h
90 Metode numerice n electronic

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 :
h f
24 4 IV
eT (4.34)
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
12h

f x0 2 h 8 f x0 h 8 f x0 h f x0 2 h ;

}
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
92 Metode numerice n electronic

Tabelul 4.1.
h1 h2 f1 f0 f2 Derivata
A 0.2 0.3 0.7 0.1 0.2 0.223333
B 0.2 0.3 2.3 27 40 29.33333
C 0.2 0.2 40 50 77 92.53333
D 0.01 0.01 60 65 68 400.3333
E 70
F 0.2 0.3 130 150 170 86.66667
G 0.2 0.3 190 200 240 83.33333
H 0.25 0.2 220 250 295 38.33333
I 0.1 0.1 250 275 300 500.8922
J 300
K 0.2 0.3 380 400 430 100.4356
L 0.2 0.3 440 450 470 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 ; f( 1 ) 15.628085
-dervata prin cinci puncte h 10 ; 6
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)
a
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
ba
x i x i+1 x i h , i = 0,1,...,n-1. (5.2)
n
Se calculeaz aproximativ aria fiecrui dreptunghi
ba
si f ( xi ) (5.3)
n
i se nsumeaz
n 1 n 1
si =h f ( xi ) (5.4)
i 0 i= 0
unde x i a h i
Formula (5.4) reprezint formula
y de integrare a dreptunghiului.
Pentru funcia constant metoda
f ( x i 1 ) dreptunghiului are eroarea de
f ( xi ) 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.
a b x
xi x i 1

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;
{

Integrarea numeric 95

sum=0;
ld ls
calculeaz h ;
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


b
Fie I f ( x )dx unde f ( x ) este continu pe a , b i a , b sunt finite.
a
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
ba
x i x i 1 x i h , i=0,1,...,n-1 , x 0=a si x n =b
n
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 )
Ii h (5.5)
2
h n 1
I f ( x i ) f ( x i 1 ) f ( x 0 ) 2 f ( x1 ) ... 2( x n 1 ) f ( x n )
h
(5.6)
2 i0 2

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
f ( x i 1 ) dreptunghiului, dar ca timp de
f ( xi ) calcul este comparabil cu
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.
b Cu ct acest numr este mai
mare cu att precizia este mai
bun, dar timpul de calcul
a xi x i1 x al integralei crete. Aceast in-

Fig.5.2.Reprezentareagraficametodeideintegrare tegral st la baza metodei lui
atrapezului Richardson.

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 )=( x i ) f ( x i )+ f ( x i ) ... (5.7)
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 ) ... (5.8)
1! 2!
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 )
f ( x )= ( x xi ) h f ( x i 1 )
2 2
(5.9)
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

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


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

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

Integrarea numeric 97

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
f ( x i 1 ) f ( x i ) 2 f ( x i 1 ) f ( x i ) 3
eTi h h ... (5.11)
4 12
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 :
x i3 3 x i3
xi 1
x3 xi 1 h3
x 2 dx 3 xi

3
x i2 h h 2 x i
3
(5.13)
xi

Aplicnd metoda trapezului aceleai funcii avem:


1 xi )
xi 1 2 2
( x i+ h2
x dx h eTi x i2 h x i h 2 eTi
2
(5.14)
xi 2 2
Din relaiile (5.13) i (5.14) rezult eTi h 3 / 6 (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
Din formulele (5.16) i (5.15) rezult k=-
12
Eroarea de trunchiere pentru trapezul ( x i , x i 1 , f ( x i ), f ( x i 1 )) este
eTi h 2 f ( x i 1 ) f ( x i )
1
(5.17)
12
iar pentru ntreaga integral pe intervalul a , b avem cu aproximaie eroarea de
trunchiere:

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.
f ( x1 ) f ( x2 ) f ( x1 ) f ( x 2 )
E I ((( ...(((1 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

f ( x3 ) f ( x1 ) f ( x 2 ) ... f ( x n 2 )
+ 3 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 )
n1 rn2 rn1 )
f ( x1 ) f ( x 2 ) ... f ( x n1 ) f ( x 0 ) 2 f ( x1 ) ... 2 f ( x n1 ) f ( x n )

f ( x0 ) f (xn ) f ( x0 ) f ( x n )
( 0 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 )

f ( x0 ) f ( xn )
rn 1 h rn 2 rn 1 h rn 2 rn
f ( x 0 ) 2 f ( x1 ) ... 2 f ( x n 1 ) f ( x n )
f ( x0 ) f ( xn )
0
f ( x0 ) 2 f ( x1) ... 2 f ( xn1) f ( xn ) n f ( x0 ) 2 f ( x1) ... 2 f ( xn1) f ( xn )

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


(rn2 rn1 ) 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 ) 2 f ( xn2 )


+rn-3 n-2
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 ( xn3 ) 2 f ( x2 )


+ rn-4 ...2
f ( x0 ) 2 f ( x1 ) ... 2 f ( xn1 ) f ( xn ) f ( x0 ) 2 f ( x1 ) ... 2 f ( xn1 ) f ( xn )

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

eI
innd cont c eroarea relativ este I , unde eI este eroarea absolut, putem
I
calcula eroarea absolut:
h f ( x 0 ) f ( x n ) h f ( x0 )
e I ( rn 1 h n 2 ) I rn 0
2 2

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)

Integrarea numeric 99

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;

{
ld ls
calculeaz h ;
n
f (ls ) f (ld )
calculeaz sum 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

eT=Ck2 (5.22)
Ca urmare
I=Ih+Ch2
I=Ik+Ck2 (5.23)

Integrarea numeric 101

I h -I k
Prin scdere se calculeaz C= i nlocuind n formula integralei I rezult:
k 2 h2

Ih Ik
I Ih 2 (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
{ calculeaz h ;
n
ld ls
calculeaz k ;
m
f (l s ) f (ld )
calculeaz sumh h ;
2
f (l s ) f (ld )
calculeaz sumk k ;
2
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:
ba ba
k 2h , k , h (5.25)
m n
Scriem formula metodei trapezului pentru fiecare diviziune n parte:

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

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)

Aplicm formula lui Richardson (5.23):

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

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

Integrarea numeric 103

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

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

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;
{
ld ls
calculeaz h ;
n
f (ls ) f (ld )
calculeaz sum h. ;
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 )
y (5.29)
ba
Pentru x = a rezult y =-1, iar pentru x = b rezult y =1. Substituia este dat de
formula:
1 1
x (b a ) y (b a ) (5.30)
2 2
1
i dx (b a )dy (5.31)
2
b
Ca urmare, integrala I f ( x )dx se transform n integrala:
a
+1
1 1
1 +1
I f 2 ( b a ) y 2 ( b a ) 2 ( b a )dy ( y )dy (5.32)
1 1

Integrarea numeric 105

z z a 0 a1 y

z ( y)

y0 y1 y
Fig.5.4.Reprezentareagraficafunciei z ( y ) iapunctelordedivizare

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


1
de integrare, puncte ce le determinm astfel ca integrala I ( y )dy s dea
1
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
I= ( y )dy= (a 0 a1 y )dy (5.34)
-1 -1
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:
( y )=b0+b1 y+b2 y 2+b3 y 3 (5.35)
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)


1 1
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)
1
+1
i y( y y 0 )( y y1 )dy 0 (5.39)
1
Din aceste dou ecuaii se obine sistemul:
+1

y 2 ( y 0 y 1 ) y y 0 y 1 dy 0
1

+1 (5.40)

y 3 ( y y ) y 2 y y y dy 0
0 1 0 1
1
sau
1
y 0 y1 0
3 (5.41)
y 0 y1 0
1 1
cu soluiile y0 i y1 (5.42)
3 3
Pentru calculul ponderilor k0 , k1 utilizm egalitatea
+1 +1
1 1
I = ( y ) dy = ( a 0 a1 y )dy k 0 ( ) k 1 ( ) (5.43)
-1 -1 3 3
+1 +1
a1 2
(a 0 a1 y)dy (a 0 y 2
y )
1
2a 0 (5.44)
1
nlocuind n (5.43) rezult:
1 1
k 0 (a 0 a1 ) k 1 (a 0 a 1 ) 2a 0 (5.45)
3 3
Prin identificare se obine sistemul:
k 0 k1 2
(5.46)
k 0 k1 0
cu soluiile: k 0 1 , k1 0 (5.47)
Formula de calcul a integralei prin metoda cuadraturii gaussiene cnd utilizm dou
puncte de divizare este:
b 1
1 1
I f ( x ) dx ( y)dy ( ) ( ) (5.48)
a 1 3 3
1
unde: ( y) (b a ) f ( y ) (5.49)
2

Integrarea numeric 107

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:
eT k (IV) ( ) , -1 1 (5.50)
Pentru determinarea lui k lum ( y ) y 4
1 1 1
y5 2
( y ) dy y 4 dy 5 1

5
(5.51)
1 1

1 1
1 1 2
( y ) dy y 4 dy ( 3
) (
3
) eT e
9 T
(5.52)
1 1

Din egalitile (5.51) i (5.52) rezult:


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

8 1
k 24 de unde rezult k
45 135

Eroarea de trunchiere pentru formula cuadraturii gaussiene prin dou puncte este:
1 ( IV )
eT ( ) , -11 (5.53)
135

5.2.2. Metoda cuadraturii gaussiene cu mai multe puncte de divizare

n acest caz
b 1 n 1
f ( x)dx (u)du k i ( yi ) (5.54)
a 1 i0

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

Pn ( y ) (2n 1) yPn 1 ( y ) (n 1) Pn 2 ( y )
1
(5.55)
n
iar ponderile sunt date de formula:

108 Metode numerice n electronic

2
ki 2
(5.56)
(1 y i2 ) Pn ( y i )

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


trunchiere: e T k ( 2 n) ( ) , -11 (5.57)
Calculm integrala pentru ( y ) y 2 n
1 1
y 2 n 1 1 2
( y )dy y dy
2n
(5.58)
1 1
(2n 1) 1 2n 1

1 1 n 1
( y )dy y 2n dy k i yi 2n eT (5.59)
1 1 i 0

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


2 n 1
eT k i yi2 n (5.60)
2n 1 i 0
Aplicnd formula (5.57) , unde (2n)()=(2n)! i egalnd-o cu (5.60)
rezult:
1 2 n 1
k k i ui2 n (5.61)
(2n)! 2n 1 i 0
iar eroarea de trunchiere
(2n) ( )
2 n 1
eT k i ui2 n (5.62)
(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;

Integrarea numeric 109

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)*(ld-
ls)*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.652145145862564 0.347854854137454
0 0
0 0
0 0
0 0

110 Metode numerice n electronic

0 0
0 0}
/* n=5 */
{0.236926885056189, 0.478628670499366
0.568888888888889, 0.478628670499366,
0.236926885056189 0,
0, 0,
0, 0,
0, 0,
0, 0,
0, 0}
/* n=6 */
{ 0.17132449237917, 0.360761573048139,
0.467913934572691, 0.467913934572691,
0.360761573048139, 0.17132449237917,
0, 0,
0, 0,
0, 0,
0. 0,
0, 0}
/* n=7 */
{0.12948496616887, 0.279705391489277,
0.381830050505119, 0.417959183673469,
0.381830050505119, 0.279705391489277,
0.12948496616887, 0,
0, 0,
0, 0,
0, 0,
0, 0}
/* n=8 */
{0.101228536290376, 0.222381034453374,
0.313706645877887, 0.362684783378362,
0.362684783378362, 0.313706645877887,
0.222381034453374, 0.101228536290376,
0, 0,
0, 0,
0, 0,
0, 0},

/* n=9 */
{ 0.08127438361574, 0.180648160694857
0.260610696402935 0.312347077040003,
0.33023935500126 0.312347077040003,
0.260610696402935, 0.180648160694857,
0.08127438361574, 0,
0, 0,

Integrarea numeric 111

0, 0,
0, 0},

/* n=10 */
{0.066671344308688, 0.14945134915058
0.219086362515982, 0.269266719309996,
0.295524224714753, 0.295524224714753,
0.269266719309996, 0.219086362515982,
0.14945134915058, 0.066671344308688,
0, 0,
0, 0,
0, 0},
/* n=11 */
{0.055668567116, 0.125580369465,
0.186290210928, 0.233193764592,
0.26280454451, 0.272925086778,
0.26280454451, 0.233193764592,
0.186290210928, 0.125580369465,
0.055668567116, 0,
0, 0,
0, 0},
/* n=12 */
{0.047175336387, 0.106939325995,
0.160078328542, 0.203167426723,
0.233492536538, 0.249147045813,
0.249147045813, 0.233492536538,
0.203167426723, 0.160078328542,
0.106939325995, 0.047175336387,
0, 0,
0, 0},
/* n=13 */
{0.040484004765, 0.092121499838,
0.13887351022, 0.178145980762,
0.207816047537, 0.226283180263
0.232551553231, 0.226283180263,
0.207816047537 0.178145980762,
0.13887351022, 0.092121499838
0.040484004765, 0,
0, 0},
0,
/* n=14 */
{0.035119460332, 0.08015808716,
0.121518570688, 0.157203167158,
0.185538397478, 0.205198463721,
0.215263853463, 0.215263853463,
0.205198463721, 0.185538397478,

112 Metode numerice n electronic

0.157203167158, 0.121518570688,
0.08015808716, 0.035119460332,
0, 0},
/* n=15 */
{0.030753241996, 0.070366047488,
0.107159220467, 0.139570677926,
0.166269205817, 0.186161000016,
0.198431485327, 0.202578241926,
0.198431485327, 0.186161000016,
0.166269205817, 0.139570677926,
0.107159220467, 0.070366047488,
0.030753241996, 0},
/* n=16 */
{0.027152459412, 0.062253523939,
0.095158511682, 0.124628971256,
0.149595988817, 0.169156519395,
0.182603415045, 0.189450610455,
0.189450610455, 0.182603415045,
0.169156519395, 0.149595988817,
0.124628971256, 0.095158511682,
0.062253523939, 0.027152459412};

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.5773502692,
0, 0,
0, 0,
0, 0,
0, 0,
0, 0,
0, 0,
0, 0},
/* n=3 */
{ 0.7745966692, 0,
-0.7745966692 0,
0, 0,
0, 0,
0, 0,
0, 0,
0, 0,

Integrarea numeric 113

0, 0},

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

114 Metode numerice n electronic

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

Integrarea numeric 115

/* n=14 */
{0.986283808697, 0.928434883664,
0.82720131507, 0.687292904812,
0.515248636358, 0.319112368928,
0.108054948707, -0.108054948707,
-0.319112368928, -0.515248636358,
-0.687292904812, -0.82720131507,
-0.928434883664, -0.986283808697,
0, 0},
/* n=15 */
{0.98799251802, 0.937273392401,
0.84820658341, 0.72441773136,
0.570972172609, 0.394151347078,
0.201194093997, 0,
-0.201194093997, -0.394151347078,
-0.570972172609, -0.72441773136,
-0.84820658341, -0.937273392401,
-0.98799251802, 0},
/* n=16 */
{0.989400934992, 0.944575023075,
0.865631202388, 0.755404408355,
0.617876244403, 0.458016777657,
0.281603550779, 0.095012509838,
-0.095012509838, -0.281603550779,
-0.458016777657, -0.617876244403,
-0.755404408355, -0.865631202388,
-0.944575023075, -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)


a
pot fi aduse la forma

f ( x)dx (5.64)
a
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

A
f ( x )dx k
lim (5.65)
a

+
atunci f ( x)dx k (5.66)
a
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)
A

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

f ( x ) dx f ( x ) dx (5.68)
a a
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:

Integrarea numeric 117

f (c 0) lim f ( x ) i f (c 0) lim f ( x ) (5.69)


x c x c
x c x c

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


n cazul acestor funcii:
b c b

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


a a c
unde
f ( x) pentru axc
f 1 ( x)
f (c 0) pentru xc

f ( x) pentru c x b
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 b

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


a a ce

c
unde poate fi luat suficient de mic astfel ca f ( x)dx 1 , 1 0
c

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)

118 Metode numerice n electronic

bd
y
f ( x,y)dx f ( x,y)dxdy
D a c

d (5.72)
reprezint integrala
dubl din funcia de
j dou variabile f ( x , y ) .
Pentru calculul valorii
acestei integrale vom
utiliza formula de
c cubatur a trapezului sau
formula de cubatur a
lui Simpson care sunt
a i b x 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


ba d c
h , k (5.73)
n m
i se consider dreptunghiul cu vrfurile xi , yi , xi 1 , yi , xi 1 , yi 1 , xi , yi 1 ,
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.


xi 1 y j 1 xi 1
k
I ij dx f ( x,y )dxdy f ( x,y j ) f ( x,y j 1 ) dx
2
xi yj xi

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

k h
4

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


n1m1
kh n1m1
I Iij f (xi,yj ) f (xi ,yj1) f (xi1,yj ) f (xi1,yj1) (5.75)
i 0 j 0 4 i 0 j 0
expresie cunoscut sub numele de formula de cubatur a trapezului.

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;
{
b a
calculeaz h ;
n

dc
calculeaz k ;
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;

120 Metode numerice n electronic

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 xi 1
k
I ij f ( x,y ) dxdy 3
f ( x,y j 1 ) 4 f ( x,y j ) f ( x,y j 1 ) dx
xi 1 y j 1 xi 1


kh
9

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 )


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 )
( 5.76)
Integrala pe ntreg dreptunghiul a , b, c, d este dat de formula de cubatur a lui
Simpson:


n1m1
kh n1m1
I Iij f (xi 1,y j 1) f (xi 1,y j 1) f (xi 1,y j 1) f (xi 1,y j 1)
i 0 j 0 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.77)

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;

Integrarea numeric 121

b a
{ calculeaz h ;
n
dc
calculeaz k ;
m
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)+

122 Metode numerice n electronic

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

x3 2
1.Se d funcia f ( x) .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 Numrul de Valoarea integralei
subintervale
Dreptunghiului 10000 1394.642843
Trapezului 10000 1395.704297
Richardson 5000 i 10000 1395.703984
Simpson 10000 1395.703984
Cuadratura Gauss Grad pol Legendre 1395.7031
n=15

2. Se consider funcia de dou variabile:


x2 y2
f ( x,y ) . 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 Nr. Pct. Pe Ox Nr. Pct. Pe Oy Valoarea integralei
Cubatura trapezului 100 100 -24.730047
Cubatura Simpson 100 100 -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:
Tabelul 6.1.
x x0 x1 . xk . xn
y y0 y1 . yk . 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 1
a n x1 a n 1 x1 a1 x1 a 0 y1
n


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:
124 Metode numerice n electronic

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 (6.3)


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

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:
Pn ( x ) x n a n 1 x n 1 ... a1 x a 0 . (6.4)
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 )
(6.5)

n ( x ) ( x x 0 )( x x1 )...( x x n 1 )
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 .
Pn ( x0 ) P (x ) P (x ) Pn ( x n )
b0 , b1 n 1 ,...,bk n k ,..., bn (6.7)
0 ( x0 ) 1 ( x1 ) k ( xk ) n ( xn )
Ca urmare,

x x
n

n
i (x) n j n n x xj
Pn (x) Pn (xi ) yi yi
j 0, j i

i (xi ) i 0 xi x j
x x
n
i 0 i 0 j 0, j i
i 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
Pn x y i . (6.8)
i 0 j 0, j i i x j
x
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 n x xj
eT f x y i F x (6.9)
i0 j 0, j i x i x j

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 :
H ( t ) F ( x )G( t ) F ( t )G( x ) (6.11)
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
(6.12)
H ( n 1) 0 ( n 1)! F x f G x
n 1

sau
f
n 1
eT F x
G
x x0 xn (6.13)
( n 1)!
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:
n 1 n 1 x xj i
P( x ) yi zi unde zi i pi yk z k , P( x ) pn (6.14)
i0 j 0 ,j i xi x j k0

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).
126 Metode numerice n electronic

x 1

-
1 3 4

1
x .
j 2
:
-1

-1
-

xi
z j1 zj

Fig.6.1. Graful de procedur a expresiei z.

Considerm toate valorile xi , i=1,2,... ,n, fr erori i notm cu


ki , 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
0i 11i 21
i
2 31
i
41
i

1i 12i 22
i
32
i
42
i
0i (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
(6.16)
i j

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 (6.18)
Construim graful de procedur pentru expresia pi .
Interpolarea 127

zi 1
zi yi
pi
. +
1

pi 1
yi pi

pi-1 pi

n 1
Fig.6.2. Graful de procedur al expresiei pi 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.
z0 y0
0 0 e0 50 60
p0

1 1 e1 31
z1 y1 p
1 1 61 (6.19)
p1 p2

n 1 n 1 en 1 5, n 1
z n y n 1 p
n 1 n 2 6,n 1
pn 1 pn 1
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
n 1| pn1| 4n 3 e zi yi pi 4n 3 e pi pi
i 0 i 0 i 0 i 0
n 1
Se mai poate face majorarea | pi | npn 1 i rezult:
i0

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

6.1.3. PARTICULARIZRI ALE POLINOMULUI LUI LAGRANGE

Dac considerm dou puncte, interpolarea devine liniar


x x2 x x1
y y1 y2 (6.21)
x1 x 2 x 2 x1
Eroarea de trunchiere a interpolrii liniare devine:
f
eT x x1 x x2 x1 x 2 (6.22)
2!
128 Metode numerice n electronic

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
x xj
calculeaz prod prod ;
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
(6.27)
k 0

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


Tabelul 6.2
xi yi yi 2 yi 3 yi 4 yi 5 yi 6 y i

x0 y0 y0
x1 y1 y1 2 y 0 3 y 0
x2 y2 y 2 2 y1 3 y1 4 y 0 5 y 0
x3 y3 y3 2 y2 3 y 2 4 y1 5 y1 6 y 0
x4 y4 y 4 2 y3 3 y3 4 y 2
x5 y5 y5 2 y 4
x6 y6

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 (6.28)
Pentru h=0 puterea generalizat coincide cu puterea obinuit.
130 Metode numerice n electronic

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
Pn ( x ) C0 C1( x x0 )[1] C2 ( x x0 )[2] ... Cn ( x x0 )[n ] (6.31)
unde ( x x0 )[i ] ( x x0 )( x x1 )...( x xi 1 ) , i =1, 2, ...n
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 .
Pn x 0
Se poate calcula C1 (6.34)
1! h
Se continu calculul diferenelor finite n punctul x0 i se observ c :
Pn x 0
k
Ck , k Pn x 0 k y 0 , k=0, 1, 2, ... n. (6.35)
k !h k
innd cont de formulele de calcul ale coeficienilor, polinomul lui Newton de
interpolare de spea nti poate fi scris astfel:
y 0 2 y n y
Pn x 0 y 0 x x 0 1 20 x x 0 2 n0 x x 0 n (6.36)
1! h 2!h n !h
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
prod prod * x p x0 i 1 * h * * ;
1 1
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)
132 Metode numerice n electronic

y n 1
Pn ( x n 1 ) y n 1 C11!h pentru x xn 1 i rezult C1 .
1! h
Continund calculele diferenelor finite n punctele xn 2 , xn 3 ,..., xn k , pentru rangul k
rezult formula de calcul al coeficientului Ck :
k y n k
Ck (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 :
y 1 y n 2
Pn x y n n 1 x x n x xn1 2 yn0 x x1 n (6.42)
2 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 , x i 1 , ..., x i k f x i 1 , x i ,..., x i k 1
f x i 1 , x i , x i 1 , ..., x i k (6.43)
x i k x i 1
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:
134 Metode numerice n electronic

Pn ( x ) y0 Pn ( x0 , x1 )( x x0 ) Pn ( x0 , x1, x2 )( x x0 )( x x1 )...
(6.46)
Pn ( x0 ,..., x n )( x x0 )( x x1 )...( x x n 1 )
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
y j 1 y j
pentru j=0...n-i calculeaz 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
Tabelul 6.3
x y
x0 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 ---- y0123...n

xj x x x0
y0 j y0 yj j=1, 2, 3, ..., n
x j x0 x j x0
xj x x x1
y 01 j y 01 y0 j j=2, 3, ..., n (6.47)
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 (6.48)
x n x n 1 x n x n 1

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

6.5.1. ALGORITMUL 6.5. METODA LUI AITKEN

{Variabile
136 Metode numerice n electronic

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
xp x j x p x i 1
y j y i 1 yj ;
x i 1 x j 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 x1 x2 x3 ---- xn
y y1 y2 y3 ---- 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 x [xi , xi 1 ] , i =1,2,...,(n-1) (6.50)
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, Di Si( m1) ( x ) i =1,2,...,n.
Rezult ecuaia liniar:
Di 1 ( x x i ) Di ( x i 1 x )
S i( m1) ( x ) (6.52)
hi
unde hi=xi+1-xi , i =1,2,...,(n-1)
Integrnd de m-1 ori relaia (6.52) se obine:
Di 1 ( x x i ) 2 Di ( x i 1 x ) 2
S i( m 2 ) ( x ) C1i (6.53)
2 hi
( m 3) Di 1 ( x xi ) 3 Di ( xi 1 x) 3
Si ( x) C1i x C 2i (6.54)
6hi
Di1(x xi )m1 (1)m2 (xi1 x)m1 Di C1i x m3 C2i x m4
Si(x) ...Cm1,i (6.55)
(n 1)!hi (m 3)! (m 4)!
Di1 ( x xi ) m ( 1) m1 ( xi1 x ) m1 Di C1i x m 2 C2i x m3
Si ( x ) .. 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)
138 Metode numerice n electronic

Di 1 ( x xi ) Di ( xi 1 x)
S i ( x)
hi
Di 1 ( x xi ) 2 Di ( xi 1 x) 2
S i( x) C1i
2hi
Di 1 ( x x i ) 3 Di ( x i 1 x ) 3
Si (x) C1i x C2i (6.58)
6 hi
Din S ( x i ) y i i S ( x i 1 ) y i 1 rezult:
y i 1 y i Di 1 Di
C1i hi
hi 6
x i 1 y i x i y i 1 Di x i1 Di1 x i
C2 i hi
hi 6
Din identificarea relaiilor (6.57) i (6.58) rezult :
D Di D x Di 1 x i
Ai i 1 ; Bi i i 1 (6.59)
6hi 2hi
Di 1 x i2 Di x i21 y i 1 y i Di 1 Di
Ci hi
2hi hi 6
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
Ei hi (6.60)
6 hi hi 6
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 (6.61)
hi hi 1
Considernd derivatele de ordinul nti n punctele x1 i x2 egale cu:
y 2 y1 y 3 y 2 y 3 y1
y1 (6.62)
x 2 x1 x 3 x 2 x 3 x1
respectiv
y n 1 y n 2 y n y n 1 y n y n 2
y n (6.63)
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
Interpolarea 139

y2 y1
2h1 D1 h1 D2 6 y1
h 1
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 (6.64)
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
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 ;

y 2 y1 y 3 y 2 y 3 y1
calculeaz derx1 ;
x 2 x1 x3 x 2 x 3 x1
140 Metode numerice n electronic

y n 1 y n 2 y y n 1 y n y n 2
calculeaz derxn n ;
x n 1 x n 2 x n x n 1 x n x n2
construiete sistemul tridiagonal

y2 y1
2.h1.D1 h1.D2 0.D3 0.Dn 6( h derx1 )
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;
142 Metode numerice n electronic

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 x1 a x2 x3 ---- x 2n b
y y1 y2 y3 ---- 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 n
H ( x ) a i i cu a i2 0 (6.65)
i0 i0
are cel mult n rdcini pe [a , b] .
2 ( x a )
Se face transformarea t pentru a transforma intervalul [a , b] n
ba
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:
x xj
n n sin
I n f ( xi ) 2 (6.67)
i 0 j 0
xi x j
j i sin
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;
144 Metode numerice n electronic

}
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 00 a 01 a 02 a 03 ... a 0( n 1 ) a 0 n

a10 a11 a12 a13 ... a1( n 1) 0

(6.69)
a( n 2 )0 a( n 2 )1 a( n 2 )2 0 . .. 0 0

a( n 1)0 a( n 1)1 0 0 ... 0 0

a n0 0 0 0 ... 0 0

( n 1)( n 2)
Pentru determinarea acestor coeficieni avem nevoie de ecuaii.
2
Aceste ecuaii le putem obine numai din punctele date x i , y i , f ( x i , y i ) care trebuie
( n 1)( n 2)
s fie tot n numr de .
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

(6.70)
(x , y ) x n1 , y1 0 ... 0
n 1 0
(x , y )
n 0 0 0 ... 0
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:

ixi yj j f ( x 0 , y 0 )
a ij
h i k j i! j !

Introducnd coeficienii calculai n expresia polinomului (6.71) rezult polinomul de


interpolare pentru funcii de dou variabile:

i i j j f ( x 0 , y 0 )
( x x 0 ) ( y y 0 )
n
Pn ( x , y )
x y i j
(6.73)
i, j 0 hi k j i! j !
i jn

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:
n m n
x xk m
y yk
L( x, y ) f ( xi , y j ) x y . (6.74)
i 0 j 0 k0 i xk k0 j yk
ki k j

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;
146 Metode numerice n electronic

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
(7.1)



em y m y m y m f x m
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 (7.2)
i=1
Metode de optimizare 149

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.
2

m
E yi yi (7.3)
i=1
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
x x1 x2 x3 x4 .. xm
y y1 y2 y3 y4 .. 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 2

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:
E m

a 2axi b y i 1 0
i=1
(7.6)
E m

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 (7.7)
i=1 i=1 i=1

Soluiile sistemului liniar (7.7) n a i b sunt:


m m m m
x i2 y i x i x i y i
i=1 i=1 i=1 i=1
b 2 (7.8)
m m
m x i2 xi
i=1 i=1
m m m
m x i y i x i yi
i=1 i=1 i=1
a 2 (7.9)
m m
m x i2 x i
i=1 i=1

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;
}
Metode de optimizare 151

m s xy -s x s y
calculeaz a= ;
m s xx -s x s x
s xx s y -s x s xy
calculeaz b = ;
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 (7.11)
Se minimizeaz funcia int:
152 Metode n electronic


m 2
E = yi a n xin -a n-1 xin-1 ... a1 xi a 0 (7.12)
i=1
unde m reprezint numrul de valori ale funciei tabelate.
Necunoscutele sunt: a n, a n-1,..., a 0. (7.13)
Se deriveaz n raport cu necunoscutele (7.13) i se obine sistemul:

m m 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
x p a x p+1 a x p+2 a x p+k a x p+n a x p y
m m m m

i=1 i
0
i=1 i
1
i=1 i
2
i=1 i
k
i=1 i n i i
_____________________________________________________
m
x n a x n+1 a x n+2 a x n+k a x 2 n a x n y
m m m m

i=1 i
0
i=1 i
1
i=1 i
2
i=1 i
k
i=1 i n i i

(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;
}
Metode de optimizare 153

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
1
y (7.15)
ax+b
care aproximeaz cel mai bine funcia numeric. Pentru comoditatea calculului se
inverseaz funcia hiperbolic i se construiete funcia eroare:
154 Metode n electronic

2
m 1
E ax i b (7.16)
i=1 y i
Prin derivare n raport cu a i dup aceea cu b se obine sistemul liniar:
m m 1
mb+ xi a=
i=1 i=1 yi
m (7.17)

x b+ x 2 a= xi
m m

i=1 i=1 i=1 yi


i i

Soluiile sistemului (7.17) sunt:


m m 1 m x
xi m
i

i=1 i=1 yi i=1 y i


a 2 (7.18)
m m
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
b 2 (7.19)
m m
m x i2 xi
i=1 i=1
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;
1
calculeaz sy = sy+ ;
yi
xi
calculeaz sxy= sxy+ ;
yi
calculeaz sxx = sxx+xi*xi;
Metode de optimizare 155

}
s x s y -m s xy
calculeaz a = ;
m s xx -s x s x
s xx s y -s xy s x
calculeaz b= ;
m s xx -s x s x

1
Funcia este y ;
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 2

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 (7.23)
m
i=1

m
m
xi ln a+ xi ln b= xi ln y i
2
i=1 i=1 i=1

Soluiile sistemului obinut (7.23) sunt:


m m m
ln y x 2 x ln y x
i=1 i i
i=1
i
i=1
i i

a exp (7.24)
m
2
2
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 (7.25)
2

2
m m
m x i x i
i=1 i=1

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;
Metode de optimizare 157

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
calculeaz a = exp ;
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

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 2

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 (7.28)
m
m 2 m
ln x ln a+b ln x = ln x ln y

i=1 i

i=1
i i=1
i i

Rezolvnd sistemul se obin urmtoarele valori pentru a i b:


m m 2 m 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
(7.29)
m m
m ln 2 x i ln x i
i=1 i=1
m m m
m ln y i ln x i ln x i ln y i
i=1 i=1 i=1
b 2
(7.30)
m m
m ln 2 x i ln x i
i=1 i=1
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;
Metode de optimizare 159

calculeaz slnxlny=slnxlny +ln(xi )* ln(yi);


}
sln y sln x ln x -sln x sln x ln y
calculeaz a = exp ;
m sln x ln x -sln x sln x

m s ln x ln y -s ln x s ln y
calculeaz b= ;
m s ln x ln x -s ln x s ln 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
2
m
E y i a-b cos x i (7.32)
I=1
s fie minim.
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 (7.33)
cos x a+ cos 2 x b= y cos x
m m

i=1 i
i=1 i
i=1 i i

Soluiile sistemului (7.32) sunt:


m m m m
y i cos x i cos x i y i cos x i
2
i=1 i=1 i=1 i=1
a 2
(7.34)
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
b 2
(7.35)
m m
m cos 2 x i cos x i
i=1 i=1
2
= 2 f = unde f -frecvena, - pulsaia, iar T -perioada. se stabilete
T
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 ;
Metode de optimizare 161

calculeaz sycos x = sycos x + yi* cos x i ;


}
s y scos 2 x -scos x s y cos x
calculeaz a= ;
m scos 2 x -scos x scos x
m s y cos x -scos x s y
calculeaz b= ;
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

y
z1n z2n z3n z4n znm
yn

z14 z24 z34 z44 zm4


y4
z13 z23 z33 z43 zm3
y3
z12 z22 z32 z42 zm2
y2
z11 z21 z31 z41 zm1
y1

x
O x1 x2 x3 x4 xm
Fig.7.1.Reprezentarea funciei multiple.

Considerm c punctele z1 , z 2 ,..., z n se afl aproximativ pe un plan:


z Ax By C (7.36)
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 2
E zij Ax i By j C (7.37)
i=1 j=1

Prin egalarea derivatelor pariale ale funciei E n raport cu necunoscutele A, B, C,


rezult un sistem liniar funcie de aceste necunoscute:
m m m n
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
2
(7.38)
i=1 i=1 i=1 j=1 i=1 j=1
n m n 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

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 163

{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++)
{
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;
}
Metode de optimizare 165

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)
0 , i 1,2 ,...,n; (7.41)
xi
-matricea
2 F ( x) 2 F ( x) 2 F ( x)
...
x1 x1 x 2 x1 x n
2
(7.42)
J
2
F ( x) F ( x) F ( x )
2 2

x x x x ...
n 1 n 2 x n2
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:
X k 1 X k r (7.43)
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 169

{
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
170 Metode n electronic

1.Se dau datele experimentale din tabelul 7.2:


Tabelul 7.2.
x 1 2 3 4 5 6 7 8 9
y 1.44 1.728 2.0736 2.4883 2.9859 3.5831 4.2998 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 . )x
. (12

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 m y m
j j+1
y ''m
y x y m y 'm x-x m m m x-x m j+1
2 j
x-x x-x (8.5)
2! j! j+1!
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 y m j+1
j j+1
h 2 ''
y m+1 y m hy 'm y m m h j h (8.6)
2 j! j+1!
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 (8.8)
x y dx
f f
unde fx i fy (8.9)
x y
Pentru x x m rezult:
y ''m f x f y f (8.10)

Pentru j = 2 rezult:
h 2 '' y ''' 3
y m+1 y m hy 'm ym h (8.11)
2 6
sau
Rezolvarea numeric a ecuaiilor i sistemelor difereniale 173
h

y m+1 y m h f+ f x f f y
2
(8.12)
cu eroarea de trunchiere
y '''
eT h3 , xm x
6
(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


2 2 2

x xy y 2
Complexitatea acestor derivate face practic inutilizabil aceast metod.

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 (8.16)
i x m1 x m h (8.17)
nlocuind n (8.15) relaiile (8.16) i (8.17) rezult:
x m1 x m h (8.18)
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 (8.19)
2
174 Metode numerice n electronic
unde x m < < x m1 (8.20)

ym

xm x m1

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
eT h (8.21)
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;

}
Rezolvarea numeric a ecuaiilor i sistemelor difereniale 175
}

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:

y ' m+1 f x m+h,y m hy 'm (8.22)
Se face media dintre panta n punctul M (dreapta ML1)i panta n punctul H (dreapta
HL2)i o notm cu
zm
1
2

f x m ,y m f x m+h,y m hy m
'
(8.23)
176 Metode numerice n electronic

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
MR este:
y y m 0.5 f x m ,y m f x m+h,y m hy 'm x x m (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 .
y 'm
Aceast formul (8.25) reprezint formula de calcul a soluiilor numerice pentru o
ecuaie diferenial ordinar de ordinul nti.

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 )


(8.26)
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
1

2
unde 0 x ,x m i 0 y ,y m
Dac notm x x m h iar y y m h y m
'

unde y 'm f(x m ,y m ) (8.27)


rezult:

f x m+h,y m hy 'm f+hf x hff y
2

h f xx 0 ,y 0 2 ff xy 0 ,y 0 f 2 f yy 0 ,0 (8.28)
1 2

Rezolvarea numeric a ecuaiilor i sistemelor difereniale 177
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:


h
h

3
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 (8.30)
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.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
eT h 3
6

4

f xy (0 , 0 ) 2 ff xy (0 , 0 ) f 2 f yy (0 , 0 ) (8.32)

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[i-
1],y[i-
1])));
}
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

P x p x m , y p y m f x m , y m
h h
(8.36)
2 2
Se calculeaz panta soluiei y n acest punct P i rezult:

z m f x m , y m f x m , y m
h h
(8.37)
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:

y y m f x m , y m f x m , y m x x m
h h
(8.38)
2 2
Prin intersecia cu dreapta x x m1 x m h rezult ordonata:


h
2
h
2

y m 1 y m h f x m , y m f x m , y m

(8.39)
care reprezint formula de calcul a ordonatelor soluiei ecuaiei difereniale.
Rezolvarea numeric a ecuaiilor i sistemelor difereniale 179

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)
unde ym'
f ( xm , ym )
1
Pentru valorile a1 a 2 i b1 = b2 =1 avem panta zm, n cazul aplicrii metodei
2
Euler mbuntit, iar pentru valorile: a1 0, a 2 1 i b1 b2 1 / 2 avem panta
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:
1
a1 a 2 1 ; a 2 b1 a 2 b2 ; (8.45)
2
Rezolvarea numeric a ecuaiilor i sistemelor difereniale 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
1
a1 1 w , b1 b2 (8.46)
2w
Formula de calcul (8.44) devine:



y m1 y m h 1 w f x m , y m wf x m
2
h
w
, ym
2
h
w


f x m , y m O h 3 (8.47)

Expresia (8.47) reprezint formula de calcul a metodei Runge-Kutta de ordinul doi


1
general. Pentru w 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
h

k 2k 2 2k 3 k 4
6 1
(8.49)

unde
k1 f ( xm , ym )
h h
k 2 =f x m , y m k 1 (8.50)
2 2
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.51)

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;
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 k1 2k 2 2k 3 k 4 ;
h
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;
}
}
Rezolvarea numeric a ecuaiilor i sistemelor difereniale 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:

y m y mh kh 2 (8.52)
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 (8.53)
4
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
3

4 h/ 2
y m y m
h
(8.54)
Aplicnd metodele Runge - Kutta de ordinul doi rezult:
eT kh 3
8 h/ 2
y
7 m

y mh (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
31 m

y mh (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:
1 y m-1 2hf x m ,y m
0
y m+ (8.57)
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)

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
F ( x m1 , y m1 ) i intersecteaz dreapta x x m1 n punctul P( x m+1 ,y m+
0
1 ) obinndu-se
0
prima valoare prezis la estimarea zero. Se poate mbunti valoarea y m+1 dac se
1 ) i se face media cu panta n ( x m ,y m ). Prin
0
consider panta n punctul ( x m+1 ,y m+
punctul ( x m ,y m ) ducem o coard cu aceast pant care intersecteaz dreapta x x m1
1 1
n punctul ( x m+1 ,y m+ 1 ) unde y m+1 este estimarea de ordinul 1. Continund acest
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
zm
1
2
0
f x m ,y m f x m+1 ,y m+ 1 (8.60)
Punctul de abscis x m1 pe aceast coard are ordonata

1
y m+ 1 ym
h
2 0
f x m ,y m f x m+1 ,y m+ 1 (8.61)
Procednd n mod analog pentru a k-a estimare avem

k
y m+ 1 ym
h
2 k-1
f x m ,y m f x m+1 ,y m+ 1 (8.62)
k k-1
Dac y m+ 1 -y m+1 < unde > 0, (8.63)
orict de mic, iteraiile se opresc. Relaia (8.63) este satisfcut cnd metoda
predictor-corector este convergent.
Rezolvarea numeric a ecuaiilor i sistemelor difereniale 185
k k-1
y m+1 - y m+ 1 =
h
2
k-1
f x m+1 ,y m+
k-2
1 f x m+1 ,y m+1 (8.64)
Aplicnd teorema valorii medii obinem
h f k 1

y mk1 y mk11 y
2 y m1

y mk12

(8.65)

unde
f
y
este evaluat n x x m1 i y y m+
k-1 k
1 ,y m+1 .
f
Dac este mrginit de M >0 astfel ca:
y
f
M (8.66)
y
M h k-1 k-2
rezult k
y m+ k-1
1 -y m+1 y m+1 y m+1 . (8.67)
2
Analog
h M k-2 k-3
1 y m+1 y m+1 y m+
k-1 k-2
y m+ 1 (8.68)
2

2

h M
1 y m+1 .
k k-1 k-2 k-3
sau y m+ 1 -y m+1 y m+ (8.69)
2
Continund calculul prin acest procedeu se ajunge la rezultatul:
k-1

h M
1 y m+1
k k-1 1 0
y m+ 1 -y m+1 y m+ (8.70)
2
2
Dac dimensiunea intervalului h este bine aleas adic h (8.71)
M
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 m
y x y x m y 1 x m x-x m x-x m 2 16 x-x m 3 y ''' (8.72)
2
unde x xm
Considernd x x m1 x m h rezult:
h 2 '' h 3 '''

y x m+1 y x m h y 1 x m 2
y xm
6
y 1 (8.73)
unde xm 1 x m+1
Pentru x x m1 x m h rezult:
h 2 '' h 3 '''

y x m-1 y x m h y 1 x m 2

y xm
6
y 2 (8.74)
186 Metode numerice n electronic
unde x m-1 2 x m
Scznd din expresiile (8.67) i (8.68) rezult:
h 3 '''

y x m+1 y x m-1 2h y 1 x m 3

y (8.75)
tiind c

y ''' 1 y ''' 2
2

y ''' unde x m-1 x m+1
Comparnd (8.69) cu (8.57) rezult c eroarea metodei predictor- corector este :
p h 3 '''
eT
3
y 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
h 3 '''
eTc y h unde x m-1 h x m+1 (8.77)
12
Calculm valoarea adevrat ym n punctul m
h 2 '''
y m y m0

3
y (8.78)
iar dup (8.71) avem
h 2 '''
y m y mk y h (8.79)
12
Scznd relaiile (8.72) i (8.73) rezult:

y mk y m0

12

h 3 '''
y h 4 y '''
Considernd y '''
aproximativ constant pentru x m-1 x x m+1
se obine:
5 h 3 '''
y y mk y m0
12
sau

eTc
12

h 3 ''' 1 0
y y m y mk
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;
Rezolvarea numeric a ecuaiilor i sistemelor difereniale 187
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

}
Soluiile numerice ale ecuaiei sunt x[ i ], y i , i=0,1,2,...n;
k

}
}

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
(8.81)
y k+1
h

y k-1 y 'k-1 4 y 'k y 'k+1
3
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

{ calculeaz y k y k-1 f x m ,y m f x m h,y m hy m' ;
2
i = 3;
repet
4h
0
calculeaz y i+ 1 y i-3 3

2 y i-'2 y i-'1 2 y i' ;

j = 1;
repet
Rezolvarea numeric a ecuaiilor i sistemelor difereniale 189
j h '
j-1
calculeaz 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:


F x , y , y ' , y '' , , y n 0 (8.82)
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:
dy d y1 d y2 d y n-2
y1 , y2 , y3 , , y n-1 . (8.85)
dx dx dx dx
Se observ c
dk y
yk y
k
(8.86)
dx k
Ecuaia (8.82) o putem scrie sub forma
n

y f x , y , y ' , y '' , , y
n-1
sau
(8.87)
dy n-1
f x , y , y1 , y 2 , , y n-1
dx
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
y ' y 01 y10 , y '' y ''0 y 20 , , y y 0 y n-10
n-1
(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:
Rezolvarea numeric a ecuaiilor i sistemelor difereniale 191
( i 1)
y n 1 y n 1 6 k1
(i) 1 ( n 1)

2k 2( n 1) 2k 3( n 1) k 4( n 1)

n2
6 1

y ( i 1) y ( i ) 1 k ( n 2 ) 2k ( n 2 ) 2k ( n 2 ) k ( n 2 )
n2 2 3 4

(8.89)
1

y1( i 1) y1( i ) k1(1) 2k 2(1) 2k 3(1) k 4(1)
6


( i 1) 1
y y ( i ) k1 2k 2 2k3 k 4
6
unde


k ( n 1) hf x , y , y ( i ) , y ( i ) ,..., y ( i )
1 i i 1 2 m
(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
(8.90)
( n 1) h k k (1) k ( n 1)
k 3 hf x i , y i 2 , y1( i ) 2 ,..., y n( i ) 2
2 2 2 2

( n 1)
k 4
hf x i h, y i k3 , y1( i ) k3(1) , y 2( i ) k 3( 2 ) ,..., y m( i ) k 3( n 1)
k1( n 2 ) hy n( i)1

n- 2 i n-1
k1
k 2 h y n-
1
2


n-1 (8.91)
k n- 2 h y i k 2
3 n- 1
2

n- 2
k 4

h y n- i
1 k3
n-1

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 )
(8.93)
dy y
dx 1

corespunztor lui (8.84) i (8.85).


192 Metode numerice n electronic
Relaiile de calcul (8.90) i (8.91) devin:


y1i+1 y1i
1 1

k 2 k 21 2 k 31 k 41
6 1

(8.94)
yi+1 yi
1
k 2k 2 2k 3 k 4
6 1

unde

k1' hf ( x i , y i , y1i )

' h k1 i k11
2
k h f x
i 2+ , y i + , y1+
2 2
1
(8.95)
'
k h f x i+ h , y i + k 2 , y1i+ k 2
3 2 2 2

'
k 4 hf ( x i h, y i k3 , y1 k 3 )
i 1

k1 hy1i

k h y i k1
2 1
2
(8.96)
k h y i k 2
3 1
2

k 4 h( y1i k3 )
nlocuind (8.95 ) n (8.94 ) rezult formulele de calcul:
yi+1 yi
1
6
k1 k 2 k 3 i = 0,1,2,. .., n
unde

y i+1 y i 1 k 2k k k
1 1
6
1 2 3 4


k1 h f x i , y i , y1 i


h h i i k1
k 2 h f x i+ , y i y1 , y1 (8.97)
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

k 4 h f x i+h , y i h y1 k 2 , y1 k3
i h i
2

8.3. REZOLVAREA NUMERIC A ECUAIILOR


DIFERENIALE CU DERIVATE PARIALE
Rezolvarea numeric a ecuaiilor i sistemelor difereniale 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 2b x , y c x , y d x , y e x , y f x , y u=0
x 2
x y y 2
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).
a (x ,y ) b (x ,y )
(8.100)
b (x ,y ) c (x ,y )
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
2u u x+h ,y+h u x,y+h u x+h ,y u x, y
(8.101)
x y hk
u u x+h ,y u x, y

x h
u u x,y+k u x, y

y k
Ecuaia (8.98) scris cu ajutorul diferenelor finite devine
194 Metode numerice n electronic
1
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:
1
u x , y [a u x+h , y au x-h , y c u x , y+h
2a+2 c+2 b+h d+h e+h 2 f
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:
1
, )
u(11
2a1 2c1 2b1 hd1 he1 h 2 f1 (8.104)
a1u( 2,1) c1 1,2 c1 2b1u 2,2 2b1u1,2 2b1u( 2,1) d1u( 2,1) eu(11,2)
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
4

u x+h , y u x-h , y u x , y+h u x , y-h (8.106)
Rezolvarea numeric a ecuaiilor i sistemelor difereniale 195
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

u11 u12 u13


0,3

u (0, y)=0 0,2 u21 u22 u23 u (0,4, y)=0


u31 u32 u33
0,1

0 0,1 0,2 0,3 0,4 x

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.


u11 4 0 u12 0 0 0 0 0 0 0 1
1

u 1 u 0 u 0 u 0 0 0 0 1
12 4 11 13 22

u13 0 u12 0 0 0 u23 0 0 0 1
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
1


u23 1 0 0 u13 0 u22 0 0 0 u33 0
4

u31 0 0 0 u21 0 0 0 u32 0 0
1
4

u32 0 0 0 0 u22 0 u31 0 u33 0
1
4

u32 4 0 0 0 0 u22 0 u31 0 u33 0
1


u 1 0 0 0 0 0 u 0 u 0 0
33 4 23 32
(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( x i , y j ) ( 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 )
}
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
l
figura (8.7) cu paii h 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 x

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)
. h 2
h2
Din ecuaia (8.110) se deduce formula de calcul a valorilor funciei n punctele reelei:
1
uij 1 (ui 1, j 4ui , j ui 1, j ) (8.111)
6
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
Rezolvarea numeric a ecuaiilor i sistemelor difereniale 199
pentru j=1 pn la nrt
1
calculeaz uij (ui 1, j 1 4ui , j 1 ui 1, j 1 ) ;
6
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:

2u 2 u
2
a 0 (8.112)
t2 x2
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 ui 1,j 2ui,j ui 1,j


2 a2 (8.113)
k h2

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
calculeaz h= ;
nrx
h
calculeaz k ;
a
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 201
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]);

}
202 Metode numerice n electronic

8.4. APLICAIE
Se consider un circuit R,L n serie alimentat de o surs de curent alternativ
e 10 cos(100 t ) V,f =50Hz, prezentat n fig.(8.8).

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
di
L Ri e
dt

Rezultatele obinute prin metoda lui Euller modificat sunt prezentate n tabelul (8.1)

Tabelul 8.1
t[s] i[A]
0.0000 0.00000
0.00100 0.48770
0.00200 0.65941
0.00300 0.63249
0.00400 0.447665
0.00500 0.24065
0.00600 - 0.03564
0.00700 -0.31683
0.00800 -0.57124
0.00900 -0.77188
0.001000 -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 I
spea II
integrale
de tip Volterra spea I
liniare 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 (9.1)
a
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]
Rezolvarea numeric a ecuaiilor integrale 205

k ( x ) f ( x ) S ( x , y ) k-1 (y)dy (9.3)


a
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 (9.4)


a

Dac S x , y M oricare ar fi x , y a , b a , b atunci


b

S ( x , y ) k-1 ( y )dy S b-a Ek-1 (9.5)


a

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 n
i f i S ( x , y ) ( y )dy f i h A j S ( x i , y j ) ( y j )
a j= 0
n
(9.7)
sau i f i Cij j i = 0,1,...,n
j= 0

care reprezint un sistem n necunoscutele i . Sistemul se poate rezolva iterativ


aplicnd formula de iteraie:
i f i l Cij j
k n k-1
i = 0,1,2,...,n (9.8)
j= 0

Procesul de iteraie se continu pn cnd


i i
k k+1
(9.9)
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 ;
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
xi ;
k +1
calculeaz i fi sum ;
}
k = k+1;
k +1
pn cnd i i ;
k

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];
Rezolvarea numeric a ecuaiilor integrale 207

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)
a
Diferena finit pentru ecuaia (9.10) este dat de relaia :
x

( x ) x-h f ( x ) f ( x h ) S ( s, y ) ( y ) d y (9.11)
x-h
Aplicnd o formul de cuadratur pentru integral pe intervalul h rezult :
208 Metode numerice n electronic

i i-1 f i f i-1 Cij j (9.12)


j=0

Din aceast relaie prin explicitarea lui j i se obine


1 i- 2
i f i f i-1 (1 Ci,i-1 ) i-1 Cij j (9.13)
1 Cii j= 0
Din ecuaia iniial (9.10) rezult c a f a deci 0 f 0 . Ca urmare, din ultima
relaie (9.13 ) rezult :
f C10 f 0
1
1
1 C11
f1 f 0 (1 C10 ) 0 1
1 C11
(9.14)

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 ;
f 1 C10 f 0
calculeaz 1 ;
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;
Rezolvarea numeric a ecuaiilor integrale 209

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 2 y 2 ) ydy
( x ) x 0.05 x 0.025 01
2

0
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 M Rn n de ordinul n


a11 a12 ... a1n

a 21 a 22 ... a 2 n
MR (10.1)
- - - -

a n1 a n2 ... a nn
i un vector X =[ x1 , x 2 , x3 ,..., x n ]
T
(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
un vector coliniar cu el . Ca urmare A X X (10.3)
sau scris matriceal :
a11 a12 ... a1n x1 x1

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

x2
(10.4)
- - - - -- --

a n1 a n2 ... a nn x n xn
Relaiile (10.4) se mai pot scrie i sub forma :
a11 a12 ... a1n x1

21a a ... a 2n x 2
0
22
-
(10.5)
- - - --

a n1 a n2 ... a nn x n
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]
Vectori i valori proprii 211

a11 a12 ... a1n



a 22 ....
P
a 21 a 2n
-
(10.6)
- - -

a n1 a n2 ... a nn
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
B = PA P-1 (10.7)
Teorema1: Dou matrice similare au aceleai valori proprii. Matricea vectorilor
proprii :
x11 x12 ... x1n
1
x2 x 22 ... x 2n
V= (10.8)
-- -- ... --

xn ... x nn
1
x n2
se numete matricea modal iar matricea valorilor proprii A se numete matricea
diagonal:
1 0 ... 0


A
0 2 ... 0

(10.9)


0 0 ... n
Relaia ntre cele dou matrice este :
AV=V (ecuaia modal) (10.10)
sau A = V V-1 (10.11)
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 (10.12)
(adic transpusa este egal cu matricea ) .
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


Vectori i valori proprii 213

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 (10.15)
j=1
j i

sau un disc circular C j cu centrul n a jj i raz c j

n
j c j a ij j = 1,2, ... ,n (10.16)
i=1
i j

Toate valorile proprii s se gseasc n reuniunea cercurilor :


Li z , z-a ii li i i = 1,2, ... ,n (10.17)
sau n reuniunea cercurilor :


C j z , z-a jj c j j j=1,2,...,n (10.18)

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 k

A k Y 1k (1 x1 2 2 x 2 ... n n x n ) 1k 1 x1 (10.22)
1 1

dac valoarea lui 1 este cea mai mare valoare proprie i k este mare.
Se poate face aceeai aproximare i pentru ecuaia:
k 1 k 1

A Y (1 x1 2 2
k 1 k 1
x 2 ... n n x n ) 1k 11 x1 (10.23)
1
1 1

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 215

{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];
}
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 cn 1 (10.25)
i0
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
n
ecuaia: ci A i X 0 0 cu condiiile cn 1 ; A 0 I (10.27)
i 0

Notm A X 0 X i unde componentele lui X i sunt calculate iterativ din X 0


i

astfel: X 1 AX 0 ; X 2 AX 1 ; ....,X i AX i 1 ; (10.28)


i au formulele de calcul:
n n n
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
k 1 k 1 k 1
(10.29)
n 1
Rezult sistemul: 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
(10.31)

x 0 n x1n x 2 n ...x n 1,n cn x nn
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 217

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");
}
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
T

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
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
(k)

expresia (10.33).

1 0 0 ... 0 0 0 ... 0

0 1 0 ... 0 0 0 ... 0


0 0 0 ... 1 2(wk 1 ) 2.wk 1.wk 2 2.wk 1.wk 3 ... 2 wk 1.wn
(k) 2 (k) (k) (k) (k) (k) (k)

B(k) (k)
0 0 0 ... 2.wk 2 .wk 1 1 2.(wk 2 ) 2.wk 2 .wk 3... 2wk 2 .wn
(k) (k) (k) 2 (k) (k)

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)
( k 1) (k )
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
Vectori i valori proprii 219

a kj2 , wi(k) 0, pentru i 1,...,k ;


n
sum
j k 1

1 a .sign(a k,k 1 )
wk(k)1 ( 1 k,k 1 ); (10.34)
2 sum
a ki .sign(a k,k 1 )
wi(k) ; i k 2,...,n;
2.wk(k)1. sum

n
ti a ij .w(k)
j , i k 1,...,n;
j k 1
n
s 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)
w2 0 0 0 ... 0
(1) (2)
(n 2 ) w3 w3 0 0 ... 0
W (W ,W ,...,W
(1) (2)
) (10.35)
(1) (2) 3
w 4 w4 w4 0 ... 0

( 1 )
wn wn
(2)
wn(3 ) wn(4 ) ... wn(n 2 )
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 0 (10.36)

0 0 0 0 ... 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 ; (10.37)
f i ( ) ( i ) f i1 ( ) i21 f i2 ( ), i 3,...n.
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
A .V V unde ia valorile calculate.
n 2

v1(j) 1;
1
v 2(j) ( 1 1 ); j 1,...,n ; k 2 ,...,n 1; (10.39)
1
1
(l i k ).v kj k 1.v k(j)1 );
v k(j)1
k
Pentru calculul vectorilor proprii ai matricei iniiale A se ine seama de relaia de
calcul a matricei tridiagonale:
A(n 2 ) B(n2 ) B( 2 ) B( 1 ) A B( 1 ) B( 2 ) B(n 2 ) (10.40)
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)
rezult: A B( 1 ) B( 2 ) B(n 2 ) V (j) j B( 1 ) B( 2 ) B(n 2 ) V (j) (10.42)
Ecuaia (10.42) se reduce la ecuaia : A X (j) j X (j) (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 1
1 0
(j)
v (j) v (j) v2
2 2 0


(j) (j) 2 0 . 0 0
v n2 v n2 (j)
... 0 wn 1 wn(j)
0 . (10.45)
(j)
(j) (j) v n(j)1
v n 1 v n 1 wn 1
(j) (j)
(j) (j) wn vn
vn vn
n
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.46)

10.3.3.1. Algoritmul 10.3. Metoda lui Householder


Vectori i valori proprii 221

{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
wi(k) 0,
n
{calculeaz sum a kj2 , pentru i 1,...,k ;
j k 1

calculeaz (k) 1 a k,k 1 .sign(a k,k 1 )


w k 1 (1 );
2 sum
pentru i=k+2, , l

{ calculeaz a ki .sign(a k,k 1 )


wi(k) (k) ;
2.w k 1 . sum

n
calculeaz
t i a ij .w (k)
j ,
j k 1

calculeaz n
s 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) 1
v2 (l a1 );
b1 1
(j) 1 j (j)
v k 1 ((l a k ).v k bk 1 .v k 1 );
bk i
}
pentru k=n-2, ,1
pentru j=1, , n
{
calculeaz
n
suma wi(k) .v i
(j)
;
i k 1

v i( j ) v ( j)
i 2. suma. wi( k ) ;
}
}
}
}
Vectori i valori proprii 223

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;
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++)
Vectori i valori proprii 225

{
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;
Vectori i valori proprii 229

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:
L1 A1 .R11 i R1 L11 .A1 (10.53)
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;

a i1
l i1 ; i 2,3,...,n; a11 0;
a11

r1i a1i ; i 1,2,...,n; (10.58)


rij 0; i j;

i 1
rij a ij l ik rkj ; i j;
k 1

1 i 1
l ij (a ij l ik rkj ); rii 0; i j;
rii k 1

n
a ij rij rik .l kj ; i j; j n;
k j 1

a ij rij ; i j ;j n ; (10.59)
n
a ij 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.
Vectori i valori proprii 231

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 ;
a ji sum
calculeaz l ji ;
rii
l ii 1 ;
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;
Vectori i valori proprii 233

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:
Vectori i valori proprii 235

1 2 3 4

2 3 2 5
A=
3 2 4 3

4 5 3 5

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 . , 1719
. ,1016 . , 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)
0
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 :
z
(1 z ) (11.4)
( z ) sin z (1 z ) sin z
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.
1
(z )
1
1
2 (z r ) c c c
( z 1) z r e 2
2 c0 1 2 k (11.5)
2 z 1 z 2 zk
Pentru r = 5 i k = 6 se determin setul de coeficieni astfel ca eroarea || 2 10 10 .

*Bibliografie [20], [22], [24]


Funcii speciale 237

Pentru calculul valorii gamma se realizeaz calculul ln( ( x ) ) pentru x R . Se


1
ine seama de formula (11.3) din care se calculeaz ( x ) ( 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:


n!
C(k,n) ; 0k n ; (11.7)
k!(n k)!
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 241

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;
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:


B( z,w ) B( w,z ) t z 1 (1 t ) w1 dt
1
(11.9)
0
i se calculeaz cu ajutorul funciei gamma dup urmtoarea formul:
( z ) ( w )
B( z,w ) (11.10)
( 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;
Funcii speciale 243

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;
}
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
y(x) (11.13)
k 0 k!( k 1 ) 2
Notaia y a funciei este nlocuit cu notaia J consacrat pentru funciile lui Bessel de
spea nti. Astfel, funcia
k
1 2
x
x 4
J (x)
2
(11.14)
k 0 k!( 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
J ( x ) cos n J ( x )
Y ( x ) (11.15)
sin n

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
J ( x ) ;
( 1) 2
2
Y0 ( x ) ln x; (11.16)


( x ) x
Y ( x ) ;
2
Pentru x v se fac aproximrile:
Funcii speciale 245

2 1 1
J cos x
x 2 4
(11.17)
2 1 1
Y sin x
x 2 4
Pentru x se fac aproximrile:
3
2 1 0.4473
J .
2 3
3

3
9
3
(11.18)
3
2 1 0.7748
Y .
2 3
3

6
3
3
Relaiile de recuren pentru calculul funciilor Bessel sunt:
2n
J n 1 ( x ) 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
Y0 ( x ) J 0 ( x ) ln x i 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
2 8 8
Yn ( x ) Pn sin X n Qn cos X n
x x x (11.20)

unde
2n 1 8
Xn x ; 0 1 ;
4 x
Calculul funciilor Bessel ntregi ncepe cu calculul funciilor J 0 ,J 1 ,Y0 ,Y1 , dup care
se aplic formulele de recuren.
1 1
Coeficienii polinoamelor Pn , Qn ,[24], sunt dai n cadrul programelor.
x x
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-6-
y*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 247

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;
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 Jo J1 Yo Y1
0 1.00000 0.00000 -1.144e+308 -1.245+340
0.1 0.99750 0.04995 -1.53424 -6.38575
0,2 0.99002 0.09963 -1.08111 -3.22188
0.5 0,93847 0.24420 -0.44452 -1.36457
0.9 0.80752 0.41654 0.00563 -0.84590
1.0 0.76520 0.45426 0.08826 -0.78121
1.2 0.67113 0.52163 0.22808 -0.67897
1.5 0.51183 0.59930 0.38245 -0.55633
1.9 0.28182 0.65179 0.49682 -0.40188
2.0 0.22389 0.65487 0.51038 -0.36152
2.4 0.00251 0.62454 0.51041 -0.18943
3.0 -0.26005 0.45084 0.37685 0.08754
3.5 -0.38013 0.20216 0.18902 0.30063
4.0 -0.39715 -0.10903 -0.01694 0.45621
4.5 -0.32054 -0.43292 -0,19471 0.52224
5.0 -0,17760 -0.70237 -0.30852 0.48350
5.5 -0.00684 -0.84045 -0.33948 0.34680
6.0 0.15065 -0.77852 -0.28819 0.14059
6.5 0.26009 -0.48785 -0.17324 -0.09077
7.0 0.30008 -0.01631 -0.02595 -0.29687
7.5 0.26634 0.49928 0.11731 -0.43262
Funcii speciale 251

8.0 0.17165 0.23382 0.22352 -0.15806


8.5 0.04194 0.27226 0.27021 -0.02617
9.0 -0.09033 0.24460 0.24994 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)
x[ n], n [ N 1 , N 2 ]

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;
[ n] (12.2)
1, pentru n 0 ;

2. Secvena treapt unitate, prezentat n figura (12.2) i definit prin relaia (12.3).

1, pentru n 0;
u[ n] (12.3)
0 pentru n 0 ;

Legtura ntre secvena unitate i secvena impuls este dat de relaia:


n
u[ n] [ k ] sau u[n] [n k ] (12.4)
k 0 k 0
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:


A. , pentru n N, (0,1)
n
x[ n] (12.6)
0, pentru n 0;
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:
x[n] Ae j 0n Ae j 0 ( n N ) (12.9)
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
0k , k 0,1,2,..., N ; (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:
y1 [n] y[n n 0 ] (12.14)
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 (12.15)
n

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)
n n

unde | e jn | 1 . Ca urmare, condiia devine | x[n]| (12.18)
n
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:
M
j j
lim | X ( e ) X M ( e )| 0 unde X M ( e j ) x[n]e jn (12.19)
M n M

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)
n
Mai general, relaia (12.19) poate fi scris sub forma (12.21):

j j 2
lim | x( e ) X M ( e )| d 0
M

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:

1
x[n] F 1{ X ( e j )} sau x[n] j jn
X ( e )e d (12.21)
2

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)
sau X ( e j ) | X (e j )| e j ( ) (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 2
j
X [k ] x[n]. WNnk , k 0,1, ... , N 1, WN e N (12.24)
n0
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 :
N N
( 2 k 1).
WNkN 1 ; WN 2
WN2 e j 1; WNnk W Nn ; (12.25)
2
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:
n k 1n1 k 2 n 2 mod N ; k k 3 k 1 k 4 k 2 (mod N ) (12.26)

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 N
1 N 1
N 2 k2 2

n .k nk
X [ k1 k 2 ] x[2n1 ].W N1 1 WN .WN .
k 2
x[2. n1 1].W N1 1 . (12.28)
2 n1 0 n1 0
2 2
Pentru k 2 0 rezult:
X [ k1 ] X ' [ k1 ] WN1 . X "[ k1 ]
k
(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:


N N
X ' [k1 ] X '* [ k1 ] ; X '' [k1 ] X ''* [ k1 ] (12.30)
2 2
i evalund avem:
N
X[ k1 ] X ' [k1 ] WN k1 . X '' [k1 ] (12.31)
2
Prile reale i imaginare sunt:
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 ] (12.32)
2
N
Im X [ k1 ] Im X ' [k1 ] sin Im X '' [k1 ] cos Re X '' [k1 ]
2
2
k1
N
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
0
Re X * [k1 ] cos( ) Re X [ N / 2 k1 ]

sin( )
TFD
sin( ) -1
N /2
Re X * [k1 ]
cos( ) Im X [ N / 2 k1 ]
-1

Fig.1.2.3. Structura fluturelui de calcul n algoritmul cu decimare n timp


258 Metode numerice in electronic

13
numrul de nmuliri reale(NMR), NMR[ N ] N log 2 N N 4 (12.33)
4
3 5
numrul de adunri reale (NAR), NAR[ N ] N log 2 N N 4 (12.34)
2 2
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
nn n2 , n1 0,1,..., 1 , n2 0,1;
2 2
(12.35)
N
k 2 k1 k 2 , k1 0,1,..., 1 , k 2 0,1;
2
deci
N
N
2 i N ( 2 k1 k 2 )( n1 n2 )
X [ 2 k 1 k 2 ] x[n1 n2 ].WN 2
(12.36)
n1 0 n2 0 2

din care rezult pentru k 2 0 i respectiv k 2 1


Transformata Fourier discret 261

N
1
2 N N
{x[n1 ] x[n1
nk
X [2 k1 ] ]}W N1 1 TFD N {x[n1 ] x[n1 ]}
n1 0 2 2
2 2
N
(12.37)
1
2 N N
X [ 2 k1 1] {x[n1 ] x[ n1 ]}W N1 W N1 1 TFD N {( x[ n1 ] x[n1 ])Wnn1 }
n nk

n1 0 2 2
2 2 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.
a ab

( a b)WN1
n
-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
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:
1
H ( z) (12.44)
1 WN k . z 1
Fcnd prelucrri asupra funciei de transfer (12.44), obinem:
1 1 WNk . z 1 1 Wnk . z 1
H k ( z) . (12.45)
1 WN k . z 1 1 WNk . z 1 2. . k 1 2
1 2.cos .z z
N
Considernd
Yk ( z ).V k ( z ) Yk ( z )
H k ( z) unde 1 WNk . z 1 (12.46)
X k ( z ).V k ( z ) Vk ( z)
rezult:
Vk ( z ) 1
(12.47)
X k ( z) 2. . k 1 2
1 2.cos . z z
N
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 (12.48)
y k [ n] 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
Q(x[n]WNnk ) Re {x[n]} cos 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
(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
E{en,i [k ]} 0 ; E{en2,i [k ]} .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 ]}
1 2 B
E{en,3 [k ]en,4 [k ]} 2 B2 ,
3

ultima expresie reprezentnd variana (dispersia) erorii dintr-un nod oarecare.


Eroarea total este caracterizat prin:

N 1
F[ k ] en [ k ], E {F[ k ]} 0 ,
n0

N 1 N 1 N 1 N 1 N 2 N
E {| F[ k ]|2 } E | en ,k [ k ]|2 E en2, R [ n] en2, I [n] E {| en [ k ]|2 } 2
n0 n0 n0 n0 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 1


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 1

Fig.12.7.Modulul semnalului EEG n frecven normat prin algoritmul decimrii n timp.

U / U0

1
f / f0
0

0.5 1

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).

0.5

n
0
100 200 300 400 500
Fig.12.9.Impulsul treapt.

U [n ]

32

16

250 500
Fig.12.10.Transformata Fourier a impulsului treapt

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