purrr::accumulate实现递归状态机:模拟生态种群动态
使用purrr的accumulate函数创建状态机,模拟具有时间滞后的洛特卡-沃尔泰拉捕食者-猎物模型。 · 难度:入门 · +10XP
purrr::accumulate实现递归状态机:模拟生态种群动态
purrr::accumulate()是函数式编程的隐藏宝石——它像reduce但保留中间结果。本教程用accumulate实现离散时间状态机:每一步根据当前状态(猎物、捕食者数量)计算下一状态。你将定义一个状态转移函数,包含出生率、捕食率、死亡率参数。accumulate(.init = c(10,1), .f = update, .x = 1:100)生成100步的时间序列。最后用ggplot2动态可视化种群振荡,并比较不同初值条件的轨迹。
library(purrr)
update <- function(state, t) {
prey <- state[1]; pred <- state[2]
new_prey <- prey + 0.1*prey - 0.02*prey*pred
new_pred <- pred + 0.0001*prey*pred - 0.1*pred
c(max(new_prey,0), max(new_pred,0))
}
traj <- accumulate(1:100, .init=c(100,10), update)
df <- data.frame(t=0:100, prey=sapply(traj,[,1), pred=sapply(traj,[,2))