Effacer les filtres
Effacer les filtres

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

1 vue (au cours des 30 derniers jours)
Ag Gin
Ag Gin le 11 Juin 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 commentaire
Alfonso
Alfonso le 11 Juin 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.

Connectez-vous pour commenter.

Réponses (1)

Prajit T R
Prajit T R le 14 Juin 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

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!