配置julia核心的高性能微分方程库DifferentialEquations的python接口diffeqpy
记录如何安装和配置julia核心的高性能微分方程库DifferentialEquations的python接口diffeqpy。
diffeqpy是一个用Python求解微分方程的包。它利用 julia核心的DifferentialEquations.jl,给出了高性能求解多种不同类型的微分方程。
下图是Julia的库DifferentialEquations.jl与其他求解工具的对比:
配置Julia环境
using Pkg
Pkg.add("DifferentialEquations")
Pkg.add("DiffEqBase")
Pkg.add("PyCall")
在julia终端配置本地python解释器
ENV["PYTHON"]="C:\\Users\\...\\python.exe"
Pkg.build("PyCall")
检查是否安装成功
using DifferentialEquations
using PyCall
配置python环境
pip install diffeqpy
pip install numba
测试ODE:洛伦兹方程(Systems of ODEs: Lorenz Equations)
import numpy as np
from diffeqpy import de
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
def f(u,p,t):
x, y, z = u
sigma, rho, beta = p
return [sigma * (y - x), x * (rho - z) - y, x * y - beta * z]
if __name__ == '__main__':
u0 = [1.0, 0.0, 0.0]
tspan = (0., 100.)
p = [10.0, 28.0, 8/3]
prob = de.ODEProblem(f, u0, tspan, p)
sol = de.solve(prob,saveat=0.01)
ut = np.transpose(sol.u)
fig = plt.figure()
ax = fig.add_subplot(121)
ax.plot(sol.t, sol.u)
ax = fig.add_subplot(122, projection='3d')
ax.plot(ut[0, :], ut[1, :], ut[2, :])
plt.show()
等待运行成功画出以下图片: