Documente Academic
Documente Profesional
Documente Cultură
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).
1.5
date initiale
valori rezultate prin interpolare
1
0.5
-0.5
-1
-1.5
0 5 10 15
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.
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
Fao , a1 y1 ao a1u1 ...... yn ao a1un yi ao a1ui min.
!
2 2 2
(II.3.2)
i1
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
R2 i 1
n 2 i 1
(II.3.5)
yi 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
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.
i 1 i 1
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');
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;
F( X * ) 0 H ( X * ) 2 F( X * ) 0
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:
Figura II.3.4. Modelul Cholette Cloutier – schema de fluxuri pentru un component “A”.
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)
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]
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).