如何在R中编程形式为dy / dt = f(t,y)的微分方程(即时间在微分方程中)?

时间:2018-02-21 20:45:20

标签: r time ode differential-equations

我试图用浓度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)

1 个答案:

答案 0 :(得分:1)

我不确定Mindex的内容是什么,因为它们不会出现在您的模型中,但此处运行的代码和根据您的代码生成结果。

#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)