duvida no programa de matlab _ fminsearch - Tópico posteado por elcaco
Página 1 de 1
duvida no programa de matlab _ fminsearch - Tópico posteado por elcaco
Desculpa colocar aqui esta duvida , mas não sabia em que secção é que deveria colocar.
Gostaria de obter alguma ajuda no programa que estou a tentar fazer.
O meu objectivo é minimizar (optimizar) os valores de k1,k2,k3 usando a função fminsearch do Matlab.
Para tal, criei duas m-files, uma contendo a função fminsearch e a função objectivo, e a outra contém o algoritmo para o
calculo do historico de concentrações.
Contudo as duas m-files estão interligadas, porque para obtermos o historico (perfil) de concentrações, é necessário
optimizar os valores de k1,k2,k3.
O meu problema é que, ainda não tenho grande experiencia com matlab, e aparece-me no programa o seguinte erro:
??? Input argument "k2" is undefined.
Error in ==> cianeto_p_principal>fo at 31
[t,c]=cianeto(k1,k2,k3)
Error in ==> fminsearch at 205
fv(:,1) = funfcn(x,varargin{:});
Error in ==> cianeto_p_principal at 15
[k_bom]=fminsearch(@fo,[k10 k20 k30]);
Por isso procuro alguém que me possa ajudar a resolver o meu programa.
Se alguém tiver algum tempo que possa dispensar para me ajudar, agradecia imenso.
Envio-vos de seguida as respectivas m-files..
Se puderem tentem correr no vosso computador e verificar qual o erro do programa.
Obrigado pela vossa cooperação.
Vasco Mendes
________________________________________________________________________
________________________________________________________________________
function p_principal ()
clc
clear all
close all
global k10 k20 k30 t c cianeto
k10=1e-2;
k20=2e-2;
k30=1e-2;
%k_inicial=[k10 k20 k30]; %estimativas iniciais de k1 k2 e k3
[k_bom]=fminsearch(@fo,[k10 k20 k30]);
[t,c]=cianeto(k_bom);
function valor_fo=fo(k1,k2,k3) %k2 k3] %função que nos vai calcular o erro
global cianeto t c
[t,c]=cianeto(k1,k2,k3)
c5_final=c(end,5) %ultimo valor de c6 ...
c5_exp=0.1 %mol/dm3 valor obtido experimentalmente .... no final do processo
valor_fo=((abs(c5_final-c5_exp))/c5_exp)*100 %calculo do erro
_________________________________________________________________
_________________________________________________________________
function [t,c]=cianeto(k1,k2,k3)
clc
clear all
close all
global nc nr V 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(:,
function [dcdt]=reaccao(t,c)
global k nc nr V k1 k2 k3 k
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
Gostaria de obter alguma ajuda no programa que estou a tentar fazer.
O meu objectivo é minimizar (optimizar) os valores de k1,k2,k3 usando a função fminsearch do Matlab.
Para tal, criei duas m-files, uma contendo a função fminsearch e a função objectivo, e a outra contém o algoritmo para o
calculo do historico de concentrações.
Contudo as duas m-files estão interligadas, porque para obtermos o historico (perfil) de concentrações, é necessário
optimizar os valores de k1,k2,k3.
O meu problema é que, ainda não tenho grande experiencia com matlab, e aparece-me no programa o seguinte erro:
??? Input argument "k2" is undefined.
Error in ==> cianeto_p_principal>fo at 31
[t,c]=cianeto(k1,k2,k3)
Error in ==> fminsearch at 205
fv(:,1) = funfcn(x,varargin{:});
Error in ==> cianeto_p_principal at 15
[k_bom]=fminsearch(@fo,[k10 k20 k30]);
Por isso procuro alguém que me possa ajudar a resolver o meu programa.
Se alguém tiver algum tempo que possa dispensar para me ajudar, agradecia imenso.
Envio-vos de seguida as respectivas m-files..
Se puderem tentem correr no vosso computador e verificar qual o erro do programa.
Obrigado pela vossa cooperação.
Vasco Mendes
________________________________________________________________________
________________________________________________________________________
function p_principal ()
clc
clear all
close all
global k10 k20 k30 t c cianeto
k10=1e-2;
k20=2e-2;
k30=1e-2;
%k_inicial=[k10 k20 k30]; %estimativas iniciais de k1 k2 e k3
[k_bom]=fminsearch(@fo,[k10 k20 k30]);
[t,c]=cianeto(k_bom);
function valor_fo=fo(k1,k2,k3) %k2 k3] %função que nos vai calcular o erro
global cianeto t c
[t,c]=cianeto(k1,k2,k3)
c5_final=c(end,5) %ultimo valor de c6 ...
c5_exp=0.1 %mol/dm3 valor obtido experimentalmente .... no final do processo
valor_fo=((abs(c5_final-c5_exp))/c5_exp)*100 %calculo do erro
_________________________________________________________________
_________________________________________________________________
function [t,c]=cianeto(k1,k2,k3)
clc
clear all
close all
global nc nr V 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(:,
function [dcdt]=reaccao(t,c)
global k nc nr V k1 k2 k3 k
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
Tópicos semelhantes
» Editor de audio
» Programa de gravação
» Programa de gravação
» Programa Findbugs
» Programa para construir um MP3
» Programa de gravação
» Programa de gravação
» Programa Findbugs
» Programa para construir um MP3
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
Ter Set 24, 2019 1:16 pm por jpmartins
» Artigo Bitcoin
Ter Set 24, 2019 1:13 pm por jpmartins
» Novo site para desportistas / New site for athletes
Ter Dez 04, 2018 8:19 am por Admin
» Check used port with the command line
Ter Dez 04, 2018 8:10 am por Admin
» Check the port where mariaDB is running
Seg Dez 03, 2018 4:59 am por Admin
» Check the linux version
Seg Dez 03, 2018 3:12 am por Admin
» Granting rights to a database for a user
Qui Nov 29, 2018 2:04 am por Admin
» Create new user
Qui Nov 29, 2018 2:01 am por Admin
» Change level of password security level
Qui Nov 29, 2018 1:59 am por Admin