Skip to content

Enhancing Dynamic Mode Decomposition using Autoencoder Networks

Abstract

Prediction, estimation, and control of dynamical systems remains challenging due to nonlinearity. The Koopman operator is an infinite-dimensional linear operator that evolves the observables of a dynamical system which we approximate by the dynamic mode decomposition (DMD) algorithm. Using DMD to predict the evolution of a nonlinear dynamical system over extended time horizons requires choosing the right observable function defined on the state space. A number of DMD modifications have been developed to choose the right observable function, such as Extended DMD. Here, we propose a simple machine learning based approach to find these coordinate transformations. This is done via a deep autoencoder network. This simple DMD autoencoder is tested and verified on nonlinear dynamical system time series datasets, including the pendulum and fluid flow past a cylinder.

Keywords - Dynamic mode decomposition, Deep learning, Dynamical systems, Koopman analysis, Observable functions.

Dependencies

  1. Python >= 3.7
  2. numpy >= 1.19.1
  3. tensorflow >= 2.0
  4. matplotlib >= 3.3.1
  5. pydmd >=0.3

References

[1] Bethany Lusch, J. Nathan Kutz, and Steven L. Brunton. Deep learning for universal linear embeddings of nonlinear dynamics. Nature Communications, 9(1):4950, 2018.

[2] J. H. Tu, C. W. Rowley, D. M. Luchtenburg, S. L. Brunton, and J. Nathan Kutz. On dynamic mode decomposition: theory and applications. J. Comp. Dyn., 1(2):391-421, 2014.

[3] B. R. Noack, K. Afanasiev, M. Morzynski, G. Tadmor, and F. Thiele. A hierarchy of low-dimensional models for the transient and post-transient cylinder wake. Journal of Fluid Mechanics, 497:335–363, 2003.

License

MIT

Important Python subroutines

This is a collection of Python subroutines and examples that illustrate how to train a Dynamic Mode Decomposition autoencoder.

The most important Python subroutines are:

  • dmd_machine:

    1
    2
    3
    dmd_machine/autoencoder_network.py
    dmd_machine/dmd_ae_machine.py
    dmd_machine/loss_function.py
    
  • data:

    1
    data/Data.py
    
  • driver/runfile:

    1
    2
    3
    train_discrete_dataset_machine.py
    train_pendulum_machine.py 
    train_fluid_flow_machine.py
    

About the Authors

Mathematics Department, San Diego State University

Research project under the supervision of Professor Christopher Curtis (ccurtis@sdsu.edu).

  • Opal Issan- Applied Mathematics undergraduate student (opal.issan@gmail.com)