.. currentmodule:: control .. _version-0.9.2: Version 0.9.2 Release Notes ---------------------------- * Released: 28 May 2022 * `GitHub release page `_ 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.