Sunteți pe pagina 1din 10

II.

3 Estimarea parametrilor modelelor si algoritmi de optimizare

II.3.1 Estimarea parametrilor

Un grup de probleme intalnit frecvent atat in cercetare cat si in practica industriala


este acela al gasirii unor expresii matematice care sa aproximeze cu o acuratete cat mai
buna un set de date experimentale. Exemple de astfel de probleme pot fi date din toate
zonele chimiei si ingineriei chimice : evaluarea proprietatilor fizice (expresii care sa
caracterizeze evolutia lor ca functii de temperatura, compozitie, etc.), cinetica (expresii
care sa caracterizeze dependenta vitezei de reactie ca functie de compozitie, temperatura,
etc.), fenomene de transfer (expresii pentru evaluarea coeficientilor de transfer de masa si
caldura …) , etc.
In legatura cu datele, acestea ar putea fi grupate in doua clase : date care sunt
considerate exacte si date care contin erori.

A. Date care sunt considerate exacte

In acest caz, cel mai adesea se pune problema de a gasi o expresie care, pentru
valorile numerice ale variabilei (variabilelor) independente, sa ne permita regasirea exacta
a valorilor variabilei dependente. Ulterior, aceasta expresie poate fi folosita pentru
evaluarea variabilei dependente la alte valori ale variabilei independente. Un tip de
probleme care fac parte din aceasta clasa sunt cele de interpolare (utilizare de polinoame,
functii spline, polinoame Hermite, etc.). Tot in aceasta grupa poate fi inclusa si analiza
Fourier a datelor (analiza in domeniul frecventelor al functiilor periodice si neperiodice).

Pentru interpolarea monodimensionala cu utilizarea de polinoame, in MATLAB


se poate folosi functia interp1 :
yi = interp1(x,y,xi, 'method');
Interpoleaza datele din vectorii x si y si returneaza valorile lui y (yi) pentru valorile din
vectorul xi folosind metodele:
• 'linear' - interpolare lineara, care este metoda implicita (daca nu se specifica o alta metoda);
• 'cubic' - interpolare cubica;
• 'spline' - interpolare utilizand functii spline;
• 'pchip' - interpolarea cubica cu polinoame Hermite;

Exemplul II.3.1 : se cere sa se evalueze valorile variabilei dependente pentru o


variatie cu pas constant de 0.25 a valorii variabilei independente : se cunosc valorile celor
doua variabile - vectorii x si y definiti mai jos. Codul MATLAB este :
x = 0:1.5:15;
y = [0 0.9975 0.1411 -0.9775 -0.2794 0.9380 0.4121 -0.8797 -0.5366 0.8038 0.6503];
xi = 0:.25:15;
yi = interp1(x,y,xi,’cubic’);
plot(x,y,'bo',xi,yi,'rx-'), grid, axis ([0 15 -1.5 1.5]), ...
legend('date initiale','valori rezultate prin interpolare');

Reprezentarea grafica a setului initial si a valorilor rezultate din interpolarea de tip


cubic (polinoame de gradul 3) este prezentata in figura II.3.1.

1.5
date initiale
valori rezultate prin interpolare
1

0.5

-0.5

-1

-1.5
0 5 10 15

Figura II.3.1. Interpolare polinomiala unidimensionala folosind metoda ’cubic’.

MATLAB dispune de functii care permit interpolari multidimensionale.


Exemplul II.3.2: pornind de la vectorii x, y şi matricea td (a se vedea tabelul II.3.1), sa
se completeze prin interpolare setul de date realizând pe axele x şi y un increment de 0.2 în
loc de 1 si sa se realizeze reprezentarea grafica a valorilor rezultate prin interpolare.

Tabelul II.3.1 Tabloul de date referitor la variabilele x,y si td :

y x 1 2 3 4 5
1 82 81 80 82 84
2 79 63 61 65 81
3 84 84 82 85 86

Codul MATLAB:
x=[1 2 3 4 5]; y=[1 2 3];
td=[ 82 81 80 82 84
79 63 61 65 81
84 84 82 85 86];
xi=1:.2:5; yi=1:.2:3;
zi=interp2(x,y',td, xi,yi','cubic');
surfl(xi,yi,zi), xlabel('axa x'), ylabel('axa y'),zlabel('valori z');
shading interp; colormap(hot);

Asa cum rezulta din program, "zi" reprezintă rezultatul interpolării. InstrucŃiunile
shading interp şi colormap(hot) vor duce la realizarea suprafeŃei spaŃiale sub forma de
"lumini-umbre" utilizând setul de culori "hot" (figura II.3.2).

