用于多体动力学的 Python 工具包。
项目描述
PyDy是 Python Dynamics 的缩写,是一个用 Python 编程语言编写的工具包,它利用一系列科学程序来研究多体动力学。目标是拥有一个模块化框架,可以为用户提供所需的工作流程,包括:
型号规格
运动生成方程
模拟
可视化
基准测试
出版物
我们首先构建了SymPy 力学包,它提供了一个 API,用于构建模型并为复杂的多体系统生成运动的符号方程。最近,我们开发了两个包pydy.codegen和 pydy.viz,分别用于模型的模拟和可视化。这个 Python 包包含这两个包和其他工具,用于处理从 SymPy 机制生成的数学模型。目前在 PyDy 工作流中使用的其余工具是流行的科学 Python 包,例如NumPy、SciPy、IPython、Jupyter、ipywidgets、pythreejs和matplotlib ,它为数值分析、模拟和可视化提供了额外的代码。
安装
我们推荐使用conda包管理器和Anaconda或Miniconda 发行版,以便于跨平台安装。
安装 Anaconda(或 Miniconda)后,键入:
$ conda install -c conda-forge pydy
此外,安装所有可选依赖项的一种简单方法是使用 conda 安装pydy-optional元包:
$ conda install -c conda-forge pydy-optional
请注意,pydy-optional当前强制使用 Jupyter 4.0,因此您可能不想安装到您的根环境中。创建一个新环境来处理使用嵌入式 Jupyter 可视化的 PyDy 示例:
$ conda create -n pydy -c conda-forge pydy-optional $ conda activate pydy (pydy)$ python -c "import pydy; print(pydy.__version__)"
其他安装选项
如果你安装了 pip 包管理器,你可以输入:
$ pip install pydy
还支持从源安装。可以从 PyPi [ 1 ]下载该软件包的最新稳定版本:
$ wget https://pypi.python.org/packages/source/p/pydy/pydy-X.X.X.tar.gz
并提取并安装[ 2 ]:
$ tar -zxvf pydy-X.X.X.tar.gz $ cd pydy-X.X.X $ python setup.py install
依赖项
PyDy 对以下软件[ 3 ]有硬依赖:
PyDy 具有用于扩展代码生成的可选依赖项:
和带有Scene.display_jupyter()的动画可视化:
Jupyter Notebook >= 6.0.0 或Jupyter Lab >= 1.0.0
ipywidgets >= 6.0.0
pythreejs >= 2.1.1
或带有Scene.display_ipython()的交互式动画可视化:
4.0.0 <= Jupyter 笔记本< 5.0.0
4.0.0 <= ipywidgets < 5.0.0
这些示例可能需要这些依赖项:
matplotlib >= 3.1.2
用法
这是一个简单的单自由度系统的示例:受弹簧、阻尼器、重力和外力影响的质量:
/ / / / / / / / / ----------------- | | | | g \ | | | V k / --- c | | | | x, v -------- V | m | ----- -------- | F V
派生系统:
from sympy import symbols
import sympy.physics.mechanics as me
mass, stiffness, damping, gravity = symbols('m, k, c, g')
position, speed = me.dynamicsymbols('x v')
positiond = me.dynamicsymbols('x', 1)
force = me.dynamicsymbols('F')
ceiling = me.ReferenceFrame('N')
origin = me.Point('origin')
origin.set_vel(ceiling, 0)
center = origin.locatenew('center', position * ceiling.x)
center.set_vel(ceiling, speed * ceiling.x)
block = me.Particle('block', center, mass)
kinematic_equations = [speed - positiond]
force_magnitude = mass * gravity - stiffness * position - damping * speed + force
forces = [(center, force_magnitude * ceiling.x)]
particles = [block]
kane = me.KanesMethod(ceiling, q_ind=[position], u_ind=[speed],
kd_eqs=kinematic_equations)
kane.kanes_equations(particles, loads=forces)
创建一个系统来管理积分并为常数和指定数量指定数值。在这里,我们指定正弦强制:
from numpy import array, linspace, sin
from pydy.system import System
sys = System(kane,
constants={mass: 1.0, stiffness: 10.0,
damping: 0.4, gravity: 9.8},
specifieds={force: lambda x, t: sin(t)},
initial_conditions={position: 0.1, speed: -1.0},
times=linspace(0.0, 10.0, 1000))
积分运动方程得到状态轨迹:
y = sys.integrate()
绘制结果:
import matplotlib.pyplot as plt
plt.plot(sys.times, y)
plt.legend((str(position), str(speed)))
plt.xlabel('Time [s]')
plt.show()
文档
该软件包的文档托管在http://pydy.readthedocs.org,但您也可以使用以下说明从源代码构建它们。
要构建文档,您必须安装依赖项:
要构建 HTML 文档,请从docs目录中运行 Make:
$ cd docs $ make html
然后,您可以从首选 Web 浏览器查看文档,例如:
$ firefox _build/html/index.html
模块和包
代码生成(codegen)
这个包提供了代码生成工具。它生成的函数可以数值计算由sympy.physics.mechanics生成的常微分方程的右侧,并具有三个不同的后端:SymPy 的lambdify、Theano 和 Cython。
模型(models.py)
模型模块提供了一些经典系统的预制模型。
系统(system.py)
System 模块提供了一个System类来管理单个系统的仿真。
可视化(即)
该软件包提供了创建系统 3D 动画可视化的工具。可视化利用 WebGL 并在 Web 浏览器中运行。它们也可以嵌入到 IPython 笔记本中以增加交互性。
开发环境
源代码由 Git 版本控制系统管理。要获取最新的开发版本并访问完整的存储库,请使用以下命令从 Github 克隆存储库:
$ git clone https://github.com/pydy/pydy.git
然后,您应该安装依赖项以运行测试:
隔离环境
设置一个虚拟环境以将开发代码与系统上的其他版本隔离开来通常是有利的。有两种流行的环境管理器可以很好地与 Python 包配合使用:virtualenv 和 conda。
以下安装假设您有virtualenvwrapper除了 virtualenv 和构建各种包所需的所有依赖项:
$ mkvirtualenv pydy-dev (pydy-dev)$ pip install numpy scipy cython nose theano sympy ipython "notebook<5.0" "ipywidgets<5.0" version_information (pydy-dev)$ pip install matplotlib # make sure to do this after numpy (pydy-dev)$ git clone git@github.com:pydy/pydy.git (pydy-dev)$ cd pydy (pydy-dev)$ python setup.py develop
或使用conda:
$ conda create -c pydy -n pydy-dev setuptools numpy scipy ipython "notebook<5.0" "ipywidgets<5.0" cython nose theano sympy matplotlib version_information $ source activate pydy-dev (pydy-dev)$ git clone git@github.com:pydy/pydy.git (pydy-dev)$ cd pydy (pydy-dev)$ conda develop .
完整的 Python 测试套件可以运行:
(pydy-dev)$ nosetests
对于 JavaScript 测试,使用 Jasmine 和毯子.js 库。这两个库都包含在 pydy.viz 的源代码中。要运行 JavaScript 测试:
cd pydy/viz/static/js/tests && phantomjs run-jasmine.js SpecRunner.html && cd ../../../../../
基准
运行基准测试以使用各种后端测试 n-link 摆问题:
$ python bin/benchmark_pydy_code_gen.py <max # of links> <# of time steps>
引文
如果您在工作或研究中使用 PyDy,请在您的出版物或网络上引用我们。该引文可用于:
Gilbert Gede、Dale L Peterson、Angadh S Nanjangud、Jason K Moore 和 Mont Hubbard,“使用 Python 进行约束多体动力学:从符号方程生成到发布”,ASME 2013 国际设计工程技术会议和计算机与工程信息会议,2013 , 10.1115/DETC2013-13470。
问题、错误、功能请求
如果您对安装、使用等有任何疑问,请随时向我们的公共邮件列表发送消息或访问我们的Gitter 聊天室。
如果您认为存在错误或想要请求功能,请在 Github 上打开一个问题。