Version 0.9.2 Release Notes

This is a minor release that includes I/O system enhancements, optimal control enhancements, new functionality for stochastic systems, updated system class functionality, bug fixes and improvements to Nyquist plots and Nichols charts, and L-infinity norm for linear systems.

New features

  • I/O system enhancements:

    • Modify the 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.)

    • Added a new function 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).

    • The 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).

  • Optimal control enhancements:

    • Allow 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 output.

    • The final cost is now saved in optimal control result.

  • Stochastic systems additions:

    • Added two new functions supporting random signals: white_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).

    • Added a new function create_estimator_iosystem that matches the style of create_statefbk_iosystem (#710) and creates an I/O system implementing an estimator (including covariance update).

    • Added the ability to specify initial conditions for 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].

    • Added the ability to specify inputs for 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).

    • Added new Jupyter notebooks demonstrate the use of these functions: stochresp.ipynb, pvtol-outputfbk.ipynb, kincar-fusion.ipynb.

  • Updated system class functionality:

    • Changed the 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.)

    • The TimeResponseData and FrequencyResponseData objects now implement a to_pandas method that creates a simple pandas dataframe.

    • The 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.

    • The drss, rss, ss2tf, tf2ss, tf2io, and ss2io functions now all accept system and signal name arguments (via _process_namedio_keywords.

    • The 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.)

  • Added linform to compute linear system L-infinity norm.

Improvements, bug fixes

  • Round to nearest integer decade for default omega vector.

  • Interpret str-type args to interconnect as non-sequence.

  • Fixes to various optimization-based control functions.

  • Bug fix and improvements to Nyquist plots.

  • Improvements to Nichols chart plotting.