Sunteți pe pagina 1din 13

CINTICA QUMICA APLICADA

SISTEMAS HOMOGNEOS
Prctica C
Comparacin Mtodos Integral y Diferencial
Resolver el siguiente Ejercicio utilizando MatLab y aplicando los mtodos integral y
diferencial (La primera parte se ha realizado en la prctica anterior)

Neyens ha estudiado la cintica de la brominacin del m-xileno a 17 C, partiendo


de una disolucin de bromo en m-xileno puro y determinando la concentracin de bromo
libre en funcin del tiempo. Los resultados obtenidos son:
t, minutos
0.00
2.25
4.50
6.33
8.00
10.25
12.00
13.50
15.60
17.85

[Br2], mol/L
0.3335
0.2965
0.2660
0.2450
0.2255
0.2050
0.1910
0.1794
0.1632
0.1500

t, minutos
19.60
27.00
30.00
38.00
41.00
45.00
47.00
57.00
63.00

[Br2], mol/L
0.1429
0.1160
0.1053
0.0830
0.0767
0.0705
0.0678
0.0553
0.0482

Determinar la ecuacin cintica que ajusta estos resultados.


Solucin:
Aunque la reaccin que tiene lugar es:

C6 H 4 CH 3 2 Br2 C6 H 3 Br CH 3 2 BrH
en el CRC Handbook se encuentra que la densidad del m-xileno a 20 C es 0.8642 g/cm3 y su peso
molecular 106.17, por tanto la concentracin de m-xileno en esta sustancia pura es:
864.2/106.7 = 8.1 mol/L, apreciablemente superior a la concentracin inicial de bromo:
8.1/0.3335 = 24.3, por lo que se tratar el sistema anterior como una reaccin de un reactivo,
admitiendo que la concentracin de m-xileno permanece prcticamente constante.
En primer lugar se prepara el fichero de datos:
File E2.m
0.0000,0.3335
2.2500,0.2965
4.5000,0.2660
6.3300,0.2450
8.0000,0.2255
10.2500,0.2050
12.0000,0.1910
13.5000,0.1794
15.6000,0.1632
17.8500,0.1500
1

19.6000,0.1429
27.0000,0.1160
30.0000,0.1053
38.0000,0.0830
41.0000,0.0767
45.0000,0.0705
47.0000,0.0678
57.0000,0.0553
63.0000,0.0482
Se aplica el mtodo integral adaptando el fichero principal de la prctica anterior, solo hay que
cambiar el nombre del fichero que se lee:
File metodo_integral.m
% orden para reaccin de un reactivo
global t c c0 km s
dat=dlmread('E2.m');
t=dat(:,1);
c=dat(:,2);
c0=dat(1,2);
n=fminbnd('desviacion_estandar',0.5,3);
desviacin_estandar(n);
n
km
s

ventana de comandos:
>> metodo-integral
n = 1.5408
km = 0.0982
s = 0.0016
que sugiere orden 1.5, se aplica este orden adaptando el fichero calculos_definitivos:
File calculos_definitivos.m
% orden para reaccin de un reactivo
global t c c0 km s
dat=dlmread('E2.m');
t=dat(:,1);
n=1.5;
for i=2:2
c=dat(:,i);
c0=dat(1,i);
s=desviacin_estandar(n);
km
s
end

ventana de comandos:
>> calculos_definitivos
km = 0.0919
s = 0.0020
es decir: n = 1,5 y k = 0.092 0.002

L0.5/(mol0.5 minuto)
2

Para la aplicacin del mtodo diferencial, en primer lugar se calculan las derivadas por incrementos
finitos:

para Cm

Ci Ci 1
2

rm

C Ci Ci 1

ti 1 ti
t

Se preparan los ficheros:


