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

===============================================================================
control-4.2.2  Release date 2026-06-07
===============================================================================

** compreal: new function for controllable or observable companion form

** bode: several bug fixes and improvements
     - fix wrong phase for systems with negative gain (issue #25, #27),
     - fix poles and zeros at z=1 for discr.-time systems (bug #68196),
     - convert tf-systems into state space for mimo and higher order
       systems as well as for tf with spreaded coefficients (bug #68195), 
     - improved handling of conjugate complex poles and zeros on the imag.
       axis (cont.-time) or on the unit circle (discr.-time)

** initial: error for systems not given as state space model since
   initial condition is unclear

** lsim: for input-output models, the initial condition is set to zero
   because initial condition is unclear, new parameter metrhod for the
   used discretization method; improved graphical output

** added demos and tests to more functions (like e.g. arx)

** pdf and qch documentation includes demo code, results and resulting
   figures if package is installed by "pkg install control"

===============================================================================
control-4.2.1  Release date 2026-01-20
===============================================================================

** fix installing when mkoctfile has spaces in its path

** fix error introduced in release 4.2.0 in computing the frequncey
   response for tf systems

===============================================================================
control-4.2.0  Release date 2026-01-16
===============================================================================

** from Octave 11 on, the control package documentation is included
   into the documentation browser of the GUI when the package is loaded

** pade: new function for pade approximation of time delays by poles 
   and zeros

** bdschur: new function for block diagonalization of a matrix using
   SLICOT routine MB03RD

** nichols: grid with contours of constant close-loop magnitude and phase

** bode: legend, title and similar commands after a bode plot are now
   affecting the first plot (magnitude), not the second (bug #67490)

** bode/margin: improved handling of poles and zeros on imaginary axis,
   more robust computation of the phase (bug #63393, bug #61355)

** allow real-valued gain matrix as input for system data access functions
   like tfdata, ssdata etc. which is then interpreted as static-gain system
   (bug #58648)

===============================================================================
control-4.1.3  Release date 2025-09-10
===============================================================================

** tf: Improve accuracy of transfer function from state space models
   by reusing an own version of the SLICOT function TB01ZD, which was
   removed in release 4.0.0

** connect: Added examples in the help text

** hinfsyn: check for more assumptions before calling SLICOT routine

** sgrid: fixed resizing (issue #15) and improved zeta-values for
   automatic selected lines of constant damping (bug #60972)

** build system: removed tests for old is_numeric (and similar) symbols
   (issues #18 and #21).

===============================================================================
control-4.1.2  Release date 2025-05-18
===============================================================================

** estim: new input argument 'type' for a delayed or current version of
   a discrete-time estimator using last or current output measurements for
   current state estimation

** kalman: adding 'type' input argument for discrete-time filters
  (see estim), consistent default values for input arguments

** added more test, like, e.g. estim, kalman and ssdata

** hinfsyn: more comprehensive help text

** margin: fix of wrong phase margin if outside +/- 180 degree

** rlocusx: improved colors

===============================================================================
control-4.1.1  Release date 2025-02-09
===============================================================================

 ** more robust test in impulse and cfconred

 ** fix possibly missing deprecated LAPACK routine DGEGS

 ** input parameter checking for NaN and Inf in oct-files in order to
    prevent Octave from hanging (bug #66669)
   
 ** ss: state space from MIMO transfer function 'tfsys' numerically
    more robust (bug #66651)

 ** lyap (A,Q) also for non-symmetric Q (bug #66567)

 ** fix time responses (step, impulse, ...) if requested for multiple
    systems and on Octave versions prior to Octave 8

 ** minor fixes in the build system

===============================================================================
control-4.1.0  Release date 2024-12-06
===============================================================================

 ** lqg, lqgtrack, lqgreg, reg: new functions for linear dynamic
    output feedback design including estimator and state feedback

 ** lqry, lqi: new linear quadratic regulator design function,
    output weighting and with integral part

 ** c2d: impulse invariant discrete-time models for MIMO systems
    and state space representations

 ** New algorithm for imp_invar, also allowing MIMO systems

 ** tfdata: returning coefficient lists of same length for numerator
    and denominator (bug #43947)

 ** allow time responses for several systems with different sizes

===============================================================================
control-4.0.1  Release date 2024-03-24
===============================================================================

 ** warning messages do not include trace information anymore

 ** mktito: changed name of inputs and outputs for compatibility
    (bug #63736)

 ** more robust test using Markov parameters for several model
    reduction routines (bug #65218)

 ** fix graphic styles in pzmap (bug #57716)

 ** bode: fixed format of the 'phase' output argument 

 ** doc_control ('license') displays license and copyright information

===============================================================================
control-4.0.0  Release date 2024-01-04
===============================================================================

 ** use current version of the SLICOT-Reference routines v5.8
    from Github (https://github.com/SLICOT/SLICOT-Reference/tree/main)

 ** fixed phase in bode plot for system with poles/zeros at
    the origin (credits to Juan, see bug bug #61355, comment #10)

 ** fixed duration of time responses like step for systems with
    oscillations ans improved graphical output

===============================================================================
control-3.6.1  Release date 2023-07-10
===============================================================================

 ** fix bug #64374: numeric constants are converted into proper lti
    systems before being interconnected to discrete time-systems

===============================================================================
control-3.6.0  Release date 2023-05-20
===============================================================================

 ** zgrid: new function for grid lines with constant eigenfrequency
    and damping for discrete-time pole/zero maps

 ** pzamp: added unit circle (for discrete-time) systems and axes to the
    pole/zero maps

 ** allow discrete-time purely static gain systems with a sampling time

 ** added metainfo file octave-control.metainfo.xml

===============================================================================
control-3.5.2   Release date 2023-04-05
===============================================================================

 ** fix build errors when installing in Octave 6

===============================================================================
control-3.5.1   Release date 2023-03-21
===============================================================================

 ** fix build errors when installing in Octave 9

 ** more robust tests for some model reduction and identification
    functions

===============================================================================
control-3.5.0    Release date 2023-02-04
===============================================================================

 ** c2d: allow mimo systems for impulse invariant discretization

 ** impulse: allow systems with feedthrough

 ** acker: Checking length of vector with desired poles (bug #62053),
           compacter and faster code,
           fix bug resulting from Octave 8 zeros() function (bug #63744)

 ** fix freq. vector for bode etc. for systems with very small zeros
    or poles (bug #62186)

 ** isdt: treat static gain as ct due to missing sampling time

 ** tf: improve detection of static gain systems (bug #63661)

===============================================================================
control-3.4.0     Release Date: 2022-01-16
===============================================================================

 ** Fix lyapunov equ. in dlyap if B is non-symmetric (bug #49801)

 ** Declare tf([1],[1]) as static gain

 ** Returned num and den of tfdate have same length (bug #43947)

 ** Fixes for Octave 7.1.0: removed deprecated .+ operator and
    unsupported plot style

===============================================================================
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.
