初学数学建模,想研究一下seir模型,网上大多教程都是直接把参数设定好的,对求参数的方法没有详细的说明,没有办法知道参数是怎么得到的。如果有书的话希望能推荐一本这方面的书


SEIR 模型参数较多,直接跟数据拟合并不容易把参数都定准。它的主要作用是利用每个参数代表的含义,模拟研究调参后对系统行为的影响,从而对实际问题给出指导性的意见。Logistic 模型参数少得多,后期拟合相对容易。但在做预报的时候,仍存在参数不易定准的情况。举个例子,现在百度上有国外疫情的每日新增确诊数据。对其拟合与预报结果如下:

Logistic 模型只有三个参数:增长速率 [公式]、拐点时间 [公式]、波及人数 N. 由于数据是每日新增,所以实际上是和 Logistic 模型的微分(或差分)做拟合。用最小二乘法拟合的结果接近于绿线(拐点 4 月 5 日,N = 218 万),但将拐点调整为 4 月 10 日(黄线,N = 319 万)或 4 月 15 日(红线,N = 451 万)以后,相应地调节另外两个参数拟合出来的结果也不差。这时候并不能简单认为绿线与历史数据符合最好,就预报的越准。因为 Logistic 模型本身也有模型误差。所以从实际数据拟合参数的过程最好不要采用点估计,而要尽量采用区间估计,多做参数敏感性分析,才能得出合理的结论。看了这个例子,应该知道为什么即使是钟南山也不敢轻易地判断拐点是否到来了。参数拟合这件事并不简单。从简单的模型开始多练才行。


理论就一句话: 模型=公式+边界。公式包括微分方程组这些,边界包括初值和物理边界。举个例子就是用牛顿定律求位移,就要知道初始速度和加速度以及它们之间的关系。

然后就简单了,解微分方程最常用是龙格库塔,找一门编程语言大概率都有已经实现的函数可以调用。入门级建议用matlab的ode45练练手。

高级点的,Fortran自己写代码,不熟悉只是用过就不多说了。主要还是这个语言是出现较早做数值计算的,很多精度演算法都是老前辈们用Fortran写的。

再高级点的,自己推公式画网格,前向后向迎风一阶二阶这些,或者…自己弄个公式,溜了


打开matlab....打开simulink...在软体里边搭建模型...使用Parameter Estimation工具进行参数辨识


参数识别


暂时说一个看到过的思路吧,没有具体讨论合理性。

就是设初值,得到曲线和现有曲线进行比较,然后不断更新参数使得拟合曲线和现有曲线在距离最小,就当作得到参数了。

最简单的操作就是对参数取一个范围,进行分割,然后每个参数选取都得到曲线,与现有曲线对比找距离最小。


有方程了,求参数。需要

1.准备数据:分训练集,验证集,测试集体。训练集合验证集,都是实际场景中的数据,测试集是预测的数据。

2.写程序:可以用python,把训练集中的数据步进法代入模型中,求出预计参数,预计方程,将验证数据代入预计方程,计算结果与已知的结果进行比对,比对的方法很多,比如最小二乘法等。当比对值越来越小,则参数越靠近实际的值。最后将比对值最小的参数确定为参数。

3.测试结果:将测试集数据代入方程进行结果测试,分析。


推荐阅读:
相关文章