【问题标题】:solution to differential equation微分方程的解
【发布时间】:2015-01-16 08:33:36
【问题描述】:

这是一个与在 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)

【问题讨论】:

    标签: r differential-equations


    【解决方案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。

    祝你好运。

    【讨论】:

      猜你喜欢
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 2018-10-21
      • 1970-01-01
      • 2012-10-30
      • 1970-01-01
      • 1970-01-01
      • 2016-03-21
      相关资源
      最近更新 更多