Version 0.10.0 Release Notes

This release changes the interface for plotting to use a _response/_plot calling pattern, adds multivariable interconnect functionality, restructures I/O system classes, and adds the norm (now system_norm) function to compute input/output system norms. Support for the NumPy matrix class has been removed.

This version of python-control requires Python 3.10 and higher.

New classes, functions, and methods

The following new classes, functions, and methods have been added in this release:

Bug fixes

The following bugs have been fixed in this release:

  • sample_system: Fixed a bug in which the zero frequency (DC) gain for the ‘matched’ transformation was being computed incorrectly.

  • TimeResponseData.to_pandas: Fixed a bug when the response did not have state data.

Improvements

The following additional improvements and changes in functionality were implemented in this release:

  • interconnect: Allows a variety of “multivariable” specifications for connections, inputs, and outputs when systems have variables with names of the form ‘sig[i]’.

  • nlsys: Factory function for NonlinearIOSystem.

  • Block diagram functions (series, parallel, feedback, append, negate) now work on all I/O system classes, including nonlinear systems.

  • Simulation functions (initial_response, step_response, forced_response) will now work for nonlinear functions (via an internal call to input_output_response).

  • Bode and Nyquist plots have been significantly enhanced in terms of functionality for display multiple tracing and other visual properties. See bode_plot and nyquist_plot for details, along with the Input/Output Response and Plotting chapter.

  • Properties of frequecy plots can now be set using the config.defaults['freqplot.rcParams'] (see Package Configuration Parameters for details).

  • create_statefbk_iosystem: Allows passing an I/O system instead of the a gain (or gain schedule) for the controller.

  • root_locus_plot: Interactive mode is now enabled, so clicking on a location on the root locus curve will generate markers at the locations on the loci corresponding to that gain and add a message above the plot giving the frequency and damping ratio for the point that was clicked.

  • gram: Computation of Gramians now supports discrete-time systems.

  • All time response functions now allow the params keyword to be specified (for nonlinear I/O systems) and the parameter values used for generating a time response are stored in the TimeResponseData object..

Deprecations

The following functions have been newly deprecated in this release and generate a warning message when used:

  • connect: Use interconnect.

  • ss2io, tf2io: These functions are no longer required since the StateSpace and TransferFunction classes are now subclasses of NonlinearIOSystem.

  • root_locus_plot, sisotool: the print_gain keyword has been replaced interactive.

  • In various plotting routines, the (already deprecated) Plot keyword is now the (still deprecated) plot keyword. This can be used to obtain legacy return values from _plot functions.

  • phase_plot: Use phase_plane_plot instead.

The listed items are slated to be removed in future releases (usually the next major or minor version update).

Removals

The following functions and capabilities have been removed in this release:

  • use_numpy_matrix: The numpy.matrix class is no longer supported.

  • NamedIOSystem: renamed to InputOutputSystem

  • LinearIOSystem: merged into the StateSpace class

  • pole: use poles. The matlab.pole function is still available.

  • zero: use zeros. The matlab.zero function is still available.

  • timebaseEqual: use common_timebase.

  • The impulse_response function no longer accepts the X0 keyword.

  • The initial_response function no longer accepts the input keyword.

  • The deprecated default parameters ‘bode.dB’, ‘bode.deg’, ‘bode.grid’, and ‘bode.wrap_phase’ have been removed. They should be accessed as ‘freqplot.dB’, ‘freqplot.deg’, ‘freqplot.grid’, and ‘freqplot.wrap_phase’.

  • Recalculation of the root locus plot when zooming no longer works (you can still zoom in and out, you just don’t get a recalculated curve).

Code that makes use of the functionality listed above will have to be rewritten to work with this release of the python-control package.