Python使用diffeqpy接口调用 julia核心的微分方程库DifferentialEquations

配置julia核心的高性能微分方程库DifferentialEquations的python接口diffeqpy

记录如何安装和配置julia核心的高性能微分方程库DifferentialEquations的python接口diffeqpy。

diffeqpy是一个用Python求解微分方程的包。它利用 julia核心的DifferentialEquations.jl,给出了高性能求解多种不同类型的微分方程。

下图是Julia的库DifferentialEquations.jl与其他求解工具的对比:
在这里插入图片描述

配置Julia环境

  1. 可直接官网下载安装二进制文件。最简环境即可,新手安装juliaPro全家桶反而会引起包管理冲突。
  2. 打开julia终端,配置国内源参考。 安装diffeqpy依赖库:
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()

等待运行成功画出以下图片:运行结果

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值