/rom-operator-inference-Python3

Operator Inference for data-driven, non-intrusive model reduction of dynamical systems.

Primary LanguagePythonMIT LicenseMIT

License Top language Code size Issues Latest commit Documentation

Operator Inference in Python

This is a Python implementation of Operator Inference for learning projection-based polynomial reduced-order models of dynamical systems. The procedure is data-driven and non-intrusive, making it a viable candidate for model reduction of "glass-box" systems. The methodology was introduced in [1].

See the Wiki for mathematical details and API documentation. See this repository for a MATLAB implementation.

Quick Start

Installation

Install the package from the command line with the following single command (requires pip).

$ python3 -m pip install --user rom-operator-inference

See the wiki for other installation options.

Usage

Given a basis matrix Vr, snapshot data X, and snapshot time derivatives Xdot, the following code learns a reduced model for a problem of the form dx / dt = c + Ax(t), then solves the reduced system for 0 ≤ t ≤ 1.

import numpy as np
import rom_operator_inference as roi

# Define a model of the form  dx / dt = c + Ax(t).
>>> model = roi.InferredContinuousROM(modelform="cA")

# Fit the model to snapshot data X, the time derivatives Xdot,
# and the linear basis Vr by solving for the operators c_ and A_.
>>> model.fit(Vr, X, Xdot)

# Simulate the learned model over the time domain [0,1] with 100 timesteps.
>>> t = np.linspace(0, 1, 100)
>>> x_ROM = model.predict(X[:,0], t)

Examples

The examples/ folder contains scripts and notebooks that set up and run several examples:


Contributors: Renee Swischuk, Shane McQuarrie, Elizabeth Qian, Boris Kramer, Karen Willcox.

References

These publications introduce, build on, or use Operator Inference. Entries are listed chronologically.