duvida no programa de matlab _ fminsearch
3 participantes
Página 1 de 1
duvida no programa de matlab _ fminsearch
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 alguem 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);
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 alguem 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);
elcaco- Mensagens : 5
Data de inscrição : 18/12/2008
Re: duvida no programa de matlab _ fminsearch
elcaco escreveu: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 alguem 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(:,
% 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(=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(=r(;
Há pelo menos dois erros: escreve-se fminsearch (sem 'i' após o f); depois a função chamada por fminsearch tem de ter como parâmetro de entrada um vector linha, neste caso com três elementos, e não três valores escalares, como considerou. Assim, seria qualquer coisa do género
function valor_fo=fo(k) %função que nos vai calcular o erro
k1=k(1);
k2=k(2);
k3=k(3);
......
Volto a ter outro problema..!!!
Antes de mais gostaria de agradecer, pela correcção de à pouco, relativo aos erros que tinha no meu programa.
Contudo, ao corrigir esses mesmo erros, apareceu-mo um outro.... (para variar)..
??? Undefined function or method 'cianeto' for input arguments of type 'double'.
Error in ==> cianeto_p_principal>fo at 29
[t,c]=cianeto(k)
Error in ==> fminsearch at 205
fv(:,1) = funfcn(x,varargin{:});
Error in ==> cianeto_p_principal at 15
k_bom=fminsearch(@fo,k_inicial);
A minha duvida é saber se estou a chamar correctamente a função..
E se estiver, qual deverá ser o erro ou o problema existente..
Peço imensa desculpa pelo incomodo..
Mas ainda estou muito verdinho no Matlab...
cumprimentos;
elcaco
Obrigado..
______________________________________________________________________________________
______________________________________________________________________________________
function p_principal ()
clc
clear all
close all
global k1 k2 k3 k10 k20 k30
k10=1e-2;
k20=1e-2;
k30=1e-2;
k_inicial=[k10 k20 k30]; %estimativas iniciais de k1 k2 e k3
k_bom=fminsearch(@fo,k_inicial);
[t,c]=cianeto(k);
%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(k) %função que nos vai calcular o erro
k1=k(1)
k2=k(2)
k3=k(3)
[t,c]=cianeto(k)
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 %calculo do erro
_____________________________________________________________________________________________
_____________________________________________________________________________________________
function [t,c]=cianeto(k)
clc
clear all
close all
global nc nr V k1 k2 k3 k
%___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 k
dcdt=zeros(8,1);
%____REACÇÕES____
r(1)=-k(1)*c(1)*c(2);
r(2)=-k(1)*c(1)*c(2)-(k(3)*c(2)*c(5));
r(3)=+k(1)*c(1)*c(2)-(k(2)*c(3)*c(4)^2);
r(4)=2*k(1)*c(1)*c(2)-(2*k(2)*c(3)*c(4)^2);
r(5)=k(2)*c(3)*c(4)^2-(k(3)*c(2)*c(5));
r(6)=k(2)*c(3)*c(4)^2+k(3)*c(2)*c(5);
r(7)=k(3)*c(2)*c(5);
r(8)=k(3)*c(2)*c(5);
%______________________
% 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
Contudo, ao corrigir esses mesmo erros, apareceu-mo um outro.... (para variar)..
??? Undefined function or method 'cianeto' for input arguments of type 'double'.
Error in ==> cianeto_p_principal>fo at 29
[t,c]=cianeto(k)
Error in ==> fminsearch at 205
fv(:,1) = funfcn(x,varargin{:});
Error in ==> cianeto_p_principal at 15
k_bom=fminsearch(@fo,k_inicial);
A minha duvida é saber se estou a chamar correctamente a função..
E se estiver, qual deverá ser o erro ou o problema existente..
Peço imensa desculpa pelo incomodo..
Mas ainda estou muito verdinho no Matlab...
cumprimentos;
elcaco
Obrigado..
______________________________________________________________________________________
______________________________________________________________________________________
function p_principal ()
clc
clear all
close all
global k1 k2 k3 k10 k20 k30
k10=1e-2;
k20=1e-2;
k30=1e-2;
k_inicial=[k10 k20 k30]; %estimativas iniciais de k1 k2 e k3
k_bom=fminsearch(@fo,k_inicial);
[t,c]=cianeto(k);
%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(k) %função que nos vai calcular o erro
k1=k(1)
k2=k(2)
k3=k(3)
[t,c]=cianeto(k)
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 %calculo do erro
_____________________________________________________________________________________________
_____________________________________________________________________________________________
function [t,c]=cianeto(k)
clc
clear all
close all
global nc nr V k1 k2 k3 k
%___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 k
dcdt=zeros(8,1);
%____REACÇÕES____
r(1)=-k(1)*c(1)*c(2);
r(2)=-k(1)*c(1)*c(2)-(k(3)*c(2)*c(5));
r(3)=+k(1)*c(1)*c(2)-(k(2)*c(3)*c(4)^2);
r(4)=2*k(1)*c(1)*c(2)-(2*k(2)*c(3)*c(4)^2);
r(5)=k(2)*c(3)*c(4)^2-(k(3)*c(2)*c(5));
r(6)=k(2)*c(3)*c(4)^2+k(3)*c(2)*c(5);
r(7)=k(3)*c(2)*c(5);
r(8)=k(3)*c(2)*c(5);
%______________________
% 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
elcaco- Mensagens : 5
Data de inscrição : 18/12/2008
Re: duvida no programa de matlab _ fminsearch
Para evitar dúvidas com o uso de funções faça o seguinte: coloque cada uma delas num ficheiro à parte e dê-lhe o nome da função respectiva. Assim pode chamar qualquer função a partir do corpo do programa principal ou de qualque outra função sem preocupações de maior.
Acentuação no MATLAB
Tenho interesse de saber como acentuar palavras no matlab no modo m-file por exemplo "simulação;área"
Solange Maria Krug- Mensagens : 2
Data de inscrição : 05/01/2009
Idade : 35
Localização : Blumenau
Tópicos semelhantes
» Dúvida com Matlab
» Minimização utilizando fminsearch
» como terminar um programa
» Trabalhar com video no MATLAB
» trabalho de matlab
» Minimização utilizando fminsearch
» como terminar um programa
» Trabalhar com video no MATLAB
» trabalho de matlab
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos