Sunteți pe pagina 1din 19

Lucrarea 8

METODE DE OPTIMIZARE
1. SCOPUL LUCRRII
Prezentarea unor algoritmi de optimizare, implementarea acestora ntr-un limbaj de nivel nalt (n particular, C) i folosirea lor n rezolvarea unor probleme de electronic.

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

2.1.

METODA CELOR MAI MICI PTRATE

Presupunem c avem o funcie definit printr-un tabel de valori. Se mai spune c funcia este dat implicit, deci nu i se cunoate forma n mod direct. 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.

2.2.

COEFICIENTUL DE CORELAIE

Interpretarea erorilor de aproxima ie se poate face cu ajutorul coeficientului de corelaie. Dei se calculeaz un minim al erorii ptratice medii, exist i o interpretare grafic, din punct de vedere geometric. n final intereseaz ct de bun este potrivirea unei funcii alese de noi peste poriunea din graficul unei funcii analitici necunoscute, pentru care cunoatem doar o evoluie local, dat de setul de perechi (xi, yj) de la intrare.

Lucrarea 8

123

2.2.1. CORELAIA EANTIOANELOR (evenimentelor eantionate) Dac avem o serie de n msurtori ale variabilelor X i Y, sub forma xi si yi, cu i = 1,2,,n atunci pentru estimarea corela iei dintre X i Y se poate face pe baza coeficientului de corelaie produs-moment, cunoscut sub numele de coeficient Pearson. Acesta mai este denumit i coeficientul de corela ie al eantioanelor. Acesta este important mai ales dac att X ct i Y sunt distribuite normal. Atunci coeficientul de corelaie Pearson este cel mai bun estimat al corela iei ntre X i Y. Acest coeficient se scrie astfel:

rxy =
_
_

(x
i =1

- x)( y i - y )
(8.1)

(n - 1) s x s y
____

unde x i y sunt valorile medii ale eantioanelor xi i yi, iar sx i sy sunt deviaiile standard ale eantioanelor xi i yi. Sumarea se face dup i = 1, n . Desfcnd sumele rela ia anterioar se poate rescrie:

rxy =

n xi yi - xi yi
i =1 i =1 i =1

n xi2 - ( xi ) 2 n yi2 - ( yi ) 2
i =1 i =1 i =1 i =1

(8.2)

Reamintim c valoarea absolut a coeficientului de corelaie trebuie s fie mai mic sau egal cu 1. Cu toate c formula anterioar sugereaz un algoritm ntr-un singur pas pentru calculul corelaiei eantioanelor, este recunoscut instabilitatea numeric a unui asemenea algoritm.

2.2.2. INTERPRETAREA GEOMETRIC A CORELAIEI Coeficientul de corelaie poate fi privit i drept cosinusul unghiului ntre doi vectori de eantioane, generai de dou valori aleatoare. Atenie: aceast metod funcioneaz doar cu date centrate, adic acele date care au fost deplasate cu media eantioanelor, astfel nct au o medie aritmetic (average) egal cu 0. Exist situaii n practic n care se prefer un coeficient de corelaie necentrat, dar care este incompatibil cu coeficientul Pearson. Ca exemplu, s presupunem 5 ri pentru care produsul naional brut este, respectiv: 1, 2, 3, 5 i 8 milioane dolari. Presupunem c gradul de srcie al acelorai ri, pstrate n aceeai ordine este de 11%, 12%, 13%, 15%, i 18%. Atunci, s

124

ndrumar de laborator pentru Metode Numerice

considerm pe x i y ca fiind doi vectori ordonai, cu 5 elemente, coninnd datele exprimate anterior: x = (1, 2, 3, 5, 8) i y = (0.11, 0.12, 0.13, 0.15, 0.18) Urmnd procedura de determinare a unghiului dintre doi vectori (pe baza produsului scalar), coeficientul de corelaie necentrat va fi: (8.3) Datele anterioare au fost alese astfel nct s existe o corela ie foarte bun ntre ele: y = 0.10 + 0.01 x Coeficientul de corela ie Pearson va trebui s fie exact 1. Centrnd datele (deci deplasndu-l pe x cu valoarea E(x) = 3.8 i pe y cu valoarea E(y) = 0.138) obinem: x = (-2.8, -1.8, -0.8, 1.2, 4.2) i y = (-0.028, -0.018, -0.008, 0.012, 0.042), de unde: (8.4) aa cum ne ateptam.

