Optimizar os valores de constantes cineticas (k1, k2, k3)
2 participantes
Página 1 de 1
Optimizar os valores de constantes cineticas (k1, k2, k3)
Pretendo simular em matlab os perfis de concentração relativo ao mecanismo que se segue:
Mecanismo relativo à reacção de oxidação de cianetos:
k1
NaCN +NaOCl + H2O-----> CNCl + 2 NaOH
k2
CNCl + 2 NaOH -----> NaOCN +NaCl +H2O
k3
NaOCl + NaOCN + H2O -----> NaHCO3 + N2 + NaCl
Objectivo:
-calcular os valores de k1, k2, k3 (constante cinética) de cada reacção.
Dados do processo:
-concentração de cianeto total à entrada (NaCN)
-concentração de cianeto total à saída (NaCN)
-concentração de hipoclorito à entrada (NaOCl)
-concentração de soda caustica à entrada (NaOH)
-tempo de reacção
Em seguida mostro-vos o programa que fiz:
_____________________________________________________________________________________________
-Só que neste caso atribui valores a k1, k2, k3
-O que eu pretendo é optimizar os valores de k1, k2 e k3, tendo em conta os dados do processo.
-será que consigo determinar os valores k1, k2 e k3 , utilizando a função fminsearch??
-E como faço??
Agradecia a vossa ajuda...
Cumprimentos;
Vasco Mendes
Obrigado.
_PROGRAMA QUE REPRESENTA OS PERFIS DE CONCENTRAÇÃO AO LONGO DO TEMPO DE REACÇÃO__ COM k1 k2 k3 atribuidos___
%%%%%%%%%%%%%%%
function cianeto()
clc
clear all
close all
global nc nr V k1 k2 k3
%___CONDIÇÕES INICIAIS DE OPERAÇÃO_____%
ca0=1; %mol/dm3
cb0=0.8; %mol/dm3
cc0=0.5; %mol/dm3
cd0=0; %mol/dm3
ce0=0.4; %mol/dm3
cf0=0; %mol/dm3
ci0=0; %mol/dm3
cj0=0; %mol/dm3
ck0=0; %mol/dm3
%CONSTANTES CINÉTICAS considerando reacção pseudo primeira ordem
k1=1e-1; %(s-1)
k2=1e-1; %(s-1)
k3=1e-1; %(s-1)
V=5; %(m3) volume do reactor
nc=9; % nºde componentes
tempo=200; %(h) horas
%___ODE PARA PERFIL DE CONCENTRAÇÃO___%
tspan=[0 tempo];
c0=[ca0 cb0 cc0 cd0 ce0 cf0 ci0 cj0 ck0];
[t,c]=ode15s(@reaccao,tspan,c0);
n=length(t)
ca=c(:,1)
cb=c(:,2)
cc=c(:,3)
cd=c(:,4)
ce=c(:,5)
cf=c(:,6)
ci=c(:,7)
cj=c(:,8)
ck=c(:,9)
plot(t,ca,t,cb,t,cc,t,cd,t,ce,t,cf,t,ci,t,cj,t,ck,'LineWidth',2)
legend({'Ca','Cb','Cc','Cd','Ce','Cf','Ci','Cj','Ck'},'FontWeight','bold','FontSize',12,'FontName','Arial')
function [dcdt]=reaccao(t,c)
global k nc nr V k1 k2 k3
dcdt=zeros(9,1);
%____REACÇÕES____
r(1)=-k1*c(1)*c(2)*c(3);
r(2)=-k1*c(1)*c(2)*c(3)-k3*c(2)*c(6)*c(3);
r(3)=-k1*c(1)*c(2)*c(3)+k2*c(4)*c(5)^2-(k3*c(2)*c(6)*c(3)); %
r(4)=+k1*c(1)*c(2)*c(3)-(k2*c(4)*c(5)^2);
r(5)=2*k1*c(1)*c(2)*c(3)-(2*k2*c(4)*c(5)^2);
r(6)=k2*c(4)*c(5)^2-(k3*c(2)*c(6)*c(3));
r(7)=k2*c(4)*c(5)^2;
r(8)=k3*c(2)*c(6)*c(3);
r(9)=k3*c(2)*c(6)*c(3);
%__BALANÇO DE MASSA___
for i=1:1:9
dcdt(i)=r(i);
end
% dcdt(1)=r(1);
% dcdt(2)=r(2);
% dcdt(3)=r(3);
% dcdt(4)=r(4);
% dcdt(5)=r(5);
% dcdt(6)=r(6);
% dcdt(7)=r(7);
% dcdt(8)=r(8);
% dcdt(9)=r(9);
Mecanismo relativo à reacção de oxidação de cianetos:
k1
NaCN +NaOCl + H2O-----> CNCl + 2 NaOH
k2
CNCl + 2 NaOH -----> NaOCN +NaCl +H2O
k3
NaOCl + NaOCN + H2O -----> NaHCO3 + N2 + NaCl
Objectivo:
-calcular os valores de k1, k2, k3 (constante cinética) de cada reacção.
Dados do processo:
-concentração de cianeto total à entrada (NaCN)
-concentração de cianeto total à saída (NaCN)
-concentração de hipoclorito à entrada (NaOCl)
-concentração de soda caustica à entrada (NaOH)
-tempo de reacção
Em seguida mostro-vos o programa que fiz:
_____________________________________________________________________________________________
-Só que neste caso atribui valores a k1, k2, k3
-O que eu pretendo é optimizar os valores de k1, k2 e k3, tendo em conta os dados do processo.
-será que consigo determinar os valores k1, k2 e k3 , utilizando a função fminsearch??
-E como faço??
Agradecia a vossa ajuda...
Cumprimentos;
Vasco Mendes
Obrigado.
_PROGRAMA QUE REPRESENTA OS PERFIS DE CONCENTRAÇÃO AO LONGO DO TEMPO DE REACÇÃO__ COM k1 k2 k3 atribuidos___
%%%%%%%%%%%%%%%
function cianeto()
clc
clear all
close all
global nc nr V k1 k2 k3
%___CONDIÇÕES INICIAIS DE OPERAÇÃO_____%
ca0=1; %mol/dm3
cb0=0.8; %mol/dm3
cc0=0.5; %mol/dm3
cd0=0; %mol/dm3
ce0=0.4; %mol/dm3
cf0=0; %mol/dm3
ci0=0; %mol/dm3
cj0=0; %mol/dm3
ck0=0; %mol/dm3
%CONSTANTES CINÉTICAS considerando reacção pseudo primeira ordem
k1=1e-1; %(s-1)
k2=1e-1; %(s-1)
k3=1e-1; %(s-1)
V=5; %(m3) volume do reactor
nc=9; % nºde componentes
tempo=200; %(h) horas
%___ODE PARA PERFIL DE CONCENTRAÇÃO___%
tspan=[0 tempo];
c0=[ca0 cb0 cc0 cd0 ce0 cf0 ci0 cj0 ck0];
[t,c]=ode15s(@reaccao,tspan,c0);
n=length(t)
ca=c(:,1)
cb=c(:,2)
cc=c(:,3)
cd=c(:,4)
ce=c(:,5)
cf=c(:,6)
ci=c(:,7)
cj=c(:,8)
ck=c(:,9)
plot(t,ca,t,cb,t,cc,t,cd,t,ce,t,cf,t,ci,t,cj,t,ck,'LineWidth',2)
legend({'Ca','Cb','Cc','Cd','Ce','Cf','Ci','Cj','Ck'},'FontWeight','bold','FontSize',12,'FontName','Arial')
function [dcdt]=reaccao(t,c)
global k nc nr V k1 k2 k3
dcdt=zeros(9,1);
%____REACÇÕES____
r(1)=-k1*c(1)*c(2)*c(3);
r(2)=-k1*c(1)*c(2)*c(3)-k3*c(2)*c(6)*c(3);
r(3)=-k1*c(1)*c(2)*c(3)+k2*c(4)*c(5)^2-(k3*c(2)*c(6)*c(3)); %
r(4)=+k1*c(1)*c(2)*c(3)-(k2*c(4)*c(5)^2);
r(5)=2*k1*c(1)*c(2)*c(3)-(2*k2*c(4)*c(5)^2);
r(6)=k2*c(4)*c(5)^2-(k3*c(2)*c(6)*c(3));
r(7)=k2*c(4)*c(5)^2;
r(8)=k3*c(2)*c(6)*c(3);
r(9)=k3*c(2)*c(6)*c(3);
%__BALANÇO DE MASSA___
for i=1:1:9
dcdt(i)=r(i);
end
% dcdt(1)=r(1);
% dcdt(2)=r(2);
% dcdt(3)=r(3);
% dcdt(4)=r(4);
% dcdt(5)=r(5);
% dcdt(6)=r(6);
% dcdt(7)=r(7);
% dcdt(8)=r(8);
% dcdt(9)=r(9);
elcaco- Mensagens : 5
Data de inscrição : 18/12/2008
Re: Optimizar os valores de constantes cineticas (k1, k2, k3)
A função fminsearch pode ser usada quando temos uma função objectivo com várias variáveis independentes. No seu caso temos um sistema de equações diferenciais do 1º grau (e não equações lineares!!) mas, pelo que percebi do programa, não há uma função objectivo bem definida. Mesmo que ela possa ser definida, temos sempre o problema das equações diferenciais. Logo, não me parece que seja possível usar fminsearch para resolver este problema.
Parece-me que para resolver este problema terá de usar a toolbox de optimização "Optimization Toolbox", e depois eventualmente usar diferenças finitas para se livrar das derivadas.
Leia o help dessa toolbox e depois chame a "Optimization tool" escrevendo optimtool na linha de comandos do matlab para configurar e trabalhar com essa ferramenta de optimização. Como nunca necessitei de a usar, é apenas isto que lhe posso dizer antecipamente.
Boas programações,
Sérgio Cruz
Parece-me que para resolver este problema terá de usar a toolbox de optimização "Optimization Toolbox", e depois eventualmente usar diferenças finitas para se livrar das derivadas.
Leia o help dessa toolbox e depois chame a "Optimization tool" escrevendo optimtool na linha de comandos do matlab para configurar e trabalhar com essa ferramenta de optimização. Como nunca necessitei de a usar, é apenas isto que lhe posso dizer antecipamente.
Boas programações,
Sérgio Cruz
re
ok então vou ver esse comando... de qualquer forma obrigado na mesma..
cumprimentos;
Vasco mendes.
cumprimentos;
Vasco mendes.
elcaco- Mensagens : 5
Data de inscrição : 18/12/2008
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos