@@ -513,12 +513,19 @@ def step_response(sys, T=None, X0=0., input=None, output=None,
513513 sys = _get_ss_simo (sys , input , output )
514514 if T is None :
515515 if isctime (sys ):
516- T = _default_response_times (sys .A , 100 )
516+ if sys .A .shape == (0 , 0 ):
517+ # No dynamics; use the unit time interval
518+ T = np .linspace (0 , 1 , 100 , endpoint = False )
519+ else :
520+ T = _default_response_times (sys .A , 100 )
517521 else :
518522 # For discrete time, use integers
519- tvec = _default_response_times (sys .A , 100 )
520- T = range (int (np .ceil (max (tvec ))))
521-
523+ if sys .A .shape == (0 , 0 ):
524+ # No dynamics; use 100 time steps
525+ T = range (100 )
526+ else :
527+ tvec = _default_response_times (sys .A , 100 )
528+ T = range (int (np .ceil (max (tvec ))))
522529 U = np .ones_like (T )
523530
524531 T , yout , xout = forced_response (sys , T , U , X0 , transpose = transpose ,
@@ -574,11 +581,21 @@ def step_info(sys, T=None, SettlingTimeThreshold=0.02,
574581 sys = _get_ss_simo (sys )
575582 if T is None :
576583 if isctime (sys ):
577- T = _default_response_times (sys .A , 1000 )
584+ if sys .A .shape == (0 , 0 ):
585+ # No dynamics; use the unit time interval
586+ T = np .linspace (0 , 1 , 100 , endpoint = False )
587+ else :
588+ # Use 1000 time points for accuracy
589+ T = _default_response_times (sys .A , 1000 )
578590 else :
579591 # For discrete time, use integers
580- tvec = _default_response_times (sys .A , 1000 )
581- T = range (int (np .ceil (max (tvec ))))
592+ if sys .A .shape == (0 , 0 ):
593+ # No dynamics; use 100 time steps
594+ T = range (100 )
595+ else :
596+ # Use 1000 time points for accuracy
597+ tvec = _default_response_times (sys .A , 1000 )
598+ T = range (int (np .ceil (max (tvec ))))
582599
583600 T , yout = step_response (sys , T )
584601
@@ -698,11 +715,19 @@ def initial_response(sys, T=None, X0=0., input=0, output=None,
698715 # The initial vector X0 is created in forced_response(...) if necessary
699716 if T is None :
700717 if isctime (sys ):
701- T = _default_response_times (sys .A , 1000 )
718+ if sys .A .shape == (0 , 0 ):
719+ # No dynamics; use the unit time interval
720+ T = np .linspace (0 , 1 , 100 , endpoint = False )
721+ else :
722+ T = _default_response_times (sys .A , 100 )
702723 else :
703724 # For discrete time, use integers
704- tvec = _default_response_times (sys .A , 1000 )
705- T = range (int (np .ceil (max (tvec ))))
725+ if sys .A .shape == (0 , 0 ):
726+ # No dynamics; use 100 time steps
727+ T = range (100 )
728+ else :
729+ tvec = _default_response_times (sys .A , 100 )
730+ T = range (int (np .ceil (max (tvec ))))
706731 U = np .zeros_like (T )
707732
708733 T , yout , _xout = forced_response (sys , T , U , X0 , transpose = transpose ,
@@ -802,12 +827,19 @@ def impulse_response(sys, T=None, X0=0., input=0, output=None,
802827 # Compute T and U, no checks necessary, they will be checked in lsim
803828 if T is None :
804829 if isctime (sys ):
805- T = _default_response_times (sys .A , 100 )
830+ if sys .A .shape == (0 , 0 ):
831+ # No dynamics; use the unit time interval
832+ T = np .linspace (0 , 1 , 100 , endpoint = False )
833+ else :
834+ T = _default_response_times (sys .A , 100 )
806835 else :
807836 # For discrete time, use integers
808- tvec = _default_response_times (sys .A , 100 )
809- T = range (int (np .ceil (max (tvec ))))
810-
837+ if sys .A .shape == (0 , 0 ):
838+ # No dynamics; use 100 time steps
839+ T = range (100 )
840+ else :
841+ tvec = _default_response_times (sys .A , 100 )
842+ T = range (int (np .ceil (max (tvec ))))
811843 U = np .zeros_like (T )
812844
813845 # Compute new X0 that contains the impulse
0 commit comments