@@ -512,20 +512,7 @@ def step_response(sys, T=None, X0=0., input=None, output=None,
512
512
"""
513
513
sys = _get_ss_simo (sys , input , output )
514
514
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 )
529
516
U = np .ones_like (T )
530
517
531
518
T , yout , xout = forced_response (sys , T , U , X0 , transpose = transpose ,
@@ -580,22 +567,7 @@ def step_info(sys, T=None, SettlingTimeThreshold=0.02,
580
567
'''
581
568
sys = _get_ss_simo (sys )
582
569
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 )
599
571
600
572
T , yout = step_response (sys , T )
601
573
@@ -714,20 +686,8 @@ def initial_response(sys, T=None, X0=0., input=0, output=None,
714
686
# Create time and input vectors; checking is done in forced_response(...)
715
687
# The initial vector X0 is created in forced_response(...) if necessary
716
688
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 )
731
691
U = np .zeros_like (T )
732
692
733
693
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,
826
786
827
787
# Compute T and U, no checks necessary, they will be checked in lsim
828
788
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 )
843
790
U = np .zeros_like (T )
844
791
845
792
# Compute new X0 that contains the impulse
@@ -860,3 +807,22 @@ def impulse_response(sys, T=None, X0=0., input=0, output=None,
860
807
return T , yout , _xout
861
808
862
809
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