SimuPy矩阵工具进阶:用矩阵表达式快速构造向量动力系统
2026/8/25 9:31:23 网站建设 项目流程

SimuPy矩阵工具进阶:用矩阵表达式快速构造向量动力系统

【免费下载链接】simupyA framework for modeling and simulating dynamical systems项目地址: https://gitcode.com/gh_mirrors/si/simupy

SimuPy 是一个基于 Python 的动力系统建模与仿真框架,而它的矩阵工具(simupy/matrices.py)能让工程师用矩阵表达式快速构造向量动力系统:写出一行矩阵微分方程,就能自动生成可仿真、可互联的系统对象。本文以 Riccati 微分方程为例,带你走通从"定义符号矩阵"到"块图仿真"的完整流程,告别逐元素手写状态方程的繁琐工作。

为什么矩阵表达式更适合描述动力系统?

在控制工程和数学建模中,我们习惯用矩阵书写系统方程,例如:

$$\dot{X}(t) = F\big(X(t)\big)$$

如果 $X$ 是一个 $2\times 2$ 矩阵,直接展开就要写 4 条状态方程,矩阵越大越痛苦。SimuPy 的思路是:保留矩阵表达式的"数学形态",在构造系统时自动展平为向量形式,仿真结束后再还原回矩阵。这样既符合直觉,又不用手写展开代码。

matrices 模块的3个核心函数

矩阵工具位于simupy/matrices.py,官方 API 说明见docs/api/matrices.rst。共 3 个函数,各司其职:

1️⃣ construct_explicit_matrix:批量生成符号矩阵

传入一个前缀名和维度,即可自动生成全符号矩阵,每个元素命名为前缀_行号列号(如s_11s_22)。

  • symmetric=True:强制矩阵对称,上下三角复用同一符号,适合惯量、质量矩阵;
  • diagonal=0:只保留对角线元素,构造对角矩阵;
  • dynamic=True:生成"时变符号"(如 $s(t)$),表示该矩阵随时间变化。

2️⃣ matrix_subs:矩阵级批量替换

常系数矩阵(如系统矩阵 $A$、$B$)不需要参与符号推导,用matrix_subs可一次把符号矩阵中每个元素替换为数值矩阵的对应元素,比逐项替换干净得多。它支持三种传参方式:单个矩阵对、矩阵对列表、字典形式。

3️⃣ system_from_matrix_DE:矩阵微分方程 → 向量动力系统

这是整个模块的核心。给它传入矩阵右端表达式mat_DE矩阵状态mat_var,它会:

  1. 自动把矩阵状态展平为向量(去重);
  2. 按相同顺序组装状态方程右端向量;
  3. 调用DynamicalSystem(定义在simupy/systems/symbolic.py)生成符号系统,并自动生成状态方程、输出方程与 Jacobian 的可调用函数。

整个过程你只需要提供矩阵表达式,向量展开全部由工具完成 ✨

实战:用矩阵表达式模拟 Riccati 微分方程

项目自带一个经典示例examples/riccati_system.py:求解有限时域 LQR 跟踪问题中的 Riccati 微分方程。核心代码只有几行矩阵运算:

# 符号矩阵:S 随时间变化(dynamic=True),A、B、Q、R 为常系数 Ss = construct_explicit_matrix('s', 2, 2, symmetric=True, dynamic=True) As = construct_explicit_matrix('a', 2, 2, dynamic=False) # 矩阵微分方程,一行写完 Ssdot = Qs + As.T*Ss + Ss*As - Ss*Bs*Rs.inv()*Bs.T*Ss # 展平为向量动力系统,并替换常系数矩阵的数值 SG_sys = system_from_matrix_DE(SGdot, SG, rxs, dict(matrix_subs((As, An), (Bs, Bn), (Qs, Qn), (Rs, Rn))))

随后用BlockDiagramsimupy/block_diagram.py)把系统接入参考输入,调用simulate()即可得到 $s_{ij}(t)$、$g_i(t)$ 的完整解,再据此构造最优控制器闭环仿真。整个流程从"矩阵公式"到"仿真曲线"一气呵成。

小贴士 📌

  • 变量名规则construct_explicit_matrix生成的元素名是前缀_ij,维度建议小于 10,命名才清晰;
  • 对称性优先于对角线diagonal参数的优先级高于symmetric,非方阵不能设为对称或对角;
  • 无直接前馈:SimuPy 的数学约定(见docs/math.rst)假设输入输出间无直接通路以避免代数环,带前馈的模型可通过增广状态处理;
  • 想深入符号系统DynamicalSystem还支持自定义代码生成器,替换默认的sympy.lambdify包装。

小结

SimuPy 的矩阵工具让"矩阵语言"直接成为建模语言:construct_explicit_matrix定义符号矩阵,matrix_subs批量代入数值,system_from_matrix_DE一键展平为向量动力系统。对于状态维度较高、结构具有矩阵对称性的模型(Riccati 方程、多体动力学、状态空间方程族),这套组合能显著减少手写代码量,也更贴近工程师的推导习惯。动手跑一遍examples/riccati_system.py,是上手的最佳捷径 🚀

【免费下载链接】simupyA framework for modeling and simulating dynamical systems项目地址: https://gitcode.com/gh_mirrors/si/simupy

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询