SciML教程系列:

从其他语言翻译来的求解器

对于熟悉MATLAB/Python/R的程序员,可先使用下表中的求解器,因为这些求解器是从这几种语言中翻译而来

Julia翻译高效替代
ode23BS3()
ode45/dopri5DP5()Tsit5()
ode23sRosenbrock23()Rodas4()
ode113VCABM()Vern7()
dop853DP8()Vern7() is more efficient
ode15s/vodeQNDF()
FBDF()
Rodas4(), KenCarp4()
TRBDF2() RadauIIA5()
ode23tTrapezoid()
ode23tbTRBDF2()
lsodalsoda()AutoTsit5(Rosenbrock23())
AutoVern7(Rodas5())
ode15iIDA()/DFBDF()Rodas4()

其中,lsoda()在LSODA.jl中,可求解刚性和非刚性问题,调用需安装

]add LSODA
using LSODA

重新封装版本

Julia中也有这些函数的重新封装版本,重新封装后一般比原语言中要快两三倍,但比Julia推荐的方法还要慢上1000倍。

调用方法
MatlabMATLABDiffEq.jlusing MATLABDiffEq
scipySciPyDiffEq.jlusing SciPyDiffEq
r-deSolvedeSolveDiffEq.jlusing deSolveDiffEq

这三个包需要在github上下载安装

]add https://github.com/JuliaDiffEq/MATLABDiffEq.jl
]add https://github.com/JuliaDiffEq/SciPyDiffEq.jl
]add https://github.com/JuliaDiffEq/deSolveDiffEq.jl

其中,MATLABDiffEq.jl提供了一个桥接器,可以将Julia代码与MATLAB的ODE求解器进行交互。它主要用于求解常微分方程和偏微分方程。可以使用MATLAB的ODE求解器来解决几乎所有常见的数学问题,从最基本的方程到更复杂的非线性系统。换言之,其提供了一些MATLAB中求解器,包括ode23, ode45, ode113, ode23s, ode23t, ode23tb, ode15s, ode15i。

SciPyDiffEq.jl基于SciPy库中的ode和odeint函数实现,可以在Julia中实现类似Python中SciPy库的微分方程求解功能,可用方法有RK45, RK23, Radau, BDF, LSODA。

deSolveDiffEq.jl可调用:lsoda ,lsode ,lsodes ,lsodar ,vode ,daspk ,euler ,rk4 ,ode23 ,ode45 ,radau ,bdf ,bdf_d ,adams ,impAdams ,impAdams_d。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