Skip to content
This repository has been archived by the owner on Sep 30, 2023. It is now read-only.


Repository files navigation

code meta-data zenodo listed matlab compatible SWH

emgr logo emgr -- EMpirical GRamian Framework (5.99)

Website | Twitter | Feedback


  • Model Reduction / Model Order Reduction (MOR)
    • Nonlinear Model Order Reduction (nMOR)
    • Parametric Model Order Reduction (pMOR) | Robust Reduction
    • Parameter Reduction
    • Combined State and Parameter Reduction
  • Decentralized Control
  • Sensitivity Analysis
  • Parameter Identification | Input-Output Identifiability
  • Nonlinearity Quantification
  • Uncertainty Quantification
  • System Norms | System Indices | System Invariants
  • Optimal Sensor Placement | Optimal Actuator Placement
  • Matrix Equations
  • Tau Functions

Empirical Gramians

  • Empirical Controllability Gramian
  • Empirical Observability Gramian
  • Empirical Cross Gramian
  • Empirical Linear Cross Gramian
  • Empirical Sensitivity Gramian
  • Empirical Augmented Observability Gramian (Empirical Identifiability Gramian)
  • Empirical Joint Gramian (Empirical Cross-Identifiability Gramian)


  • Interfaces for:
    • custom solvers / integrators
    • custom inner products / dot products / kernels / pseudo-kernels
    • distributed / partitioned / low-rank cross Gramian
  • Configurable non-symmetric cross gramian for:
    • Empirical Cross Gramian
    • Empirical Linear Cross Gramian
    • Empirical Joint Gramian
  • Program design:
    • Implicit parallelization via vectorization of bulk matrix operations
    • Explicit parallelization via parfor hints
    • Functional design via closures


For a mathematical summary and technical documentation of the empirical Gramian framework (5.4), detailing most features and capabilities see:

and references therein. See also the reference lists for further theoretical backgrounds on empirical Gramians.


Successfully tested on:

  • Mathworks MATLAB 2017b
  • Mathworks MATLAB 2022a
  • GNU Octave 5.2.0
  • GNU Octave 7.1.0
  • Python 3.8.10 (NumPy 1.17.4)


Getting Started

Run a minimal example in a Matlab interpreter like OCTAVE or MATLAB:


To run all tests use:


To run demos use:

emgrDemo(id) % with id one of 'hnm', 'isp', 'fss', 'nrc', 'rqo', 'lte', 'aps', 'fbc', 'qso'

Files and Folders Basic Information (this file)

AUTHORS Author identity and contributions

CHANGELOG Version Information

CITATION Citation Information (BibTeX)

CITATION.cff Citation Information (CFF)

CODE Meta Information (INI)

codemeta.json Meta Information (JSON)

LICENSE License Information

VERSION Current Version Number

RUNME.m Minimal Code Example

emgr.m Empirical Gramian Framework (main file, crc32:f76f4638)

emgrTest.m Run all tests

est.m Empirical System Theory (EST) emgr prototype frontend

estTest.m EST System Tests

estDemo.m Run demo (sample applications)

  • 'hnm' Hyperbolic Network Model
  • 'isp' Inverse Sylvester Procedure
  • 'fss' Flexible Space Structures
  • 'nrc' Nonlinear Resistor-Capacitor Cascade
  • 'rqo' Random Diagonal System with Quadratic Output
  • 'aps' All Pass System
  • 'lte' Linear Transport Equation
  • 'fbc' Five Body Choreography
  • 'qso' Quasi-Stable Orbits Inside Black Holes

estProbe.m emgr factorial comparison of singular value decays

test_dwj.m Test partioned joint Gramian computation

est.scm EST tree-based documentation in Scheme

emgr-ref.pdf emgr reference cheat sheet

py/ Empirical Gramian Framework (Python variant)

py/ Minimal Code Example (Python variant)

py/ Factorial tests

Documentation Table-of-Contents

More information at:

See also: C. Himpe: "emgr - EMpirical GRamian Framework 5.99"; Transactions on Mathematical Software, 49(3): 31, 2023.