Sunteți pe pagina 1din 15

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 – cazul
dependentei liniare.
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 yi de la valorile yi calculate pe baza relaţiei (II.3.1) trebuie să fie minimă:
n
Fao , a1    y1  ao  a1u1   ......  yn  ao  a1un    yi  ao  a1ui  min.
!
 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 nao  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
   
  i  i   a1    y i  u i 
u 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 (R2)
- deviatia standard;
Nota: in relatiile II.3.5, yicalc sunt valori calculate pe baza relatiei II.3.1 (utilizand
_
valorile experimentale ui si dupa aflarea valorilor coeficientilor a0 si a1) iar y este valoarea
medie a lui y).
n
  yicalc  y 
n

  yi  yicalc 
2 2

R2  i 1
n 2  i 1
(II.3.5)
  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 ecuatiei 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');

Alte variante oferite de MATLAB:

- Utilizarea operatorului de impartire la stanga:


u=0:0.05:1;
u=u';
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];
U=[ones(size(u)) u] ;
y=y' ;
a=U\y ;
disp(a) ;
Y=[ones(size(u)) u]*a ;
plot(u,Y,'-',u',y','*'),xlabel('variabila independenta u'), …
ylabel('variabila dependenta y'),grid ;

- Utilizarea functiei mldivide:


help mldivide
\ Backslash or left matrix divide.
A\B is the matrix division of A into B, which is roughly the
same as INV(A)*B , except it is computed in a different way.
u=0:0.05:1;
u=u';
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];
U=[ones(size(u)) u] ;
y=y' ;
a=mldivide(U,y);
disp(a) ;
Y=[ones(size(u)) u]*a ;
plot(u,Y,'-',u',y','*'),xlabel('variabila independenta u'), ...
ylabel('variabila dependenta y'),grid

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 cu constrangeri(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 ;

- Utilizarea functiei lsqlin (cazul II.3.3):


help lsqlin
lsqlin Constrained linear least squares.
X = lsqlin(C,d,A,b) attempts to solve the least-squares problem

min 0.5*(NORM(C*x-d)).^2 subject to A*x <= b


x

[X,RESNORM] = lsqlin(C,d,A,b) returns the value of the squared 2-norm


of the residual: norm(C*X-d)^2.

[X,RESNORM,RESIDUAL] = lsqlin(C,d,A,b) returns the residual: C*X-d.

u=0:0.05:1;
u=u';
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];
U=[ones(size(u)) u] ;
y=y';
[a, reznorm, rezidual]=lsqlin(U,y);
disp('a'); disp(a);
disp('reznorm'); disp(reznorm);
disp('rezidualul') ;disp(rezidual);
Y=[ones(size(u)) u]*a ;
plot(u,Y,'-',u',y','*'),xlabel('variabila independenta u'), ...
ylabel('variabila dependenta y'),grid ;

Exemplul II.3.4
Fie un proces cu o intrare u şi o ieşire y, proces pentru care s-a ajuns la concluzia că
dependenţa teoretică dintre y şi u este de forma : y = a0 + a1.u + a2.u2
Setul de date experimentale este:
ui = 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.85
0.9 0.95 1 ;

ŷ i=5.1 4.82 4.7 4.62 4.69 4.58 4.5 4.55 4.57 4.69 4.79 4.88 5 5.19 5.3 5.75 5.88 6.03
6.3 6.6 7.05.

sa se calculeze valoarea coeficientilor a0, a1 si a2 utilizand solverul lsqnonlin din


toolbox-ul de optimizari al Matalb.
Pentru calculul coeficienţilor modelului se aplica tot metoda celor mai mici pătrate:
    min .
n n 2 !
 
F a 0 , a1 , a 2     y i  y i    y i  a0  a1u i  a 2 u i (II.3.6)
2 2

i 1 i 1

Utilzarea LSQNONLIN - apelare (help Matlab) :

LSQNONLIN solves problems of the form:


min sum {FUN(X).^2} where X and the values returned by FUN can be vectors or matrices
x

X=LSQNONLIN(FUN,X0) starts at the matrix X0 and finds a minimum to the sum of squares of the
functions described in FUN. FUN is usually an M-file which returns a vector of objective functions:
F=FUN(X).
NOTE: FUN should return FUN(X) and not the sum-of-squares sum(FUN(X).^2)). (FUN(X) is
summed and squared implicitly in the algorithm.) See below for more options for FUN.

X=LSQNONLIN(FUN,X0,LB,UB) defines a set of lower and upper bounds on the design variables,
X, so that the solution is in the range LB <= X <= UB. Use empty matrices for LB and UB if no bounds
exist. Set LB(i) = -inf if X(i) is unbounded below; set UB(i) = inf if X(i) is unbounded above.

Solutionare:
- programul principal

