【发布时间】:2011-05-20 09:56:59
【问题描述】:
我正在尝试用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);
}
}
}
非常感谢任何帮助,非常感谢!
【问题讨论】:
-
@hvgotcodes: ?!?你自便。他所拥有的并不那么复杂。我们中的一些人对密码学、正则表达式、Web 服务或 UI 消息处理有同样的看法。
-
@jason。是的。我想这取决于一个人接触过什么。我从来不用服用 DEQ;我学校的 CS 学位需要 2 次数值计算,而不是 DEQ...
标签: java math ode differential-equations