2.2.3. INTERPRETAREA MRIMII CORELAIEI Mai muli autori ofer modaliti de interpretare a coeficientului de corelaie. De exemplu Cohen (1988) a sugerat urmtoarele interpretri ale corela iei, cu referire la studiile psihologice (Tabel 8.1): Tabel 8.1 Corelaia
Mic (slab) Mediu (normal)

Valori negative

Valori pozitive

0.29 to 0.10 0.10 to 0.29 0.49 to 0.30 0.30 to 0.49

Mare (puternic) 1.00 to 0.50 0.50 to 1.00

Dup cum nsui Cohen a observat, toate criteriile de acest fel sunt ntr-o oarecare msur arbitrare i nu ar trebui luate n sens strict. Aceasta deoarece interpretarea unui coeficient de corelaie depinde de context i de scopurile avute n vedere. O corelaie de

Lucrarea 8

125

0.9 poate fi foarte sczut dac cineva verific legile fizicii folosind instrumente de nalt calitate, dar poate fi foarte ridicat n contextul tiinelor sociale unde apar influene datorate unor factori complica i. Pentru problemele de regresie la care ne referim n laborator, interpretarea se poate face conform tabelului indicat de Cohen, pentru c nu exist factori eseniali care influeneaz datele preluate, alii dect erorile obinuite de msurare i interpretare, pentru care se respect regulile specifice de eliminare a experimentelor eronate, de rotunjire a valorilor conform cu erorile de calcul acceptate sau de reprezentare normalizat (pentru valorile foarte mici sau foarte mari).

3. METODE DE REGRESIE
3.1.1. REGRESIA LINIAR
Se consider funcia tabelat: Tabelul 8.2
x

x1

x2
y2

x3

x4

y1

y3

y4

.. ..

xm

ym

unde m reprezint numrul de msurtori sau de valori ale funciei. Se cere s se determine funcia liniar de forma general y = ax + b (8.1) care s aproximeze cel mai bine funcia tabelat astfel ca eroarea s fie minim.
a= m x i y i - x i
i=1 i=1 m m i=1 2

yi
(8.2)

m
m

i=1

x i2
m

- xi i=1
m m i=1

b=

i=1

x i2 y i - x i x i y i
i=1 m i=1

i=1

x i2

- xi i=1
m

(8.3)

3.1.1.1.

Algoritm 8.1. Regresia liniar


// // // // numrul experienelor vectorul absciselor funciei vectorul ordonatelor funciei adresa coeficientului lui x (pointer) // adresa termenului liber (pointer)

void Reg_Lin ( ntreg m, real x[ ], real y[ ], real *pA, real *pB )

126

ndrumar de laborator pentru Metode Numerice


{ // declararea i definirea variabilelor locale real 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 ntreg i ; // contor pentru ciclurile for(). // corpul de instruciuni al funciei sx= 0 ; sy = 0 ; sxy = 0 ; sxx = 0; // iniializare cu 0 pentru i= 1 m { sx = sx + x[i] ; sy = sy + y[i] ; sxy = sxy + x[i]*y[i] ; sxx = sxx + x[i]*x[i] ; } m sxy -s x s y s xx s y -s x s xy *pA = ; ; *pB = m s xx -s x s x m s xx -sx s x }

Obs.: 1) Am marcat faptul c funcia nu ntoarce nici o valoare prin cuvntul-cheie void, la fel ca n C. 2) Dimensiunea vectorilor folosii de metod se stabilete funcie de numrul m al punctelor experimentale considerate. 3) Denumirile ultimelor dou argumente ale funciei respect o convenie de notaie i anume notaia ungar n care se utilizeaz i anumite indicii literale despre tipul variabilei. Aceste indicii literale preced numele variabilei. Aceste dou argumente fiind de tip referin (deci pointer) denumirile variabilelor ncep cu litera mic p, ca sugestie pentru pointeri.

