已有感染者、治愈者、死亡者数据,用最小二乘法拟合SEIR模型感染系数的matlab完整代码
时间: 2023-06-14 08:06:51 浏览: 165
以下是使用最小二乘法拟合SEIR模型感染系数的 MATLAB 代码:
```matlab
% 导入感染者、治愈者、死亡者数据
data = readmatrix('data.xlsx');
% 初始值
N = 1.4e9; % 中国总人口
E0 = 0; % 初始潜伏者人数
I0 = data(1,1)/N; % 初始感染者人数
R0 = data(1,2)/N; % 初始治愈者人数
D0 = data(1,3)/N; % 初始死亡者人数
S0 = 1 - E0 - I0 - R0 - D0; % 初始易感者人数
beta0 = 0.2; % 初始感染系数
% SEIR模型
SEIR = @(t,x) [-beta0*x(1)*x(3)/N;
beta0*x(1)*x(3)/N - x(2)/5.2;
x(2)/5.2 - x(3)/14;
x(3)/14];
% 时间范围
tspan = [1 length(data)];
% 拟合函数
fun = @(p) lsqcurvefit(SEIR,[S0 E0 I0 R0],tspan,data(:,1:3)/N,[],[],p);
% 最小二乘法拟合
beta = lsqcurvefit(fun,beta0,data(:,1:3)/N);
% 绘制拟合曲线
[t,x] = ode45(@(t,x) SEIR(t,x,beta),tspan,[S0 E0 I0 R0]);
plot(t,x(:,1)*N,t,x(:,2)*N,t,x(:,3)*N,t,data(:,1),'+',t,data(:,2),'+',t,data(:,3),'+');
legend('易感者','潜伏者','感染者','感染者数据','治愈者数据','死亡者数据');
title(['感染系数 \beta = ',num2str(beta)]);
xlabel('时间(天)');
ylabel('人数(人)');
```
其中,数据文件 `data.xlsx` 包含三列数据,分别为感染者、治愈者、死亡者的数量,需要放在 MATLAB 当前工作目录下。这段代码会输出拟合出的感染系数 beta,并绘制 SEIR 模型的拟合曲线。
阅读全文