This page contains information for developers on the past and future releases for the package. For each release, the major changes are listed. Each release should (eventually) have its own page describing the detailed changes that are included for that release.
Release naming conventions: starting with release 0.7.0, we use the major.minor.revision numbering convention for releases:
Pending items (remove when done):
This release includes numerous bug fixes and improvements, with major changes such as a substantial reorganization of the documentation into a User Guide and Reference Manual, more consistent and complete docstrings, and support for referencing signals and subsystems by name as well as by index. Phase plane plots now use matplotlib’s streamplot for better visuals. New functions include combine_tf and split_tf for MIMO/SISO conversion and disk_margins for stability analysis. Additional improvements include consistent keyword usage, expanded LTI system methods for plotting and responses, better error messages, and legacy aliases to maintain backward compatibility.
Full list of changes: https://github.com/python-control/python-control/releases/tag/0.10.2
Detailed changelog: https://github.com/python-control/python-control/compare/0.10.1...0.10.2
python-control 0.10.1 (17 Aug 2024)This release provides a number of updates to the plotting functions to make the interface more uniform between the various types of control plots (including the use of the ControlPlot object as the return type for all _plot functions (#1034), adds slice access for state space models (#1012), includes new tools for model identification from data (#1022, #1024), as well as compatibility with NumPy 2.0 (#994). A number of other smaller enhancements, bug fixes, and updates to documentation and examples are also included.
Full list of changes: https://github.com/python-control/python-control/releases/tag/0.10.1
Detailed changelog: https://github.com/python-control/python-control/compare/0.10.0...0.10.1
python-control 0.10.0 (31 Mar 2024)This release changes the interface for plotting to use a "response/plot" design pattern (#920, #924, #953), adds multivariable interconnect functionality (#881), restructures I/O system classes (#916), and adds the norm() function to compute input/output system norms (#971). A number of other smaller enhancements, bug fixes, and updates to documentation and examples are also included.
Note: This release may break code that was using v0.9.4 or earlier. In addition, the matrix
class in NumPy is no longer supported, and Python 3.10 or higher is required.
Full list of changes: https://github.com/python-control/python-control/releases/tag/0.10.0
Detailed changelog: https://github.com/python-control/python-control/compare/0.9.4...0.10.0
python-control 0.9.4 (9 Jun 2023)This release adds functions for optimization-based estimation and moving horizon estimation (#877), better handling of system and signal names (#857, #892, #884) as well a number of bug fixes, small enhancements, and updated documentation.
Full list of changes: https://github.com/python-control/python-control/releases/tag/0.9.4
Detailed changelog: https://github.com/python-control/python-control/compare/0.9.3.post2...0.9.4
python-control 0.9.3 (31 Dec 2022)This release adds support for collocation in finding optimal trajectories (#799), adds the ability to compute optimal trajectories for flat systems (#763) adds support for passivity indices and passivity tests for discrete time systems (#750), and includes support for gain scheduling (in create_statefbk_iosystem
, #827). Setup is now done using setuptools (pip install .
instead of python setup.py install
).
Full list of changes: https://github.com/python-control/python-control/releases/tag/0.9.3
Detailed changelog: https://github.com/python-control/python-control/compare/0.9.2...0.9.3
python-control 0.9.2 (28 May 2022)This is a minor release that includes I/O system enhancements (#710), optimal control enhancements (#712), new functionality for stochastic systems (#714), updated system class functionality (#721), bug fixes and improvements to Nyquist plots (#722) and Nichols charts (#723), and L-infinity norm for linear systems (#729).
New features:
ss()
, rss()
, and drss()
functions to return LinearIOSystem
objects (instead of StateSpace
objects). This makes it easier to create LTI state space systems that can be combined with other I/O systems without having to add a conversation step. Since LinearIOSystem
objects are also StateSpace
objects, no functionality is lost. (This change is implemented through the introduction of a internal NamedIOSystem
class, to avoid import cycles.)create_statefbk_iosystem()
that creates an I/O system for implementing a linear state feedback controller of the form u = ud - Kp(x - xd). The function returns an I/O system that takes xd, ud, and x as inputs and generates u as an output. The integral_action
keyword can be used to define a set of outputs y = C x for which integral feedback is also included: u = ud - Kp(x - xd) - Ki(C x - C xd).lqr
and dlqr
commands now accept an integral_action
keyword that allows outputs to be specified for implementing integral action. The resulting gain matrix has the form K = [Kp, Ki]. (This is useful for combining with the integral_action
functionality in create_statefbk_iosystem()
).t_eval
keyword in input_output_response
to allow a different set of time points to be used for the input vector and the computed outputwhite_noise
, which creates a white noise vector in continuous or discrete time, and correlation
, which calculates the correlation function (or [cross-] correlation matrix), R(tau).create_estimator_iosystem
that matches the style of create_statefbk_iosystem
(#710) and creates an I/O system implementing an estimator (including covariance update).input_output_response
as a list of values, so that for estimators that keep track of covariance you can set the initial conditions as [X0, P0]
. In addition, if you specify a fewer number of initial conditions than the number of states, the remaining states will be initialized to zero (with a warning if the last initial condition is not zero). This allows the initial conditions to be given as [X0, 0]
.input_output_response
as a list of variables. Each element in the list will be treated as a portion of the input and broadcast (if necessary) to match the time vector. This allows input for a system with noise as [U, V]
and inputs for a system with zero noise as [U, np.zero(n)]
(where U is an input signal and np.zero(n)
gets broadcast to match the time vector).stochresp.ipynb
, pvtol-outputfbk.ipynb
, kincar-fusion.ipynb
.LTI
class to use poles()
and zeros()
for retrieving poles and zeros, with pole()
and zero()
generating a PendingDeprecationWarning
(which is ignored by default in Python). (The MATLAB compatibility module still uses pole()
and zero()
.)TimeResponseData
and FrequencyResponseData
objects now implement a to_pandas()
method that creates a simple pandas dataframe.FrequencyResponseData
class is now used as the output for frequency response produced by freqresp()
and a new function frequency_response
has been defined, to be consistent with the input_output_response
function. A FrequencyResponseData
object can be assigned to a tuple to provide magnitude, phase, and frequency arrays, mirroring TimeResponseData
functionality from PR #649.drss
, rss
, ss2tf
, tf2ss
, tf2io
, and ss2io
functions now all accept system and signal name arguments (via _process_namedio_keywords()
.ss
function can now accept function names as arguments, in which case it creates a NonlinearIOSystem
(I'm not sure how useful this is, but ss
is a sort of wrapper function that calls the appropriate class constructor, so it was easy enough to implement.)linform
to compute linear system L-infinity norm by @roryyorke in https://github.com/python-control/python-control/pull/729Improvements, bug fixes:
interconnect
as non-sequence by @roryyorke in https://github.com/python-control/python-control/pull/698Additional changes:
Full changelog: https://github.com/python-control/python-control/compare/0.9.1...0.9.2
python-control 0.9.1 (31 Dec 2021)This is a minor release that includes new functionality for discrete time systems (dlqr, dlqe, drss), flat systems (optimization and constraints), a new time response data class, and many individual improvements and bug fixes.
New features:
Improvements, bug fixes:
Additional changes:
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')
. A full list of additions and changes is described below.
New features
Interface changes
Improvements, bug fixes
Additional changes
use_legacy_defaults
function to allow compatibility with previous versions (sawyerbfuller)nyquist_plot
(geekonloose)pzmap
grid to be compatible with matplotlib
updates (bnavigator)margin
computation for discrete time systems (bnavigator)bdalg.connect
(sawyerbfuller)InterconnectedSystem
naming bugs, improved conventions (samlaf)LinearIOSystem
output bug in output function (francescoseccamonte)forced_response
that overrode squeeze
parameter (bnavigator)scipy
calls and updated to latest numpy
(bnavigator)rlocus
function no longer automatically creates a new figurelqe
changed to 1D array (matches lqr
)markov
find_eqpt
, input_output_response
, and linearize
functionalityxferfcn._common_den
(bnavigator)FRD
class name FrequencyResponseData
to fix MacOS sphinx build problems (FRD
still defined for backward compatibility`use_numpy_matrix
root_locus
root_locus
(icam0)pole()
and zero()
functions (PR #205, PR #206)scipy.signal
module that is used for some python-control functions and support for numpy
data types (int32, int64, etc) in all python-control functions (PR #170)obsv
(observable canonical form, PR #103), augw
and mixsyn
(mixed sensitivity synthesis, PR #151)c2d
functionality added for MIMO state-space systemsfreqresp
for transfer functions and state space modelsdare
so that it returns stabilizing solutionforce_response
(lsim
)root_locus
tustin
or zoh
.append
, connect
, minreal
Support for discrete time systems using the 'timebase' variable dt
. For continuous systems dt = 0
and for discrete time systems dt = sampling time
. If dt = None
, timebase is not specified and can be either discrete or continuous time. System compositions (series
, parallel
, feedback
) requires matching timebases (with automatic conversion if one timebase is None
and the other is specified).
There is now a frequency response data (FRD
) subclass contributed by Rene van Paassen. For now, the frequency vectors of different FRD
objects need to match; no interpolation / clipping yet.
There is now a mineral
function for computing minimal transfer functions (by removing pole zero cancellations), contributed by Rene van Paassen.
Improved support for python 3.x: the current version should run in python 2.6+ (tested in 2.7) and python 3.x (tested in 3.2). I haven't yet tested slycot in python 3.x, but the functions that don't require slycot (most SISO calculations) are working.
labelFreq
keyword (code contributed by Kevin Davies).tf2ss
conversions when there are poles with multiplicity > 1. This was generating lots of errors in the unit tests (properly, as it turns out, since there was a bug!).acker
function from Roberto Bucherconvert_test.py
that included fixing bugs in the unit test code and the conversion code (as noted above).step_response
, initial_response
, impulse_response
and forced_response
, along with MATLAB compatible versions (step
, initial
, impulse
, lsim
). Handles MIMO systems by allowing choice of input and output.examples/geneticswitch.py
for an example.control.matlab
) interfaces are unaffected (continue to use step
).lyap
, dlyap
, care
and dare
functions using slycot
.tfvis
, Simple GUI application for visualizing how the poles/zeros of the transfer function effects the Bode, Nyquist and step response of a SISO system. Contributed by Vanessa Romero Segovia, Ola Johnsson, Jerker Nordh.Initial implementation of model reduction functions: hsvd
, modred
, balred
, courtesy of Brandt Belson, Steve Brunton, Kevin Chen, and Lauren Padilla.
Changes to (eventually) support MIMO transfer functions. These should be transparent to users of the MATLAB interface (control.matlab), but control functions now use a separate class structure. Courtesy randt Belson, Steve Brunton, Kevin Chen, and Lauren Padilla.
Updated functionality for Nichols charts, courtesy Allan McInnes.
Improvements in unwrap function, courtesy Sawyer Fuller.
lsim
wrapper to allow systems with poles at origin. Still need to fix this for step() and impulse()place
and lqr
commands, using the SLICOT library (via Enrico Avventi's slycot
wrappers). LQR works on MIMO systems.bode(sys1, ..., sysN)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4