standardize time response return values, return_x/squeeze keyword processing by murrayrm · Pull Request #511 · python-control/python-control
This PR is a partial replacement for #507, focused on addressing the issues in #453 relating to time responses:
-
Update
forced_responseto only return the state trajectory ifreturn_xis True, consistent with all other time response functions (includinginput_output_response). Prior to this,forced_responsealways returned the state vector. In addition to the inconsistency, this was also problematic if the system you were simulating was a transfer function, since the state space depended on the realization and this information islost. Some other smaller changes related to this:- Issue a warning if you ask for the state space trajectory corresponding to a transfer function
- Set the default value of
return_xusing `config.defaults['forced_response.return_x'] (default = False) - Reset the default value of
config.defaults['forced_response.return_x']to True withuse_legacy_defaultsfor versions < 0.9.0 for backward compatibility. - Unit tests to make sure all of that is working.
-
Consolidate processing of time responses through a new internal function
_process_time_responsethat provides uniform processing of thereturn_xandsqueezekeywords. This is mainly in preparation for any future changes in how we handlesqueeze, so that changes only need to be made at one location in the code. The functionality of the code is unchanged, but the processing is a big different:- The default value for the
squeezekeyword for time responses is now set inconfig.defaults['control.squeeze_time_response']. This is currently set to True, which means that time responses for systems with a single output are squeezed to a 1D response. - Added some unit tests to make sure that we get the right return values for all of the current time responses (
impulse_response,initial_response,step_response,forced_response,input_output_response). - Added some commented out code for future implementation of a
squeeze='siso'capability that would allow time responses to mirror current frequency response behavior (squeeze=Trueonly removes axes for SISO systems). I left this out for now pending resolution of the frequency response squeeze processing (drafted in Standardize squeeze processing in frequency response functions #507, but needs more thought and effort).
- The default value for the
Other changes, not directly related to those above
- Added a warning if you try to specify a non-zero initial state when simulating a transfer function.
- Docstring cleanup to use numpydoc syntax in few places.