2015-01-14 3 views
0

Это очень простой вопрос, связанный с решением дифференциального уравнения (DE) в R:решения дифференциального уравнения

Я использую пакет в desolve решить DE.

dX <- a*X + a*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), что вызывает значение Ь в момент времени 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(), чтобы он правильно набрал b в нужное время.

Удачи.