Higher-order DMD

Derived module from hankeldmd.py for higher order dmd.

Reference: - S. L Clainche, J. M. Vega, Higher Order Dynamic Mode Decomposition. Journal on Applied Dynamical Systems, 16(2), 882-925, 2017.

class HODMD(svd_rank=0, tlsq_rank=0, exact=False, opt=False, rescale_mode=None, forward_backward=False, d=1, sorted_eigs=False, reconstruction_method='first', svd_rank_extra=0)[source]

Bases: pydmd.hankeldmd.HankelDMD

Higher Order Dynamic Mode Decomposition

Parameters
  • svd_rank (int or float) – the rank for the truncation; If 0, the method computes the optimal rank and uses it for truncation; if positive interger, the method uses the argument for the truncation; if float between 0 and 1, the rank is the number of the biggest singular values that are needed to reach the ‘energy’ specified by svd_rank; if -1, the method does not compute truncation.

  • tlsq_rank (int) – rank truncation computing Total Least Square. Default is 0, that means no truncation.

  • exact (bool) – flag to compute either exact DMD or projected DMD. Default is False.

  • opt (bool or int) – argument to control the computation of DMD modes amplitudes. See DMDBase. Default is False.

  • rescale_mode ({'auto'} or None or numpy.ndarray) – Scale Atilde as shown in 10.1016/j.jneumeth.2015.10.010 (section 2.4) before computing its eigendecomposition. None means no rescaling, ‘auto’ means automatic rescaling using singular values, otherwise the scaling factors.

  • forward_backward (bool) – If True, the low-rank operator is computed like in fbDMD (reference: https://arxiv.org/abs/1507.02264). Default is False.

  • d (int) – the new order for spatial dimension of the input snapshots. Default is 1.

  • sorted_eigs ({'real', 'abs'} or False) – Sort eigenvalues (and modes/dynamics accordingly) by magnitude if sorted_eigs=’abs’, by real part (and then by imaginary part to break ties) if sorted_eigs=’real’. Default: False.

  • reconstruction_method – Method used to reconstruct the snapshots of the dynamical system from the multiple versions available due to how HODMD is conceived. If ‘first’ (default) the first version available is selected (i.e. the nearest to the 0-th row in the augmented matrix). If ‘mean’ we compute the element-wise mean. If reconstruction_method is an array of float values we compute the weighted average (for each snapshots) using the given values as weights (the number of weights must be equal to d).

  • svd_rank_extra – the rank for the initial reduction of the input data, performed before the rearrangement of the input data to the (pseudo) Hankel matrix format; If 0, the method computes the optimal rank and uses it for truncation; if positive interger, the method uses the argument for the truncation; if float between 0 and 1, the rank is the number of the biggest singular values that are needed to reach the ‘energy’ specified by svd_rank; if -1, the method does not compute truncation.

fit(X)[source]

Compute the Dynamic Modes Decomposition to the input data.

Parameters

X (numpy.ndarray or iterable) – the input snapshots.

reconstructions_of_timeindex(timeindex=None)[source]

Build a collection of all the available versions of the given timeindex. The indexing of time instants is the same used for reconstructed_data(). For each time instant there are at least one and at most d versions. If timeindex is None the function returns the whole collection, for all the time instants.

Parameters

timeindex (int) – The index of the time snapshot.

Returns

A collection of all the available versions for the requested time instants, represented by a matrix (or tensor). Axes: 0. Number of time instants; 1. Copies of the snapshot; 2. Space dimension of the snapshot. The first axis is omitted if only one single time instant is selected, in this case the output becomes a 2D matrix.

Return type

numpy.ndarray