Cálculo de parámetros con fminsearch
Publicado por Ana (3 intervenciones) el 24/02/2014 16:48:50
Hola a todos, estoy intentando hacer un programa con Matlab que calcule los parámetros de 5 ecuaciones diferenciales. Para ello dispongo de unos datos experimentales y quiero que el valor de estos parámetros haga que la diferencia al cuadrado entre los datos experimentales y los calculados sea mínima, Para resolver las ecuaciones diferenciales he pensado en usar la funcißon ode 45, y para minimizar la diferencia al cuadrado entre los datos experimentales y los calculados, la función fminsearch.
El código no funciona y lo único que me dice Matlab es que hay un error en la función fminsearch, pero no consigo saber cual es... lo que realmente está pasando, yo creo, es que no me está calculando las soluciones de las ecuaciones diferenciales :(
El código que hasta ahora tengo es:
Fichero principal:
%Main program. It calculates the constants that make the squared
%difference between experimental and calculated data minimum
%It is required to introduce an initial value of each constant for starting
%the iteration
k0=[0.01,0.005,0.003,0,0];
options=optimset('Display','iter','MaxFunEvals',100000);
[k,fval,exitflag]=fminsearch('desv',k0,options);
Fichero 2
%This program is for solving the diferential equations and also for
%calculating the squared difference between experimental and calculated
%data
function g=desv(k)
%Firstly constants are defined. They are the variables of the
%equation g
kH1 = k(1);
kH2 = k(2);
kH3 = k(3);
kH4 = k(4);
kH5 = k(5);
%Introduction of experimental data
ts=[ 0
10
20
30
45
60
70];
xexp=[ 0.005404 0.001500 0.000365 0 0;
0.001411 0.001500 0.000365 0 0;
0.000705 0.002480 0.000502 0.000227 0;
0.000761 0.002550 0.000503 0 0;
0.000236 0.002740 0.000514 0 0;
0.000102 0.002740 0.000504 0.000109 0;
0.000335 0.002290 0.000593 0.000168 0 ];
%Inital x values. This values are required for solving the
%differential equations
x0 = zeros(1,5);
x0(1)= 0.00600;
x0(2)= 0.0015;
x0(3)= 0.00036;
x0(4)= 0;
x0(5)= 0;
%Diferential equations resolution.
f=@(t,x) [-(kH1+kH5)*x(1);
(kH1*x(1))-(kH2*x(2));
(kH2*x(2))-(kH3*x(3));
(kH3*x(3))-(kH4*x(4));
(kH5*x(1))-(kH4*x(4))];
tspan=[0,10,20,30,45,60,70];
[t,x]=ode45(f,tspan,x0);
Si alguien lo mira y me dice donde me estoy equivocando estaría muy agradecida por la ayuda.
Ana
El código no funciona y lo único que me dice Matlab es que hay un error en la función fminsearch, pero no consigo saber cual es... lo que realmente está pasando, yo creo, es que no me está calculando las soluciones de las ecuaciones diferenciales :(
El código que hasta ahora tengo es:
Fichero principal:
%Main program. It calculates the constants that make the squared
%difference between experimental and calculated data minimum
%It is required to introduce an initial value of each constant for starting
%the iteration
k0=[0.01,0.005,0.003,0,0];
options=optimset('Display','iter','MaxFunEvals',100000);
[k,fval,exitflag]=fminsearch('desv',k0,options);
Fichero 2
%This program is for solving the diferential equations and also for
%calculating the squared difference between experimental and calculated
%data
function g=desv(k)
%Firstly constants are defined. They are the variables of the
%equation g
kH1 = k(1);
kH2 = k(2);
kH3 = k(3);
kH4 = k(4);
kH5 = k(5);
%Introduction of experimental data
ts=[ 0
10
20
30
45
60
70];
xexp=[ 0.005404 0.001500 0.000365 0 0;
0.001411 0.001500 0.000365 0 0;
0.000705 0.002480 0.000502 0.000227 0;
0.000761 0.002550 0.000503 0 0;
0.000236 0.002740 0.000514 0 0;
0.000102 0.002740 0.000504 0.000109 0;
0.000335 0.002290 0.000593 0.000168 0 ];
%Inital x values. This values are required for solving the
%differential equations
x0 = zeros(1,5);
x0(1)= 0.00600;
x0(2)= 0.0015;
x0(3)= 0.00036;
x0(4)= 0;
x0(5)= 0;
%Diferential equations resolution.
f=@(t,x) [-(kH1+kH5)*x(1);
(kH1*x(1))-(kH2*x(2));
(kH2*x(2))-(kH3*x(3));
(kH3*x(3))-(kH4*x(4));
(kH5*x(1))-(kH4*x(4))];
tspan=[0,10,20,30,45,60,70];
[t,x]=ode45(f,tspan,x0);
Si alguien lo mira y me dice donde me estoy equivocando estaría muy agradecida por la ayuda.
Ana
Valora esta pregunta


0