【发布时间】:2021-10-30 23:52:04
【问题描述】:
我目前正在开发一个集成微生物学和地球化学的模型,该模型使用 lsoda 来求解大量微分方程。该模型太大了,无法在此处发布,因为它由多个模块组成,但我发生了一些非常奇怪的事情。
这些是我的初始值 enter image description here
我已将它们初始化为零,因为我不想要任何种类的微生物,只是为了检查没有微生物时化学会如何变化。然而,经过 5 或 6 步后,我开始在一些微生物变量中看到不为零的值: enter image description here.
我想知道 lsoda 是否正在做某种回合,这就是我得到这些值的原因,否则我无法解释这些值是从哪里冒出来的。如果是这种情况,有谁知道如何阻止这种围捕?
【问题讨论】:
-
欢迎来到 Stack Overflow。请不要使用代码或数据的图像,因为没有大量不必要的努力就无法使用它们。如果您的问题是可重现的,这真的很有帮助。 How to ask a good question
-
我很欣赏你的模型很复杂,但如果不看更多细节,基本上是不可能回答这个问题的。浮点数学本质上是不精确的;虽然(例如)乘以 0 应该总是给出零,并且添加 0 永远不应该改变一个值,但大多数其他计算将导致舍入错误(例如
sqrt(2)^2-2 !=0和其他更微妙的例子......)可能值得尝试欧拉集成(ode(..., method="euler")以尽量减少其他地方发生任何复杂事情的可能性。 -
如果您收紧容错,请检查该行为是否会发生变化。绝对公差与组件的比例是否兼容?沿这些点生成 ODE 函数的结果,预期为零的非零分量可能暗示一些编程错误。
-
请提供足够的代码,以便其他人更好地理解或重现问题。
标签: r differential-equations desolve