Julia 为什么在Differential Equations.jl中同时使用tableau和显式解算器?

Julia 为什么在Differential Equations.jl中同时使用tableau和显式解算器?,julia,differential-equations,differentialequations.jl,Julia,Differential Equations,Differentialequations.jl,我正在浏览微分方程.jl程序包。在里面 DiffEqDevTools/src/ode_tableaus.jl 中点和RK4 但我也可以在中看到这些方案的显式代码 ordinarydiffiq/src/integrators/fixed_timestep_integrators.jl 我有点期待一些代码使用tableaux而不是那里 做一个明确的解决者 我不知道如何检查这个画面是否被使用。 我尝试删除ordinarydiffiq.jl,但我的示例无法删除 跑 这恰恰表明正在使用显式代码。但是在 在

我正在浏览
微分方程.jl
程序包。在里面
DiffEqDevTools/src/ode_tableaus.jl
中点
RK4

但我也可以在中看到这些方案的显式代码
ordinarydiffiq/src/integrators/fixed_timestep_integrators.jl

我有点期待一些代码使用tableaux而不是那里 做一个明确的解决者

我不知道如何检查这个画面是否被使用。 我尝试删除
ordinarydiffiq.jl
,但我的示例无法删除 跑

这恰恰表明正在使用显式代码。但是在
在这种情况下,为什么会有表格呢?

是的,在大多数情况下,不使用表格。事实上,只有在使用
ExplicitRK(tableau=…)
方法时才使用tableau。您可以在中看到每种方法的收敛测试,但除此之外,通常不使用这些方法

这是因为基于tableau的实现往往没有那么高效。消除使用指向常量的指针所导致的间接性对运行时有可测量的影响。当然,在用户的
f
成本极高的渐近极限下,实现细节并不重要,但大多数实际情况都不在实际基准所证明的极限内(在该极限下,您应该始终使用多步骤方法)。因此,有最有效的龙格-库塔方法的硬编码版本和硬编码的高阶插值方案,因为这些是主要的方法,应该获得最大的效率

那么,为什么会存在这些画面呢?我认为重要的是要注意Differentialsequations.jl不仅仅是一个使用微分方程的软件包,它还是一个开发和测试新方法的软件包。这一点可以从以下几个方面得到证明。对于实现效率更高的算法,表仍然具有开发用途,因为表都具有相同的实现,因此这为确定方法之间的真正效率提供了一种简单的科学方法。使用表格不仅可以比较效率,还可以使用绘图配方比较稳定区域:

plot(constructRK4())

用于梳理所有RK方法并创建现代化选择,和。这些都是使用开发工具完成的实验

最后,Differentialsequations.jl确实是独一无二的,因为它不仅仅是您以前看到的东西的重新实现。与以前相比,一个明显的变化是,所选择的4/5阶龙格-库塔方法不是MATLAB或SciPy中的休眠王子对
DP5
(它只是一个
dopri5
包装器),而是一种现代算法:
Tsit5()
方法。这是因为,在计算量均匀的情况下,这种较新的方法理论上实现了较低的误差,而devtools证实了这一点。Differentialsequations.jl中的其他独特的东西是,等等,还有更多的研究正在进行中(在出版之前都在私有存储库中)。由于相关的开发套件,这其中的大部分都成为可能(或者至少很容易做到)

因此,我认为这清楚地表明了differential equations.jl的哲学与其他语言/库中的微分方程套件不同。在其他套件中,如MATLAB或SciPy,大多数时候的目标是为您提供一些基本的方法,这些方法通常很有用。效率不一定是目标(Shampine有意识地选择在MATLAB中不使用高阶RK方法就是一个很好的例子),包装“标准”实现通常已经足够好了(SciPy只是包装器)。对于这些软件套件来说,简单性和标准是有意义的

但是微分方程。jl的重点是开发处理现代计算困难方程的新方法,并使用这些新方法解决以前不可行的问题。由于关注点不同,有些选择也会有所不同。例如,拥有大量的方法/实现在这里是很好的,因为它允许用户和方法研究人员在算法之间进行比较,并找出如何不断改进算法和选择(我邀请用户就他们的问题测试tableau方法,看看一些模糊的RK方法是否做得很好)。我关心的是确保提供最有效的研究工具,并通过向用户提供默认值和建议来处理复杂性。如果文档中的建议有任何部分不清楚,请打开一个问题,以便我们讨论如何改进文档。但我认为引导用户“正确”选择方法是一个文档问题,而不是一个应该限制设计、功能或效率的问题

我将在不久的将来的一些博客文章中介绍Differentialsequations.jl的哲学,但这是它的要点。我不认为这是一个如此重要的问题,因为这对我来说更像是一个个人问题,为什么我总是知道一些低效的方法(尽管不推荐!),我希望这能给出一个信息丰富的答案