@@ -26,6 +26,21 @@ def create_system_without_B():
2626 return {"snapshots" : snapshots , "u" : u , "B" : B , "A" : A }
2727
2828
29+ def create_system_without_B_lag (lag = 1 ):
30+ n = 5 # dimension snapshots
31+ m = 15 # number snapshots
32+ A = scipy .linalg .helmert (n , True )
33+ B = np .random .rand (n , n ) - 0.5
34+ snapshots = []
35+ for _ in range (lag ):
36+ snapshots .append (np .array ([0.25 ] * n ))
37+ u = np .random .rand (n , m - lag ) - 0.5
38+ for i in range (m - lag ):
39+ snapshots .append (A .dot (snapshots [i ]) + B .dot (u [:, i ]))
40+ snapshots = np .array (snapshots ).T
41+ return {"snapshots" : snapshots , "u" : u , "B" : B , "A" : A }
42+
43+
2944def test_eigs_b_known ():
3045 system = create_system_with_B ()
3146 dmdc = DMDc (svd_rank = - 1 )
@@ -41,13 +56,29 @@ def test_eigs_b_unknown():
4156 assert dmdc .eigs .shape [0 ] == 3
4257
4358
59+ def test_eigs_b_unknown_lag ():
60+ lag = 3
61+ system = create_system_without_B_lag (lag = lag )
62+ dmdc = DMDc (svd_rank = 3 , opt = False , svd_rank_omega = 4 , lag = lag )
63+ dmdc .fit (system ["snapshots" ], system ["u" ])
64+ assert dmdc .eigs .shape [0 ] == 3
65+
66+
4467def test_modes_b_unknown ():
4568 system = create_system_without_B ()
4669 dmdc = DMDc (svd_rank = 3 , opt = False , svd_rank_omega = 4 )
4770 dmdc .fit (system ["snapshots" ], system ["u" ])
4871 assert dmdc .modes .shape [1 ] == 3
4972
5073
74+ def test_modes_b_unknown_lag ():
75+ lag = 3
76+ system = create_system_without_B_lag (lag = lag )
77+ dmdc = DMDc (svd_rank = 3 , opt = False , svd_rank_omega = 4 , lag = lag )
78+ dmdc .fit (system ["snapshots" ], system ["u" ])
79+ assert dmdc .modes .shape [1 ] == 3
80+
81+
5182def test_reconstruct_b_known ():
5283 system = create_system_with_B ()
5384 dmdc = DMDc (svd_rank = - 1 )
@@ -73,6 +104,16 @@ def test_reconstruct_b_unknown():
73104 )
74105
75106
107+ def test_reconstruct_b_unknown_lag ():
108+ lag = 3
109+ system = create_system_without_B_lag (lag = lag )
110+ dmdc = DMDc (svd_rank = - 1 , opt = True , lag = lag )
111+ dmdc .fit (system ["snapshots" ], system ["u" ])
112+ np .testing .assert_array_almost_equal (
113+ dmdc .reconstructed_data (), system ["snapshots" ], decimal = 6
114+ )
115+
116+
76117def test_atilde_b_unknown ():
77118 system = create_system_without_B ()
78119 dmdc = DMDc (svd_rank = - 1 , opt = True )
@@ -232,3 +273,10 @@ def test_correct_amplitudes():
232273 dmd = DMDc (svd_rank = - 1 )
233274 dmd .fit (system ["snapshots" ], system ["u" ], system ["B" ])
234275 np .testing .assert_array_almost_equal (dmd .amplitudes , dmd ._b )
276+
277+
278+ def test_lag_param_b_unknown_raises ():
279+ system = create_system_without_B_lag (lag = 3 )
280+ dmdc = DMDc (svd_rank = - 1 , opt = True , lag = 0 )
281+ with raises (ValueError ):
282+ dmdc .fit (system ["snapshots" ], system ["u" ])
0 commit comments