3.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 (8.1). Considerm c reprezentarea grafic a acestei funcii se aseamn foarte mult cu curba unui polinom de gradul n de forma: (8.4) y = a n x n + a n -1 x n -1 + ...... + a 1 x + a 0 Coeficienii polinomului se determin cu ajutorul sistemului:

Lucrarea 8

127

m m m m ma0 + x i a1 + x i2 a 2 +L+ x ik a k + + x in a n = y i i=1 i=1 i=1 i=1 m m 2 m 3 m k+1 m n+1 x i a 0 + x i a1 + x i a 2 +L+ x i a k +L+ x i a n = x i y i i=1 i=1 i=1 i=1 i=1 ------------------------------------------- m m m m m x p a + x p+1 a + x p+2 a +L+ x p+k a +L+ x p+n a = x p y 0 i i 1 k i 2 i i i i i=1 i=1 i=1 i=1 n i=1 _____________________________________________________ m m m n+2 m n+k m 2n n+1 xn a + L L + x a x a x a + + + + x i a n = x in yi i=1 i 0 i=1 i 1 i=1 i 2 i=1 i k i=1

(8.5) 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 Lucrarea 3 - Metode pentru rezolvarea sistemelor liniare de ecuaii.

3.1.2.1.

Algoritmul 8.2.Regresia polinomial

ntreg Reg_Pol ( ntreg m, real X[ ], real Y[ ], ntreg n, real *coef

// // // //

) { // declararea i definirea variabilelor locale ntreg i, j, k ; // contoare real A[N][N] ; // matrice utilizat pentru //rezolvarea sistemului (8.5). real B[N] ; //vectorul termenilor liberi (sistemul (8.5)) // corpul de instruciuni al funciei pentru i= 1 n+1 { pentru j= i n+1 { A[i][j] = 0 ; pentru k= 1 n A[i][j] = A[i][j] + pow( x[k], i+j-2) ; A[j][i] = A[i][j] ; } B[i] = 0 ; pentru k= 1 n B[i] = B[i] + y[k] * pow( x[k], i-1) ; } // rezolv sistemul 7.5 dac ( Gauss(n+1,A,B,coef) !=0 ) returneaz True ; altfel returneaz False ;

numrul de puncte cunoscute ale funciei vectorul absciselor funciei vectorul ordonatelor funciei gradul polinomului de regresie // adresa de nceput a vectorului //coeficienilor polinomului de regresie.

128

ndrumar de laborator pentru Metode Numerice Obs.: 1) Am marcat faptul c funcia nu ntoarce nici o valoare prin cuvntul-cheie void, la fel ca n C; 2) Dimensiunea N a vectorilor folosii de metod se stabilete funcie de numrul m al punctelor considerate, avnd n vedere c indexul minim al vectorilor n C este 0; 3) Funcia Gauss( ) la care se face referire este cea din Lucrarea 3 - Metode pentru rezolvarea sistemelor liniare de ecuaii.

3.1.3. REGRESIA HIPERBOLIC


Fie funcia numeric dat n tabelul 8.1. Se pune problema determinrii funciei hiperbolice:
y= 1 ax+b

(8.6)

care aproximeaz cel mai bine funcia numeric. Valorile lui a i b sunt:

a=

( xi )(
i =1 i =1

m x 1 ) - m i yi i=1 y i 2

(8.7)

m m xi - m xi2 i=1 i=1

b=

(
i=1

m x m 1 m 2 )( xi ) - ( i )( x i ) y i i=1 i=1 y i i=1

m m xi2 - xi i=1 i=1


m

(8.8)

nlocuim valorile lui a i b n funcia hiperbolic (8.6) i se obine funcia care aproximeaz cel mai bine funcia numeric din tabelul 8.1. Pentru a liniariza rezolvarea sistemului s-a lucrat cu inversele valorilor lui y, adic 1/y, motiv pentru care sumele sy i sxy conin valorile inversate pentru y.

3.1.3.1.

Algoritm 8.3. Regresia hiperbolic

void Reg_Hip ( ntreg m, real x[ ], real y[ ], real *pA real *pB )

// numrul experienelor // vectorul absciselor funciei numerice // vectorul ordonatelor funciei numerice // adresa coeficientului lui a al funciei //hiperbolice // adresa coeficientului lui b al funciei //hiperbolice

