当前位置: 首页 > news >正文

手搓传染病模型(SEIR-拓展)

我们在前文手搓了最基本的SEIR模型

今天我们将根据真实数据拟合出最优参数。

以传染率(β)为例。

话不多说,我们直接开始手搓

% 模型参数
N = 10000; % 总人数
I0 = 10; % 初始感染人数
R0 = 0; % 初始康复人数
E0 = 2 * I0; % 初始暴露人数
S0 = N - I0 - R0 - E0; % 初始易感人数
w = 0.2; % 暴露转化速率
gamma = 1 / 12; % 康复速率
num_days = 100; % 模拟天数
load observed_I.mat % 导入观察病例% 定义拟合选项和初始参数
beta_initial = 0.01;
lb = 0.01;
ub = 1.00;% 使用lsqcurvefit进行非线性最小二乘拟合
options = optimoptions('lsqcurvefit', 'Display', 'iter');
[beta_optimal, resnorm] = lsqcurvefit(@(beta, t) forecast(beta, num_days, N, w, gamma, S0, E0, I0, R0), ...beta_initial,...1: num_days,...observed_I,...lb,...ub,...options);%% 使用最佳的beta进行预测
% x(1):感染人群I, 
% x(2):易感人群S, 
% x(3):康复人群R,
% x(4):暴露人群Edxdt = @(t, x) [w * x(4) - gamma * x(1); % dIdt-beta_optimal * x(2) * x(1) / N; % dSdtgamma * x(1); % dRdtbeta_optimal * x(2) * x(1) / N - w * x(4); % dEdt];[t, y] = ode45(dxdt, 1: num_days, [I0, S0, R0, E0]);hold on
plot(t, y(:, 1));
plot(t, y(:, 2));
plot(t, y(:, 3));
plot(t, y(:, 4));
legend('感染人数I', '易感人数S', '康复人群R', '暴露人群E');

上述代码中的forecast函数见下面。

function I_extracted = forecast(beta, num_days, N, w, gamma, S0, E0, I0, R0)% x(1):感染人群I, % x(2):易感人群S, % x(3):康复人群R,% x(4):暴露人群Edxdt = @(t, x) [w * x(4) - gamma * x(1); % dIdt-beta * x(2) * x(1) / N; % dSdtgamma * x(1); % dRdtbeta * x(2) * x(1) / N - w * x(4); % dEdt];[~, y] = ode45(dxdt, 1: num_days, [I0, S0, R0, E0]);I_extracted = y(:, 1);
end

看看是否可以拟合

这里只做展示,小伙伴们可以根据自己的需要调整误差啥的。

Over!

http://www.xdnf.cn/news/190009.html

相关文章:

  • 深度对比:Objective-C与Swift的RunTime机制与底层原理
  • 深入理解缓存淘汰策略:LRU 与 LFU 算法详解及 Java 实现
  • 媒资管理之视频管理
  • Prompt Engineering 提示工程:释放大语言模型潜力的关键技术与实践指南
  • C++(初阶)(十四)——多态
  • SwiftUI 10.Toggle介绍和使用
  • 马克·雷伯特:用算法让机器人飞奔的人
  • Mac搭建Flutter IOS环境详细指南
  • 了解Android studio 初学者零基础推荐(1)
  • 算术表达式通常有三种表示形式:中缀表达式、前缀表达式(波兰式)和后缀表达式(逆波兰式)。分别都是什么?
  • 【Java EE初阶】多线程(二)
  • uniapp做app,使用v-for遍历渲染第二层的时候,打包到手机上渲染不出第二层的数据
  • 如何使用极狐GitLab 议题看板?
  • LeetCode 3392、LCR106、3447题解
  • Linux学习笔记(一):Linux下的基本指令
  • 深入理解同源策略与跨域资源共享(CORS)
  • AI与IT协同的典型案例
  • C++ 解决一个简单的图论问题 —— 最小生成树(以 Prim 算法为例)
  • Shell脚本-随机数实战案例
  • 数据结构 -- 图的应用(二)
  • 机器学习中的数据转换:关键步骤与最佳实践
  • 多模态革命!拆解夸克AI相机技术架构:如何用视觉搜索重构信息交互?(附开源方案对比)
  • 讯飞星辰焕新发布!Agent规模化应用的通关密码
  • 【“星瑞” O6 评测】 — CPU llama.cpp不同优化速度对比
  • 【Shell 脚本入门】轻松上手的实战指南
  • 深度学习: AI 体育领域
  • 成员方法的详细说明(结合Oracle官方文档)
  • 12分区 3号机 送风分区送风 会远程启,不会远停
  • 搭建dns的正向解析
  • QGIS+mcp的安装和使用