2015-01-14 242 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()的方法,以便在正確的時間調用正確的時間間隔。

祝你好運。