Я пытаюсь создать простую симуляционную программу модели SIR-эпидемий в java.
В принципе, SIR определяется системой трех дифференциальных уравнений:
S '(t) = - l (t) * S (t)
I '(t) = l (t) * S (t) - g (t) * я (t)
R '(t) = g (t) * я (t)
S - восприимчивые люди, я - инфицированные люди, R - выздоравливающие люди.
l (t) = [c * x * я (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);
}
}
}
Я бы очень признателен за любую помощь, большое спасибо заранее!