-
Notifications
You must be signed in to change notification settings - Fork 338
Description
Describe the bug
Doing some tests I realized that when applying the (simple) DMD the resulted object dmd.eigs will give us the discrete-time eigenvalues. In contrast to that when applying BOPDMD the bopdmd.eigs gives us the continuous-time eigenvalues.
This difference is fine, until when using the ModesTuner.select() the function will apply the unity norm distance to the continuous-time eigenvalues for the BOPDMD which will cutoff almost all of the data incorrectly.
The same issue happens with the ModesTuner.stabilize() which will normalize the continuous-time eigenvalues to 1.
To Reproduce
dmd = BOPDMD(
svd_rank=svd_rank,
eig_sort="abs"
varpro_opts_dict={"tol":0.05, "maxiter":100, "verbose":True},
)
from pydmd.dmd_modes_tuner import ModesTuner
mtuner = ModesTuner(dmd)
# select more stable modes
mtuner.select('stable_modes', max_distance_from_unity_inside=1.e-1,
max_distance_from_unity_outside=1.e-1, nullify_amplitudes=True)
# stabilize the more stable nodes
mtuner.stabilize(inner_radius=1)
dmd_stabilized = mtuner.copy()
print(dmd_stabilized.eigs)Expected behavior
The expected behaviour is that the stabilize() and select() functions would convert the continuous-time eigenvalues to discrete-time eigenvalue counterparts and apply the stability and selection on those values and then convert them back to the continuous-time eigenvalues