File metodo_diferencial.m
% orden para reaccin de un reactivo. Metodo diferencial
global cm rm m s
dat=dlmread('E2.m');
t=dat(:,1);
c=dat(:,2);
c0=dat(1,2);
m=length(t);
for i=1:m-1
cm(i)=(c(i)+c(i+1))/2;
rm(i)=(c(i)-c(i+1))/(t(i+1)-t(i));
end
p0=[1.5,0.1];
p=fminsearch('minimo_diferencial',p0);
minimo_diferencial(p);
p
s
donde el fichero minimo_diferencial minimiza la desviacin entre los valores calculados de la
velocidad de reaccin con la ecuacin potencial supuesta y los estimados a partir de los datos
experimentales por incrementos finitos:

cal

rm

m2

File minimo_diferencial.m
function s=minimo_diferencial(p)
global cm rm m s
rc=p(2).*cm.^p(1);
s=(sum((rc-rm).^2)/(m-2))^0.5;
Ventana de comandos:
>> metodo_diferencial
p = 1.5166 0.0951
s = 5.44 e -004
es decir:

r = 0.0951 c1.5166 0.00055

mol/(L minuto)

que tambin sugiere orden 1.5, para imponer este orden se prepara el fichero:

File diferencial_definitivo.m
% orden para reaccin de un reactivo. Metodo diferencial
dat=dlmread('E2.m');
t=dat(:,1);
c=dat(:,2);
c0=dat(1,2);
m=length(t);
for i=1:m-1
cm(i)=(c(i)+c(i+1))/2;
rm(i)=(c(i)-c(i+1))/(t(i+1)-t(i));
end
n=1.5;
k=rm./(cm.^1.5);
km=sum(k)/(m-1);
s=(sum((k-km).^2)/(m-2))^0.5;
km
s
Ventana de comandos:
>> diferencial_definitivo
km = 0.0905
s = 0.0100
es decir:
n = 1.5 y

k = 0.09 0.01

L0.5/(mol0.5 minuto), coincidente con el mtodo integral.

Sin embargo, el clculo de la velocidad de reaccin por incrementos finitos amplifica


considerablemente los errores experimentales, como se observa comparando los resultados de
ambos mtodos. Una aplicacin ms adecuada del mtodo diferencial consiste en ajustar los
resultados concentracin-tiempo a algn tipo de funcin que despus por derivacin permita estimar
las velocidades de reaccin. Uno de los tipos de funciones ms utilizados son los polinomios, que
pueden obtenerse por regresin polinomial, que es el mtodo utilizado por la funcin polyfit
incorporada en MatLab, as mediante el fichero:
File ajuste_polinomio.m
% ajuste datos experimentales a un polinomio de orden p
dat=dlmread('E2.m');
t=dat(:,1);
c=dat(:,2);
m=length(t);
p=4;
a=polyfit(t,c,p);
for i=1:m
ccal(i)=0;
for j=1:p+1
ccal(i)=ccal(i)+a(j)*t(i)^(p+1-j);
end
end
4

