为什么使用 Julia 时 Lorenz 系统轨迹看起来很糟糕?

问题描述 投票:0回答:1

我正在 MATLAB 和 Julia 中解决长时间跨度(0 到 100,000)的洛伦兹方程组,试图进行粗略的运行时比较(我在 MATLAB 中使用 ode45,在 Julia 中使用 DP5,两者都使用abstol 和 reltol 设置为 1e-6,希望它们计算的结果是等价的)。

我发现 MATLAB 花费了大约 18 秒,并生成了这个轨迹图: enter image description here

Julia 的计时时间为 14.517 毫秒,但我收到以下警告: 警告:已中断。需要更大的 maxiters。如果您使用非刚性 ODE 积分器或自动切换算法(默认),您可能需要考虑使用刚性方程方法。 enter image description here 除此之外,轨迹图看起来……嗯……很糟糕! enter image description here

为什么会发生这种情况?有人有什么想法吗? ode45和DP5有可比性吗?我应该编写自己的微分方程求解器以确保我可以公平地比较两者吗?

我尝试确保使用等效的求解器,使用相同的相对和绝对容差,以便 ODE 求解器采用的步长相似,但得到的结果却截然不同。

matlab julia runtime ode lorenz-system
1个回答
0
投票

ode45
DP5
具有可比性。您不需要编写自己的 ode 求解器。很可能您的集成器 Julia 代码有错误。检查这一点的最简单方法是在 Matlab 和 Julia 中调用随机输入的被积函数,以确保您实际上拥有相同的方程。

© www.soinside.com 2019 - 2024. All rights reserved.