
Summary of important user-visible changes for releases of the control package

===============================================================================
control-3.3.1      Release Date: 2021-07-05
===============================================================================

 ** Fixed time response for first order systems

===============================================================================
control-3.3.0      Release Date: 2021-06-19
===============================================================================

 ** new function rlocusx providing gain, damping and frequency for
    selected poles together with the possibility to generate open
    loop bode plots and simulations of the closed loop for selected
    closed loop poles

 ** Fixed several issues in bode, c2d, lsim and step

 ** Fixed issues in legends of time and frequency responses
    when requested for multiple systems

 ** Fixed usage of deprecated LAPACK routines

 ** Added discretization method 'foh' to c2d

 ** Added tests for c2d with 'foh' and to dlyapchol

 ** Fixed transposing a tfploy

===============================================================================
control-3.2.0      Release Date: 2019-04-01
===============================================================================

 ** new function sgrid

 ** New function: ss2ss
 
 ** Fixed many warnings

 ** added demos to rlocus, pzmap, bode, nichols, nyquist,
    impulse, lsim, ramp and step

 ** improved pzmap to plot with only zeros

===============================================================================
control-3.1.0      Release Date: 2018-03-11
===============================================================================
 
 ** New function: damp
 
 ** Changed nelem to numel and length to numel to remove the warnings
    during installation.

 ** The Impulse section has been rewritten, and a new file -- imp_invar.m -- 
    added. The old system tried to use the "zoh" to get an impulse response
    but that is impossible.

 ** The new function "imp_invar.m" converts a Laplace tranfer function
    to a discrete tranfer function.

 ** New functions: acker, dsort, esort.

 ** Function lsim now plots inputs as well.

 ** Class 'ss' should now work with complex inputs.

 ** Extend nyquist plots.

 ** Fixed warnings with newer Octave versions.

===============================================================================
control-3.0.0   Release Date: 2015-10-30   Release Manager: Lukas Reichlin
===============================================================================

 ** Substantial parts of the most vital internals have been rewritten
    and streamlined in order to improve compatibility and reliability.
    These changes to the codebase also result in better error handling
    in many situations and facilitate the integration of new features
    in upcoming releases.

 ** While many issues and pitfalls existing in previous releases of the
    control package have been fixed, the author isn't aware (at release date)
    of any regressions one might expect from a x.0.0 release.
    Note that the absence of regressions doesn't mean the absence of bugs.
    Especially it doesn't mean that *all* bugs from control-2.8.5 have been
    fixed.  Also note that to err is human, and software is written by humans.
    Therefore, any larger piece of software is likely to contain bugs.
    But the author is confident that he squashed considerably more bugs
    than he introduced in this release.  So if you waver between updating now
    and waiting for control-3.0.x, the author's suggestion is definitely 
    to update now.
    
 ** As always, your feedback is highly appreciated!  Even if you think that
    the control package is "fubar".  If you just follow the German saying
    "gesehen, gelacht, geloescht" - which roughly translates into
    "seen it, laughed at it, deleted it" - there's only little chance for
    improvement!  So if you think you've found a bug, please take the time
    to report your findings on Octave's bugtracker:
    
      <http://savannah.gnu.org/bugs/?group=octave>

    See the link below for more information about how to report problems:

      <http://octave.org/bugs.html>

 ** Your help is welcome!  There are many ways you can help the project
    fix the remaining problems, complete the documentation, and improve
    the overall user experience for both novices and experts alike.
    The author is aware of the fact that the documentation still leaves
    a lot to be desired.  As it is often the case with developers, writing
    documentation and tutorials is neither his key skill nor his favorite
    occupation.  After all, the author wrote the control package due to his
    personal interest in the field of control systems and not to make a
    living out of it.  The developer's profits are the insights and experience
    he obtained from his work.  Consequently, the control project doesn't ask
    you for money.  In case you like the control package and should feel like
    donating, then consider donating to GNU Octave or the Free Software
    Foundation according to the information on their websites.  Thank you!

 ** LTI models in general

    Improved handling of key-value pairs in all constructors for LTI models:
    
      tf (matrix, 'key1', val1, ...),  ss (a, b, 'key1', val1, ...)

    Support inheritance of LTI properties in many variations:

      tf (num, den, ltisys),  ss (a, b, ltisys, 'key1', val1, ...)
      sys.lti = ltisys,  zpk (z, p, k, Ts, 'var', 'q', 'lti', ltisys, ...)
    
    Accept [] as an alias for unspecified sampling time (Ts = -1):
    
      filt ('q^-1', []),  ss (a, b, c, d, []),  sys.Ts = []
    
    Automatic vector expansion for input and output names:
    
      sys.inname = 'str',  sys.outname = ''  (for MIMO systems)


 ** dss

    Fixed a long-standing but undiscovered bug where 'dss (sys)' overwrites
    sys.e with an identity matrix even if sys.e was not empty.  D'oh!

 ** ss

    Support for the following special cases has been added:
    
      ss (sys, 'explicit')   % convert descriptor system to regular one
      ss (sys, 'minimal')    % equivalent to  minreal (ss (sys))

 ** tf, zpk, filt

    Restrict transfer function variable to the candidates 's', 'p' for
    continuous-time and 'z', 'q', 'z^-1', 'q^-1' for discrete-time models.
       
      s = tf ('s'),  z = tf ('z^-1', Ts),  tf (num, den, Ts, 'var', 'q')
       
    Previous control versions supported any string, which could be quite
    misleading, see bug #45371.  <http://savannah.gnu.org/bugs/?43586>

 ** bode, bodemag, nichols, nyquist, sigma

    Fixed bug #42495.  <http://savannah.gnu.org/bugs/?42495>
    It is now possible to specify a frequency vector of length 1, e.g.
    
      [mag, phase] = bode (sys, 1)

    Furthermore, the functions raise an error or warning if invalid arguments
    are passed to them.  Previously, invalid arguments were simply ignored,
    which could be confusing.

 ** step, impulse, initial, ramp
 
    The time response functions now raise an error or warning if invalid
    arguments are passed to them.  As it was the case for frequency response
    functions, they used to simply ignore invalid arguments.

 ** lsim

    Fixed bug #46247.  <http://savannah.gnu.org/bugs/?46247>
    (Reported by Lutz Mager and Piet Wertelaers)

    Support logical arrays as input signal.  Before, logical arrays were
    simply ignored without notice, which could lead to unexpected results.
    Additionally, lsim received the same improvements as the other time and
    frequency response functions regarding invalid arguments.

 ** pzmap

    Improved argument checks.

 ** augstate

    New function for state-space models.  Adds the state vector to the output
    vector.

 ** connect

    The function no longer raises an error for name-based interconnections
    if some systems have common input names and one of these inputs are to
    be kept.

 ** estim

    Add input/output/state names to the returned system.  Support name-based
    selection of inputs (arguments 'sensors' and 'known').
 
 ** sumblk

    Add signal names as input/output groups if argument  n > 1.
 
 ** minreal

    If state-space models already have a minimal realization, then no state
    transformations are applied to the returned model.  In other words, if the
    number of states cannot be reduced (with the chosen tolerance), the model
    is returned unchanged.  Note that if the user sets the tolerance to the
    maximum value of 1, every state-space model will be reduced to zero states.
    There's nothing wrong with that, it's just how numerical computation works.



A Summary of important user-visible changes for older releases of the control
package can be found in the file ONEWS.
