@@ -471,18 +471,22 @@ def feedback(self, other=1, sign=-1):
471471 def minreal (self , tol = 0.0 ):
472472 """Calculate a minimal realization, removes unobservable and
473473 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+
486490
487491 # TODO: add discrete time check
488492 def returnScipySignalLTI (self ):
0 commit comments