作为家庭作业,我需要使用区间为U(0,1)-SI、SIS、SIRS、SEIR、SEIR的随机数建立随机模型,而不需要使用专用工具、公式、循环和条件表达式。基于matlab中的示例代码,我成功地创建了一个工作SI模型,但为I->;我得到两条简单的曲线。我也有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, 0, 1)
u2 <- runif(Tmi, 0, 1)
u3 <- runif(Tmi, 0, 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"))
目前没有回答
相关问题 更多 >
编程相关推荐