Julia调用Matlab, Python以及R的微分方程求解器

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。

猜你喜欢

转载自blog.csdn.net/m0_37816922/article/details/125032144