CRAN 任务视图:微分方程
微分方程 (DE) 是描述一个量如何随一个或多个(独立)变量(通常是时间或空间)变化的数学方程。微分方程在生物学、化学、物理学、工程学、经济学和其他学科中发挥着重要作用。
微分方程可以分为随机 DE 和确定性 DE。问题可以分为初值问题和边值问题。还可以区分常微分方程和偏微分方程、微分代数方程和时滞微分方程。所有这些类型的 DE 都可以在 R 中求解。DE 问题可以分为刚性问题和非刚性问题;前者类型的问题更难求解。
动态模型 SIG 是一个适合讨论使用 R 求解微分方程和其他动态模型(如基于个体的模型或基于代理的模型)的邮件列表。
本任务视图旨在提供有关该主题的概述。如果缺少内容,或需要在此处提及新的包,请通过电子邮件联系维护人员,或在上面链接的 GitHub 存储库中提交问题或拉取请求。
随机微分方程 (SDE)
在随机微分方程中,未知量是一个随机过程。
- 包 sde 提供了用于模拟和推断随机微分方程的函数。它是 Iacus (2008) 的书籍的配套包。
- 包 pomp 包含用于部分观测马尔可夫过程的统计推断的函数。
- 包 adaptivetau 和 GillespieSSA 实现 Gillespie 的“精确”随机模拟算法(直接方法)和几种近似方法。
- 包 resde 计算单变量可约随机微分方程模型的最大似然参数估计。
- 包 Sim.DiffProc 提供了用于模拟 Itô 和 Stratonovitch 随机微分方程的函数。
- 包 diffeqr 可以使用 Julia 编程语言的 DifferentialEquations.jl 包来解决 SDE 问题。
常微分方程 (ODE)
在 ODE 中,未知量是单个自变量的函数。几个包提供了解决 ODE 的方法。
延迟微分方程 (DDE)
在 DDE 中,某个时间的导数是变量在先前时间的函数。
- 包 dde 实现常微分方程 (ODE) 和延迟微分方程 (DDE) 的求解器,其中目标函数用 R 或 C 编写。仅适用于非刚性方程。还支持迭代差分方程。
- 包 PBSddesolve(最初发布为“ddesolve”)包含一个用于非刚性 DDE 问题的求解器。
- 包 deSolve 中的函数可以解决刚性和非刚性 DDE 问题。
- 包 diffeqr 可以使用 Julia 编程语言中的 DifferentialEquations.jl 包来解决 DDE 问题。
偏微分方程 (PDE)
PDE 是未知量是多个自变量的函数的微分方程。常见的分类包括椭圆型(时间无关)、双曲型(时间相关且波动状)和抛物型(时间相关且扩散状)方程。解决它们的一种方法是将 PDE 重写为一组耦合的 ODE,然后使用有效的求解器。
- R 包 ReacTran 提供了将 PDE 转换为一组 ODE 的函数。它的主要目标是在“反应性传输”建模领域,但它可以用于解决三种主要类型的 PDE。它提供了在笛卡尔、极坐标、圆柱坐标和球坐标网格上离散 PDE 的函数。
- 包 deSolve 包含专门用于解决由 PDE 生成的 1-D、2-D 和 3-D 时变 ODE 问题的求解器(例如,由 ReacTran 生成)。
- 包 rootSolve 包含针对由(时间不变)PDE 生成的 1-D、2-D 和 3-D 代数问题的优化求解器。因此,它可用于求解椭圆方程。
请注意,迄今为止,R 中的 PDE 只能使用有限差分法求解。我们希望在某个时候,有限元法和谱方法将变得可用。
微分代数方程 (DAE)
微分代数方程包含微分项和代数项。DAE 的一个重要特征是它的微分指数;该指数越高,DAE 就越难求解。
- 包 deSolve 提供了两个求解器,可以处理高达 3 阶的 DAE。
- 包 diffeqr 可以使用 Julia 编程语言中的 DifferentialEquations.jl 包来解决 DAE 问题。
边值问题 (BVP)
边值问题 (BVP) 在自变量边界处指定了解决方案和/或导数条件。
模型分析和校准
- 包 phaseR 将相平面方法应用于一维和二维自治常微分方程。
- 包 FME 包含用于逆向建模(拟合数据)、敏感性分析、可识别性和 DE 模型蒙特卡罗分析的函数。
- 包 fitode 包含用于拟合常微分方程的工具。灵敏度方程用于计算常微分方程轨迹的梯度,以实现更稳定的拟合。还提供了一种 MCMC 方法。
- 包 magi 在贝叶斯框架内实现动态系统从噪声和稀疏数据中的参数估计,无需数值积分。
- 包 ODEsensitivity 执行常微分方程模型的敏感性分析。它利用
deSolve
的接口,并将其与 sensitivity 的敏感性分析相连接。 - 包 deFit 使用数值优化将常微分方程拟合到时间序列数据,以检查变量之间的动态关系。
编译代码
- 包 odin 实现了一种高级语言,用于在 R 中描述和实现常微分方程。它提供了一种“领域特定语言”(DSL),它看起来像 R,但直接编译为 C。
- 包 rodeo 是一个面向对象的系统和代码生成器,它使用化学计量矩阵表示法定义的模型,创建并编译高效的 Fortran 代码用于 deSolve。
- 包 cOde 支持自动创建动态链接代码,用于包 deSolve(或 sundials
cvode
求解器的内置实现),这些代码来自嵌入在 R 代码中的内联 C 代码。
种群 ODE 建模
其他
- 包 simecol 提供了一个交互式环境来实现和模拟动态模型。除了 DE 模型之外,它还提供用于网格化、基于个体的和粒子扩散模型的函数。
- mkin 提供例程,用于将具有一个或多个状态变量的动力学模型拟合到化学降解数据。
- 包 dMod 提供函数来生成反应网络的 ODE、参数转换、观测函数、残差函数等。它遵循这样的范式:只要有可能,就应该使用导数信息进行优化。
- 包 CollocInfer 为连续时间和离散时间随机过程实现了配置推断。
- 可以使用包 rootSolve 进行 ODE 的根查找、平衡和稳态分析。
- 包 PBSmodelling 为模型添加了 GUI 函数。
- 包 ecolMod 包含一本生态建模书籍(Soetaert 和 Herman,2009)中的图形、数据集和示例。
CRAN 包
相关链接
- 维基百科:微分方程
- R-Forge 网站:deSolve(微分方程求解器)
- Github 网站:pomp(部分观测马尔可夫过程)
- 书籍:Iacus, S.M. 2008. 随机微分方程的模拟和推断:R 示例,施普林格
- 书籍:Soetaert, K. 和 P.M.J. Herman, 2009. 生态建模实践指南,使用 R 作为模拟平台,施普林格。
- 书籍: Stevens, H, 2009. 生态学入门与 R 语言,施普林格出版社 以及 2021 年在线版 在 Github 上。
- 书籍: Soetaert, K., Cash, J. 和 Mazzia, F. 2012. R 语言中的微分方程求解,施普林格出版社。
- 书籍: Griffiths, G.W., 2016. 使用 R 语言进行数值分析。常微分方程和偏微分方程的解法。剑桥大学出版社。