Lucrarea 8
{ // declararea i definirea variabilelor locale real 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.. ntreg i ; // contor // corpul de instruciuni al funciei sx = 0 ; sy = 0 ; sxy = 0 ; sxx = 0 ; pentru i= 1m { // urmeaz un corp de instruciuni, deci se // folosete acolada deschis. sx = sx + x[i] ; sy = sy+

129

1 ; y[i ] x[i ] sxy= sxy+ ; y[i ]


s xx s y -s xy s x m s xx -s x s x

} *pA = }

sxx = sxx + x[i]*x[i] ;


m s xy - s x s y m s xx - s x s x

; *pB =

Obs.: 1) Am marcat faptul c funcia nu ntoarce nici o valoare prin cuvntul-cheie void, la fel ca n C; 2) Dimensiunea vectorilor folosii de metod se stabilete funcie de numrul m al punctelor considerate, avnd n vedere c indexul minim al vectorilor n C este 0; 3) Denumirile ultimelor dou argumente ale funciei respect o convenie de notaie i anume notaia ungar n care se utilizeaz i anumite indicii literale despre tipul variabilei. Aceste indicii literale preced numele variabilei. Aceste dou argumente fiind de tip referin (deci pointer) denumirile variabilelor ncep cu litera mic p, ca sugestie pentru pointeri.

3.1.4. REGRESIA EXPONENIAL


Dac se constat c funcia numeric din tabelul 8.1, reprezentat grafic, se aseamn foarte mult cu o exponenial, atunci se consider funcia exponenial, de forma general: y=a b x (8.9) n care a i b sunt constante pozitive.

130

ndrumar de laborator pentru Metode Numerice Pentru un calcul comod al constantelor a i b se logaritmeaz funcia (8.9):

(8.10) i se determin constantele astfel nct eroarea ptratic de ansamblu s fie minim. m m m ( ln y )( x 2 ) -( x )( ln y x ) i i i i i i=1 i=1 i=1 (8.11) a = exp 2 m m 2 m x i - x i i=1 i=1 m m m m x ln y - ( x )( ln y ) i i i i i=1 i=1 i=1 (8.12) b = exp 2 m 2 m m x i - xi i=1 i=1 3.1.4.1. Algoritm 8.4. Regresia exponenial

ln y = ln a + x ln b

void Reg_Exp ( ntreg m, real x[ ], real y[ ], real *pA, real *pB ) { // real real real real

// // // // // // //

numrul absciselor funciei vectorul absciselor funciei numerice vectorul ordonatelor funciei numerice adresa coeficientului lui a al funciei exponeniale. adresa coeficientului lui b al funciei exponeniale.

declararea i definirea variabilelor locale sx ; // suma absciselor sxx ; // suma ptratelor absciselor sy ; // suma logaritmilor din ordonate sxy ; // suma absciselor nmulite cu logaritmul // ordonatelor. ntreg i ; // contor pentru bucla for(). // corpul de instruciuni al funciei sx= 0 ; sy = 0 ; sxy = 0 ; sxx = 0 ; // iniializare pentru i= 1 m { sx = sx + x[i] ; sxx = sxx + x[i]*x[i] ; sy = sy+log( y[i]) ; sxy = sxy+ x[i] * log( y[i]) ; } *pA = exp }

s y s xx -s x s x y m s xx -s x s x

*pB = exp

ms xy -s x s y m s xx -s x s x

Lucrarea 8 Obs.: 1) 2) 3)

131

Am marcat faptul c funcia nu ntoarce nici o valoare prin cuvntulcheie void, la fel ca n C; Dimensiunea vectorilor folosii de metod se stabilete funcie de numrul m al punctelor experimentale considerate, avnd n vedere c indexul minim al vectorilor n C este 0; Denumirile ultimelor dou argumente ale funciei respect o convenie de notaie i anume notaia ungar n care se utilizeaz i anumite indicii literale despre tipul variabilei. Aceste indicii literale preced numele variabilei. Aceste dou argumente fiind de tip referin (deci pointer) denumirile variabilelor ncep cu litera mic p, ca sugestie pentru pointeri.

