我正在尝试在java中创建一个简单的SIR-epidemics模型模拟程序。
基本上,SIR 由三个微分方程组定义:
S'(t) = - l(t) * S(t)
I'(t) = l(t) * S(t) - g(t) * I(t)
R'(t) = g(t) * I(t)
S - 易感人群,I - 感染者,R - 康复者。
l(t) = [c * x * I(t)] / N(T)
c - 接触人数,x - 传染性(与病人接触后生病的概率),N(t) - 总人口(恒定)。
如何在 Java 中求解这样的微分方程?我不认为我知道任何有用的方法来做到这一点,所以我的实现产生了垃圾。
public class Main {
public static void main(String[] args) {
int tppl = 100;
double sppl = 1;
double hppl = 99;
double rppl = 0;
int numContacts = 50;
double infectiveness = 0.5;
double lamda = 0;
double duration = 0.5;
double gamma = 1 / duration;
for (int i = 0; i < 40; i++) {
lamda = (numContacts * infectiveness * sppl) / tppl;
hppl = hppl - lamda * hppl;
sppl = sppl + lamda * hppl - gamma * sppl;
rppl = rppl + gamma * sppl;
System.out.println (i + " " + tppl + " " + hppl + " " + sppl + " " + rppl);
}
}
}
我将不胜感激任何帮助,非常感谢提前!