一文读懂SimuPy核心数学连续时间与离散时间动力系统建模解析【免费下载链接】simupyA framework for modeling and simulating dynamical systems项目地址: https://gitcode.com/gh_mirrors/si/simupySimuPy 是一个用于建模和仿真动力系统dynamical systems的 Python 开源框架核心能力是统一处理连续时间与离散时间两类动力系统模型。本文不带复杂代码直接带你解析它背后的核心数学状态方程与输出方程、离散化采样约定以及连接连续与离散的零阶保持变换。SimuPy 建模的前提无直通信号流 SimuPy 假设系统输入与输出之间没有直接直通no direct feedthrough即输出不直接依赖输入。这一约束可以避免代数环让仿真求解更稳定。这意味着两类系统形式都是合法的有状态系统输出只由状态决定$y(t) h(t, x(t))$无状态系统输出直接由输入决定$y(t) h(t, u(t))$如果确实需要直通项可以通过增广状态把输入或输出信号纳入状态向量来等效实现而不是破坏无直通约定。核心符号一览符号含义$t$连续时间变量$k$离散时间索引$\Delta t$离散时间系统的采样周期$x$系统状态$u$系统输入$y$系统输出$f$状态方程描述状态如何演化$h$输出方程描述状态如何映射到输出连续时间动力系统状态方程与输出方程连续时间动力系统用微分方程描述标准形式为$$ x(t) f\big(t,, x(t),, u(t)\big) $$$$ y(t) h\big(t,, x(t)\big) $$直觉上理解状态方程回答状态下一刻往哪走输出方程回答现在能观察到什么。系统可以完全没有状态$x$ 维度为 0此时只剩输出方程——这正是控制器、传感器等记忆无关模块的数学表达。离散时间动力系统差分方程与采样约定 SimuPy 同样支持采样周期为 $\Delta t$ 的离散时间系统$$ x[k1] f\big([k],, x[k],, u(k)\big) $$$$ y[k1] h\big([k1],, x[k1]\big) $$这里有两条关键的信号取值约定是读懂 SimuPy 数学文档的钥匙方括号[k]表示信号在半开区间$(k\Delta t,, (k1)\Delta t]$ 上的取值它在 $t k\Delta t$ 时刻被更新圆括号(k)表示连续时间信号在 $t k\Delta t$ 时刻的零阶保持采样值。对于同一个更新率 $\Delta t$ 的多个纯离散子系统的组合整体系统就退化为更简洁的形式$$ x[k1] f\big([k],, x[k],, u[k]\big), \qquad y[k] h\big([k],, x[k]\big) $$这套约定还保证了混合时间hybrid-time仿真的语义一致——连续子系统与离散子系统可以在同一个块图中按各自的时间基准协同运行。零阶保持变换连续与离散的精确桥梁离散化并非随意取近似。SimuPy 的数学体系与经典LTI线性时不变系统代数完全一致。对连续时间 LTI 系统$$ x(t) A,x(t) B,u(t), \qquad y(t) I,x(t) $$它的离散时间等价系统为$$ x[k1] \Phi, x[k] \Gamma, u[k], \qquad y[k] I,x[k] $$两者的状态矩阵通过零阶保持zero-order hold变换精确关联$$ \Phi e^{A,\Delta t} $$$$ \Gamma \left(\int_{0}^{\Delta t} e^{A,\tau}, d\tau\right) B $$只要两个系统受到相同的分段常数输入离散等价系统在 $k\Delta t$ 时刻就会走出一条与连续系统完全相同的状态轨迹。这不是数值近似而是精确等价。状态反馈与块图代数等价变换的另一面 ✅块图连接block diagram algebra在数学上同样成立。连续 LTI 系统加上状态反馈控制律$$ u(t) -K,x(t) $$其闭环动力学等价于一个自治系统$$ x(t) (A - B,K),x(t), \qquad y(t) I,x(t) $$离散时间下同理$x[k1] (A - B,K),x[k]$。受控系统与整体闭环系统两种建模方式在轨迹上完全一致——这正是 SimuPy 块图机制的数学保证。在 SimuPy 源码中定位这些数学概念文件路径对应的数学内容docs/math.rst全部数学形式的权威表述本文的解析依据simupy/systems/__init__.pyDynamicalSystem基类参数dt为 0 表示连续时间系统大于 0 表示离散时间系统采样周期simupy/systems/symbolic.py用 SymPy 符号表达式自动构建状态方程、输出方程与 Jacobiansimupy/systems/symbolic.py中的LTISystem直接用矩阵 $A, B, C$ 定义 LTI 系统simupy/block_diagram.py块图连接与simulate仿真入口默认基于 SciPy 的 ODE 求解器examples/discrete_lti.py数值验证零阶保持等价性与块图代数的完整示例tests/test_block_diagram.py对块图代数与时序约定一致性的自动化测试一个最小的连续/离散系统定义感受from simupy.systems import LTISystem ct_sys LTISystem(A, B, C) # 连续时间 LTI 系统 dt_sys LTISystem(Ad, Bd, Cd, dtdT) # 离散时间 LTI 系统dT 为采样周期此外simupy/discontinuities.py中的SwitchedSystem支持事件驱动的不连续系统求解器监控事件函数的零点穿越在精确时刻中断积分并切换状态从而处理像弹性球落地反弹这类含突变的问题。小结SimuPy 数学基础一图流统一接口连续与离散系统共享状态方程 $f$ 输出方程 $h$抽象仅时间语义不同无直通约定输出不直接依赖输入从根上避免代数环精确离散化零阶保持变换保证连续 LTI 与其离散等价系统的轨迹严格一致块图代数受控系统与闭环自治系统数学等价连接即代数消元。掌握这四点你就拥有了读懂 SimuPy 全部文档与示例的数学基础。【免费下载链接】simupyA framework for modeling and simulating dynamical systems项目地址: https://gitcode.com/gh_mirrors/si/simupy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考