首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >微分方程的解

微分方程的解
EN

Stack Overflow用户
提问于 2015-01-14 10:55:11
回答 1查看 188关注 0票数 0

这是一个与在R中求解微分方程(DE)相关的非常基本的问题:

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

dX <- a*X + a*b

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

下面是我的代码:

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2015-01-14 12:25:27

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

代码语言:javascript
复制
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。

祝好运。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27935140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档