对于数字积分器,“折衷”是什么意思,SciPy的odeint是否使用它们?


25

在此评论中,我写道:

...默认的SciPy积分器,我假设它仅使用辛方法。

在这里,我指的是SciPy odeint,它使用“非刚性(Adams)方法”或“刚性(BDF)方法”。根据消息来源

def odeint(func, y0, t, args=(), Dfun=None, col_deriv=0, full_output=0,
           ml=None, mu=None, rtol=None, atol=None, tcrit=None, h0=0.0,
           hmax=0.0, hmin=0.0, ixpr=0, mxstep=0, mxhnil=0, mxordn=12,
           mxords=5, printmessg=0):
    """
    Integrate a system of ordinary differential equations.

    Solve a system of ordinary differential equations using lsoda from the
    FORTRAN library odepack.

    Solves the initial value problem for stiff or non-stiff systems
    of first order ode-s::
        dy/dt = func(y, t0, ...)
    where y can be a vector.
    """

这是一个示例,其中我将卫星的轨道绕地球传播了三个月,以证明它的进动符合预期。

我相信非辛格积分器具有不良的性质,即它们往往不节约能量(或其他数量),因此在例如轨道力学中是不良的。但是我不确定是什么使辛格积分器辛辛格提。

是否有可能以一种简单明了(很简单)但又不准确的方式来解释该属性是什么(使辛格积分器成为辛格)?我是从集成器内部功能而不是测试性能方面来询问的。

odeint仅使用辛辛苦积分器的怀疑是正确的吗?


4
根据经验,您只希望黑匣子积分器是辛辛的,如果它需要您分离出位置和动量方程式。
origimbo'Mar

@origimbo谢谢。这些都可以,并且看起来像是odeint一个Python包装器,用于相当古老,已建立且参考良好的源代码(已编辑的问题,引用了ODEPACK和LSODA),尽管我当然承认在黑盒模式下使用它。我的链接示例显示6D状态向量由三个位置和三个速度组成。
uhoh

11
ODEPACK和LSODA中的ODE积分器不是辛积分器。
Brian Borchers

2
这是一个工作示例,比较了两个非常简单的求解器:Euler和Symplectic Euler:idontgetoutmuch.wordpress.com/2013/08/06/…
idontgetoutmuch

2
Hairer,Nørsett和Wanner所著的书很好地解释了辛方法。特别要看图16.1,以及这里的图。
JM

Answers:


47

让我从更正开始。不,odeint没有任何辛的积分器。不,辛辛苦作并不意味着节约能源。

辛是什么意思,什么时候应该使用它?

首先,辛是什么意思?辛表示该解存在于辛流形上。辛流形是由2形式定义的解集。辛流形的细节听起来像是数学上的废话,因此其要旨是在这种流形上的两组变量之间存在直接关系。之所以对物理学如此重要,是因为哈密顿方程自然具有这样的解:解位于相空间中的辛流形上,而自然分裂是位置和动量分量。对于真正的哈密顿解,该相空间路径是恒定能量。

ØΔŤññ

这意味着,由于缺乏漂移并且几乎保证了周期性,因此辛辛积分器比常规积分器更容易捕获长时间模式。该笔记本在开普勒问题上很好地显示了这些属性。第一张图片显示了我在谈论解决方案的周期性。

在此处输入图片说明

这是使用Kahan六阶辛积分器和DifferentialEquations.jl的Li求解的。您会看到能量不是完全守恒的,但是其变化取决于扰动解歧管与真实歧管的距离。但是,由于数值解本身位于辛流形上,因此它趋于几乎完全是周期性的(您可以看到一些线性数值漂移),从而使其对于长期积分非常有用。如果您对RK4进行相同操作,则可能会遇到灾难:

在此处输入图片说明

您可以看到问题在于数值解中没有真正的周期性,因此加班会趋于漂移。

这凸显了选择辛积分器的真正原因:辛积分器擅长于对具有辛性质的问题(哈密顿系统)进行长时间积分。因此,让我们来看几件事。请注意,即使在辛问题上,您也不总是需要辛积分器。对于这种情况,自适应五阶Runge-Kutta方法可以很好地完成工作。这里是Tsit5

在此处输入图片说明

注意两件事。第一,它具有足够好的精度,您无法在相空间图中看到实际的漂移。但是,在右侧您会看到这种能量漂移,因此,如果您进行足够长的积分,则此方法将不如具有周期特性的求解方法那样好。但这提出了一个问题,即相对于非常精确地集成,它如何实现效率?好吧,这还不太确定。在DiffEqBenchmarks.jl中,您可以找到一些基准调查此问题。例如,这个笔记本通过四重Boson模型研究了汉密尔顿方程组的能量误差与运行时间的关系,结果表明,如果您想要非常高的精度,那么即使是相当长的积分时间,使用高阶RK或Runge-Kutta Nystrom( RKN)方法。这是有道理的,因为要满足辛特性,积分器必须放弃一定的效率,并且必须在固定的时间步长上进行(有一些研究正在朝着后者迈进,但步伐还不是很远)。

此外,从这两个笔记本中都可以注意到,您也可以只采用一种标准方法,并将其投影到解决方案的每个步骤(或每几个步骤)中。这就是使用DifferentialEquations.jl ManifoldProjection回调的示例所执行的操作。您会看到维护守恒定律,但每步解决一个隐式系统的成本都增加了。您还可以使用完全隐式ODE求解器或奇异质量矩阵添加守恒方程,但是最终结果是,这些方法的折衷方式在计算上更加昂贵。

