【问题标题】:MATLAB - Optimization of SIR epidemic modelMATLAB - SIR 流行病模型的优化
【发布时间】:2013-05-23 16:19:34
【问题描述】:

我正在尝试使用 SIR 模型对流感流行进行建模:http://en.wikipedia.org/wiki/Epidemic_model#The_SIR_Model

基本上需要我同时解三个微分方程。

我的任务是将图表拟合到一组数据中,我只是想知道我应该如何去做。

我已经设法设置了一个系统来解决这样的 ODE:

function dydt = sir_ode(t,y,p)
B = p(1);
r = p(2);
S = y(1);
I = y(2);
R = y(3);
dydt = [-B*I*S; B*I*S - r*I; r*I];

以及调用它的 m 文件:

time = 1:24;
y0 = [400 1 0];
tspan = time;
p0 = [.01 .5];
[t,y] = ode45(@sir_ode,tspan,y0,[],p0);

所以我有一个 tspan,我有一个 S、I 和 R 的 y0 矩阵。对于我的函数,输出包含 3 个微分方程,因此我可以与 ode45 函数一起求解它们。

现在我需要做的就是找到合适的 p0 矩阵,这样我就可以将曲线拟合到我的数据中。

首先,谁能看出我的求解方法有任何缺陷,其次,谁会对我如何找到最佳 p0 矩阵有任何建议?

谢谢!!

【问题讨论】:

    标签: matlab curve-fitting


    【解决方案1】:

    解决方法对我来说似乎是正确的。

    对于您问题的第二部分,在每个优化问题中都有一个您想要最大化或最小化的函数(使用各种算法,稍后会详细介绍)。在这里您可以最小化误差函数。误差函数的一种可能设计是函数之间的 L2 距离(或者在您的情况下,原始数据曲线与模型在每个时间步长给出的曲线之间的点的 平方距离之和 )。考虑到您已经拥有的代码,这应该相当简单。

    现在你有一个函数,它的参数是 p0 并且输出是你遇到的错误。最小值显然是 0,并且函数是确定性的。我的猜测是它应该相当顺利,但我没有证据证明这一点。现在要最小化它,有很多方法(最简单的是梯度下降法和牛顿法)。但是 Matlab 中的 fminsearch 函数应该可以解决问题。确保测试多个起点,因为您可能会发现几个局部最小值。

    【讨论】:

      猜你喜欢
      • 2019-03-22
      • 1970-01-01
      • 2021-04-08
      • 2021-07-22
      • 1970-01-01
      • 1970-01-01
      • 2014-07-08
      • 2020-05-09
      • 1970-01-01
      相关资源
      最近更新 更多