我试图用浓度A的微分方程来模拟模型:
dA/dt = (a-b)*exp^(d*(s-t))
(方程式有参数:a,b,d和s。)我无法弄清楚如何使用R来求解具有t(时间步长)变量的微分方程?我尝试使用deSolve包的函数radau(见下图)。我没有得到代码工作。我也不明白如何定义索引变量?或者,如果可以使用此功能解决这个问题? (我过去使用deSolve的ode函数运行的所有其他更简单的微分方程,工作正常)。
我希望你能帮助我!
我的尝试:
#Defining parameters
parameter <- c(a=0.03, b=0.02, d=0.01, s=179)
#Defining Function
Function1 <- function(t, y, parameter) { with (as.list(Y),
list(c(dA = (a-b)*exp^(d*(s-t)))))}
#Initial conditions
yini <- c(A=1)
#Mass matrix
M <- diag(nrow=1)
M[5,5] <- 0
M
#index/times/output
index <- c(1)
times <- seq(from = 0, to = 10, by = 0.01)
out <- radau(y = yini, func = Function1, parms = parameters, times = times, mass = M, nind = index)
plot(out, type = "l", lwd = 2)
答案 0 :(得分:1)
我不确定M
或index
的内容是什么,因为它们不会出现在您的模型中,但此处运行的代码和根据您的代码生成结果。
#Defining parameters
parameter <- c(a=0.03, b=0.02, d=0.01, s=179)
#Defining Function
model <- function(t, y, parameter) {
with(as.list(parameter),{
dA <- (a - b) * exp(d * (s - t))
list(dA)
})
}
#Initial conditions
yini <- 1
# Output times
times <- seq(from = 0, to = 10, by = 0.01)
# Solve model
out <- ode(y = yini, func = model, parms = parameter, times = times)
# Plot results
plot(out, type = "l", lwd = 2)