我正在尝试解决仅限于正解的 ODE,即:

dx/dt=f(x)

x>=0

在 MATLAB 中,这很容易实现。 R 是否有任何解决方法或软件包可以将解空间限制为仅正值?

这对我来说非常重要,不幸的是,别无选择。我现在搜索了一段时间,但没有任何成功。 :-(

最佳答案

在这里继续下去还不够。对于我熟悉的各种问题,修改系统以在对数转换状态变量的规模上运行效果很好(您始终可以对结果进行反向转换,例如将它们与数据进行比较)。例如,我已将其与 SIR model in epidemiology 一起使用。我将尝试使用@MauritsEver 的示例来说明将系统转换为在对数刻度上运行:

library(deSolve)
model <- function (time, y, parms) {
   with(as.list(c(y, parms)), {
       dlogN <-   r * (1 - exp(logN) / K)
       list(dlogN)
   })
}

# Starting conditions
y <- c(logN = log(0.1))
parms <- c(r = 0.1, K = 10)
times <- seq(0, 100, 1)
out <- as.data.frame(ode(y, times, model, parms))
out_backtran <- transform(out,N=exp(logN))
plot(N~time,data=out_backtran)

r - 求解 ODE - 只有正解-LMLPHP

这种方法有以下缺点:
  • 它不会处理恰好在边界上的解,并且会遇到“太快”接近边界的解(即状态变量在有限时间内收敛到零的情况)
  • 原样需要手动翻译。编写一个允许用户输入一组方程和一组变换并自动应用这些变换的系统是完全可能的,但这需要一些努力。
  • 它可能会稍微增加计算量(任何时候我们必须使用我们必须取幂的状态变量的原始尺度值)
  • 关于r - 求解 ODE - 只有正解,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47401678/

    10-13 06:11