用于建模和模拟动态系统的框架。
项目描述
SimuPy 是一个用于模拟互连动态系统模型的框架,并提供了一个开源的、基于 python 的工具,可用于基于模型和系统的设计和仿真工作流程。动态系统模型可以指定为具有 API 文档中描述的接口的对象。模型也可以使用符号表达式来构建,如
from sympy.physics.mechanics import dynamicsymbols
from sympy.tensor.array import Array
from simupy.systems.symbolic import DynamicalSystem
x = x1, x2, x3 = Array(dynamicsymbols('x1:4'))
u = dynamicsymbols('u')
sys = DynamicalSystem(Array([-x1+x2-x3, -x1*x2-x2+u, -x1+u]), x, u)
它将自动为状态方程、输出方程和雅可比创建可调用函数。默认情况下,代码生成器使用sympy.lambdify的包装器。您可以通过将系统初始化参数code_generator(函数)和其他关键字参数传递给字典code_generator_args中的生成器来更改它。您可以通过更改模块变量来更改未来系统的默认值
import simupy.systems.symbolic
simupy.systems.symbolic.DEFAULT_CODE_GENERATOR = your_code_generator_function
simupy.systems.symbolic.DEFAULT_CODE_GENERATOR_ARGS = {'extra_arg': value}
存在许多帮助类/函数来简化模型的构建。例如,线性反馈控制器可以定义为
from simupy.systems import LTISystem
ctrl = LTISystem([[1.73992128, 0.99212953, -2.98819041]])
示例中的增益来自基于原点线性化系统的无限地平线 LQR。可以构建反馈控制下的系统框图
from simupy.block_diagram import BlockDiagram
BD = BlockDiagram(sys, ctrl)
BD.connect(sys, ctrl) # connect the current state to the feedback controller
BD.connect(ctrl, sys) # connect the controlled input to the system
可以定义具有非零维状态的系统的初始条件(默认为相应维的零),并且可以使用BlockDiagram的模拟方法模拟互连系统,
sys.initial_condition = [5, -3, 1]
res = BD.simulate(10)
它使用scipy.integrate.ode作为初始值问题的默认求解器。结果是SimulationResult类的一个实例,具有数组属性t、x、y和e,以及每个积分器时间步长的保存时间、状态、输出和事件值。第一个轴索引时间步长。对于x、y和e,第二个轴对各个信号分量进行索引,首先按每个系统添加到框图的顺序排序,然后根据系统状态和输出规范进行排序。模拟默认使用具有密集输出 的dopri5求解器,但不同只要它支持scipy.integrate.ode API的子集,就可以使用integrator_class和integrator_options选项。可以按照符号代码生成器选项的模式更改用于未来模拟的默认值。
还包括许多用于构建和操作系统的实用程序以及模拟结果:
来自 simupy.utils.symbolic的process_vector_args和lambdify_with_vector_args是使用sympy.lambdify生成代码的 助手
simupy.utils.callable_from_trajectory是一个简单的包装器,用于使用scipy.interpolate.splprep制作多项式样条插值器
simupy.matrices包括使用矩阵表达式构建(向量)系统并将结果重新包装成矩阵形式的工具
simupy.systems.SystemFromCallable是将函数转换为无状态系统(通常是控制器)以进行模拟的助手
MemorylessSystem和LTISystem是更快创建这些类型系统的子类
SwitchedSystem用于构造具有不连续性的系统,由event_equation_function输出的过零定义。
示例子目录包含许多已解决的问题。文档和文档字符串也可供参考。
安装
SimuPy 1.0 版可通过pip安装
$ pip install simupy
但是,最新的功能和示例仅在开发版本中可用。安装,
$ git clone https://github.com/simupy/simupy.git
$ pip install -e simupy
SimuPy 已在本地针对
但是对 Travis 的测试可能会在较新的版本上运行。许多功能在没有 SymPy 的情况下工作,因此安装不需要它。这些示例使用 matplotlib来可视化结果。测试使用pytest。这些文档是使用Sphinx == 1.6.3 构建的。
贡献
要讨论问题或功能请求,请提交问题。对于错误,请包含尽可能多的信息,包括操作系统、python 版本和所有依赖项的版本。
要做出贡献,请提出拉取请求。贡献应包括对任何新功能/错误修复的测试,并遵循最佳实践,包括 PEP8 等。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。