让我从更正开始。不,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教程开始使用该软件包。
通常,您可以在此博客文章中找到有关数值微分方程组的详细分析。它非常详细,但是由于它必须涵盖很多主题,因此每个主题的细节都比此要少,因此可以随时要求以任何方式进行扩展。