综上所述,您想要找到一个辛积分器的问题类别是那些在辛流形(哈密顿系统)上具有解决方案的问题,在这些问题中您不想投资计算资源来拥有一个非常精确的(公差<1e-12)解决方案,不需要精确的能源/等。保护。这凸显了所有这些都是关于长期集成特性的,所以您不应该像一些文献所建议的那样,将所有这些都随意地吸引。但是在许多领域(例如天体物理学)中,它们仍然是非常重要的工具,在这些领域中,您确实需要进行长时间的积分,因此您需要以足够快的速度解决问题而又不会缺乏准确性。

在哪里可以找到辛积分器?存在什么样的辛积分器?

通常有两类辛积分器。有辛格的Runge-Kutta积分器(如上述示例所示),并且隐性的Runge-Kutta方法具有辛的性质。如@origimbo所述,辛辛格的Runge-Kutta积分器要求您为它们提供分区的结构,以便它们可以分别处理位置和动量部分。但是,与该评论相反,隐式Runge-Kutta方法是辛的,不需要这样做,而是需要求解非线性系统。这并不算太糟糕,因为如果系统不是刚性系统,则可以通过函数迭代或安德森加速来解决该非线性系统,但是辛辛RK方法可能仍应优先考虑提高效率(

就是说,odeint没有这两个系列中的任何一个方法,因此,如果您正在寻找辛积分器,那不是一个好的选择。在Fortran中,Hairer的站点有一小组可以使用Mathematica有一些内置的。GSL ODE求解器具有 IIRC是辛的隐式RK高斯点积分器,但这是使用GSL方法的唯一原因。

,最全面的辛积分器集可以在Julia的DifferentialEquations.jl中找到(回想起这是用于上面的笔记本)。本页上提供了可用的辛格Runge-Kutta方法的列表,您会注意到隐式中点方法也是辛的(隐式Runge-Kutta Trapezoid方法被认为是“几乎辛”的,因为它是可逆的)。它不仅具有最大的方法集,而且是开源的(您可以使用高级语言查看代码及其测试),并且具有许多基准。一个很好的入门笔记本,可以用它来解决身体问题,是本教程笔记本。但是当然,建议您通过第一个ODE教程开始使用该软件包。

通常,您可以在此博客文章中找到有关数值微分方程组的详细分析。它非常详细,但是由于它必须涵盖很多主题,因此每个主题的细节都比此要少,因此可以随时要求以任何方式进行扩展。


10
有了这个答案,我似乎已经击中了Stack Exchange Jackpot!对于我来说,这是一个完美的答案,因为我立即了解了其中的一些内容,而我不想离开的部分也不希望进一步阅读。我非常感谢您花费大量时间来彻底获取此答案,并包括其他有用和指导性的链接。
uhoh

在讨论数学细节之前,我们可以粗略地说意味着体积的节约,不是吗?
米格尔(Miguel)

2
FTR是自适应5阶Runge-Kutta的性能比RK4更好的原因,不是因为它具有更高的阶数,而是它选择了更合适的步长。RK4表现很差的原因主要是步长在近地点过高。具有一半步长的相同求解器将提供更好的解决方案。(只是,这将浪费大量时间来精细地解决远地点周围的轨道,而根本不需
要这样做

1
优秀的博览会。附带提出一个问题:OP首先是对Python的引用-是否有链接的Julia示例中推荐的Python教程/软件包?
Quetzalcoatl

1
对于此类集成,我知道的唯一Python软件包是diffeqpy,该文件未在README中进行记录,但您可以访问所有这些方法,并使用该软件包在Python中重新编写。
克里斯·拉卡卡斯

14

pqHpq

dqdŤ=+Hp
dpdŤ=-Hq
H
pŤqŤ=ϕŤpŤ0qŤ0
dpdqpq如果是一维,您可以认为这是在说相空间上闭合曲线内部的面积是守恒的。这确保了各种良好的稳定性,因为轨迹的“球”必须彼此保持“靠近”。

就数值而言,辛积分器以相同的方式起作用,也保留了该面积/两种形式。反过来,这意味着存在一个守恒的“数字哈密顿量”(可能与确切的“哈密顿量”不同)。请注意,稳定性与精度是不一样的,因此辛格方法的大部分优点是在很长的时间积分时才会显现出来(例如,您的方法可能会将卫星迅速放置在地球的反面,而永远不会使其衰减到它)。


这次真是万分感谢!我现在将使用薪资等级以上的词语。当轨迹的n球接近分叉时(如3体仿真中的那些),其风险更大。cf. Doedel等。2007年,国际 J.分叉与混乱,第17卷,第。8(2007)2625-2677我该怎么办?也是ieec.cat/hosted/web-libpoint/papers/…–
uhoh,

2
除非读者知道数学上的细节,否则提及稳定性会产生误导,因为体积的节省并不意味着各个轨迹保持接近。
米格尔(Miguel)

1
@Miguel我认为这是其中一种不遵循数学细节的读者都受到谴责的情况之一,但是就通常的数字学家对准确性,稳定性和计算效率的三驾马车而言,我认为强调稳定性好处是有用的。如果您能想到更好的东西但并非故意不正确,我很乐意接受有关重写的建议。
origimbo '18

22

1
@Miguel:但是粒子的斑点可以分为两个或更多部分。它的体积只需保持恒定即可。
Wolfgang Bangerth
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.