返回

文章详情

PySINDy - 一种稀疏识别非线性动力系统的包

Hacker News2026年7月24日 17:30

PySINDy 是一个用于系统识别的包,主要围绕 Brunton 等人(2016a)介绍的非线性动力系统稀疏识别(SINDy)方法。它还包括相关文献中的其他方法。系统识别是指利用测量数据推断控制动力学的过程。发现这些方程后,可以对未来状态做出预测,可以为控制输入提供信息,或者可以通过分析技术进行理论研究。所得到的模型本质上是可解释和可推广的。\n\n首步\n安装\n推荐的安装方式是使用 pip 或 conda,例如:pip install pysindy。您可能需要添加 --user 选项。Pysindy 还提供了几个额外的功能。例如:pip install pysindy[miosr]:cvxpy 凸优化器,SR3 及其子类,miosr 有界分支优化器用于 L0 约束,MIOSR sbr 贝叶斯回归优化器生成后验,SBR。\n\n示例\n假设我们在不同时间点有一个遵循以下动力系统的粒子位置的测量:\nx' &= -2 x \\ y' &= y\n请注意,这个微分方程系统解耦为两个微分方程,其解为:\nx(t) &= x_0 * exp(-2 * t) \\ y(t) &= y_0 * exp(t)\n这个例子使用的初始条件为 x_0 = 3 和 y_0 = 0.5。然后它拟合并打印出发现的模型:\nimport numpy as np\nimport pysindy as ps\nt = np.linspace(0, 1, 100)\nx = 3 * np.exp(-2 * t)\ny = 0.5 * np.exp(t)\nX = np.stack((x, y), axis=-1) # 第一列是 x,第二列是 y\nmodel = ps.SINDy()\nmodel.fit(X, t=t, feature_names=["x", "y"])\nmodel.print()\n这正确地得出:\nx' = -2.000 x\ny' = 1.000 y\nPySINDy 提供了许多其他未在此处显示的功能。我们有各种各样的教程和示例,从生成数据和拟合模型开始。\n\n获取帮助\n如果您有问题或发现错误,请在 GitHub 上打开一个问题。PySINDy 的文档网站可以在这里找到。关于 PySINDy 的视频概述可以在 YouTube 上找到。我们还创建了一个视频播放列表,其中包含实用的 PySINDy 提示。要了解更多关于 pysindy 中对象类型的信息,请参见对象模型。如果您想修复问题、添加功能或共享示例,请查看 **贡献者** 指导。如果您在学术工作中使用 pysindy,请查看学术使用的推荐,包括引用。\n\n相关包\nDeeptime - 一个用于分析时间序列数据的 Python 库,具有降维、聚类和马尔可夫模型估计的方法。\nPyDMD - 一个使用动态模式分解(DMD)的 Python 包,用于基于时空相干结构的数据驱动模型简化。DMD 是 SINDy 的一个很好的替代品。\nPySINDyGUI - PySINDy 的一个时尚图形用户界面。\nSEED - 提取方程的软件:一个用于 PySINDy 提供的许多方法的图形用户界面。\nSymINDy - 一个将 SINDy 与基于遗传编程的符号回归相结合的 Python 包,用于函数库优化。\nderivative - 一个用于区分(可选地平滑)数据的 Python 包,供 pysindy 使用。

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