% utilizare lsqnonlin
% date experimentale
global u y np
u=0:0.05:1;
y=[5.1 4.82 4.7 4.62 4.69 4.58 4.5 4.55 4.57 4.69 4.79 4.88 5 5.19 5.3 5.75 5.88 6.03 6.3 6.6 7.05];
np=length(u);
plot(u,y,'r*'), xlabel('valori u'), ylabel('valori y');
pause;
%valori de start pentru parametri
a0=5; a1=-2; a2=3;
%vectorul de start
x0=[a0 a1 a2];
options = optimset('Display','iter','MaxFunEvals',Inf,'MaxIter',500,'TolFun',1e-6,'TolX',1e-6);
[xf, resnorm, residual]=lsqnonlin('ex_nonlin', x0, [-10 -10 -10], [10 10 10], options);
disp(' a0 a1 a2'); disp(xf);
for i=1:np
yc(i)=xf(1)+xf(2)*u(i)+xf(3)*u(i)^2;
end;
plot(u,y,'r*', u, yc, 'b-'), xlabel('valori u'), ylabel('valori y'), ...
legend('valori experimentale', 'valori calculate - ec. de regresie');

- fiserul de tip functie :

function fy=ex_nonlin(X)
global u y np
a0=X(1); a1=X(2); a2=X(3);
for i=1:np
fy(i)=y(i)-(a0+a1*u(i)+a2*u(i)^2);
end;

Exemplul II.3.5 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 czeol=langmuir(x,csol)
nL=length(csol);
for i=1:nL
cl(i)=x(1)*x(2)*csol(i)/(1+x(2)*csol(i));
end;
czeol=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: evaluare parametri reactoare cu amestecare reala

In vederea descrierii corecte a realităţii dintr-un reactor cu amestecare reală, se