3.1.5. REGRESIA GEOMETRIC


Dac funcia numeric din tabelul 8.1 se aseamn cu o funcie de tip geometric, vom cuta s determinm funcia de forma: y = ax b (8.13) care s aproximeze cel mai bine funcia numeric. Adic aceeai condiie de eroare ptratic, de ansamblu, minim. i n aceast situaie se recurge la o logaritmare a relaiei, pentru a aduce rezolvarea n domeniul liniar. Avem: lny = ln(a) + b*ln(x) (8.13) 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 m m m ln 2 ( x i ) - ln ( x i ) i=1 i=1
2

a = exp

(8.14)

b=

m m m m ln( y i ) ln( x i ) - ln ( x i ) ln( y i ) i=1 i=1 i=1 m m m ln 2 ( x i ) - ln ( x i ) i=1 i=1


2

(8.15)

Cu aceste valori funcia y = ax b aproximeaz cel mai bine funcia tabelat (8.1) care se aseamn cel mai bine cu o funcie de tip geometric.

132

ndrumar de laborator pentru Metode Numerice

3.1.5.1.

Algoritmul 8.5. Regresia geometric

void Reg_Geo ( ntreg m, real x[ ], real y[ ], real *pA, real *pB ) { // real real real

// numrul de abscise // vectorul absciselor funciei numerice // vectorul ordonatelor funciei numerice // adresa coeficientului lui a al funciei //geometrice // adresa coeficientului lui b al funciei //geometrice

declararea i definirea variabilelor locale sx ; // suma logaritmilor absciselor sy ; // suma logaritmilor ordonatelor sxy ; // suma produsului intre logaritmii //absciselor i logaritmilor ordonatelor real sxx ; // suma ptratelor logaritmilor absciselor ntreg i ; // contor // corpul de instruciuni al funciei sx = 0 ; sy = 0 ; sxx = 0 ; sxy= 0 ; // iniializare pentru i= 1 m { sx = sx + log(x[i]) ; sxx = sxx + log(x[i])*log(x[i]) ; sy = sy + log (y[i]) ; sxy = sxy + log(x[i])* log(y[i]) ; } *pA = exp }

s y s xx -s x s xy m s -s s xx x x

*pB =

m s xy -s x s y m s xx -s x s x

Obs.: 1) Am marcat faptul c funcia nu ntoarce nici o valoare prin cuvntul-cheie void, la fel ca n C; 2) Dimensiunea vectorilor folosii de metod se stabilete funcie de numrul m al punctelor experimentale considerate, avnd n vedere c indexul minim al vectorilor n C este 0; 3) Denumirile ultimelor dou argumente ale funciei respect o convenie de notaie i anume notaia ungar n care se utilizeaz i anumite indicii literale despre tipul variabilei. Aceste indicii literale preced numele variabilei. Aceste dou argumente fiind de tip referin (deci pointer) denumirile variabilelor ncep cu litera mic p, ca sugestie pentru pointeri.

Lucrarea 8

133

3.1.6. REGRESIA TRIGONOMETRIC


Se consider funcia numeric dat n tabelul 8.1 i funcia trigonometric de forma: y = a + b cos(w x) (8.16) care aproximeaz cel mai bine funcia numeric. Valorile lui a i b sunt:
a= m m m m 2 y i cos w x i - cos w x i y i cos w x i i=1 i=1 i=1 i=1 m m m cos 2 w x i - cos w x i i=1 i=1 m m m m y i cos w x i - cos w x i y i i=1 i=1 i=1 m m m cos 2 w x i - cos w x i i=1 i=1
2 2

(8.17)

b=

(8.18)

w = 2 p f =

2 p T

unde f - frecvena, w - pulsaia, iar T - perioada.

w se stabilete funcie de periodicitatea funciei numerice date.

3.1.6.1.

Algoritmul 8.6. Regresia trigonometric

