Ir para conteúdo
Fórum Script Brasil

elcaco

Membros
  • Total de itens

    3
  • Registro em

  • Última visita

Tudo que elcaco postou

  1. Boa!!! gostaria de obter alguma ajuda relativa ao prgrama que estou a fazer... O meu objectivo é optimizar os valores de k1, k2 e k3 Para tal utilizei a função FMINSEARCH. Criei duas m-files, uma para optimizar os valores de k1 k2 k3, e outra, onde através dos k optimizados vai resolver a ode15s. O meu problema é que quando corro o matlab aparece-me o seguinte erro: ??? Undefined function or method 'fiminsearch' for input arguments of type 'function_handle'. Error in ==> cianeto_p_principal at 9 k_bom=fiminsearch(@fo,k_inicial); Gostaria que me ajudassem a resolver este problema.. uma vez que não sei porque me esta a dar sempre este erro.. Será que alguém tem alguma ideia do que seja? E como resolvo ? Para tal envio em seguida as duas m-files correspondentes ao problema.. se alguém me puder ajudar agradecia. Cumprimentos; Vasco Mendes Obrigado _________________________________________________________________________________________________ _________________________________________________________________________________________________ function p_principal () % k10=1e-1; % k20=1e-2; % k30=1e-1; k_inicial=[1e-1 1e-1 1e-1]; %estimativas iniciais de k1 k2 e k3 k_bom=fiminsearch(@fo,k_inicial); [t,c]=cianeto(k_bom); % plot(t,ca,t,cb,t,cc,t,cd,t,ce,t,cf,t,ci,t,cj,'LineWidth',2) % legend({'Ca','Cb','Cc','Cd','Ce','Cf','Ci','Cj'},'FontWeight','bold','FontSize',12,'FontName','Arial') function [valor_fo]=fo(k1,k2,k3) %função que nos vai calcular o erro [t,c]=cianeto(k1,k2,k3) c6_final=c(end,6) %ultimo valor de c6 ... c6_exp=0.1 %mol/dm3 valor obtido experimentalmente .... no final do processo valor_fo=((abs(c6_final-c6_exp))/c6_exp)*100 ___________________________________________________________________________________________________ ___________________________________________________________________________________________________ function [t,c]=cianeto(k1,k2,k3) clc clear all close all global nc nr V k1 k2 k3 %___CONDIÇÕES INICIAIS DE OPERAÇÃO_____% ca0=0.5; %mol/dm3 cb0=1; %mol/dm3 cc0=0; %mol/dm3 cd0=0.1; %mol/dm3 ce0=0; %mol/dm3 cf0=0; %mol/dm3 ci0=0; %mol/dm3 cj0=0; %mol/dm3 %CONSTANTES CINÉTICAS considerando reacção pseudo primeira ordem V=5; %(m3) volume do reactor nc=8; % 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]; [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) % plot(t,ca,t,cb,t,cc,t,cd,t,ce,t,cf,t,ci,t,cj,'LineWidth',2) % legend({'Ca','Cb','Cc','Cd','Ce','Cf','Ci','Cj'},'FontWeight','bold','FontSize',12,'FontName','Arial') function [dcdt]=reaccao(t,c) global k nc nr V k1 k2 k3 dcdt=zeros(8,1); %____REACÇÕES____ r(1)=-k1*c(1)*c(2); r(2)=-k1*c(1)*c(2)-(k3*c(2)*c(5)); r(3)=+k1*c(1)*c(2)-(k2*c(3)*c(4)^2); r(4)=2*k1*c(1)*c(2)-(2*k2*c(3)*c(4)^2); r(5)=k2*c(3)*c(4)^2-(k3*c(2)*c(5)); r(6)=k2*c(3)*c(4)^2+k3*c(2)*c(5); r(7)=k3*c(2)*c(5); r(8)=k3*c(2)*c(5); %__BALANÇO DE MASSA___ for i=1:1:8 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);
  2. a questão não está em saber trabalhar com a função fminsearch... porque já apliquei esta função em varios problemas... a minha questão, neste caso, é como aplica-la neste problema específico..... de qualquer forma... obrigado pelo endereço que me forneceu.. cumprimentos; Vasco Mendes
  3. 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);
×
×
  • Criar Novo...