MATLAB Answers

Cómo utilizar fminsearch para estimar dos parámetros?

23 views (last 30 days)
Ag Gin
Ag Gin on 11 Jun 2018
Answered: Prajit T R on 14 Jun 2018
Buenas estoy intentando simular el modelo SIR el cual permite predecir el número de susceptibles, infectados y recuperados cuando se produce una epidemia. En este caso cuento con los datos S0=762, I0=1, R0=1 (S0:numero inicial de susceptibles, I0:número inicial de infectados y R0:número inicial de recuperados), alpha=0.5661 y beta=0.002526. Las ecuaciones diferenciales que tengo para poner aplicar ode45 son
dS/dt= -beta*S*I
dI/dt= beta*S*I-alpha*I
dR/dt=alpha*I
Bien una vez que he calculado los valores de S,I y R, al graficarlo veo que no se ajusta muy bien a los datos reales. Por lo que quiero es buscar los valores de los parámetros alpha y beta que miniminicen la función: sumatorio de i=0 a 14 de (Î(i)-I(i))^2 donde I(i) es el número real de infectados en el día i y Î(i) es el número aproximado de individuos infectados que se ha obtenido resolviendo numéricamente el sistema anterior con ode45 usando los datos iniciales ya mencionados y los parámetros beta y alpha que se vayan calculando en cada iteración.
¿Cómo podría hacer para obtener los valores de estos parámetros? Agradecería mucho vuestra ayuda. A continuación dejo lo que tengo de código.
clear all
hold on
alpha=0.5661;
beta=0.002624;
f =@(t,x) [-beta*x(1)*x(2);beta*x(1)*x(2) - alpha*x(2);alpha*x(2)];
[t,xa] = ode45( f,[0 14],[762 1 0]);
x=[1 2 3 4 5 6 7 8 9 10 11 12 13 14]; %días
y=[3 8 28 75 221 291 255 235 190 125 10 28 12 5]; %datos reales de infectados por dia
%por tanto en el dia 1 hay 3 infectados, en el día 2 hay 8 y asi..
I=xa(:,2); %número de infectados obtenidos con ode45
%
%
suma =0;
for i=1:14
suma_nueva=(I(i)-y(i))^2;
suma=suma+suma_nueva; %encontrar los valores de alpha y beta que miniminicen esta función
%siendo I(i) el número aprox de infectados en
%el dia i e y(i) el numero real de infectados
%en el dia i
end
suma

  1 Comment

Alfonso
Alfonso on 11 Jun 2018
Ag Gin te recomiendo que realices la pregunta junto con su explicación en inglés; es mucho más probable que te respondan y solucionen.

Sign in to comment.

Answers (1)

Prajit T R
Prajit T R on 14 Jun 2018
Hola Ag
Puedes encontrar más información aquí. Puedes traducir la página al español.
Minimizar la función f(x)=3*(x1)^2+2(x1)*(x2)+(x2)^2-4*(x1)+5*(x2)
Escriba una función anónima que calcula el objetivo.
fun = @(x)3*x(1)^2 + 2*x(1)*x(2) + x(2)^2 - 4*x(1) + 5*x(2);
%Llame a fminunc para encontrar un mínimo de fun junto a [1,1].
x0 = [1,1];
[x,fval] = fminunc(fun,x0);
Utiliza la función 'fminunc' para optimizar alfa y beta.
Prajit

  0 Comments

Sign in to comment.