【问题标题】:Solve variable coefficients second order linear ODE?求解可变系数二阶线性 ODE?
【发布时间】:2013-04-02 04:00:41
【问题描述】:

对于可变系数二阶线性 ODE

$x''(t)+\beta_1(t)x'(t)+\beta_0 x(t)=0$

我有 $\beta_1(t)$ 和 $\beta_0(t)$ 的数值(以向量表示),有人知道一些 R 包可以做到这一点吗?一些简单的例子来说明也很好。

我用谷歌搜索发现'bvpSolve'可以解决常数系数值。

【问题讨论】:

  • 您应该可以使用deSolve 包中的标准ode() 函数来执行此操作,我认为...您需要定义的渐变函数采用参数t、@987654326 @,parms,其中t 是时间。我猜,棘手的部分是决定是否/如何插入强制函数——它们是分段常数吗?分段线性?光滑吗?
  • @BenBolker 你能提供一些细节吗?在我当前的示例中没有强制功能。对于我的系数函数,它是 b 样条的扩展。
  • 通过“强制函数”,我(草率地)是指您的时间相关参数,而不是时间相关常数项......您能否给出一个简单的可重复示例(请参阅stackoverflow.com/questions/5963269/…)一组方程和参数?
  • 例如:beta0(t)=sin(2*pit), beta1(t)=cos(2*pit)。
  • 我仍然不清楚“我有 $\beta_1(t)$ 和 $\beta_0(t)$ 的数值(以向量表示)”是什么意思。我可能在下面回答了你的问题。

标签: r differential-equations


【解决方案1】:

为了使用deSolve,你必须做你的二阶ODE

x''(t) + \beta_1(t) x'(t) + \beta_0 x(t)=0

到一对耦合的一阶 ODE:

x'(t) = y(t)
y'(t) = - \beta_1(t) y(t) - \beta_0 x(t)

那么就很简单了:

gfun <- function(t,z,params) {
      g <- with(as.list(c(z,params)),
       {
         beta0 <- sin(2*pi*t)
         beta1 <- cos(2*pi*t)
       c(x=y,
         y= -beta1*y - beta0*x))
     list(g,NULL)
}
library("deSolve")
run1 <- ode(c(x=1,y=1),times=0:40,func=gfun,parms=numeric(0))

我随意选择了一些初始条件(x(0)=1x'(0)=1);您可能还想为模型添加参数(即,使 parms 不同于 numeric(0)

PS 如果您不满意手动转换为耦合的一阶 ODE,并且想要一个可以无缝处理二阶 ODE 的包,那么我不知道答案...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多