Skip to content

Releases: python-control/python-control

0.10.1

17 Aug 16:08
6d42088
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog: 0.10.0...0.10.1

0.10.0

31 Mar 17:08
1b2abe3
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog: 0.9.4...0.10.0

0.9.4

10 Jun 05:19
f7d18f1
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog: 0.9.3...0.9.4

0.9.3: Improvements in optimal and flatsys modules, updated passivity module, gain scheduling support, bug fixes

31 Dec 18:51
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog: 0.9.2...0.9.3

Improvements in I/O systems, stochastic systems, optimization-based control, Nyquist plots

28 May 17:09
3b5f199
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog: 0.9.1...0.9.2

New functionality for discrete time systems, flat systems, time responses + bug fixes and improvements

31 Dec 18:19
a111b03
Compare
Choose a tag to compare

Version 0.9.1 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:

  • Add optimization to flat systems trajectory generation (#569 by murrayrm)
  • Return a discrete time system with drss() (#589 by bnavigator)
  • A first implementation of the singular value plot (#593 by forgi86)
  • Include InfValue into settling min/max calculation for step_info (#600 by bnavigator)
  • New time response data class (#649 by murrayrm)
  • Check for unused subsystem signals in InterconnectedSystem (#652 by roryyorke)
  • New PID design function built on sisotool (#662 by sawyerbfuller)
  • Modify discrete-time contour for Nyquist plots to indent around poles (#668 by sawyerbfuller)
  • Additional I/O system type conversions (#672 by murrayrm)
  • Remove Python 2.7 support and leverage @ operator (#679 by bnavigator)
  • Discrete time LQR and LQE (#670 by sawyerbfuller, murrayrm)

Improvements, bug fixes:

  • Change step_info undershoot percentage calculation (#590 by juanodecc)
  • IPython LaTeX output only generated for small systems (#607 by roryyorke)
  • Fix warnings generated by sisotool (#608 by roryyorke)
  • Discrete time LaTeX repr of StateSpace systems (#609 by bnavigator)
  • Updated rlocus.py to remove warning by sisotool() with rlocus_grid=True (#616 by nirjhar-das)
  • Refine automatic contour determination in Nyquist plot (#620 by bnavigator)
  • Fix damp method for discrete time systems with a negative real-valued pole (#647 by vincentchoqueuse)
  • Plot Nyquist frequency correctly in Bode plot in Hz (#651 by murrayrm)
  • Return frequency response for 0 and 1-state systems directly (#663 by bnavigator)
  • Fixed prewarp not working in c2d and sample_system, margin docstring improvements (#669 by sawyerbfuller)
  • Improved lqe calling functionality (#673 by murrayrm)
  • Vectorize FRD feedback function (#680 by bnavigator)
  • BUG: extrapolation in ufun throwing errors (#682 by miroslavfikar)
  • Allow use of SciPy for LQR, LQE (#683 by murrayrm)
  • Improve forced_response and its documentation (#588 by bnavigator)
  • Add documentation about use of axis('equal') in pzmap, rlocus (#685 by murrayrm)

Additional changes:

  • Replace Travis badge with GHA workflows, add PyPI and conda badges (#584 by bnavigator)
  • Don't install toplevel benchmarks package (#585 by bnavigator)
  • LTI squeeze: ndarray.ndim == 0 is also a scalar (#595 by bnavigator)
  • xfail testmarkovResults until #588 is merged (#601 by bnavigator)
  • Remove from readme.rst that you need a fortran compiler (#602 by sawyerbfuller)
  • Remove statement that slycot only on linux (#603 by sawyerbfuller)
  • Allow float precision in result assertions (#615 by bnavigator)
  • Improved unit test coverage for root_locus: dtime and sisotool (#617 by bnavigator)
  • Add DefaultDict for deprecation handling (#619 by bnavigator)
  • Documentation updates (#633 by murrayrm)
  • Various docstring edits + fixed plot legends on cruise control example (#643 by billtubbs)
  • Ease test tolerance on timeseries (#659 by bnavigator)
  • Use conda-forge for numpy (CI fix) (#667 by bnavigator)
  • Fix doc escape (#674 by bnavigator)
  • Remove duplicate Slycot error handling, require Slycot >=0.4 (#678 by bnavigator)
  • Full list of merged pull requests associated with this release.
  • Full list of commits associated with this release.

0.9.0 - many improvements plus new functionality (plots, iosys, descfcn, optimal), deprecated np.matrix, py2.7

20 Mar 16:56
283f5e7
Compare
Choose a tag to compare

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

  • Optimal control module, including rudimentary MPC control (#549 by murrayrm)
  • Describing functions plots (#521 by murrayrm)
  • MIMO impulse and step response (#514 by murrayrm)
  • I/O system improvements:
    • linearize() retains signal names plus new interconnect() function (#497 by murrayrm)
    • Add summing junction + implicit signal interconnection (#517 by murrayrm)
  • Implementation of initial_phase, wrap_phase keywords for bode_plot (#494 by murrayrm)
  • Added IPython LaTeX representation method for StateSpace objects (#450 by roryyorke)
  • New dynamics() and output() methods in StateSpace (#566 by sawyerbfuller)
  • FRD systems can now be created from a discrete time LTI system (#568 by bnavigator)
  • Cost and constraints are now allowed for flatsys.point_to_point() (#569 by murrayrm)

Interface changes

  • Switch default state space matrix type to 'array' (instead of 'matrix') (#480 by murrayrm, #486 by bnavigator, #433 by sawyerbfuller)
  • Use __call__ instead of evalfr in lti system classes (#449 by sawyerbfuller)
  • Default dt is now 0 instead of None (#431 by sawyerbfuller, #490 by bnavigator)
  • Change default value of statesp.remove_useless_states to False (#509 by murrayrm)
  • Standardize time response return values, return_x/squeeze keyword processing (#511 by murrayrm)
  • Standardize squeeze processing in frequency response functions (#507 by murrayrm)
  • Nyquist plot now returns number of encirclements (#534 by murrayrm)
  • Switch LTI class and subclasses to use ninputs, noutputs, nstates (#515 by murrayrm)
  • Use standard time series convention for markov() input data (#508 by murrayrm)
  • TransferFunction array priority plus system type conversion checking (#498 by murrayrm)
  • Generate error for tf2ss of non-proper transfer function (#492 by murrayrm)
  • Updated return values for frequency response evaluated at poles (#542 by murrayrm)

Improvements, bug fixes

  • Nyquist plot improvements: better arrows, handle poles on imaginary axis (#534 by murrayrm)
  • Sisotool small visual cleanup, new feature to show step response of different input-output than loop (#531 by sawyerbfuller)
  • Add bdschur() and fox modal form with repeated eigenvalues (#495 by roryyorke)
  • Fix rlocus timeout due to inefficient _default_wn calculation (#527 by murrayrm)
  • Fix #523: finding z for |H(z)|=1 computed the wrong polynomials (#525 by bnavigator)
  • Freqplot improvements (#522 by sawyerbfuller)
  • Fix rlocus plotting problem in Jupyter notebooks (#503 by murrayrm)
  • Handle empty pole vector for timevector calculation (#485 by bnavigator)
  • Fix lqe() docstring and input array type (#483 by bnavigator)
  • Updated markov() to add tranpose keyword + default warning (#478 by murrayrm)
  • Fix impulse size for discrete-time impulse response (#447 by sawyerbfuller)
  • Extend returnScipySignalLTI() to handle discrete-time systems (#445 by bnavigator)
  • Bug fixes and extensions for step_info() (#555 by sawyerbfuller, #567 by juanodecc, #577 by bnavigator)

Additional changes

  • Address NumPy deprecations np.int, np.float (#539 by dapperfu, #548 by murrayrm)
  • Shift CI tests from Travis CI to GitHub Actions (#504 by murrayrm)
  • Link to developer wiki in docs. (#502 by sawyerbfuller)
  • Reduce Python 3 testing to speed up Travis CI testing (#487 by murrayrm)
  • Refactor the test suite using pytest for array and matrix types (#438 by bnavigator)
  • Full list of merged pull requests associated with this release.
  • Full list of commits associated with this release.

0.8.4 - Improvements to time responses, discrete time systems, bug fixes, doc updates

28 Dec 20:11
35f1e64
Compare
Choose a tag to compare

This release introduces several new features as well as bug fixes and documentation improvements:

  • Improved default time vector for time response functions (bnavigator, sawyerbfuller)
  • New use_legacy_defaults function to allow compatibility with previous versions (sawyerbfuller)
  • Allow creation of non-proper transfer functions (bnavigator, rlegnain)
  • Added ability to set arrow head length and width option in nyquist_plot (geekonloose)
  • Added ability to 'prewarp' the conversion of continuous to discrete-time systems (sawyerbfuller)
  • Added rlocus capability for discrete-time systems (sawyerbfuller)
  • Updated pzmap grid to be compatible with matplotlib updates (bnavigator)
  • Implement loadable string representation (repr) for tf, ss, and frd (repagh)
  • Fixed margin computation for discrete time systems (bnavigator)
  • Fixed indexing bug in bdalg.connect (sawyerbfuller)
  • Fixed InterconnectedSystem naming bugs, improved conventions (samlaf)
  • Fixed LinearIOSystem output bug in output function (francescoseccamonte)
  • Fixed bug in forced_response that overrode squeeze parameter (bnavigator)
  • Use rad/sec for Bode plot in MATLAB bode (was erroneously defaulting to Hertz) (paulvicioso)
  • Removed deprecated scipy calls and updated to latest numpy (bnavigator)
  • Multiple documentation updates (bnavigator, laurensvalk)
  • New and improved examples for sisotool, pvtol (repagh, samlaf)
  • The rlocus function no longer automatically creates a new figure
  • Updated unit tests + switch to pytest (bnavigator, sawyerbfuller)
  • Return type for eigenvalues in lqe changed to 1D array (matches lqr)
  • Small fixes + documentation updates to markov

More info:

0.8.3 - I/O systems, flatness, new functionality, improved documentation

04 Jan 20:45
319a756
Compare
Choose a tag to compare

This release introduces several new features as well as bug fixes and documentation improvements:

  • New input/output systems module for creating nonlinear systems from individual I/O subsystems, with find_eqpt, input_output_response, and linearize functionality
  • Initial implementation of differential flatness module for computing feasible trajectories for differentially flat (nonlinear) systems
  • Preliminary version of lqe function (sawyerbfuller)
  • New dict-based implementation of user-configurable package/module configuration parameters
  • Added similarity transformation function
  • Add 's' and 'z' variable support to tf()
  • Fixed discrete time simulation time step issue
  • Reordered Gang of Four plots to match FBS
  • Check for symmetric matrices with machine precision (bnavigator)
  • Changed root precision tolerance and imaginary detection in xferfcn._common_den (bnavigator)
  • Fixed bug in timeresp.forced_response (adm78)
  • Improved latex representation for exp format and multi-digit exponents of s or z (bnavigator)
  • Renamed FRD class name FrequencyResponseData to fix MacOS sphinx build problems (FRD still defined for backward compatibility`
  • Allow np.array or np.matrix for state space matrices, operations via use_numpy_matrix
  • Improved detection of when to add additional points in root_locus
  • Adaptive gain click criterion and zoom bug fix for root_locus (icam0)
  • Improved code for ctrb and obsv (billtubbs)
  • Documentation updates (bnavigator, murrayrm, roryyorke)
  • Updated examples to be PEP compliant
  • Improved unit tests (bnavigator, murrayrm), increased coverage to ~80%

More info:

0.8.2 - Bug fixes and functionality improvements

20 Apr 05:33
d8d0a9c
Compare
Choose a tag to compare

This is mainly a maintenance release with lots of small bug fixes and performance improvements:

  • Fixed a number of small bugs , including discrete time simulations (bnavigator), integer values in state space matrics (don4get), missing zeros on pole/zero plots (Sup3rGeo)

  • First cut at a new step_info() function, similar to MATLAB (joaoantoniocardoso)

  • Added a new function for dynamically setting gain in sisotool (icam0)

  • Anti-stabilizing solutions for Riccati equations are now available (dbacc)

  • Printout out state space systems in Jupyter notebooks now formats using LaTeX (alchemyst)

  • Additional performance and visualiation improvements: _remove_useless_states (adm78), margins on Bode plots ( icam0), improved damping lines in discrete pzmap (Sup3rGeo)