问题描述
作为作业,我需要使用区间为 U(0,1) - SI、SIS、Sirs、SEIR、SEirs 的随机数制作随机模型,而不使用专用工具,仅使用公式、循环和条件表达式。基于 matlab 中的示例代码,我成功地创建了一个有效的 SI 模型,但是通过为 I -> R 添加第二个条件,我得到了两条简单的曲线。我也有 python 中的代码,但我无法将其转换为强制 R 使用。我已经为此苦苦挣扎了 7 天,请帮助我至少修改此代码以获得有效的 SIR 模型以了解正确的代码结构。我只是在学习更高级的 R 语言应用。
最好的问候 拉德克
library(ggplot2)
beta <- 0.5
gamma <- 0.1
sigma <- 0.1
eta <- 0.2
N <- 1000
Czas <- seq(0,100,0.001)
Tmi <- length(Czas)
zmS <- rep(0,Tmi)
zmI <- rep(0,Tmi)
zmR <- rep(0,Tmi)
zmI[1] = 1
zmS[1] = N - zmI[1]
zmR[1] = 0
u1 <- runif(Tmi,1)
u2 <- runif(Tmi,1)
u3 <- runif(Tmi,1)
for (i in 1: (Tmi - 1)) {
p1 = (beta * zmI[i] * zmS[i]) / (N^2)
p2 = (gamma * zmI[i]) / N
p3 = (eta * zmR[i]) / N
if (u1[i] < p1) {
zmS[i + 1] = zmS[i] - 1
zmI[i + 1] = zmI[i] + 1
} else {
zmS[i + 1] = zmS[i]
zmI[i + 1] = zmI[i]
}
if (u2[i] < p2) {
zmI[i + 1] = zmI[i] - 1
zmR[i + 1] = zmR[i] + 1
} else {
zmI[i + 1] = zmI[i]
}
}
Sirs <- data.frame(zmS,zmI,zmR)
ggplot(Sirs,aes(Czas)) +
geom_line(aes(y = zmS,colour = "S")) +
geom_line(aes(y = zmI,colour = "I")) +
geom_line(aes(y = zmR,colour = "R"))
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)