SciML教程系列:
对于熟悉MATLAB/Python/R的程序员,可先使用下表中的求解器,因为这些求解器是从这几种语言中翻译而来
Julia翻译 | 高效替代 | |
---|---|---|
ode23 | BS3() | |
ode45/dopri5 | DP5() | Tsit5() |
ode23s | Rosenbrock23() | Rodas4() |
ode113 | VCABM() | Vern7() |
dop853 | DP8() | Vern7() is more efficient |
ode15s/vode | QNDF() FBDF() | Rodas4(), KenCarp4() TRBDF2() RadauIIA5() |
ode23t | Trapezoid() | |
ode23tb | TRBDF2() | |
lsoda | lsoda() | AutoTsit5(Rosenbrock23()) AutoVern7(Rodas5()) |
ode15i | IDA()/DFBDF() | Rodas4() |
其中,lsoda()在LSODA.jl中,可求解刚性和非刚性问题,调用需安装
]add LSODA
using LSODA
Julia中也有这些函数的重新封装版本,重新封装后一般比原语言中要快两三倍,但比Julia推荐的方法还要慢上1000倍。
调用方法 | ||
---|---|---|
Matlab | MATLABDiffEq.jl | using MATLABDiffEq |
scipy | SciPyDiffEq.jl | using SciPyDiffEq |
r-deSolve | deSolveDiffEq.jl | using 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。