Documente Academic
Documente Profesional
Documente Cultură
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)
[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
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
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:
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
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
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
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
1
C
0.5
0.5 k t 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
r 0.092 Br2
1.5
mol
L minuto
[Br2], mol/L
0
10
20
30
40
50
0.500
0.313
0.165
0.141
0.085
0.080
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
11
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