射击法是求解非线性边值 ODE 的唯一通用数值方法吗?

计算科学 非线性方程
2021-12-09 07:13:17

在逛Mathematica.se的过程中,我逐渐注意到有一种微分方程求解问题一直在“困扰”我们,那就是非线性常微分方程 (ODE) 的边值问题 (BVP)。

Mathematica函数使用射击方法似乎是 Mathematica.SE 用户知道的唯一方法。有时效果很好,但在更多情况下(根据我个人的感觉),很难找到合适的初始猜测NDSolve

在这种情况下,通常无法找到正确的猜测。这是一个导致我发布此问题的示例。

那么,射击法是求解非线性 ODE 的 BVP 的唯一通用数值方法吗?

如果是这样,是否有一种获得正确初始猜测的好方法?

如果没有,有什么替代方案?如果可能的话,请为现有的求解器提供一些介绍或链接来实现这些替代方案。

2个回答

射击方法是求解非线性 ODE(s) 的 BVP 的唯一通用数值方法吗?

不。

大多数其他方法由三个部分组成:

  1. 离散化这可以通过有限差分、有限体积、有限元(Galerkin 或搭配)、谱方法等来完成。这将问题从无限维减少到非线性代数方程的有限维系统。
  2. 非线性求解器通常这是一种牛顿型方法,这意味着您可以在本地线性化问题并计算更新。这将问题简化为一系列线性代数系统。
  3. 一个线性求解器

与射击不同,这些方法很容易推广到更高维度的椭圆问题。如果您阅读任何有关数值方法的介绍性书籍,您会发现对这类方法的描述。对于现有的求解器,请参见例如 MATLAB 的bvp4c.

这些方法仍然需要初步猜测。良好的初步猜测通常基于特定于问题的一些洞察力。我相信没有一种通用技术可以为任意 BVP 找到好的初始猜测。您应该记住,非线性 BVP 可能有多个解,而您获得哪一个将取决于您最初的猜测。

不它不是。还有

  • 多次射击
  • 搭配
  • 有限差分
  • 定点迭代

可能还有更多。