@@ -471,18 +471,22 @@ def feedback(self, other=1, sign=-1):
471
471
def minreal (self , tol = 0.0 ):
472
472
"""Calculate a minimal realization, removes unobservable and
473
473
uncontrollable states"""
474
- try :
475
- from slycot import tb01pd
476
- B = empty ((self .states , max (self .inputs , self .outputs )))
477
- B [:,:self .inputs ] = self .B
478
- C = empty ((max (self .outputs , self .inputs ), self .states ))
479
- C [:self .outputs ,:] = self .C
480
- A , B , C , nr = tb01pd (self .states , self .inputs , self .outputs ,
481
- self .A , B , C , tol = tol )
482
- return StateSpace (A [:nr ,:nr ], B [:nr ,:self .inputs ],
483
- C [:self .outputs ,:nr ], self .D )
484
- except ImportError :
485
- raise TypeError ("minreal requires slycot tb01pd" )
474
+ if self .states :
475
+ try :
476
+ from slycot import tb01pd
477
+ B = empty ((self .states , max (self .inputs , self .outputs )))
478
+ B [:,:self .inputs ] = self .B
479
+ C = empty ((max (self .outputs , self .inputs ), self .states ))
480
+ C [:self .outputs ,:] = self .C
481
+ A , B , C , nr = tb01pd (self .states , self .inputs , self .outputs ,
482
+ self .A , B , C , tol = tol )
483
+ return StateSpace (A [:nr ,:nr ], B [:nr ,:self .inputs ],
484
+ C [:self .outputs ,:nr ], self .D )
485
+ except ImportError :
486
+ raise TypeError ("minreal requires slycot tb01pd" )
487
+ else :
488
+ return StateSpace (self )
489
+
486
490
487
491
# TODO: add discrete time check
488
492
def returnScipySignalLTI (self ):
0 commit comments