SIR model parameter fitting
Show older comments
I want to find appropriate parameter i.e. beta.
First I have confirmed data for Jan.23~Dec.18.
I try to find best beta but result is same with inital guess beta. So I can't find how to do.
Here is my code.
I attach the data.
%% Data and current figure
clear; clc;
data_inc = readtable('inc_data2.csv','PreserveVariableNames',true);
date_inc = table2array(data_inc(:,1),'InputFormat','yyyy-MM-dd');
inc = table2array(data_inc(:,2));
% figure of incidence
figure(1)
bar(date_inc,inc)
%% data fitting
clc;
global beta gamma
beta = 0.01; gamma = 1/14;
parameter = [beta gamma];
IC1 = [880 10 0];
[t,y] = ode45(@SIR,[0,329],IC1);
plot(t,y);
%%
xdata = [1:1:329]';
ydata = inc;
x0 = parameter;
p = lsqcurvefit(@SIR,x0,[0,329],xdata,y,[0,0],[1,1]);
p
beta = 0.00001; % will change by lsqcurvefit result
gamma = 1/14;
IC2 = [beta gamma];
[t,y] = ode45(@SIR,[0,329],IC);
bar(xdata,inc)
hold on
plot(xdata,y(:,2));
hold off
%% plot
bar(xdata,inc)
hold on
plot(xdata,ydata,'r')
hold off
%% function
function dy = SIR(t,y)
global beta gamma
S = y(1); I = y(2);
dy = zeros(3,1);
dy(1) = -beta*S*I;
dy(2) = beta*S*I-gamma*I;
dy(3) = gamma*I;
end
Answers (1)
yeongju han
on 19 May 2021
0 votes
Heejin, Can I ask u something?
How did you success this code..? I am studying the SEIRDV model considering the introduction of vaccines.
l want update 'beta' by using lsqcurvefit. But, I can't update 'beta'.. Can you review my code..? or,, Can you share me the complete code? I'm so desperate.
(I'm Korean, too ^_^)
Categories
Find more on Matrix Computations in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!