Aplicações Informáticas para Engenharia
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

duvida no programa de matlab _ fminsearch

3 participantes

Ir para baixo

duvida no programa de matlab _ fminsearch Empty duvida no programa de matlab _ fminsearch

Mensagem  elcaco Sáb 20 Dez 2008, 11:29

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);

elcaco

Mensagens : 5
Data de inscrição : 18/12/2008

Ir para o topo Ir para baixo

duvida no programa de matlab _ fminsearch Empty Re: duvida no programa de matlab _ fminsearch

Mensagem  Administrador Sáb 20 Dez 2008, 15:20

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(:,Cool



% 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(Cool=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(Cool=r(Cool;

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);

......
Administrador
Administrador
Admin

Mensagens : 221
Data de inscrição : 23/11/2007

https://aipe-fctuc.forumeiros.com

Ir para o topo Ir para baixo

duvida no programa de matlab _ fminsearch Empty Volto a ter outro problema..!!!

Mensagem  elcaco Sáb 20 Dez 2008, 18:28

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

elcaco

Mensagens : 5
Data de inscrição : 18/12/2008

Ir para o topo Ir para baixo

duvida no programa de matlab _ fminsearch Empty Re: duvida no programa de matlab _ fminsearch

Mensagem  Administrador Dom 21 Dez 2008, 05:39

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.
Administrador
Administrador
Admin

Mensagens : 221
Data de inscrição : 23/11/2007

https://aipe-fctuc.forumeiros.com

Ir para o topo Ir para baixo

duvida no programa de matlab _ fminsearch Empty Acentuação no MATLAB

Mensagem  Solange Maria Krug Seg 05 Jan 2009, 10:57

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

Ir para o topo Ir para baixo

duvida no programa de matlab _ fminsearch Empty Re: duvida no programa de matlab _ fminsearch

Mensagem  Administrador Sex 30 Jan 2009, 19:29

Não se acentuam . . . .
Administrador
Administrador
Admin

Mensagens : 221
Data de inscrição : 23/11/2007

https://aipe-fctuc.forumeiros.com

Ir para o topo Ir para baixo

duvida no programa de matlab _ fminsearch Empty Re: duvida no programa de matlab _ fminsearch

Mensagem  Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos