根据12月至今以来西安的疫情数据,笔者建立了Logistic模型,使用MATLAB得到了相关参数。
预测结果
- \(K=2040\),也即最大感染人数为2040人。
- \(r=0.339\),这个参数代表了增长速率。
- 预测拐点的时间\(t_1=23\),也即1月1日。
- 预测稳定的时间\(t_2=38\),也即1月16日。
代码
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 39 40 41 42 43
|
clear; close all;
data = xlsread('\西安疫情.xlsx'); x = data(:, 1); dy = data(:, 2); y = data(:, 3); n = size(y, 1);
fun = @(k, x) k(3).*k(1).*exp(k(2).*x)./(k(1)+k(3).*(exp(k(2).*x)-1)); [k, resnorm] = lsqcurvefit(fun, [1000 1 1], x, y);
figure(); scatter(x, y, 'x'); hold on; x = 0 : 40; z = fun(k, x); plot(x, z, 'Color', 'b'); grid on; legend('公开数据', '拟合结果'); xlabel('时间(12月9日记为第0天)'); ylabel('确诊人数');
fprintf('\n使用Logistic函数进行建模, 预测结果如下: \n\n最大数量 K = %f, \n增长速率 r = %f, ', k(1), k(2)); t1 = ceil(1/k(2) * log((k(1) - y(1))/y(1))); fprintf('\n拐点时间 t1 = %d, ', t1); for i = t1 : 50 if z(i + 1) - z(i) < 2 t2 = i; break; end end fprintf('\n稳定时间 t2 = %d. \n\n', t2);
|