@@ -512,20 +512,7 @@ def step_response(sys, T=None, X0=0., input=None, output=None,
512512 """
513513 sys = _get_ss_simo (sys , input , output )
514514 if T is None :
515- if isctime (sys ):
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 )
521- else :
522- # For discrete time, use integers
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 ))))
515+ T = _get_response_times (sys , N = 100 )
529516 U = np .ones_like (T )
530517
531518 T , yout , xout = forced_response (sys , T , U , X0 , transpose = transpose ,
@@ -580,22 +567,7 @@ def step_info(sys, T=None, SettlingTimeThreshold=0.02,
580567 '''
581568 sys = _get_ss_simo (sys )
582569 if T is None :
583- if isctime (sys ):
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 )
590- else :
591- # For discrete time, use integers
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 ))))
570+ T = _get_response_times (sys , N = 1000 )
599571
600572 T , yout = step_response (sys , T )
601573
@@ -714,20 +686,8 @@ def initial_response(sys, T=None, X0=0., input=0, output=None,
714686 # Create time and input vectors; checking is done in forced_response(...)
715687 # The initial vector X0 is created in forced_response(...) if necessary
716688 if T is None :
717- if isctime (sys ):
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 )
723- else :
724- # For discrete time, use integers
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 ))))
689+ # TODO: default step size inconsistent with step/impulse_response()
690+ T = _get_response_times (sys , N = 1000 )
731691 U = np .zeros_like (T )
732692
733693 T , yout , _xout = forced_response (sys , T , U , X0 , transpose = transpose ,
@@ -826,20 +786,7 @@ def impulse_response(sys, T=None, X0=0., input=0, output=None,
826786
827787 # Compute T and U, no checks necessary, they will be checked in lsim
828788 if T is None :
829- if isctime (sys ):
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 )
835- else :
836- # For discrete time, use integers
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 ))))
789+ T = _get_response_times (sys , N = 100 )
843790 U = np .zeros_like (T )
844791
845792 # Compute new X0 that contains the impulse
@@ -860,3 +807,22 @@ def impulse_response(sys, T=None, X0=0., input=0, output=None,
860807 return T , yout , _xout
861808
862809 return T , yout
810+
811+
812+ # Utility function to get response times
813+ def _get_response_times (sys , N = 100 ):
814+ if isctime (sys ):
815+ if sys .A .shape == (0 , 0 ):
816+ # No dynamics; use the unit time interval
817+ T = np .linspace (0 , 1 , N , endpoint = False )
818+ else :
819+ T = _default_response_times (sys .A , N )
820+ else :
821+ # For discrete time, use integers
822+ if sys .A .shape == (0 , 0 ):
823+ # No dynamics; use N time steps
824+ T = range (N )
825+ else :
826+ tvec = _default_response_times (sys .A , N )
827+ T = range (int (np .ceil (max (tvec ))))
828+ return T
0 commit comments