@@ -511,15 +511,82 @@ def test_dcgain_consistency():
511
511
np .testing .assert_almost_equal (sys_ss .dcgain (), - 1 )
512
512
513
513
514
- def test_singular_values_plot ():
515
- den = [75 , 1 ]
516
- sys = tf ([[[87.8 ], [- 86.4 ]],
517
- [[108.2 ], [- 109.6 ]]],
518
- [[den , den ],
519
- [den , den ]])
520
- sigma , omega = singular_values_plot (sys , 0.0 )
521
- sys_dc = np .array ([[87.8 , - 86.4 ],
522
- [108.2 , - 109.6 ]])
523
-
524
- u , s , v = np .linalg .svd (sys_dc )
525
- np .testing .assert_almost_equal (sigma .ravel (), s .ravel ())
514
+ # Testing of the singular_value_plot_function
515
+ class TSys :
516
+ """Struct of test system"""
517
+ def __init__ (self , sys = None , call_kwargs = None ):
518
+ self .sys = sys
519
+ self .kwargs = call_kwargs if call_kwargs else {}
520
+
521
+ def __repr__ (self ):
522
+ """Show system when debugging"""
523
+ return self .sys .__repr__ ()
524
+
525
+
526
+ @pytest .fixture
527
+ def ss_mimo_t ():
528
+ A = np .diag ([- 1 / 75.0 , - 1 / 75.0 ])
529
+ B = np .array ([[87.8 , - 86.4 ],
530
+ [108.2 , - 109.6 ]])/ 75.0
531
+ C = np .eye (2 )
532
+ D = np .zeros ((2 , 2 ))
533
+ T = TSys (ss (A , B , C , D ))
534
+ T .omega = 0.0
535
+ T .sigma = np .array ([[197.20868123 , 1.39141948 ]])
536
+ return T
537
+
538
+
539
+ @pytest .fixture
540
+ def ss_miso_t ():
541
+ A = np .diag ([- 1 / 75.0 ])
542
+ B = np .array ([[87.8 , - 86.4 ]]) / 75.0
543
+ C = np .array ([[1 ]])
544
+ D = np .zeros ((1 , 2 ))
545
+ T = TSys (ss (A , B , C , D ))
546
+ T .omega = 0.0
547
+ T .sigma = np .array ([[123.1819792 ]])
548
+ return T
549
+
550
+
551
+ @pytest .fixture
552
+ def ss_simo_t ():
553
+ A = np .diag ([- 1 / 75.0 ])
554
+ B = np .array ([[1.0 ]]) / 75.0
555
+ C = np .array ([[87.8 ], [108.2 ]])
556
+ D = np .zeros ((2 , 1 ))
557
+ T = TSys (ss (A , B , C , D ))
558
+ T .omega = 0.0
559
+ T .sigma = np .array ([[139.34159465 ]])
560
+ return T
561
+
562
+
563
+ @pytest .fixture
564
+ def ss_siso_t ():
565
+ A = np .diag ([- 1 / 75.0 ])
566
+ B = np .array ([[1.0 ]]) / 75.0
567
+ C = np .array ([[87.8 ]])
568
+ D = np .zeros ((1 , 1 ))
569
+ T = TSys (ss (A , B , C , D ))
570
+ T .omega = 0.0
571
+ T .sigma = np .array ([[87.8 ]])
572
+ return T
573
+
574
+
575
+ @pytest .fixture
576
+ def tsystem (request , ss_mimo_t , ss_miso_t , ss_simo_t ):
577
+
578
+ systems = {"ss_mimo" : ss_mimo_t ,
579
+ "ss_miso" : ss_miso_t ,
580
+ "ss_simo" : ss_simo_t ,
581
+ "ss_siso" : ss_simo_t
582
+ }
583
+ return systems [request .param ]
584
+
585
+
586
+ @pytest .mark .parametrize ("tsystem" , ["ss_mimo" , "ss_miso" , "ss_simo" , "ss_siso" ], indirect = ["tsystem" ])
587
+ def test_singular_values_plot (tsystem ):
588
+ sys = tsystem .sys
589
+ omega = tsystem .omega
590
+ sigma_check = tsystem .sigma
591
+ sigma , omega = singular_values_plot (sys , omega , plot = False )
592
+ np .testing .assert_almost_equal (sigma , sigma_check )
0 commit comments