void Reg_Tri ( ntreg m, // numrul absciselor funciei numerice real x[ ], // vectorul absciselor funciei numerice real y[ ], // vectorul ordonatelor funciei numerice real *pA, // adresa coeficientului lui a din expresia //funciei trigonometrice real *pB // adresa coeficientului lui b din expresia //funciei trigonometrice ) { // declararea i definirea variabilelor locale real w ; // pulsaia ( =2*PI*T) 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. ntreg i ; // variabila de control a ciclului for() i //index de vector. // corpul de instruciuni al funciei // iniializarea sumelor s y = 0 ; scos 2x = 0 ; scos x = 0 ; sycos pentru i= 1 m

= 0 ;

134

ndrumar de laborator pentru Metode Numerice


{ s y = s y + y[i] ; scos 2x = scos 2x + cos(w x i ) * cos(w x i ) ; scos
x

= scos

+ cos(w x i ) ;
x

sycos }

= sycos
s y scos m scos

+ yi* cos(w x i ) ;
s y cos x scos x ;

*pA = }

2 x -scos x 2 x -scos x

*pB =

m s y cos x -scos x s y m scos


2 x -scos x

scos x

Obs.: 1) Am marcat faptul c funcia nu ntoarce nici o valoare prin cuvntul-cheie void, la fel ca n C; 2) Dimensiunea vectorilor folosii de metod se stabilete funcie de numrul m al punctelor experimentale considerate, avnd n vedere c indexul minim al vectorilor n C este 0; 3) Denumirile ultimelor dou argumente ale funciei respect o convenie de notaie i anume notaia ungar n care se utilizeaz i anumite indicii literale despre tipul variabilei. Aceste indicii literale preced numele variabilei. Aceste dou argumente fiind de tip referin (deci pointer) denumirile variabilelor ncep cu litera mic p, ca sugestie pentru pointeri.

3.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 astfel ca ea s aproximeze cel mai bine funcia numeric. Vom considera funcia numeric dat n figura 8.1.
y yn z14 y4 z13 y3 y2 y1 O x1 z12 z11 z24 z23 z22 z21 z34 z33 z32 z31 z44 z43 z42 z41 zm4 zm3 zm2 zm1 z1n z2n z3n z4n znm

x2

x
x3 x4 xm

Fig. 8.1 - Reprezentarea funciei multiple.

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

135

(8.19) Se pune problema determinrii acestui plan, adic a valorilor constantelor A, B, C astfel ca planul s aproximeze cel mai bine o funcia numeric de dou variabile dat. Valorile lui A, B, C sunt soluiile sistemului:
m n n m mnC+ x i nA+ y mB= z ij j i=1 j=1 i=1 j=1 m n m n m m 2 (8.20) x nC+ x nA+ x y = i j xi z ij i i i=1 j=1 i=1 j=1 i=1 i=1 m n n m n n 2 y mC+ x y A+ y mB= y j z ij j i j j i=1 j=1 i=1 j=1 j=1 j=1

z = Ax + By + C

Utiliznd una dintre metodele numerice de rezolvare a sistemelor liniare din capitolul 3 se determin A, B, C, deci planul cutat.

3.1.7.1.

Algoritmul 8.7. Regresia multipl

ntreg Reg_Mul ( ntreg m, // numrul de argumente pe Ox ntreg n, // numrul de argumente pe Oy real x[ ], // vectorul argumentelor pe axa Ox a funciei // numerice. real y[ ], // vectorul argumentelor pe axa Oy a funciei // numerice. real z[ ], // vectorul valorilor funciei numerice real *coef // adresa de nceput a vectorului //coeficienilor planului. ) { // declararea i definirea variabilelor locale ntreg i, j ; // indici real A[4][N] ; // matricea sistemului (8.20); real B[4] ; // vectorul termenilor liberi ai sistemului //(8.20) // corpul de instruciuni al funciei A[1][1] = m*n ; A[1][2] = 0 ; pentru i= 1 m A[1][2] = A[1][2] + n*x[i] ; A[2][1] = A[1][2] ; A[1][3] = 0 ; pentru i= 1 n A[1][3] = A[1][3] + m*y[i] ; A[3][1] = A[1][3] ; A[2][3]=0 ; B[1] = 0 ; B[2] = 0 ; B[3 ] = 0 ; pentru i= 1 m pentru j= 1 n { A[2][3] = A[2][3] + x[i]*y[j] ; B[1] = B[1] + z[i][j] ;

136

ndrumar de laborator pentru Metode Numerice


B[2] = B[2] + x[i]*z[i][j] ; B[3] = B[3] + y[j]*z[i][j] ; } A[3][2]=A[2][3]; A[2][2]=0 ; pentru i= 1 m A[2][2] = A[2][2] + n*x[i]*x[i] ; A[3][3] = 0 ; // rezolv sistemul (8.20) pentru i= 1 n A[3][3] = A[3][3] + m*y[i]*y[i] ; dac ( Gauss( 3, A, B, coef) != 0 ) returneaz True ; altfel returneaz False ; }

