Matlab - Cálculo de parámetros con fminsearch

 
Vista:

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
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Cálculo de parámetros con fminsearch

Publicado por Ana (3 intervenciones) el 25/02/2014 10:37:47
Muchas gracias! Es una presentación muy útil. En ella aparecen unos archivos (weather data.mat, fminunc ex2.m, obj fcn1.m), habría alguna posibilidad de que pudiera verlos?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Cálculo de parámetros con fminsearch

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 25/12/2015 18:54:21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function kH=desv(k)
x0 = zeros(5,1);
x0(1,1)= 0.00600;
x0(2,1)= 0.0015;
x0(3,1)= 0.00036;
x0(4,1)= 0;
x0(5,1)= 0;
kH(1) = k(1);
kH(2) = k(2);
kH(3) = k(3);
kH(4) = k(4);
kH(5) = k(5);
f=@(t,x) [-(kH(1)+kH(5))*x(1);kH(1)*x(1)-kH(2)*x(2);kH(2)*x(2)-kH(3)*x(3);kH(3)*x(3)-kH(4)*x(4);kH(5)*x(1)-kH(4)*x(4)];
tspan=[0,10,20,30,45,60,70]';
[t,x]=ode45(f,tspan,x0)
plot(t,x)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
>> k=rand(5,1)
 
k =
 
    0.0344
    0.4387
    0.3816
    0.7655
    0.7952
 
>> desv(k)
 
ans =
 
    0.0344    0.4387    0.3816    0.7655    0.7952
 
>> desv(k)
 
t =
 
     0
    10
    20
    30
    45
    60
    70
 
 
x =
 
    0.0060    0.0015    0.0004         0         0
    0.0000    0.0000    0.0001    0.0001    0.0039
   -0.0000    0.0000    0.0000    0.0000    0.0037
    0.0000   -0.0000    0.0000    0.0000    0.0036
   -0.0000    0.0000   -0.0000    0.0000    0.0036
   -0.0000    0.0000   -0.0000    0.0000    0.0036
    0.0000   -0.0000    0.0000   -0.0000    0.0036



Saludos .
JOSE JEREMÍAS CABALLERO
Asesoría online en Matlab
[email protected]
Estimado Usuario, el correo es para servicios de cursos, asesoría y programación en Matlab.
Toda ayuda gratuita es vía foro.


http://matlabcaballero.blogspot.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar