Sunteți pe pagina 1din 12

II.

ALGORITMI NUMERICI

II.1 Sisteme de ecuatii neliniare
Una din cele mai cunoscute metode de soluionare a ecuaiilor neliniare este
metoda Newton-Raphson, metod bazat pe proprietile tangentei la curb.
Algoritmul Newton[13], prezentat n continuare, se bazeaz pe generalizarea
metodei Newton Raphson pentru sistemele de ecuaii neliniare.

II.2.1 Algoritmul Newton (Newton - Raphson)
a. Cazul unui sistem neliniar de dou variabile .

Fie sistemul :

=
=
0 ) , (
0 ) , (
2 1 2
2 1 1
x x f
x x f
(II.1)
si fie
0
1
x si x
2
0
aproximaia iniial a variabilelor x
1
i x
2
.
Noile aproximaii :

0
2
0
2
1
2
0
1
0
1
1
1
x x x
x x x
+ =
+ =

trebuie astfel alese nct ele s apropie de zero valorile funciilor
f sif
1 2
:

=
=
0 ) , (
0 ) , (
1
2
1
1 2
1
2
1
1 1
x x f
x x f

adic :

= + +
= + +
0 ) , (
0 ) , (
0
2
0
2
0
1
0
1 2
0
2
0
2
0
1
0
1 1
x x x x f
x x x x f
(II.2)

Dezvoltnd sistemul I.3.2 n serie Taylor, se obine:

( ) 0 ... . . ,
0 ... . . ) , (
0
2
0
2
2 0
1
0
1
2 0
2
0
1 2
0
2
0
2
1 0
1
0
1
1 0
2
0
1 1
= +
|
|

\
|
+
|
|

\
|
+
= +
|
|

\
|
+
|
|

\
|
+
x
x
f
x
x
f
x x f
x
x
f
x
x
f
x x f

(II.3)
Prin neglijarea termenilor ce conin x si x
1
0
2
0
la puteri mai mari dect 1 ,se
obine un sistem de dou ecuaii liniare cu dou necunoscute
0
2
0
1
x si x .Prin
rezolvarea sistemului ,se obin noile aproximri ale variabilelor: x six
1
1
2
1
. Procedeele
se repet pn cnd se atinge convergena .Unul din criteriile de convergen
utilizate este :
( ) ( ) < +
2
2
2
1
k k
x x (II.4)
unde k este numrul iteraiei iar este o valoare pozitiv aleas n funcie de
precizia dorit de calcul.

b. Cazul unui sistem de n ecuaii.

Fie:
( ) 0 ,...., , ,
3 2 1
=
n i
x x x x f
i=1,2,3,....,n
sistemul de n ecuaii neliniare.
In forma matricial:
(X)=0 (II.5)
unde
[ ]
= f f f
n
T
1 2
, , .... , X=
[ ]
x x x
n
T
1 2
, , ...
Fie X
k+1
valoarea lui X la a k+1 iteraie:

k k k
X X X + =
+1


Daca X
k+1
este valoarea cautat, atunci
( )
X
k+
=
1
0 sau altfel :
( ) 0 = +
k k
X X (II.6)
Prin dezvoltare n serie Taylor, se obine:
( ) ( ) ( ) .... . + + = +
k k k k k
X X X X X (II.7)
unde este operatorul derivatelor pariale de ordinul nti n raport cu
componentele lui X . Prin neglijarea termenilor ce conin
( )
X
k
2
i superiori,se
obine, innd cont de (II.6):

( )
X J X
k
k
k
+ = . 0 (II.8)
unde
( )
J X
k
k
= este numit matrice Jacobiana:

( ) ( )
( ) ( )
(
(
(
(
(
(



=
n
n n
n
k
x
X f
x
X f
x
X f
x
X f
J


....... ..........
......... .......... .......... ..........
....... ..........
1
1
1
1

Deci :
( )
X J X
k
k
k
=
1
.
Prin rezolvarea lui (II.8) ,se obine aproximaia mai bun:

k k k
X X X + =
+1
sau

( )
k
k
k k
X J X X
1 1 +
=
(II.9)
Dezavantajele principale ale metodei: soluia poate s nu convearg dac
aproximaia iniial nu este bun iar metoda face necesar calculul derivatelor
fiecrei funcii n raport cu fiecare din variabile.
Exemplul II.1 : s se rezolve sistemul de ecuaii neliniare :

7
375 . 9
2
2 3
= +
= +
y y x
y x x
(II.10)
In acest caz, matricea Jacobiana este :

(

+
+
=
y x y
y x y x
J
2
2 3
2 2
(II.11)
iar ca vector de start vom utiliza X=[1 1]
T
.
Vectorul funciilor i matricea Jacobiana se definesc fiecare n cte un fiier
de tip funcie .
a) Vectorul funciilor f
i
ale sistemului de ecuaii :

function F=fsys1(X)
x=X(1);y=X(2);
F=zeros(2,1);
F(1)=x^3+x*y^2-9.375;
F(2)=x*y+y^2-7;

b). Matricea Jacobiana :
function JF=jfsys1(X)
x=X(1);y=X(2);
JF=zeros(2,2);
JF(1,:)=[3*x^2+y^2 2*x*y];
JF(2,:)=[y x+2*y];

Ecuaia specific algoritmului Newton (II.9) este implementat printr-un
ciclu while , ieirea din ciclu fiind condiionat de atingerea toleranei admise :

function [vx,it]=nrsys1(X,F,JF,n,tol)
it=0;vx=X;
fr=feval(F,vx);
while norm(fr)>tol
jr=feval(JF,vx);
vx1=vx-jr\fr;vx=vx1;
fr=feval(F,vx);
it=it+1;
end;




Rutina anterioara utilizeaz dou noi instruciuni MATLAB :

- feval(F,vx) - evalueaz vectorul F (sau matricea JF) utiliznd valorile din
vectorul vx ;
- norm(fr) returneaz cea mai mare valoare absoluta din vectorul fr .

Apelarea rutinei Newton se face preciznd vectorul de start i fiierele
unde sunt definite vectorul F i matricea Jacobiana JF :

[solsis iteratii]=nrsys1([1 1]','fsys1','jfsys1',2,0.0001);
x=solsis(1);
y=solsis(2);
disp('solutia sistemului de ecuatii neliniare');
disp('x, y =');disp([x y]);
disp('numar iteratii:');disp(iteratii);

iat i rezultatul apelrii :
sisnlex
soluia sistemului de ecuaii neliniare
x, y =
1.5000 2.0000

numr iteraii:

5

Exemplul II.2: Repartitia poluantilor organici in sol
Fie
t
V volumul total (cm
3
) al unei zone de sol poluate cu N compusi
organici. Se cunoaste concentratia molara totala a fiecarui poluant, fractia
volumica a fazei apoase si porozitatea solului. Se cere sa se calculeze repartitia
poluantilor intre faze: faza organica, faza apoasa, si solid (adsorbtie) si numarul de
moli din faza organica (implicit, fractia volumica a fazei organice). Notatii:
- C
t
i
- concentratia molara totala a poluantului i (moli/cm
3
de sol).
- y
i
- fractia molara a lui i in faza gazoasa (moli i/mol).
-
i
z - fractia molara a lui i in faza organica libera ;
-
v
i
P - presiunea vaporilor saturati ai componentului i la temperatura de lucru;
- S
i
solubilitatea lui i in apa, g/l ;
- M
mi
masa molara a lui i ;
-
i
x fractia molara a lui i in faza apoasa ;

Avand in vedere notatiile de mai sus, se pot scrie echilibrele intre faze:

v
i i i
P z P y = (Raoult) (II.12)
v
i i i i
P x P y = (Henry) (II.13)
-
i
- coeficientul de activitate al lui i in apa (moli apa/moli i in faza apoasa) :
-
i
aq
mi
i
S
M
l / g
M
1000

= ;
unde
aq
M masa molara a apei, [g/mol].
Prin insumarea numarului de moli ai lui i in fiecare faza se obtine numarul
total de moli ai respectivului poluant in sol (indici: g faza gazoasa, aq faza
apoasa, o faza organica, s solid, adsorbtie):

i
s
i
o
i
aq
i
g
i
t
n n n n n + + + = (II.14)
- Numarul total de moli ai unui component i poate fi exprimat in forma:

i
t t
mi
i
t i
t
C V
M
m
n = = (II.15)

i
t
m masa totala a poluantului i in sistem, [g] ;
- Numarul de moli ai lui i din faza gazoasa:

T R
P
V y n
t g i
i
g

=
- Numarul de moli ai lui i din faza apoasa:

aq i
i
aq
n x n = (II.16)

i
x fractia molara a lui i in faza apoasa;

aq
n numarul total de moli din faza apoasa;
Tinand cont de slaba solubilitate a compusilor organici, se poate considera
ca numarul total de moli este egal cu numarul de moli de apa:

eau
aq aq
n n si deci:

eau
aq i
i
aq
n x n = (II.17)
- Numarul de moli ai lui i din faza organica:

o i
N
k
k
o i
i
o
n z n z n = =

=1
(II.18)
N numarul de poluanti organici din sol;

o
N
k
k
g
n n =

=1


numarul total de moli de compusi organici din sol (moli).
- Numarul de moli ai lui i adsorbiti pe solid (sol) se evalueaza pornind de la ipoteza
ca solul este in contact numai cu faza apoasa (cu densitate mai mare decat faza
organica) si ca, deci, adsorbtia se produce doar din faza apoasa. Evaluarea
numarului de moli adsorbiti se face pe baza ecuatiei:

aq
t
s i
s i i
s
M
V K x
n

=

(II.19)

i
s
K coeficient de adsorbtie (din faza apoasa)[adim.] ;

s
densitate sol, [g.cm
-3
] ;
Coeficientul de adsorbtie poate fi estimat pe baza ecuatiei lui Karickhoff(1979) :

oc
i
ow
i
s
f K K = 63 , 0 (II.20)

i
ow
K coeficientul de partaj octanol-apa pentru compusul i ;

oc
f fractia de carbon organic a solului [%].
`Inlocuind in relatia II.14, se obtine:

aq
t
s i
s
i o i
eau
aq i
t g
i
i
t
s i
t
M
V K
x n z n x
T R
V
P y C V n

+ + +

= =

(II.21)
Aceasta ecuatie, care contine necunoscutele
i
x ,
i
y ,
i
z , si
o
n poate fi considerata ca
bilantul masic al componentului i in sol. Pentru a reduce numarul de necunoscute
se pot folosi legile lui Raoult si Henry si ecuatia de mai sus devine (
i i i
x z = ):

(
(


+ + +


=
aq i
s
t
i
s
o
i
eau
aq t g
v
i
i
i
t t
M
V K
n
n
T R
V P
z C V

(II.22)
Ecuatia II.22 are doua necunoscute, z
i
si n
o
,

iar pentru cazul unui sistem cu
N poluanti raman deci de calculat N+1 necunoscute. Cea de-a N+1 ecuatie se
obtine din conditia ca suma fractiilor molare ale tuturor comusilor din faza
organica sa fie unitara:
1
1
=

=
N
i
i
z (II.23)
Ca si in cazul exemplului anterior, implementarea celor N+1 ecuatii trebuie
realizata intr-un fisier de tip functie. Vom lua in considerare cazul unei zone de sol
poluate cu 5 poluanti organici (sistem de 6 ecuatii neliniare) :
function fcs=eqsis(xv)
global PV epsg V Rg Tks Mfa alfa Ks ros cmolt
z=xv(1:5);Mfo=xv(6);
fcs=zeros(6,1);
for i=1:5
fcs(i)=z(i)*(PV(i)*epsg*V/(Rg*Tks)+Mfo+Mfa/alfa(i)+Ks(i)/alfa(i)*V*r
os/18)-cmolt(i)*V;
end;
fcs(6)=z(1)+z(2)+z(3)+z(4)+z(5)-1;

Vectorul derivatelor este implementat tot intr-un fisier de tip functie:
function jfcs=jeqsis(xv)
global PV epsg V Rg Tks Mfa alfa Ks ros cmolt
z=xv(1:5);Mfo=xv(6);
jfcs=zeros(6,6);
jfcs(1,:)=[PV(1)*epsg*V/(Rg*Tks)+Mfo+Mfa/alfa(1)+Ks(1)/alfa(1)*V*ros/1
8 0 0 0 0 z(1)];
jfcs(2,:)=[0
PV(2)*epsg*V/(Rg*Tks)+Mfo+Mfa/alfa(2)+Ks(2)/alfa(2)*V*ros/18 0 0 0
z(2)];
jfcs(3,:)=[0 0
PV(3)*epsg*V/(Rg*Tks)+Mfo+Mfa/alfa(3)+Ks(3)/alfa(3)*V*ros/18 0 0
z(3)];
jfcs(4,:)=[0 0 0
PV(4)*epsg*V/(Rg*Tks)+Mfo+Mfa/alfa(4)+Ks(4)/alfa(4)*V*ros/18 0 z(4)];
jfcs(5,:)=[0 0 0 0
PV(5)*epsg*V/(Rg*Tks)+Mfo+Mfa/alfa(5)+Ks(5)/alfa(5)*V*ros/18 z(5)];
jfcs(6,:)=[1 1 1 1 1 0];

Pentru solutionarea sistemului, datele cerute de ecuatiile II.22 despre cei
cinci poluanti, datele despre zona de sol si vectorul de start sunt implementate intr-
un alt fisier. Tot in acest fisier se apeleaza rutina Newton Raphson si se afiseaza
(vizualizeaza) rezultatele :

global PV epsg V Rg Tks Mfa alfa Ks ros cmolt
% Dp - diametru zona de sol, cm; L - lungime, cm; ros - densitate,
g/cm3; Mt- %masa totala -g;
Dp=40; L=60; ros=1.65;
Vt=pi*(Dp/2)^2*L;
Mt=Vt*ros;
% V- volumul unui kg de sol (cm3)
V=1000/ros;
disp('vol. un kg sol - cm3, vol. total - dm3, masa in kg');
disp([V Vt/1000 Mt/1000]);pause;
% Numarul de ordine al poluantului
%1-C2H2Cl2; 2-C2HCl3; 3-C2Cl4; 4-Toluene; 5-sec-B-Benzene 6-H2O; 7-Air
% ctgkg=continut total [g/kg sol]; ctagkg-idem, H2O; ctg=[g/cm3];
mmol=masa moleculara ;
ctgkg=[0.071 0.010 8.408 0.010 0.240];ctagkg=100;
mmol=[96.94 131.39 165.83 92.14 134.22];
ctg=ctgkg/V;
% Temperatura sol:
Ts=18;Tks=Ts+273.15;
%Presiunea de vapori - Ts= temperatura solului
a1=63.0764; b1=-5613.49; c1=0; d1=-7.28548; e1=6.25054e-06; f1=2;
a2=93.2846; b2=-7360.26; c2=0; d2=-11.7913; e2=9.08491e-06; f2=2;
a3=70.4398; b3=-6953.25; c3=0; d3=-8.19101; e3=4.92755e-06; f3=2;
a4=76.4511; b4=-6995; c4=0; d4=-9.16350; e4=6.2250e-06; f4=2;
a5=64.8560; b5=-7864.20; c5=0; d5=-6.99370; e5=7.36720e-18; f5=6;
a6=65.9278; b6=-7227.53; c6=0; d6=-7.17695; e6=4.03130e-06; f6=2;

pv1=exp(a1+b1/(Tks+c1)+d1*log(Tks)+e1*Tks^f1);
pv2=exp(a2+b2/(Tks+c2)+d2*log(Tks)+e2*Tks^f2);
pv3=exp(a3+b3/(Tks+c3)+d3*log(Tks)+e3*Tks^f3);
pv4=exp(a4+b4/(Tks+c4)+d4*log(Tks)+e4*Tks^f4);
pv5=exp(a5+b5/(Tks+c5)+d5*log(Tks)+e5*Tks^f5);
pv6=exp(a6+b6/(Tks+c6)+d6*log(Tks)+e6*Tks^f6);

PV=[pv1 pv2 pv3 pv4 pv5]/100;

%cmolt=[mol/cm3]
cmolt=ctg./mmol;
% Evaluarea lui Ks : foc- fractia de carbon organic; logpoct-log(coef
de part. apa -octanol)
foc=0.01;
logpoct=[2.02 2.42 2.88 2.69 4.11];
kow=10.^logpoct;
Ks=0.63*foc*kow;
% Sw - solub. in apa [mg/dm3 H2O]
Sw=[0.800 1.100 0.150 0.520 0.060];
% Evaluarea lui alfa
alfa=(mmol./Sw)*55.55;
% fractia fazei gazoase; Rg=[cm3*atm/(mol*K)]
epsg=0.1;Rg=82.1;
% Moli de apa in volumul V (al unui kg de sol)
Mfa=ctagkg/18;
%caq=mol/cm3
caq=Mfa/V;
%Solutia de start:
molfo=sum(cmolt);
z0=(cmolt)/molfo;
xv0=[z0 molfo*V]';
%disp('xv0='); disp(xv0);
tol=1e-10;
xsol=nrcsol(xv0,'eqsis','jeqsis',tol);
Psol=1;%Presiune in sol
disp ('fractii in faza organica');
disp(' 1-C2H2Cl2; 2-C2HCl3; 3-C2Cl4; 4-Toluene; 5-sec-
B-Benzene ');
z=xsol(1:5);
disp(z');
% Fractii molare in faza gazoasa
for i=1:5
y(i)=PV(i)*z(i)/Psol;
end;
yaq=pv6/(Psol*100);
disp('fractia molara a comp. organici si a apei in faza gazoasa');
disp(' 1-C2H2Cl2; 2-C2HCl3; 3-C2Cl4; 4-Toluene; 5-sec-
B-Benzene apa');
disp([y yaq]);
% faza imiscibila, grame pe kg de sol
Mfo=xsol(6);
sumz=sum(z);
gfo=sum((z*Mfo)'.*mmol);
disp('faza imiscibila, grame pe kg de sol');
disp(gfo);

II.2.2 Algoritmi de tip quasi-Newton
Asa cum s-a vazut la paragraful anterior, metoda Newton-Raphson se
bazeaza pe matricea Jacobiana si deci cere, pentru un sistem de n variabile,
definirea celor n
2
derivate partiale ale sistemului de ecuatii. Pentru sistemele de
mari dimensiuni, acest lucru poate cere un mare consum de timp. Din acest motiv,
ali algoritmi evit definirea Jacobianului prin tehnici de evaluare a acestuia,
tehnici specifice fiecrui algoritm.
Algoritmul Broyden foloseste, ca punct de pornire, nu doar valorile de start
ale vectorului variabilelor ci si o prima aproximare a inversei matricii Jacobiene
(fie calculata de utilizator, pe baza scrierii derivatelor, fie matricea unitara
inmultita cu un scalar). Aceasta matrice este de obicei numita matricea Broyden.
Iata implementarea in MATLAB a acestui algoritm :
function[newxv,it]=broydnls(xv,fsysbr,nn,tol)
fr=zeros(nn,1);it=0;
% matricea Broyden initiala
br=eye(nn);
% prima evaluare a functiilor F (fsysbr)-utilizand solutia de start
fr=feval(fsysbr,xv,nn);
while norm(fr)>tol
it=it+1;
pr=-br*fr;
taubr=0.2;
% evaluarea noilor valori ale lui xv
xv1=xv+taubr*pr;
xv=xv1; oldfr=fr;
% evaluarea lui F utilizand noul xv
fr=feval(fsysbr,xv,nn);
%Aproximarea inversei Jacobianului utilizand algoritmul Broyden %
ybr=fr-oldfr;oldbr=br;
oyp=oldbr*ybr-pr;pb=pr'*oldbr;
for k=1:nn
for j=1:nn
mbr(k,j)=oyp(k)*pb(j);
end;
end;
% noua matrice Broyden
br=oldbr-mbr./(pr'*oldbr*ybr);
newxv=xv;
end;
Succesul algoritmului depinde de natura functiilor si de cat de buna este
aproximarea initiala a valorilor variabilelor (vectorul de start). O problema
importanta in ceea ce priveste timpul de calcul este aproximarea scalarului taubr
de obicei se prefera o valoare constanta (mai sus este fixat la 0.2).
Pentru sistemul de la exemplul II.1, fisierul de tip functie care contine
sistemul de ecuatii este practic identic cu cel de la metoda Newton Raphson :
function F=fsysbr(xv, nn)
x=xv(1);y=xv(2);
F=zeros(nn,1);
F(1)=x^3+x*y^2-9.375;
F(2)=x*y+y^2-7;


Iar apelarea este asemanatoare :
[solsis iteratii]=broydnls([1 1]','fsysbr',2,0.0001);
x=solsis(1);
y=solsis(2);
disp('solutia sistemului de ecuatii neliniare');
disp('x, y =');disp([x y]);
disp('numar iteratii:');disp(iteratii);


In cazul MATLAB, solverul pentru sisteme de ecuatii neliniare este functia
fsolve, functie care face parte din toolboxul de optimizari (optimization
toolbox).
fsolve: rezolvarea unui sistem de ecuatii neliniare
Cauta solutia unui sistem de ecuatii neliniare definit prin F(x) = 0, unde x
este vectorul variabilelor iar F(x) is vectorul care reuneste ecuatiile sitemului
neliniar. Sintaxe posibile (selectie!):
x = fsolve(fun,x0)
Pentru rezolvarea sistemului de ecuatii se foloseste ca solutie de start x0 iar
ecuatiile care compun sistemul de ecuatii este definit in fisierul fun.
x = fsolve(fun,x0,options)
Rezolva sistemul de ecuatii neliniare utilizand optiunile definite in options
iar pentru stabilirea acestor optiuni se foloseste functia optimset.
[x,fval] = fsolve(fun,x0, options)
Returneaza in plus si valorile functiilor pentru vectorul ce constituie solutia
sistemului de ecuatii neliniare.
Exemplul II.1 solutionat prin utilizarea fsolve:

X = [1 1]'; % Valori de start
options=optimset('Display','iter'); % Optiuni pentru afisare rezultate
[xsol,fval] = fsolve('fsys1',X,options) % apelare fsolve

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