Obs.: 1) Funcia Gauss( ) la care se face referire este cea din Lucrarea 3 - Metode pentru rezolvarea sistemelor liniare de ecuaii. 2) Dimensiunile matricelor i vectorilor folosii de metod se stabilete funcie de numerele m i n, ale punctelor experimentale considerate pe fiecare ax de coordonate.

3.2. OPTIMIZAREA NELINIAR FR RESTRICII


3.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. Metoda drumului aleator, una dintre metodele des utilizate, const n modificarea vectorului de poziie pentru noul punct astfel: X k +1 = X k + a . r (8.21) 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.

3.2.1.1.

Algoritmul 8.8. Metoda drumului aleatoriu

real Min_Aleator ( Adr_functie, real x0[ ], real eps

// Adresa unei funcii reale de dou // variabile reale(pointer la o funcie) // vectorul de start // eroarea de calcul

Lucrarea 8
{ // declararea i definirea variabilelor locale real gama0 ; // scalar ntreg contor ; // indice real minim ; // minimul dintre valorile funciilor real val_curent ; // valoarea minim curent a funciei real xcurent[ ] ; // valoarea anterioar i curent a // abscisei punctului. ntreg maxiter ; // numrul maxim de iteraii

137

// corpul de instruciuni al funciei randomize( ); // macro ce pregtete folosirea funciei // random() prin iniializarea //generatorului de numere aleatoare. gama0 = 1 ; ct timp ( gama0 >eps) { // ct timp contor = 0 ; minim = *Adr_functie( x0[0], x0[1]) ; execut { x_curent[0]=x0[0] + gama0*pow(-1, random(101) mod 2); x_curent[1]=x0[1] + gama0*pow(-1, random(101) mod 2); val_curent = *Adr_functie( x_curent[0], x_curent[1]) ; incrementeaz contor ; } ct timp( (contor <= maxiter) SI (val_curent >= minim)); dac ( val_curenta<minim) { // dac minim = val_curent ; x0[0] = x_curent[0] ; x0[1] = x_curent[1] ; } dac ( contor > maxiter) gama0 = gama0 - 0.001 ; } // ct timp returneaz minim ; }

Obs.: Notaiile Adr_functie i *Adr_functie sunt simbolice. Ele reprezint, respectiv, adresa unei funcii (deci un pointer la o funcie) i apelul unei funcii, indirect, prin pointerul al aceasta. Pentru lmuriri consultai Anexa B - Noiuni de C necesare desfurrii lucrrilor de laborator.

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

138

ndrumar de laborator pentru Metode Numerice

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 ncepe un nou ciclu lund ca punct iniial minimul obinut. La fiecare iteraie se determin un nou punct funcie de precedentul astfel: X k +1 = X k + pas E k (8.22) 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 depesc un numr maxim dat. reprezint eroarea de calcul a punctului de minim.

3.2.2.1.

Algoritmul 8.9. Metoda cutrii unidimensionale

real Min_Unidimensional ( Adr_functie, // Adresa unei funcii reale de dou //variabile reale( pointer la o funcie) real x0[ ], // vectorul de start real eps // eroarea de calcul ) { // declararea i definirea variabilelor locale real pas ; // pasul de modificare al coordonatelor ntreg i ; // contor real min_curent,min_prec; // minimul curent respectiv prec. intreg nrp ; // numrul de pai real stnga = -1 ; real dreapta = 1 ; real direcie ;// direcia de deplasare: stnga sau dreapta. // corpul de instruciuni al funciei pas = 1 ; min_curent = *Adr_functie(x0[0], x0[1]) ; execut { pentru i= 0..1 { // pentru( ) nrp = 0 ; direcie = dreapta ; execut { min_prec = min_curent ; incrementeaz nrp ; x0[i]=x0[i]+directie*pas; min_curent = *Adr_functie( x0[0], x0[1]) ; dac ( (nrp=1) I (min_curent > min_prec) { x0[i] = x0[i]-2*pas ; min_curent = *Adr_functie(x0[0], x0[1]) ;

Lucrarea 8
incrementeaz nrp ; direcie = stnga ;

139

} } ct timp( min_curent <= min_prec) ; x0[i] = x0[i] - direcie*pas ; min_curent = *Adr_functie( x0[0], x0[1]) ; } // pentru( ) pas = pas - 0.0001 ; } ct timp( pas >= eps) ; returneaz min_curent ; }

