多体动力学系统的代码生成。

pydy-code-gen的Python项目详细描述


Pydy代码生成

此发行版为PyDy提供代码生成工具。现在,它 生成可以计算普通函数右侧的函数 用sympy.physics.mechanics生成的微分方程 不同的后端:sympy的lambdifyTheanoCython

依赖关系

必需

  • python:2.7(python 3+可以工作)
  • 设置工具
  • 纽比:>;=1.6.1
  • sympy:>;=0.7.3

可选

  • cython:>;=0.15.1
  • 序号:>;=0.6.0
  • scipy:>;=0.9(仅用于完整示例)
  • matplotlib:>;=0.99(仅用于完整示例)

安装这些软件包的方法多种多样。参考scipy 有关详细信息,请参阅堆栈安装说明。

安装

一旦安装了依赖项,就可以从pypi安装包 使用:

$ easy_install pydy-code-gen

或:

$ pip install pydy-code-gen

您还可以获取源代码,然后安装[1]

使用zip下载:

$ wget https://github.com/PythonDynamics/pydy-code-gen/archive/master.zip
$ unzip pydy-code-gen-master.zip
$ cd pydy-code-gen-master
$ python setup.py install

使用git:

$ git clone https://github.com/PythonDynamics/pydy-code-gen.git
$ cd pydy-code-gen
$ python setup.py install
[1]Note that this is the latest development version. Specific releases can be found here: https://github.com/PythonDynamics/pydy-code-gen/releases or by checking out a tag with Git.

用法

这是一个简单的1自由度系统的例子:质量,弹簧, 重力和力作用下的阻尼系统:

/ / / / / / / / /
-----------------
  |    |     |   | 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(forces, particles)

将表达式和符号按顺序存储以生成代码:

mass_matrix = kane.mass_matrix_full
forcing_vector = kane.forcing_full
constants = (mass, stiffness, damping, gravity)
coordinates = (position,)
speeds = (speed,)
specified = (force,)

现在生成数值计算odes所需的函数。这个 生成器可以使用各种后端:lambdifytheanocython

from pydy_code_gen.code import generate_ode_function

evaluate_ode = generate_ode_function(mass_matrix, forcing_vector, constants,
                                     coordinates, speeds, specified,
                                     generator='lambdify')

在特定正弦曲线影响下积分运动方程 力:

from numpy import array, linspace, sin
from scipy.integrate import odeint

x0 = array([0.1, -1.0])
args = {'constants': array([1.0, 1.0, 0.2, 9.8]),
        'specified': lambda x, t: sin(t)}
t = linspace(0.0, 10.0, 1000)

y = odeint(evaluate_ode, x0, t, args=(args,))

绘制结果:

import matplotlib.pyplot as plt

plt.plot(t, y)
plt.legend((str(position), str(speed)))
plt.show()

开发环境

发展依赖性

  • 鼻子:1.3.0

安装

以下安装假定您拥有virtualenvwrapper和 生成包所需的依赖项:

$ mkvirtualenv pydy-dev
(pydy-dev)$ pip install numpy scipy cython nose theano sympy
(pydy-dev)$ pip install matplotlib # make sure to do this after numpy
(pydy-dev)$ git clone git@github.com:PythonDynamics/pydy-code-gen.git
(pydy-dev)$ cd pydy-code-gen
(pydy-dev)$ python setup.py develop

运行测试:

(pydy-dev)$ nosetests

运行基准测试N连杆摆问题。

(pydy-dev)$ python bin/benchmark_pydy_code_gen.py <max # of links> <# of time steps>

发行说明

0.1.0

  • 初始版本。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java需要设置框架。可设置大小(false)以重新绘制()   java我对PDF文件感到困惑   为什么是太阳。jvm。热点。调试器。DebuggerException:无法打开二进制文件`?   设置结果为textview时出现java空指针异常   我应该使用什么同步原语在Java中实现事件驱动程序框架?   java为什么WindowClosing处理程序在退出程序之前不执行后台任务?   如何将“20170712T18:43:04.000Z”转换为安卓或java中的相对时间?   Java,获取按键的时间长度,currentTimeMillies()始终为24   maven构建的java可执行Jar找不到logback。xml   java在其外部的函数中使用for循环中的值   java如何以表格格式将不同长度的数据对齐   java Play 2.5 WebSocket连接构建   maven而非eclipse的java强制转换问题   java如何在JFreeChart中使X轴上的值水平?   构建Java Windows应用程序以访问在线MySQL数据库需要什么   java添加构造函数会出错吗?这没有道理,请帮忙,编程问题   java在一个jframe中的两个JPanel中使用两个绘制方法   java数学或逻辑问题   java如何复制Androids库存摄像头方向更改