首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >误差延迟微分方程deSolve (dede)

误差延迟微分方程deSolve (dede)
EN

Stack Overflow用户
提问于 2021-11-17 10:56:16
回答 1查看 130关注 0票数 3

我正在用deSolve (R)写一个延迟微分方程,我收到一条错误消息,我不知道如何解决。所以为了一些背景。我有一个包含12个微分方程的系统,其中3个有延迟。在没有deSolve的情况下,我成功地编写了这个系统,但是我想使用deSolve,因为它让我有机会轻松地使用其他不是固定步长的欧拉方法。但是,现在我把它放在deSolve中,我使用了时滞微分方程的通用求解器(dede),得到了一个误差。

这是误差所涉及的延迟和微分方程:

lag2=ifelse(t-tau2<0, 0, e2(lagvalue(t-tau2,3))*lagvalue(t-tau2,8))

dn9dt=lag2-IP2*ethaP2M*P2-mu2*sf0B(B2)*P2-DNB(N2,B2)*P2+DD*PD

第一和第三延迟微分方程与这个微分方程相同,似乎没有误差。错误是:

Error in lagvalue(t - tau2, 3) : illegal input in lagvalue - lag, 0, too large, at time = 15.945

需要注意的是,在这种情况下,延迟(tau2)是16,错误在时间= 16之前快速发生。

我已经尝试将t-牛2<0更改为t-牛2<=0,但这没有帮助,我尝试增加历史数组(control=list(mxhist = 1e6))的大小,这也没有帮助。我也尝试过几次重写滞后,但是每次我都会遇到同样的错误。

我试过在网上搜索,但是我在deSolve上几乎找不到dede的任何东西,所以我希望这里的人能帮上忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-17 18:58:01

这个问题没有包含一个完全可重复的例子,但是如果用大量的时间步骤()来运行仿真,历史数组太小,那么这个错误就可以被再现。下面的示例是来自?dede帮助页面的改编版本:

代码语言:javascript
复制
library("deSolve")

derivs <- function(t, y, parms) {

  #cat(t, "\n") # uncomment this to see when the error occurs
  
  lag1 <- ifelse(t - tau1 < 0, 0.1, lagvalue(t - tau1, 2))
  lag2 <- ifelse(t - tau2 < 0, 0.1, lagvalue(t - tau2, 2))

  dy1 <- -y[1] * lag1 + lag2
  dy2 <-  y[1] * lag1 - y[2]
  dy3 <-  y[2] - lag2
  list(c(dy1, dy2, dy3))
}

yinit <- c(x=5, y=0.1, z=1)
times <- seq(0, 40, by = 0.1)

tau1 <-  1
tau2 <- 10

它成功地运行于:

代码语言:javascript
复制
yout <- dede(y = yinit, times = times, func = derivs, parms = NULL)

但如果我们增加时间步骤的数量:

代码语言:javascript
复制
times <- seq(0, 40, by = 1e-3)
yout <- dede(y = yinit, times = times, func = derivs, parms = NULL)

我们可以得到一个错误:

代码语言:javascript
复制
Error in lagvalue(t - tau2, 2) : 
  illegal input in lagvalue - lag, 0, too large, at time = 9.99986 

当算法开始在历史数组中进行插值时,它发生在超过阈值时间(取消上面的cat注释)之后。作为解决方案,增加历史缓冲区:

代码语言:javascript
复制
yout <- dede(y = yinit, times = times, func = derivs, 
  parms = NULL, control = list(mxhist = 1e5))

它也可能有助于减少时间步骤的数目。

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

https://stackoverflow.com/questions/70003096

复制
相关文章

相似问题

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