Ir para conteúdo
Fórum Script Brasil
  • 0

duvida no programa de matlab_ fminsearch


elcaco

Pergunta

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 elcaco
Link 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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...