- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 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-tau2<0 更改为 t-tau2<=0,但这没有帮助,我还尝试增加历史数组的大小 (control=list(mxhist = 1e6) ), 这也没有帮助。我也尝试过几次重写延迟,但每次我都会遇到同样的错误。
我试过在线搜索,但在 deSolve 中几乎找不到关于 dede 的任何内容,所以我希望这里的人能够提供帮助。
最佳答案
问题不包含完整的可重现示例,但如果以大量时间步长运行模拟并且历史数组太小,则可以重现错误。以下示例是 ?dede
帮助页面的改编版本:
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
它成功运行:
yout <- dede(y = yinit, times = times, func = derivs, parms = NULL)
但是如果我们增加时间步数:
times <- seq(0, 40, by = 1e-3)
yout <- dede(y = yinit, times = times, func = derivs, parms = NULL)
我们可以得到一个错误:
Error in lagvalue(t - tau2, 2) :
illegal input in lagvalue - lag, 0, too large, at time = 9.99986
当算法开始在历史数组中插值时,它发生在超过阈值时间(取消注释上面的 cat
)之后。作为解决方案,增加历史缓冲区:
yout <- dede(y = yinit, times = times, func = derivs,
parms = NULL, control = list(mxhist = 1e5))
它也可能有助于减少时间步数。
关于r - 误差延迟微分方程 deSolve (dede),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70003096/
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
Julia的新手,试图测试ODE求解器的速度。我在本教程中使用了Lorenz方程 using DifferentialEquations using Plots function lorenz(t,u
我来这里是因为我一直在尝试使用 sympy 求解微分方程,不幸的是到目前为止我还没有成功。到目前为止我所做的是: 1)插入微分方程,赋值并求解: import sympy as sp from IPy
我不知道问这个地方是否合适,因为我的问题是关于如何使用微分方程增长和衰减方法计算计算机科学算法的复杂性。 我想证明的算法是二分查找排序数组,其复杂度为log2(n) 算法说:如果要搜索的目标值等于中间
我想知道是否有人可以帮助我使用 MatLab 求解 Lotka-Volterra 方程。我的代码似乎不起作用。我执行以下操作: 第 1 步 - 我创建了一个名为 pred_prey_odes.m 的文
我是一名优秀的程序员,十分优秀!