@@ -356,10 +356,24 @@ def test_stability_margins_discrete(cnum, cden, dt, ref, rtol):
356356 out = stability_margins (tf , method = 'poly' )
357357 assert_allclose (out , ref , rtol = rtol )
358358
359+
359360def test_stability_margins_methods ():
360- sys = TransferFunction (1 , (1 , 2 ))
361+ # the following system gives slightly inaccurate result for DT systems
362+ # because of numerical issues
363+ omegan = 1
364+ zeta = 0.5
365+ resonance = TransferFunction (omegan ** 2 , [1 , 2 * zeta * omegan , omegan ** 2 ])
366+ omegan2 = 100
367+ resonance2 = TransferFunction (omegan2 ** 2 , [1 , 2 * zeta * omegan2 , omegan2 ** 2 ])
368+ sys = 5 * resonance * resonance2
369+ sysd = sys .sample (0.001 , 'zoh' )
361370 """Test stability_margins() function with different methods"""
362- out = stability_margins (sys , method = 'best' )
363- out = stability_margins (sys , method = 'frd' )
364- out = stability_margins (sys , method = 'poly' )
365-
371+ out = stability_margins (sysd , method = 'best' )
372+ assert_allclose (
373+ (18.876634845228644 , 11.244969911924102 , 0.40684128014454546 ,
374+ 9.763585543509473 , 4.351735617240803 , 2.559873290031937 ),
375+ stability_margins (sysd , method = 'poly' ))
376+ assert_allclose (
377+ (18.876634740386308 , 26.356358386241055 , 0.40684127995261044 ,
378+ 9.763585494645046 , 2.3293357226374805 , 2.55985695034263 ),
379+ stability_margins (sysd , method = 'frd' ))
0 commit comments