utilizează diverse combinaţii de reactoare ideale cu eventuala luare în considerare de
trasee "by-pass", respectiv zone în care fluidul nu pătrunde – aşa-numitele ("dead
zone") sau zone stagnante în care fluidul este staţionar, în acest caz având totuşi loc
un schimb de substanţă cu fluxul principal pe baza diferenţei de concentraţie.
Figura II.3.3. Modele pentru reactoare cu amestecare neideale.

In figura II.3.3 sunt prezentate doua exemple : amestecare cu zone stagnante si


amestecare cu zone stagnante si by-pass . In cazul (b), o fracţie a debitului de alimentare
by-passează zona de amestecare a reactorului, si o fractie din volumul acestuia se
constituie ca o zonă in care amestecarea este mai puţin accentuată (zona stagnantă).
Ambele volume V1 si V2 sunt tratate ca reactoare cu amestecare perfectă iar fluxul care
se schimbă intre ele este o fracţiune din debitul de alimentare.
- Ecuatiile modelului de amestecare Cholette – Cloutier (nu se ia in considerare by-
passul)

Figura II.3.4. Modelul Cholette Cloutier – schema de fluxuri pentru un component “A”.

Notatii: Fv – debit volumic, (m3/s), V – volum, (m3), CA - concentratie (kmol/m3) , rA –


consumul/productia din A in unitatea de volum de reactor (kmol/(m3·s))
Parametri ai modelului :
- β : fractia din debitul de intrare care reprezinta fluxul spre/dinspre zona stagnanta
- φ : fractia din volumul total al lichidului care reprezinta zona stragnanta
Ecuaţiile modelului matematic (reactantul « A ») :
dC A1 (II.3.7)
V1  ( )  FV  ( C A 0  C A1 )    FV  ( C A 2  C A1 )  r A ,1  V 1
dt

dC A 2 (II.3.8)
V2 ( )    FV  ( C A1 C A2 )  rA,2  V 2
dt

V1  1     V ; V2    V (II.3.9)

Studiu de caz – utilizare « fminsearch » pentru evaluarea parametrilor modelului


hidrodinamic al camerei de amestec al unei instalatii pilot de tratare a apei :

Determinarea experimentala a celor doi parametri pentru camera de amestec a unei


instalatii pilot de potabilizare a apei se realizeaza pe baza determinarii distributiei
duratelor de stationare : la intrarea in camera de amestec se injecteaza un trasor (solutie
de clorura de sodiu) si se urmareste evolutia conductivitatii la iesirea din camera de
amestec. In ecuatiile II.3.7-II.3.8, termenii rA sunt zero (absenta reactiei).

Figura II.3.5. Instalatie pilot de tratare a apei in vederea potabilizarii.

Identificarea valorii parametrilor β si φ s-a realizat pe baza raspunsului camerei de


amestec la semnal impuls (modificarea sub forma de semnal impuls a concentratiei
trasorului). Pentru solutionarea numerica a ecuatiilor II.3.6-II.3.7 se poate folosi metoda
Euler. La momentul « 0 » concentratia trasorului in ambele reactoare Cholette - Cloutier este
0 iar modificarea pe timp este cauzata de semnalul impuls produs prin cresterea concentratiei
trasorului de la 0 la C0 pentru o durata de timp Δt.

Codul programului este redat mai jos :


xv=[0.4 0.3]; % valori initale fi si beta
N=2;
fi=xv(1);
beta=xv(2);
Fvls=35; Fv=Fvls/1000; % Fv- debitul volumic, m3/s
tinj=40;% durata injectiei trasorului
dimpca2_35;% fisierul de date experimentale
% vectorii timp si concentratie (conductivitate) cu date exp.:
tauexp=d_ca2(:,1); caexp=d_ca2(:,2);
cazero=caexp(1);
npexp=length(tauexp);
Vrap1=0.92;% volumul primei camere, m3
Vrap2=0.65;% volumul celei de-a doua camere, m3
V11=(1-fi)*Vrap1;
V21=Vrap1-V11;
V12=(1-fi)*Vrap2;
V22=Vrap2-V12;
% valori initiale ale conductivitatii (masura a concentratiei)
for k=1:N
ca1(k)=0;
ca2(k)=0;
ca(k)=0;
end;
F0=Fv;
tau=0; dtau=0.25; tauf=250; tauprint=0; dtauprint=5; contor=1; kk=1; contr=1; i=1;
while tau<=tauf
if tau<=tinj
% caimp este calculat in fisierul de date (suprafata de sub curba exp. divizata la tinj)
ca0=caimp;
else
ca0=0;
end;
%colectare date pentru reprezentare grafica si evaluarea sumei erorii patratice (exp. versus simulare)
if abs(tau-tauprint)<0.00001
vca1out(contor)=ca1(N);
vcain(contor)=ca0;
vtau(contor)=tauprint;
for j=1:npexp
if abs(tauprint-tauexp(j))<=0.00001
casim(kk)=vca1out(contor);
caexp(kk)=caexp(j)-cazero;
texps(kk)=tauprint;
kk=kk+1;
end;
end;
tauprint=tauprint+dtauprint;
contor=contor+1;
end;

vca1(1,i)=ca1(1);
vca2(1,i)=ca2(1);
vca1(2,i)=ca1(2);
vca2(2,i)=ca2(2);
% expresia derivatelor pentru primul si cel de-al doilea react. Cholette-Cloutier
derca1(1)=(F0*ca0-F0*ca1(1)-beta*F0*ca1(1)+beta*F0*ca2(1))/V11;
derca2(1)=(beta*F0*ca1(1)-beta*F0*ca2(1))/V21;
derca1(2)=(F0*ca1(1)-F0*ca1(2)-beta*F0*ca1(2)+beta*F0*ca2(2))/V12;
derca2(2)=(beta*F0*ca1(2)-beta*F0*ca2(2))/V22;
%integrare Euler
ca1(1)=ca1(1)+derca1(1)*dtau;
ca2(1)=ca2(1)+derca2(1)*dtau;
ca1(2)=ca1(2)+derca1(2)*dtau;
ca2(2)=ca2(2)+derca2(2)*dtau;
tau=tau+dtau;
contr=contr+1;
i=i+1;
end;
plot(vtau,vca1out+cazero,'b-', d_ca2(:,1), d_ca2(:,2),'r.'),xlabel('time, [s]'), ylabel('conductivity, microS/cm'),...
grid, legend('simulation','experimental');
for i=1:npexp
sumer(i)=(casim(i)-caexp(i))^2;
end;
err_ca=sum(sumer);
disp('N, fi, beta, eroare/1000'); disp([N fi beta err_ca/1000]);
pause(0.5);
clear N
clear ca1
clear ca2
clear ca

Rularea programului pentru valorile initale din vectorul xv (φ=0.4 si β=0.3) nu duce la o apropiere
suficient de mare a rezultatelor obtinute prin simulare fata de cele experimentale (figura II.3.6).

270
simulation
experimental
260

250
conductivity, microS/cm

240

230

220

210

200

190
0 50 100 150 200 250
time, [s]

Figura II.3.6. Camera de amestec: rezultate simulare pentru φ=0.4 si β=0.3.

Pentru aflarea valorii optime a celor doi parametri se poate folosi toolboxul de optimizari al
MATLAB. Pentru a utiliza, de exemplu, fminsearch, codul de solutionare a ecuatiei modelului camerei de
amestec trebuie salvat intr-un fisier de tip functie (pentru a putea fi folosit la estimarea valorii parametrilor
β si φ ) 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 (« fimp_ca35f » este numele functiei care rezolva modelul
camerei de amestec pentru o anumita pereche de valori β si φ si in care se calculeaza suma abaterilor
patratice ale valorilor obtinute prin simulare fata de valorile obtinute experimental):
global casim caexp sumer vxopt
fi0=0.2; beta0=0.1;
x0=[fi0 beta0];
options=optimset('TolX',1e-4,'TolFun',1e-4, 'MaxIter', 100);
[xf]=fminsearch('fimp_ca35f',x0, options);
fif=xf(1); betaf=xf(2);
disp('fif, betaf=');disp([fif betaf]);

Rezultatul final al minimizarii (obtinut prin atingerea preciziei dorite sau prin depasirea numarului
maxim de iteratii admis) este reprezentat de valorile « fif » si « betaf » (figura II.4.7).

Figura II.3.6. Camera de amestec: valorile optime ale parametrilor modelului (φ=0.12866 si β=0.052529).

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