Figura II.3.2 Graficul dependentei z=f(x,y) - rezultat prin interpolarea datelor din tabelul II.3.1.

B. Date care sunt afectate de erori

In cazul unor seturi mari de date din care cel putin unele sunt afectate de erori
(avand deci un caracter probabilistic), se pune problema de a gasi forma si valoarea
coeficientilor unei ecuatii care ofera cea mai buna acuratete in oglindirea interdependentei
dintre variabila dependenta (de iesire) si variabilele independente (de intrare). Trebuie deci
sa decidem forma functiei si sa ajustam coeficientii acesteia folosind criterii cum ar fi suma
modulelor diferentelor dintre valorile prezise de ecuatia de intercorelare si valorile
variabilei de iesire, suma patratelor acestor diferente, etc. Unul dintre criteriile frecvent
folosite este minimizarea sumei patratelor erorilor (metoda celor mai mici patrate).
Exemplul II.3.3 : analiza de regresie cu o singura variabila independenta.
Pentru un proces cu o intrare u şi o ieşire y, forma presupusă a dependenŃei dintre y
şi u este:
y = a0 + a1·u (II.3.1)
Să se determine a0 şi a1, setul de date experimentale fiind:

ui = 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0.6 0.65 0.7 0.75 0.8 0.85 0.9 0.95 1 ;
ŷ i = 5.05 5.2 5.55 5.7 6.05 6.22 6.58 6.7 7.05 7.21 7.55 7.8 8 8.2 8.57 8.72 9.07 9.23 9.48 9.78 9.95;

Conform estimatorului celor mai mici pătrate, suma pătratelor abaterii valorilor
măsurate y) i de la valorile y i calculate pe baza relaŃiei (II.3.1) trebuie să fie minimă:
F (ao , a1 ) = [ y1 − (ao + a1u1 )] + ...... + [ yn − (ao + a1un )] = ∑[ yi − (ao + a1ui )] = min.
n !
) 2 ) 2 ) 2
(II.3.2)
i =1

Estimarea coeficienŃilor se realizează punînd condiŃia de minim pentru funcŃia F :


derivatele parŃiale în raport cu coeficienŃii ao,a1 se egalează cu zero.

∂F (a o , a1 )  n n
)
= −2 na o + a1 ∑ u i − ∑ y i  = o
∂a o  i =1 i =1 
(II.3.3)
∂F (a o , a1 )  n n n
)
= −2 a o ∑ u i + a1 ∑ u i2 − ∑ u i ⋅y i  = o
∂a1  i =1 i =1 
Rezultă următorul sistem :
)
n ∑ u i   a 0  ∑ y i 
 ⋅  =  
(II.3.4)
 2
   ) 
 ∑ u i ∑ u i   1  ∑ i i 
 a   y ⋅ u

Solutionarea sistemului II.3.4 se realizeaza printr-un program de tip functie numit


“linregr1”, fisierul returnand si doi indicatori ai adecvantei ecuatiei de regresie :indicatorul
preciziei modelului si deviatia standard (yicalc – valori calculate pe baza relatiei II.3.1 pe
_
baza valorilor coeficientilor ecuatiei de regresie; y - valoarea medie a lui y).

∑ ( yicalc − y ) ∑ ( yi − yicalc )
n n
2 ) 2

R2 = i =1
σ2 = i =1
(II.3.5)
n
( y)i − y )2 n − m −1

i =1

function [C, R2, stddev]=linregr1(u,y)


n=length(u);% evalueaza numarul seturilor de date
A(1,:)=[n sum(u)];
A(2,:)=[sum(u) sum(u.^2)];
B=[sum(y); sum(y.*u)];
C=A\B;% coeficientii ecautiei de regresie
yc=C(1)+C(2)*u;
ym=sum(y)/n; R2L=sum((y-ym).^2);
R2S=sum((yc-ym).^2);
RC=sum((y-yc).^2);
R2=(R2S/R2L)^0.5;% indicatorul preciziei modelului
dispersion=RC/(n-1);% dispersia
stddev=sqrt(dispersion);% deviatia standard

Pentru calculul coeficientilor de regresie se apeleaza functia ‘linregr1’ ;


