2015-01-14 197 views
0

这是与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

我不知道我完全理解的问题,并且这将有助于提供一些示例数据,但你可以定义一个函数(fun_dyn_b)调用b值在洛伦兹函数中定义的时间t:

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()的方法,以便在正确的时间调用正确的时间间隔。

祝你好运。