显式龙格-库塔十四阶公式

计算科学 C++ 参考请求 龙格库塔
2021-12-03 22:46:12

我需要一个明确的 Runge-Kutta 14 阶公式。如果您知道一些讨论Runge-Kutta至少10 阶(或更高,因为我正在寻找 14 阶)的参考资料,并且有关于整个公式的信息,例如

y=y+hC(c1k1+c2k2+c3k3++cnkn)

具有定义的系数并且可能是用 C 或 C++ 编写的代码。k1,,kn

1个回答

由于 Feagin 的 14 阶方法可以在DifferentialEquations.jl中找到。将它们与 128 位浮点运算一起使用的示例如下:

using OrdinaryDiffEq, DoubleFloats
function lorenz(du,u,p,t)
 du[1] = 10.0(u[2]-u[1])
 du[2] = u[1]*(28.0-u[3]) - u[2]
 du[3] = u[1]*u[2] - (8/3)*u[3]
end
u0 = [1.0;0.0;0.0]
tspan = (0.0,100.0)
prob = ODEProblem(lorenz,u0,tspan)
sol = solve(prob,Feagin14(),abstol=1e-12.reltol=1e-12)

当然可以减少公差。实现相当简单,可以在这里找到:

https://github.com/JuliaDiffEq/OrdinaryDiffEq.jl/blob/master/src/perform_step/feagin_rk_perform_step.jl#L608-L764

使用此处定义的画面:

https://github.com/JuliaDiffEq/OrdinaryDiffEq.jl/blob/master/src/tableaus/feagin_tableaus.jl#L1546-L1980

请注意,您可以使用内置的不确定性量化工具来查看该精度是否足够好,以至于混沌系统尚未偏离真实轨迹,因此这是 14 阶积分器的一个很好的应用。有关详细信息,请参阅ProbInts 文档但是,使用它通常不是一个好主意,因为对于 64 位浮点数,它仅在小于机器 epsilon 的容差下才有效,因此您需要像这样一个非常奇怪的案例来证明使用它的合理性。