解微分方程

时间:2015-01-14 02:55:11

标签: r differential-equations

这是与R:

中求解微分方程(DE)相关的一个非常基本的问题

我正在使用deSolve包来解决DE。

dX <- a*X + a*b

问题在于我想要及时评估解决方案(基于我的时间列)和相应的b值(b值每次都不同)。

这是我的代码:

parameters <- c(a=1.3714)
state <- c(X=0)
Lorenz <- function(t, state, parameters) {
  with(as.list(c(state, parameters)), {
    # rate of change
    b <- c(PD$blood)
    dX <- a*X + a*b
    # return the rate of change
    list(dX)
  })

}
times <- PD$time

head(times)
library(deSolve)
out <- ode(y = state, times = times, func = Lorenz, parms = parameters)

1 个答案:

答案 0 :(得分:1)

我不确定我是否完全理解这个问题,并且提供一些示例数据会有所帮助,但您可以定义一个函数(fun_dyn_b),该函数在Lorenz函数中定义的时间t调用b值:

parameters <- c(a=1.3714)
state <- c(X=0)
func_dyn_b <- function(t) PD$blood[t]

Lorenz <- function(t, state, parameters) {
  with(as.list(c(state, parameters)), {
    # rate of change
    b <- func_dyn_b(t)
    dX <- a*X + a*b
    # return the rate of change
    list(dX)
  })

}
times <- PD$time

head(times)
library(deSolve)
out <- ode(y = state, times = times, func = Lorenz, parms = parameters)

希望有所帮助。


看起来您的时间间隔不均匀,因此我的解决方案无法正常工作,因为时间需要以1为增量,从1开始(因此可以用作索引)。我建议您更多地查看您的时间间隔,看看您是否可以找出确切的时间间隔(0.0033秒或其他什么?)并考虑实现func_dyn_b()的方法,以便在正确的时间调用正确的b。

祝你好运。