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にリンクあり)。
- バグ報告・質問用Issueトラッカー:https://github.com/dynamicslab/pysindy/issues
- 機能追加やバグ修正のためのコントリビューションガイド。
関連ツール
- Deeptime – 時系列解析、マルコフモデル。
- PyDMD – 動的モード分解(DMD)、データ駆動型モデリングの代替手法。
- PySINDyGUI / SEED – 同アルゴリズムのグラフィカルフロントエンド。
対象ユーザー 実験データから物理的、生物学的、または工学的なシステムのコンパクトで解析可能なモデルを必要とし、予測精度よりも解釈可能性を重視する研究者やエンジニア。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト