elcaco Postado Dezembro 20, 2008 Denunciar Share Postado Dezembro 20, 2008 (editado) Boa!!!gostaria de obter alguma ajuda relativa ao prgrama que estou a fazer...O meu objectivo é optimizar os valores de k1, k2 e k3Para 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 9k_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 MendesObrigado__________________________________________________________________________________________________________________________________________________________________________________________________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 k3k_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 processovalor_fo=((abs(c6_final-c6_exp))/c6_exp)*100______________________________________________________________________________________________________________________________________________________________________________________________________function [t,c]=cianeto(k1,k2,k3) clcclear allclose allglobal nc nr V k1 k2 k3%___CONDIÇÕES INICIAIS DE OPERAÇÃO_____%ca0=0.5; %mol/dm3cb0=1; %mol/dm3cc0=0; %mol/dm3cd0=0.1; %mol/dm3ce0=0; %mol/dm3cf0=0; %mol/dm3ci0=0; %mol/dm3cj0=0; %mol/dm3%CONSTANTES CINÉTICAS considerando reacção pseudo primeira ordemV=5; %(m3) volume do reactornc=8; % nºde componentestempo=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 k3dcdt=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); Editado Dezembro 20, 2008 por elcaco Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Jhonas Postado Janeiro 5, 2009 Denunciar Share Postado Janeiro 5, 2009 http://www.mathworks.com/access/helpdesk/h...ttonName=Searchabraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
elcaco
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);
Editado por elcacoLink para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.