dynamicslab/pysindy

A package for the sparse identification of nonlinear dynamical systems from data

PySINDy – 비선형 동역학계의 희소 식별

개요:
측정 데이터로부터 동역학계의 지배 방정식을 직접 발견하는 파이썬 라이브러리입니다. SINDy (Sparse Identification of Nonlinear Dynamics) 알고리즘과 여러 관련 희소 회귀 기법을 구현합니다.

중요성:
생성된 모델은 해석 가능하며(명시적 방정식), 종종 간결합니다. 따라서 블랙박스 신경망 없이도 예측, 제어 설계 또는 과학적 통찰을 얻는 데 유용합니다.

주요 기능

  • 시계열 스냅샷으로부터 연속 시간 동역학계 피팅.
  • 다양한 희소 최적화 도구 선택 가능 (예: LASSO, SR3, MIOSR, Bayesian SBR).
  • 후보 함수 라이브러리(다항식, 삼각함수 등) 자동 구성.
  • 선택적 추가 기능을 통한 사용자 정의 특징 라이브러리 및 최적화 도구 지원.
  • 발견된 방정식을 기호 형식, NumPy 함수 또는 LaTeX로 내보내기 가능.

일반적인 워크플로우

  1. 데이터 수집 – 상태 측정 행렬 X 및 시간 벡터 t.
  2. 모델 생성 – model = pysindy.SINDy() (최적화 도구, 특징 라이브러리 등을 선택적으로 지정).
  3. 피팅 – model.fit(X, t=t).
  4. 검사 – model.print() 또는 model.coefficients()를 사용하여 식별된 방정식 확인.
  5. 사용 – 시뮬레이션, 제어기 설계 또는 기호 모델 분석.

설치

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

문서 및 도움말

관련 도구

  • Deeptime – 시계열 분석, 마르코프 모델.
  • PyDMD – 동적 모드 분해, 데이터 기반 모델링의 대안적 접근 방식.
  • PySINDyGUI / SEED – 동일 알고리즘을 위한 그래픽 프런트엔드.

사용 권장 대상 실험 데이터로부터 물리적, 생물학적 또는 공학적 시스템의 간결하고 해석 가능한 모델이 필요하며, 단순 예측 성능보다 해석 가능성을 우선시하는 연구자 및 엔지니어.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트