Version 0.9.4 Release Notes

This release adds functions for optimization-based estimation and moving horizon estimation, better handling of system and signal names, as well a number of bug fixes, small enhancements, and updated documentation.

New classes, functions, and methods

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

  • Added the optimal.OptimalEstimationProblem class, the optimal.compute_oep function, and the optimal.create_mhe_iosystem function, which compute the optimal estimate for a (nonlinear) I/O system using an explicit cost function of a fixed window of applied inputs and measured outputs.

  • Added gaussian_likelyhood_cost to create cost function corresponding to Gaussian likelihoods for use in optimal estimation.

  • Added disturbance_range_constraint to create a range constraint on disturbances.

  • Added LTI.bandwidth to compute the bandwidth of a linear system.

Bug fixes

The following bugs have been fixed in this release:

  • Fixed a bug in interconnect in which the system name was being clobbered internally.

  • Fixed a bug in bode_plot where phase wrapping was not working when there were multiple systems.

  • Fixed a bug in root_locus_plot in which the ax parameter was not being handled correctly.

  • Fixed a bug in create_statefbk_iosystem that didn’t proper handle 1D gain schedules.

  • Fixed a bug in rootlocus_pid_designer where the Bode plot was sometimes blank.

  • Fixed a bug in which signal labels for a StateSpace system were lost when computing forced_response.

  • Fixed a bug in which the damp command was assuming a continuous-time system when printing out pole locations (but the return value was correct).

  • Fixed a bug in which signal names could be lost for state transfer functions when using the interconnect function.

  • Fixed a bug in the block-diagonal schur matrix computation used in bdschur.

Improvements

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

  • Added an add_unused keyword parameter to interconnect that allows unused inputs or outputs to be added as inputs or outputs of the interconnected system (useful for doing a “partial” interconnection).

  • Added control_indices and state_indices to create_statefbk_iosystem to allow partial interconnection (e.g., for inner/outer loop construction).

  • create_mpc_iosystem now allows system and signal names to be specified via appropriate keywords.

  • TransferFunction objects can now be displayed either in polynomial form or in zpk form using the display_format parameter when creating the system.

  • Allow discrete-time Nyquist plots for discrete-time systems with poles at 0 and 1.

  • Generate a warning if prewarp_frequency is used in sample_system for a discretization type that doesn’t support it.

  • Converting a system from state space form to transfer function form (and vice versa) now updates the system name to append “$converted”, removing an issue where two systems might have the same name.

Deprecations

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

  • Changed type keyword for create_statefbk_iosystem to controller_type (‘linear’ or ‘nonlinear’).

  • issys: use isinstance(sys, ct.LTI).

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:

  • function: function that was removed.

  • Other functionality that has been removed.

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

Additional notes

Anything else that doesn’t fit above.