Skip to content

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

Compare
Choose a tag to compare
@murrayrm murrayrm released this 20 Mar 16:56
283f5e7

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.