Obs.: Notaiile Adrf i (*Adrf) sunt simbolice. Ele reprezint, respectiv, adresa unei funcii (deci un pointer la o funcie) i apelul indirect al unei funcii, prin intermediul pointerului la aceasta. Pentru lmuriri consultai Anexa B - Noiuni de C necesare desfurrii lucrrilor de laborator.

4. DESFURAREA LUCRRII
4.1. NTREBRI

1. Care este diferena dintre metodele de optimizare i cele de interpolare? 2. O problema de optimizare se va soluiona ntotdeauna cu succes deplin pentru orice valori ale unei funcii? 3. Prezentai pe scurt principiul de lucru al unei metode de regresie. 4. Ce poate influena precizia de calcul a oricrei metode de optimizare? 5. Cum se definete eroarea ptratic medie? Este aceasta o funcie de una sau de mai multe variabile? 6. Numii cteva utilizri practice ale operaiei de regresie.

4.2.

PROBLEME LABORATOR

1. S se implementeze metodele 2.1.12.1.7 i 2.2.12.2.2 n limbajul ANSI C. 2. Se dau datele experimentale din tabelul 8.2: Tabelul 8.2. X Y
1 1.44 2 1.728 3 2.0736 4 2.4883 5 2.9859 6 3.5831 7 4.2998 8 5.1597 9 6.191

S se determine funcia care aproximeaz cel mai bine funcia tabelat cu metodele 2.1.1. 2.1.5.

140

ndrumar de laborator pentru Metode Numerice 3. Se d funcia: z = x 2 + y 2 - 2 x - 4 y + 3 . S se determine minimul funciei cu metodele drumului aleator i a cutrii unidimensionale.

4.2. TEME DE CAS


1. Presupunem c ecuaia ce leag curentul de tensiunea pe o diod este:
i = I0 eeV/kT, cu e = q i kT/q ~ 25mV.

Se cer valorile I0 i (gamma) utiliznd regresia liniar asupra tabelului: v (V) ln(i) Indicaie:
.2 .28 .36 .44 .52 .6

ln(10 ) = -20.7232

-9

ln(10 ) = -18.4207

-8

ln(10 ) = -16.1181

-7

ln(10 ) = -13.8155

-6

ln(10 ) = -11.5129

-5

ln(10-4) = -9.2103

ln(i/I0) = (1/gamma)*(v/uT) => ln(i) - ln(I0) = a*x, cu: a = 1/(gamma*uT), iar x = v.

Apoi:

ln(i) = a*x + ln(I0),

ceea ce respect definiia unei regresii liniare, de form y = ax+b. Din aplicarea regresiei liniare asupra tabelului vor rezulta chiar a i b. Din valoarea lui a se deduce gamma, iar din valoarea lui b rezult I0. Obs.: Valorile de tip ordonat din tabel sunt de fapt valori numerice (scalari), anume funcia logaritm natural aplicat valorilor curentului din tabelul din problema interpolrii. Aceast operaie este necesar datorit logaritmrii aplicate relaiei curentului, n deducerea teoretic. Se vor putea, astfel, scdea valori de aceeai natur, n expresia erorii ptratice.

BIBLIOGRAFIE
1. I. Rusu, Metode numerice n electronic. Aplicaii n limbaj C, Editura Tehnic, Bucureti, 1997.

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