u=0:0.05:1;
y=[5.05 5.2 5.55 5.7 6.05 6.22 6.58 6.7 7.05 7.21 7.55 7.8 8 8.2 8.57 8.72 9.07
9.23 9.48 9.78 9.95];
[C, R2, stddev]=linregr1(u,y);
disp('coeficientii ecuatiei de regresie, a0 si a1'); disp(C');
disp('indicatorul preciziei modelului si deviatia standard'); disp([R2 stddev]);
Y=C(1)+C(2)*u;
plot(u,Y,'-',u,y,'*'),xlabel('variabila independenta u'), ylabel('variabila
dependenta y'),grid,...
legend('linia de regresie', 'date experimentale');

MATLAB dispune de o serie de functii reunite in toolboxul de « optimizari », functii


care sunt dedicate estimarii parametrilor ecuatiilor de regresie (liniara si neliniara).
Exemple:
• polyfit - calculeaza coeficientii unei ecuatii de regresie de tip polinomial;
• lsqlin – regresie liniara (toolboxul de optimizari)
• lsqnonlin – regresie neliniara bazata pe minimizarea sumei abaterilor patratice
(toolboxul de optimizari) ;
• lsqcurvefit – calculeaza coeficientii unei functii neliniare prin minimizarea sumei
abaterilor patratice ale valorilor functiei fata de valorile variabilei dependente ;

Exemplul II.3.4 La retinerea ionilor de Cu2+ pe zeolit, la pH=4, s-au obtinut urmatoarele
date cu privire la echilibrul de adsorbtie :
- concentratia Cu2+ in solutie, mg/dm3 : 0 2 14.9 59.5 200 209.8
- cantitate Cu2+ retinut pe zeolit, mval/g : 0 0.084 0.203 0.282 0.320 0.328
Se cere sa se determine parametrii izotermei Langmuir utilizand lsqcurvefit.
Ecuatia izotermei de tip Langmuir se implementeaza intr-un fisier de tip functie:
function cizol=langmuir(x,csol)
nL=length(csol);
for i=1:nL
cl(i)=x(1)*x(2)*csol(i)/(1+x(2)*csol(i));
end;
cizol=cl;

aceasta functie este apelata in programul principal:


%csolmgl -mg/l; csol - mval/cm3; czeol - mval/g
csolmgl1=[0 2 14.9 59.5 200 209.8];
csol1=csolmgl1/31.8*0.001;% conversie la mval/dm3
czeol1=[0 0.084 0.203 0.282 0.320 0.328];% mval/g
x0=[0.3 200];% valori de start
[x1, resnorm]=lsqcurvefit('langmuir',x0,csol1,czeol1);
disp('coeficientii izotermei Langmuir');disp(x1);
disp('se continua cu reprezentarea grafica si calulul R^2');
pause;
csolv=(0:0.05:10)*0.001;
for i=1:201
czeolv1(i)=x1(1)*x1(2)*csolv(i)/(1+x1(2)*csolv(i));
end;
czm4=sum(czeol1)/6;
for i=1:6
czeols4(i)=x1(1)*x1(2)*csol1(i)/(1+x1(2)*csol1(i));
end;
R2L=sum((czeol1-czm4).^2);
R2S=sum((czeols4-czm4).^2);
RC=sum((czeol1-czeols4).^2);
R2Ph4=(R2S/R2L)^0.5;
disp('indicatorul preciziei modelului');disp([R2Ph4]);
plot(csol1,czeol1,'g+',csolv,czeolv1,'g-'), grid, ...
xlabel('conc. in solutie, mval/dm3'), ylabel('Cu2+ retinut pe zeolit, mval/g');

II.3.2 Algoritmi de optimizare

Majoritatea algoritmilor de optimizare au fost dezvoltati pentru probleme de minim,


problema gasirii maximului transformandu-se in minimizarea functiei obiectiv (functiei
scop) cu semn schimbat.
Un punct de extrem (minim sau maxim) poate fi global (valoarea extrema din tot
domeniul), sau local, (valoarea extrema dintr-un subdomeniu). In general, intereseaza
minimul global. Acesta se poate obtine repetand calculul pentru puncte de start diferite si
alegand apoi punctul ın care valoarea functiei scop este cea mai mica. dupa obtinerea
minimului local, se da o perturbatie ıntr-o directie oarecare - daca algoritmul revine ın
acelasi punct, atunci acesta este un candidat pentru minim global. Pentru ca un punct x sa
fie un minim local unic, ın cazul unei probleme de optimizare fara restrictii, trebuie
ındeplinite conditiile de optimalitate. Fie F(X) o functie scop multidimensionala pentru
care se cauta valoarea maxima sau minima :
!
F ( X ) = optim

Conditiile de optimalitate cer ca gradientul functiei scop in punctul de optim X* sa


fie zero iar Hessianul functiei scop sa fie pozitiv definit :

∇F ( X * ) = 0 H ( X * ) ≡ ∇2 F ( X * ) > 0
Clasificarea metodelor de optimizare poate fi facuta dupa mai multe criterii :
- din punct de vedere al restrictiilor impuse variabilelor, avem probleme de
optimizare fara restrictii si cu restrictii ;
- dupa forma functiei scop, avem probleme de optimizare liniare si neliniare.
- dupa efortul de calcul al derivatelor, avem metode de tip :
o Newton, metode la care se foloseste atat Hessianul cat si vectorul gradient
al functiei scop ;
o cvasi-Newton si gradienti conjugati, metode la care se utilizeaza numai
derivatele partiale de ordinul ıntai
o propriu zise, caz in care se foloseste doar functia scop.

Algoritmii de optimizare sunt algoritmi de tip iterativ : valoarea noului punct de


minim (relativ) se calculeaza iterativ cu relatia :

X k +1 = X k + α k ⋅ s k

unde sk este o directie de descrestere iar αk este un numar real pozitiv (evaluat diferit
de la metoda la metoda), numar care trebuie sa asigure o valoare mai mica a functiei in
punctul Xk+1 fata de punctul Xk.

Optimization toolbox a MATLAB contine functii destinate rezolvarii diferitelor


tipuir de probleme de minim. Iata cateva din cele de importanta practica pentru domeniul
ingineriei:

fgoalattain Solve multiobjective goal attainment problems


fminbnd Find minimum of single-variable function on fixed interval
fmincon Find minimum of constrained nonlinear multivariable function
fminimax Solve minimax constraint problem
fminsearch Find minimum of unconstrained multivariable function using derivative-free method
fminunc Find minimum of unconstrained multivariable function
fseminf Find minimum of semi-infinitely constrained multivariable nonlinear function
ktrlink Find minimum of constrained or unconstrained nonlinear multivariable function using
KNITRO third-party libraries
linprog Solve linear programming problems
quadprog Solve quadratic programming problems

Pentru a obtine detalii despre modul de apelare si tipul de probleme care pot fi
solutionate se poate folosi comanda help urmata de numele functiei :

>> help fminbnd


Exemplul II.3.5: evaluarea hidrodinamicii curgerii in camera de amestec a
unei statii pilot de tratare a apei.

Am vazut ca, pentru un reactor de lungime H si de suprafata transversala S, in cazul


prezentei amestacarii axiale (dispersiei axiale), ecuatia care descrie evolutia concentratiei
unui component A in lungul axei adimensionale z si in timp are forma al unui (z -
coordonata adimensionala, z=h/H, w – viteza, rA – consumul sau productia din A pe m3 de
volum si pe unitatea de timp):

H ∂C A 1 ∂ 2 C A ∂C A H
⋅ = ⋅ − + ⋅ rA (II.3.6)
w ∂t Pe ∂ z 2
∂z w

In relaŃia 3.2.6, Pe este aşa numitul raport adimensional Peclet, raport a cărui
valoare este o masură a amestecării axiale(valoare forte mare=curgere de tip piston; foarte
mica – apropiere de amestecarea perfecta) :

Fluxul transporta t prin convectie w⋅L


Pe= = (II.3.7)
Flux cauzat de dispersia axiala DA

In cazul in care A este un trasor, reactia chimica nu este prezenta si deci in ecuatia (II.3.6)
ultimul termen din partea dreapta este zero (C(t) – concentratia trasorului):

H ∂ C (t ) 1 ∂ 2 C (t ) ∂ C (t )
⋅ = ⋅ − (II.3.8)
w ∂t Pe ∂z 2 ∂z

1 ∂C (t ) ∂C (t )
cu conditiile la limita: C IN (t ) = C (0+, t ) − ⋅ z = 0 +. z =1 =0 (II.3.9)
Pe ∂z ∂z

Identificarea valorii numarului Peclet s-a realizat pe baza raspunsului camerei de amestec
la semnal treapta (modificarea sub forma de semnal treapta a concentratiei trasorului).
Pentru solutionarea numerica a ecuatiei II.3.8 putem folosi programul dezvoltat
solutionarea in regim dinamic a ecuatiei II.3.7 (ecuatii cu derivate partiale, metode
implicite). Apar ca particularitati faptul ca la momentul 0 concentratia trasorului in lungul
reactorului este 0 iar modificarea pe timp este cauzata de semnalul treapta produs prin
cresterea concentratiei de la 0 la C0.
Codul programului este redat mai jos:
% REACTOR PISTON CU DISPERSIE AXIALA
Fvls=20; Fv=Fvls/1000*3600; S=0.36;w=Fv/(S*3600); % Fv - debitul volumic, m3/h
pe=20;H=3.5;kr=0;% pe- valoarea numarului Peclet; H- lungimea reactorului (2.5m);
n=25; dz=H/n;% dz -
ca=zeros(n,1);
ca_dexp;
cazero=178;
%plot(d_ca(:,1), d_ca(:,2),'r.');
%pause;
%valori initiale ale concentratiei
for i=1:n
ca(i)=0;
end;
ca0=0;
zax=dz/2:dz:(1-dz/2);
zaxf=[0 zax];cast=[ca0 ca'];

% ------- DINAMICA --------


tau=0; dtau=0.1; tauf=600; tauprint=0; dtauprint=1;contor=1;
acd=zeros(n,n); bcd=zeros(n,1); cad=zeros(n,1);tauimpd=1;
catau=zeros(n,tauf/dtauprint);
ad=H/(w*dtau);
cav=ca;cad=cav;
wd=w;
while tau<=tauf
if tau<tauimpd
cain=142;
else
cain=142;
end;
ad=H/(wd*dtau);
if abs(tau-tauprint)<0.00001
for k=1:n
catau(k,contor)=cad(k)+cazero;
end;
vcain(contor)=cain;
vtau(contor)=tauprint;
vout_ca(contor)=cad(n);
tauprint=tauprint+dtauprint;
contor=contor+1;
end;
% MATRICEA ACD
% Section no. 1
acd(1,1)=-2/(pe*dz^2)-2/dz-pe-H*kr/wd-ad;
acd(1,2)=2/(pe*dz^2);
for i=3:n
acd(1,i)=0;
end;
%Section no. 2
acd(2,1)=1/(pe*dz^2)+1/(2*dz);
acd(2,2)=-2/(pe*dz^2)-H*kr/wd-ad;
acd(2,3)=1/(pe*dz^2)-1/(2*dz);
for i=4:n
acd(2,i)=0;
end;
% Section no. k
for k=3:n-2
for i=1:k-2
acd(k,i)=0;
end;
acd(k,k-1)=1/(pe*dz^2)+1/(2*dz);
acd(k,k)=-2/(pe*dz^2)-H*kr/wd-ad;
acd(k,k+1)=1/(pe*dz^2)-1/(2*dz);
for i=k+2:n
acd(k,i)=0;
end;
end;
% Section no. n-1
for i=1:n-3
acd(n-1,i)=0;
end;
acd(n-1,n-2)=1/(pe*dz^2)+1/(2*dz);
acd(n-1,n-1)=-2/(pe*dz^2)-H*kr/wd-ad;
acd(n-1,n)=1/(pe*dz^2)-1/(2*dz);
% Section no. n
for i=1:n-2
acd(n,i)=0;
end;
acd(n,n-1)=2/(pe*dz^2);
acd(n,n)=-2/(pe*dz^2)-H*kr/wd-ad;
% VECTORUL BC
bcd(1)=-(2/dz+pe)*cain-ad*cav(1);
for k=2:n
bcd(k)=-ad*cav(k);
end;
cad=acd\bcd;
tau=tau+dtau;
cav=cad;
end;
vcain_ca=vcain;
plot(vtau,catau(n,:),'k-', d_ca(:,1), d_ca(:,2),'r.'),xlabel('timpul, [s]'),
ylabel('coductivitaea, microS'),...
grid, legend('simulare','experimental');

Rularea programului pentru un Peclet=20 nu duce la o apropiere suficient de mare a


rezultatelor obtinute prin simulare fata de cele experimentale. Pentru aflarea valorii optime
a numarului Peclet se poate folosi toolboxul de optimizari al MATLAB. Pentru a utiliza, de
exemplu, fminsearch, codul de solutionare a ecuatiei II.3.8 trebuie salvat intr-un fisier de
tip functie si in acelasi timp trebuie creata posibilitatea calcularii sumei abaterilor patratice
ale valorilor prezise de model fata de valorile experimentale in vederea minimizarii
acesteia.
Apelarea fminsearch se realizeaza simplu (step_ca este numele functiei care rezolva
ecuatia II.3.8 pentru o anumita valoare a numarului Peclet si in care se calculeaza suma
abaterilor patratice ale valorilor obtinute prin simulare fata de valorile obtinute
experimental):
pe0=12;% valoarea initiala a numarului Peclet
options=optimset('TolX',1e-2,'TolFun',1e-2);
vpmf=fminsearch('step_ca',pe0, options);
disp(vpmf);

Rezultatul obtinut pentru numarul peclet este dePe=6.47, fapt ce arata o existenta unei
amestecari importante in camera de reactie.

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