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