SimuPy快速上手教程:10分钟从pip安装到第一个框图仿真

📅 2026/8/24 10:06:28
SimuPy快速上手教程:10分钟从pip安装到第一个框图仿真
SimuPy快速上手教程10分钟从pip安装到第一个框图仿真【免费下载链接】simupyA framework for modeling and simulating dynamical systems项目地址: https://gitcode.com/gh_mirrors/si/simupySimuPy 是一个开源的 Python 动力学系统建模与仿真框架让你用几行代码就能搭建系统模型、连接框图并完成数值仿真。本教程面向新手带你完成 pip 安装、构建第一个动力学系统并跑通框图仿真10 分钟即可上手。 什么是 SimuPySimuPyA framework for modeling and simulating dynamical systems把建模—互连—仿真三步做成了 Python 化的工作流符号化建模用 SymPy 表达式直接书写状态方程自动生成可调用函数和 Jacobian框图互连通过BlockDiagram把多个子系统、控制器连成闭环像搭积木一样组成完整系统数值仿真内置基于 SciPy ODE 求解器的仿真接口一步simulate()得到时间序列结果丰富的辅助工具线性时不变系统LTISystem、无记忆系统MemorylessSystem、带断点切换的 SwitchedSystem 等。它适合控制系统设计、物理建模、教学演示等场景且大部分功能不依赖 SymPy开箱即用。 环境要求与安装步骤环境要求见 setup.py 与 requirements.txt依赖版本要求说明Python≥ 3.6开发版建议 3.7NumPy≥ 1.11必装SciPy≥ 0.18必装数值求解SymPy≥ 1.0可选符号化建模需要Matplotlib≥ 2.0可选绘制仿真结果一键安装 SimuPypip install simupy如果需要用符号化建模和示例绘图补装可选依赖pip install sympy1.0 matplotlib2.0安装开发版最新特性只在开发版中提供git clone https://gitcode.com/gh_mirrors/si/simupy cd simupy pip install -e .安装完成后快速验证一下import simupy from simupy.systems import LTISystem from simupy.block_diagram import BlockDiagram print(simupy.__name__) # 输出 simupy 即安装成功 第一个仿真符号化动力学系统以经典的 Van der Pol 振子为例完整代码见 examples/vanderpol.py只需 5 步import numpy as np from simupy.systems.symbolic import DynamicalSystem, dynamicsymbols from simupy.block_diagram import BlockDiagram from simupy.array import Array, r_ x x1, x2 Array(dynamicsymbols(x1:3)) mu 5.0 # 1. 用符号表达式定义状态方程 sys DynamicalSystem(r_[x2, -x1 mu*(1 - x1**2)*x2], x, constants_values{}) # 2. 设置初始条件 sys.initial_condition np.array([1, 1]).T # 3. 构建框图 BD BlockDiagram(sys) # 4. 仿真 30 秒 res BD.simulate(30) # 5. res.t / res.x / res.y 就是时间、状态、输出序列直接画曲线核心概念只有三个DynamicalSystem状态方程的对象化表示自动完成代码生成默认用sympy.lambdify包装可在初始化时通过code_generator参数替换源码见 simupy/systems/symbolic.pyBlockDiagram仿真顶层容器负责互连与求解simupy/block_diagram.pySimulationResult仿真结果对象res.t、res.x、res.y、res.e分别存放每个积分步的时间、状态、输出和事件值第一轴为时间索引。 默认求解器为dopri5带稠密输出也可以传入任意兼容scipy.integrate.ode接口的integrator_class和integrator_options。 框图仿真把系统与控制器连成闭环SimuPy 框图仿真的精髓是connect一行代码完成系统输出 → 控制器输入的信号连线。from simupy.systems import LTISystem from simupy.block_diagram import BlockDiagram # 线性反馈控制器增益来自 LQR ctrl LTISystem([[1.73992128, 0.99212953, -2.98819041]]) BD BlockDiagram(sys, ctrl) BD.connect(sys, ctrl) # 系统状态反馈给控制器 BD.connect(ctrl, sys) # 控制量作用回系统 sys.initial_condition [5, -3, 1] res BD.simulate(10)一个完整的闭环控制仿真示例非线性系统 线性化 LQR 控制器可以直接参考 examples/linearcontrol_nonlinearsys.py它还演示了如何用state_jacobian_equation_function自动提取线性化矩阵 A、B 来设计控制器。 常用系统类型一览除了通用动力学系统SimuPy 提供了几类快捷件覆盖大部分工程场景LTISystem / MemorylessSystem快速构建线性时不变系统和无状态环节SystemFromCallable把普通 Python 函数包装成无状态系统典型如控制器SwitchedSystem处理含断点的切换系统通过event_equation_function的零交叉检测切换时刻——弹跳小球这类碰撞问题就是用它建模的可参考 examples/bouncing_ball.py矩阵工具simupy/matrices.py 支持用矩阵表达式直接构建向量系统。 学习路径示例与文档入口想巩固手感推荐按这个顺序做仓库自带的 7 个完整示例examples/ 目录示例文件学到的能力examples/vanderpol.py符号化建模 基本仿真绘图examples/pid.pyPID 控制器闭环examples/simple_saturation.py饱和等非线性环节examples/discrete_lti.py离散 LTI 系统examples/bouncing_ball.pySwitchedSystem 事件检测examples/riccati_system.pyRiccati 方程系统examples/linearcontrol_nonlinearsys.py线性化 LQR 控制器设计进阶资料概念总览docs/overview.rstAPI 文档入口docs/api/api.rst含 block_diagram、symbolic_systems、discontinuities 等模块说明测试用例当教材读tests/ 目录如 tests/test_block_diagram.py 展示了各类用法的断言方式版本历史CHANGELOG.rst❓ 常见问题Q1pip 安装后 import 报错确认 Python ≥ 3.6 且 NumPy、SciPy 已装pip install numpy scipy。Q2不用 SymPy 能用吗可以。核心仿真功能只依赖 NumPy SciPySymPy 仅用于符号化建模与示例。Q3仿真精度不够怎么办调整simulate(integrator_options...)里的rtol/atol/nsteps/max_step例如 bouncing_ball 示例将rtol设为 1e-12 以获得精确的碰撞时刻。Q4项目采用什么开源协议BSD 2-Clause 协议见 LICENSE商用友好。✅ 小结10 分钟回顾pip install simupy→ 用DynamicalSystem符号化建模 →BlockDiagram互连闭环 →simulate()拿结果。SimuPy 用 Python 打通了从数学模型到框图仿真的最短路径配合 examples/ 里的 7 个实战示例新手也能快速搭建自己的动力学系统仿真工程。【免费下载链接】simupyA framework for modeling and simulating dynamical systems项目地址: https://gitcode.com/gh_mirrors/si/simupy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考