Version 0.9.0 Release Notes
Released: 21 Mar 2021
Version 0.9.0 of the Python Control Toolbox (python-control) contains a number of enhanced features and changes to functions. Some of these changes may require modifications to existing user code and, in addition, some default settings have changed that may affect the appearance of plots or operation of certain functions.
Significant new additions including improvements in the I/O systems
modules that allow automatic interconnection of signals having the
same name (via the interconnect function), generation and plotting
of describing functions for closed loop systems with static
nonlinearities, and a new optimal control module that allows basic computation of optimal controls
(including model predictive controllers). Some of the changes that may
break use code include the deprecation of the NumPy matrix
type (2D NumPy arrays are used instead), changes in the return value
for Nyquist plots (now returns number of encirclements rather than the
frequency response), switching the default timebase of systems to be 0
rather than None (no timebase), and changes in the processing of
return values for time and frequency responses (to make them more
consistent). In many cases, the earlier behavior can be restored by
calling use_legacy_defaults('0.8.4').
New features
Optimal control module, including rudimentary MPC control
Describing functions plots
MIMO impulse and step response
I/O system improvements:
linearizeretains signal names plus newinterconnectfunctionAdd summing junction + implicit signal interconnection
Implementation of initial_phase, wrap_phase keywords for bode_plot
Added IPython LaTeX representation method for StateSpace objects
New
dynamicsandoutputmethods inStateSpaceFRDsystems can now be created from a discrete time LTI systemCost and constraints are now allowed for
flatsys.point_to_point
Interface changes
Switch default state space matrix type to ‘array’ (instead of ‘matrix’)
Use
__call__instead ofevalfrin LTI system classesDefault dt is now 0 instead of None
Change default value of
StateSpace.remove_useless_statesto FalseStandardize time response return values,
return_x/squeezekeyword processingStandardize
squeezeprocessing in frequency response functionsNyquist plot now returns number of encirclements
Switch
LTIclass and subclasses to use ninputs, noutputs, nstatesUse standard time series convention for
markovinput dataTransferFunction array priority plus system type conversion checking
Generate error for
tf2ssof non-proper transfer functionUpdated return values for frequency response evaluated at poles
Improvements, bug fixes
Nyquist plot improvements: better arrows, handle poles on imaginary axis
Sisotool small visual cleanup, new feature to show step response of different input-output than loop
Add
bdschurand fox modal form with repeated eigenvaluesFix rlocus timeout due to inefficient _default_wn calculation
Fix
stability_margins: finding z for|H(z)| = 1computed the wrong polynomialsFreqplot improvements
Fix rlocus plotting problem in Jupyter notebooks
Handle empty pole vector for timevector calculation
Fix
lqedocstring and input array typeUpdated
markovto add tranpose keyword + default warningFix impulse size for discrete-time impulse response
Extend
returnScipySignalLTIto handle discrete-time systemsBug fixes and extensions for
step_info