s=(sum((c-ccal).^2)/(m-p-1))^0.5;
a
s
plot(t,c,'o',t,ccal');
xlabel('t, minutos');
ylabel('c, mol/L');

Ventana de comandos :
>> ajuste_polinomio
a = 0.0000000409 -0.00000706
s = 0.0016

0.0004745

-0.01659

0.3323

que como puede observarse ajusta bien los resultados experimentales.


El fichero anterior puede modificarse para aplicar al mismo tiempo el mtodo diferencial, teniendo
en cuenta que:

C a1 t p a2 t p 1 .... a p t a p 1
r

dC
p a1 t p 1 p 1 a2 t p 2 .... a p
dt

y que suponiendo funcin potencial:

r k Cn

ln r ln k n ln C

File ajuste_polinomio_diferencial.m
% ajuste datos experimentales a un polinomio de orden p
% aplicacion metodo diferencial
dat=dlmread('E2.m');
t=dat(:,1);
c=dat(:,2);
m=length(t);
p=4;
a=polyfit(t,c,p);
for i=1:m-1
ccal(i)=0;
for j=1:p+1
ccal(i)=ccal(i)+a(j)*t(i)^(p+1-j);
end
dccal(i)=0;
for j=1:p
dccal(i)=dccal(i)-(p+1-j)*a(j)*t(i)^(p-j);
end
end
b=polyfit(log(ccal),log(dccal),1);
n=b(1);
k=exp(b(2));
n
k
plot(log(ccal),log(dccal),'o',log(ccal),log(k.*ccal.^n));
xlabel('ln(c)');
ylabel('ln(r)');
Observese que la funcin polyfit puede utilizarse tambin para una regresin lineal dndole como
tercer parmetro de entrada un uno, polinomio de orden uno. Sin embargo el programa anterior no
funciona bien porque en el ltimo punto la velocidad de reaccin se hace negativa, suprimiendo este
dato, tal como esta en el programa anterior: for i=1:m-1
Ventana de comandos:
>> ajuste_polinomio_diferencial
n = 1.51502079467362
k = 0.09432211603331

que coincide aceptablemente con los resultados anteriores y tambin sugiere orden 1.5, imponiendo
este valor en la ecuacin potencial:

r
C1.5

pueden aadirse dos instrucciones al programa anterior:


k15=sum(dccal./ccal.^1.5)/length(ccal)
s15=(sum((k15-dccal./ccal.^1.5).^2)/(length(ccal)-2))^0.5
que conduce a:
k15 = 0.0918
s15 = 0.0057
es decir: n = 1.5 y k = 0.092 0.006 L0.5/(mol0.5 minuto)
que coincide con el resultado obtenido por el mtodo integral.
Simulacin de la ecuacin integrada para orden 1.5:
La ecuacin integrada para orden 1.5 es

1
C
0.5
0.5 k t C0

que permite simular el sistema con el valor obtenido de k = 0.092 y c0

File simulacion.m
% Simulacion del ejemplo 2
dat=dlmread('E2.m');
t=dat(:,1);
c=dat(:,2);
c0=dat(1,2);
ccal=(1./((0.5*0.092).*t+1/c0^0.5)).^2;
plot(t,c,'o',t,ccal);
xlabel('t, min.');
ylabel('c, mol/L');
Ventana de comandos :
>> simulacion

Algoritmos para la aplicacin del mtodo diferencial


La aplicacin del mtodo diferencial tiene el problema de que al diferenciar los datos se
puede amplificar mucho los errores experimentales, sobre todo si se aplica el mtodo de los
incrementos finitos o se tiende a mejorar el ajuste de los resultados incluso sin tener en cuenta el
error experimental de los datos. As, por ejemplo, si para el mismo sistema anterior se consideran
los siguientes datos, que se han creado a partir de la ecuacin cintica obtenida anteriormente:

r 0.092 Br2

1.5

mol
L minuto

aplicando un error experimental alto, del 10 % en uno u otro sentido alternativamente.

Brominacin del m-xileno a 17 C


t, minutos

[Br2], mol/L

0
10
20
30
40
50

0.500
0.313
0.165
0.141
0.085
0.080

Evidentemente el ajuste a un polinomio de estos resultados puede ser perfecto utilizando un


polinomio de 5 orden que tiene seis parmetros, en la ventana de comandos de Matlab utilizando
polyfit se hara de la siguiente forma:
>> t=linspace(0,50,6);
>>c=[0.5,0.313,0.165,0.141,0.085,0.080];
>>dlmwrite(E3.m,[t,c]);
>>a=polyfit(t,c,5);
>>t2=linspace(0,50,51) ;
>>c2=a(1).*t2.^5+a(2).*t2.^4+a(3).*t2.^3+a(4).*t2.^2+a(5).*t2+a(6) ;
>>plot(t,c,o,t2,c2)
como se observa en la figura, el ajuste es perfecto, el polinomio pasa por todos los puntos
experimentales, como tenia que ser puesto que hay seis puntos experimentales y el polinomio tiene
seis parmetros, sin embargo la forma de la lnea pone claramente de manifiesto que el ajuste no
debe ser bueno con respecto al fenmeno fsico considerado y sobre todo si el polinomio se va a
utilizar para el clculo de las pendientes de la lnea, velocidad de reaccin, ya que esta pendiente
experimenta unos cambios incluso de signo, que claramente no corresponden al fenmeno qumico
considerado sino al mtodo de ajuste utilizado.

Para conseguir un ajuste ms correcto para el fenmeno que tiene lugar, debera procurarse
que los cambios de pendiente fueran mucho ms continuos y suaves y en este sentido trabajan los
algoritmos ms elaborados utilizados en la actualidad. Como ejemplo de los principios utilizados
por estos algoritmos puede prepararse un programa utilizando la funcin fminsearch de MatLab
que trate de minimizar no solo las diferencias entre las concentraciones calculadas y las
experimentales sino tambin la derivada segunda de la concentracin con respecto al tiempo que es
una medida de la velocidad de cambio de la velocidad de reaccin. Ambos objetivos se unen en la
funcin a minimizar utilizando un factor que multiplica al segundo: alfa y que da idea del peso
relativo que se le da a ambos objetivos. Evidentemente con alfa = 0, el ajuste debe corresponder a la
regresin polinomial y coincidir con el obtenido con polyfit.
Como valor inicial para fminsearch se utiliza la recta que pasa por los dos primeros puntos:
File ajuste_polinomio_suavizado.m
% ajuste datos experimentales a un polinomio de orden p
% suavizando los cambios de pendiente
global t c m p alfa a1 t2 c3
dat=dlmread('E3.m');
t=dat(:,1);
c=dat(:,2);
m=length(t);
p=5;
a0(p+1)=c(1);
a0(p)=(c(2)-c(1))/t(2);
for i=1:p-1
a0(i)=0;
end
alfa=0;
a1=fminsearch('minimo_suavizado',a0);
c3=a1(1).*t2.^5+a1(2).*t2.^4+a1(3).*t2.^3+a1(4).*t2.^2+a1(5).*t2+a1(6);
plot(t,c,'o',t2,c3);
File minimo_suavizado.m
function s=minimo_suavizado(a)
global t c m p alfa
for i=1:m
ccal(i)=0;
for j=1:p+1
ccal(i)=ccal(i)+a(j)*t(i)^(p+1-j);
end
des(i)=c(i)-ccal(i);
dccal(i)=0;
for j=1:p-1
dccal(i)=dccal(i)+(p+1-j)*(p-j)*a(j)*t(i)^(p-1-j);
end
end
% sum(des.^2)
% sum(dccal.^2)
s=sum(des.^2)+alfa*sum(dccal.^2);
Para alfa = 1000
sum(des.^2) = 0.00102259859825
sum(dccal.^2) = 8.872068151834205e-007
10

Obsrvese como a medida que se le da ms peso a minimizar la segunda derivada, los


cambios de pendiente se suavizan apreciablemente, aunque el factor alfa indica el peso de la
segunda derivada en el objetivo perseguido, su valor debe interpretarse considerando los de los dos
sumatorios incluidos en el objetivo a minimizar, que para el ltimo caso considerado, alfa = 1000,
son:

11

Funcin objetivo = sum(des.^2) + 1000*sum(dccal.^2) = 0.00102 + 0.00089 = 0.00191


Lo que implica que ambos aspectos: ajuste a los resultados experimentales y minimizar la segunda
derivada tienen un peso semejante en el resultado final.

12

Trabajo de Casa:
Aplicar el mtodo diferencial al primer ejemplo de la prctica anterior, utilizando polinomios de 3
a 5 orden para ajustar los resultados concentracin-tiempo a las tres temperaturas consideradas.
Comparar los resultados obtenidos por ambos mtodos.

13

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