Source code for pydmd.rdmd

"""
Derived module from cdmd.py for Randomized DMD

Reference:
N. Benjamin Erichson, Lionel Mathelin, J. Nathan Kutz, Steven L. Brunton.
Randomized dynamic mode decomposition. SIAM Journal on Applied Dynamical
Systems, 18, 2019.
"""

from .cdmd import CDMD
from .utils import compute_rqb


[docs]class RDMD(CDMD): """ Randomized Dynamic Mode Decomposition :param test_matrix: The random test matrix that will be used when executing the Randomized QB Decomposition. If not provided, the `svd_rank` and `oversampling` parameters will be used to compute the random matrix. :type test_matrix: numpy.ndarray :param seed: Seed used to initialize the random generator when computing random test matrices. :type seed: int :param oversampling: Number of additional samples (beyond the target rank) to use when computing the random test matrix. Note that values in the range [5, 10] tend to be sufficient. :type oversampling: int :param power_iters: Number of power iterations to perform when executing the Randomized QB Decomposition. Note that as many as 1 to 2 power iterations often lead to considerable improvements. :type power_iters: int """ def __init__( self, test_matrix=None, seed=None, oversampling=10, power_iters=2, svd_rank=0, tlsq_rank=0, opt=False, rescale_mode=None, forward_backward=False, sorted_eigs=False, tikhonov_regularization=None, ): super().__init__( svd_rank=svd_rank, tlsq_rank=tlsq_rank, compression_matrix=None, opt=opt, rescale_mode=rescale_mode, forward_backward=forward_backward, sorted_eigs=sorted_eigs, tikhonov_regularization=tikhonov_regularization, ) self._svd_rank = svd_rank self._oversampling = oversampling self._power_iters = power_iters self._test_matrix = test_matrix self._seed = seed
[docs] def _compress_snapshots(self): """ Private method that compresses the snapshot matrix X by projecting X onto a near-optimal orthonormal basis for the range of X computed via the Randomized QB Decomposition. :return: the compressed snapshots :rtype: numpy.ndarray """ Q, B, test_matrix = compute_rqb( self.snapshots, self._svd_rank, self._oversampling, self._power_iters, self._test_matrix, self._seed, ) self._compression_matrix = Q.conj().T self._test_matrix = test_matrix return B