dynamicslab/pysindy
A package for the sparse identification of nonlinear dynamical systems from data
PySINDy – 稀疏非线性动力系统识别
它是什么:
一个直接从测量数据中发现动力系统控制方程的 Python 库。它实现了 SINDy (Sparse Identification of Nonlinear Dynamics) 算法及几种相关的稀疏回归方法。
为什么重要:
它生成的模型是可解释的(显式方程)且通常是紧凑的,这使得它们在无需黑盒神经网络的情况下,即可用于预测、控制设计或科学洞察。
关键功能
- 从时间序列快照中拟合连续时间动力系统。
- 在多种稀疏优化器中进行选择(例如 LASSO, SR3, MIOSR, Bayesian SBR)。
- 自动构建候选函数库(多项式、三角函数等)。
- 通过可选扩展内置支持自定义特征库和自定义优化器。
- 以符号形式、NumPy 函数或 LaTeX 导出发现的方程。
典型工作流程
- 收集数据 – 状态测量矩阵
X和时间向量t。 - 创建模型 –
model = pysindy.SINDy()(可选指定优化器、特征库等)。 - 拟合 –
model.fit(X, t=t)。 - 检查 – 使用
model.print()或model.coefficients()查看识别出的方程。 - 使用 – 向前模拟、设计控制器或分析符号模型。
安装
pip install pysindy # 核心包
# 可选优化器
pip install pysindy[miosr] # 分支定界 L0 优化器
pip install pysindy[cvxpy] # 凸 SR3 优化器
pip install pysindy[sbr] # 贝叶斯回归优化器
Conda 用户也可以通过 conda install -c conda-forge pysindy 安装。
最小示例(识别一个简单的线性系统)
import numpy as np
import pysindy as ps
# x' = -2x, y' = y 的合成数据
t = np.linspace(0, 1, 100)
x = 3 * np.exp(-2 * t)
y = 0.5 * np.exp(t)
X = np.column_stack([x, y])
model = ps.SINDy()
model.fit(X, t=t, feature_names=["x", "y"])
model.print()
输出:
x' = -2.000 x
y' = 1.000 y
文档与帮助
- 完整文档:https://pysindy.readthedocs.io
- YouTube 上的视频概览与教程播放列表(链接在 README 中)。
- Bug/问题追踪器:https://github.com/dynamicslab/pysindy/issues
- 添加功能或修复 Bug 的贡献指南。
相关工具
- Deeptime – 时间序列分析,马尔可夫模型。
- PyDMD – 动态模态分解,一种替代的数据驱动建模方法。
- PySINDyGUI / SEED – 针对相同算法的图形化前端。
适用人群 需要从实验数据中获取物理、生物或工程系统紧凑且易于分析的模型,且优先考虑可解释性而非原始预测能力的科研人员和工程师。
相关
- 项目
- 项目
- 项目
- 项目