File Release.History
====================
This file contains a short description of the previous modifications
performed in the Release 5.0 of SLICOT Library since June 2005,
in reverse chronological order.
The latest changes are listed in the file Release.Notes. Both files
will be updated from time to time.
===============================================================================
Update August 4, 2015
Updated routines:
================
MB01RD, : corrected the formula for the number of operations
MB01RU (in the comments).
MB01RU : added in comments that the diagonal entries of R must
be divided by 2, on exit, if R was identified with X
in the call.
MB03BD : IWORK now returns the indices of possibly inaccurate
eigenvalues, as well as of the corresponding 1-by-1 or
2-by-2 diagonal blocks of the factors in the array A.
The 2-by-2 blocks correspond to negative values in IWORK.
(One negative value is stored for each pair of complex
conjugate eigenvalues.)
DWORK now returns the Frobenius norms of the factors
of the formal matrix product used by the algorithm.
Moved the transposition sign to the end position in
the right hand side of the formulas (1) and (2).
LIWORK = 2*K+N, LDWORK >= K + MAX( 2*N,8*K ).
MB03FZ : updated the length of IWORK and DWORK, according to the
changes in MB04ED.
LIWORK = 2*N+9, added 3 to LDWORK.
MB03KB : moved the statements setting EPS and SMLNUM after the code
section computing the workspace length. These values are
not needed in that section, and the modification avoided
getting run-time errors when the array TOL, used to set
EPS and SMLNUM, is not initialized.
MB03LD : updated the length of IWORK and DWORK, according to the
changes in MB04BD.
(N+12 is a new term in LIWORK; added 4(N+1) in the first
formula for LDWORK.)
MB03LF : updated the length of IWORK, according to the
changes in MB04AD.
LIWORK = N+18, if COMPQ = 'N' and COMPU = 'N'.
MB03LZ : if J >= M, but J < N, set A(J+1,J), DE(J+1,J), and FG(J+1,J)
to 0 after the labels 170, 190, and 230, respectively.
MB03XD : updated comments: replaced -S by S in (2), so array A indeed
contains the matrix S on output.
Added quick return if ILO > N.
MB03XP : bug fixed: removed the loops 20, 30, and 40, where the signs
of entries in B, A, and Q, respectively, were previously changed
for some columns in the range ILO:IHI.
MB03ZA : modified the definition of WR (in comments): WR(i) = -R22(i,i),
and not WR(i) = R22(i,i).
MB03ZD : added two additional options, METH = 'Q' and METH = 'R', to
return the range vectors normally used to obtain the bases of
invariant subspaces. These options can be used for faster
solution of Riccati equations.
Added tests to detect possibly inaccurate subspaces, due to
rounding or cancellation errors, when a reduced set of vectors
is computed (METH = 'S'). IWORK should have nonzero length
also for WHICH = 'S' or METH = 'S'. Corrected two comments
inside the code.
MB03ZD, : replaced 2000 by 2001 in a reference item.
MB04DD,
MB04DI,
MB04DS,
MB04DZ
MB04AD : increased the length of IWORK and DWORK, according to the
changes in MB03BD.
LIWORK = N+18, added 6 to LDWORK.
MB04AZ : increased the length of IWORK and DWORK, according to the
changes in MB04ED.
LIWORK = 2*N+9, added 3 to LDWORK.
MB04BD : changed the definitions of s and t as the number of used
1-by-1 or 2-by-2 blocks, respectively, and updated the
code and documentation accordingly. The change was
needed since some 2-by-2 blocks in MB03BD do not split,
even they have two real eigenvalues.
IWORK now returns the indices of possibly inaccurate
eigenvalues, as well as the number s of found finite real
or purely imaginary eigenvalues, and the number t of
pairs of complex eigenvalues.
DWORK now returns the Frobenius norms of the factors
of the formal matrix product used by the algorithm,
the s quadruple values used to compute the finite real
and purely imaginary eigenvalues, and the t groups of
quadruple 2-by-2 matrices used to compute the finite
pairs of complex eigenvalues.
IWORK and DWORK sizes increased by N/2 and 4*(N+1),
respectively (LIWORK = N+12).
Moved DWORK(IWRK+1),...,DWORK(IWRK+4) to DWORK(IWRK),...,
DWORK(IWRK+3) and reduced K by 1 after the label 130.
MB04CD, : small changes in the formulas for LIWORK and LDWORK;
MB04HD used a local logical array BW of length 4, initialized
.TRUE., instead of BWORK, for optimal workspace computation.
MB04DI : bug fixed: replaced the call of DRSCL to DSCAL in line 162,
and interchanged the DSCAL calls in the lines 191 and 194.
MB04ED : increased the length of IWORK and DWORK, according to the
changes in MB03BD.
LIWORK = N+9, added 3 to LDWORK.
SB01BY : replaced a DSWAP call when K.GT.NPR by three DCOPY calls,
to avoid overwritting.
SB02ND : updated several comments (when R is filled by symmetry if
DICO = 'D' or 'C'; the new routine SB02MX is also mentioned);
replaced DWORK(JW+N) by DWORK(JW+M) in the MB04KD call;
added the term 3*M in the formula for the minimal
workspace when FACT = 'D' and DICO = 'C'.
Improved routines:
=================
SB02MT : refined the code, comments (and documentation), mainly
concerning the content of output arguments in special
conditions (N = 0, M = 0, etc.).
Included the computation of the factorization of R if
N = 0, or JOBG = 'N' and JOBL = 'Z'.
Computed the solution of R*X = B', if R is indefinite,
only if JOBG = 'G' (and not for JOBL = 'N').
Included optimal and minimal workspace query.
Replaced the BLAS 2 sequences involving calls of DGEMV
by calls to the new SLICOT block routine MB01RB.
Reduced the code size by replacing some code sequences
involving DO loops by calls to SLICOT routine MA02ED.
SB02ND : refined some comments (and documentation), mainly
concerning the content of output arguments in special
conditions (N = 0, M = 0, etc.), and stated that the
non-negativity assumption for X applies only to the
discrete-time case, for factored R.
Included optimal and minimal workspace query.
Corrected the minimal workspace if FACT = 'D' and
DICO = 'C'.
Checked out if X is positive semi-definite if DICO = 'D'
and FACT = 'C' or FACT = 'D', and returned with error
if not.
Replaced the BLAS 2 sequences involving calls of DGEMV
by calls to DGEMM and to the new SLICOT block routine
MB01RB. Also, used DSYMM for computing products with X.
Reduced the code size by replacing some code sequences
involving DO loops by calls to DAXPY and DSCAL and to
the SLICOT routines MA02AD and MA02ED.
SB04OD : replaced the calls to the deprecated LAPACK routine DGEGS
by calls to DGGES; this implied a possibly larger minimal
and optimal workspace (terms of the form 7*M or 7*N have
been replaced by similar terms with the coefficient 11,
and terms of the form 10*M+23 or 10*N+23 have been added).
Added the option for the optimal workspace query, by
setting LDWORK = -1.
Removed the scaling of the matrix entries in A, D, and/or
B and D, since it is done inside DGGES.
Replaced all BLAS 2 calculations by BLAS 3 calculations
in loops, if less than optimal workspace is specified.
Otherwise, only one DGEMM call is needed for each matrix
multiplication.
Updated Documentation:
=====================
Updated the html files for changes in the source comments and example
program files.
Updated Example Programs:
========================
TAB08ND, : corrected the number of infinite zeros and printed the
TAB08NZ numbers of infinite zeros of all orders.
TMB03LD, : updated the integer workspace length, according to the
TMB03LF changes in MB03LD and MB03LF, respectively.
TMB03XZ : replaced the FORMAT dsescriptor G7.2 by the recommended
one, G9.2.
TMB04BD, : updated the workspace length, according to the changes
TSB04OD : in MB04BD, and SB04OD, respectively.
New Routines:
============
MB01RB : computes a triangle of matrix expression alpha*R + beta*A*B
or alpha*R + beta*B*A (BLAS 3 version).
MB03JP : moves the eigenvalues with strictly negative real parts of
a real skew-Hamiltonian/Hamiltonian pencil aS - bH in
structured Schur form to the leading principal subpencil,
while keeping the triangular form. Transformations are
applied to panels of columns.
MB03LP : computes the relevant eigenvalues of a real skew-
Hamiltonian/Hamiltonian pencil aS - bH. Optionally, an
orthogonal basis of the right deflating subspace of aS-bH
corresponding to the eigenvalues with strictly negative
real part is computed. Transformations are applied to
panels of columns.
MB04BP : computes the eigenvalues of a real skew-Hamiltonian/
Hamiltonian pencil aS - bH. Transformations are applied
to panels of columns.
MB04FP : computes the eigenvalues of a real skew-Hamiltonian/
skew-Hamiltonian pencil aS - bT. Optionally, the pencil aS-bT
is transformed to the structured Schur form. Transformations
are applied to panels of columns.
MB3JZP : moves the eigenvalues with strictly negative real parts of
a complex skew-Hamiltonian/Hamiltonian pencil aS - bH in
structured Schur form to the leading principal subpencil,
while keeping the triangular form. Transformations are
applied to panels of columns.
MB3LZP : computes the relevant eigenvalues of a complex skew-
Hamiltonian/Hamiltonian pencil aS - bH. Optionally, an
orthonormal basis of the right deflating subspace of aS-bH
corresponding to the eigenvalues with strictly negative
real part is computed. Transformations are applied to
panels of columns.
MC01XD : computes the roots of a real polynomial of order 3.
SB02MX : version of SB02MT allowing to also use plus sign in the
updating formulas for A and B, and to directly use
symmetric indefinite factorization, if R is known to be
indefinite.
SG02CW : computes the Frobenius norms of the product terms
defining the denominator of the relative residual
of the solution of a (generalized) continuous-time
or discrete-time algebraic Riccati equation.
SG02CX : finds the line search parameter alpha minimizing the
Frobenius norm of R(X+alpha*S), where R(X) is the
residual of a (generalized) continuous-time algebraic
Riccati equation, and S is the Newton step.
The routine can also be used for discrete-time
algebraic Riccati equations.
SG02ND : computes the optimal state feedback matrix for a
(generalized) continuous-time or discrete-time system.
New example programs:
====================
TMC01XD, : example programs for the newly added routines MC01XD
TSG02ND and SG02ND, respectively.
Documentation:
=============
All new routines have associated html documentation, accessible
from the Library indexes libindex.html (10 new documents) and support.html
(2 new documents).
Updated MEX-files:
=================
Modified some INTEGER statements to INGTEGER*4 in 38 MEX-files,
to work on 64 bit machines in MATLAB R2012b or newer releases.
The files are:
arebench, aresol, aresolc, bstred, clsdp, conhin, conred, datana, dishin,
dlamch, dlsdp, dlsdz, findBD, fstoeq, fwehna, fwered, garesol, genleq,
Hamileig, Hessol, ldsimt, linmeq, linorm, mucomp, muHopt, onf2ss, order,
polass, sfored, sident, ss2onf, syscf, syscom, sysred, systra, wident,
widentc, and Wiener.
garesol : used SG02ND for continuous-time systems when the
matrix E is general.
genleq : updated for the changes in SB04OD (using
optimal workspace).
hapack_haeig : updated for the changes in MB03ZD.
perschur : set LDWORK when compz = 0.
polezero(Z) : corrected the number of infinite zeros and
multiplicities of infinite eigenvalues for
systems with identity matrix E;
corrected the length of arrays INFE and INFZ
for systems with identity E.
skewHamil2eig : removed the array IWORK.
skewHamil2feig, : increased the size of the array IWORK, according
skewHamildeflf to the changes in MB03BD (called by MB04ED/MB04AD).
skewHamildefl : increased the size of the array IWORK, according
to the changes in MB04BD.
skewHamildeflf : updated LIWORK, according the change in MB03LF.
skewHamildeflfZ : increased the size of the array IWORK, according
to the changes in MB04ED (called by MB03FZ).
skewHamileig : increased the size of the arrays IWORK and DWORK,
according to the changes in MB04BD.
symplURV : increased the size of the array IWORK, according
to the changes in MB04AD.
symplURVZ : increased the size of the array IWORK, according
to the changes in MB04ED (called by MB04AZ).
Updated M-files:
===============
test_haeig : replaced er0 > 0 by er0 > n*eps for task = 3.
test_M_haeig : made some tests relative and used less
tight comparison tests for haurvps; also used
sorted eigenvalues in some tests (for haurvps).
test_skewHamil2feig, : modified to continue the calculations if
test_skewHamildeflfZ, failures were detected (i.e., when relative
test_symplURV, error between the shheig results and eig are
test_symplURVZ greater than a tolerance); such failures are
counted and their number is reported.
Note that MATLAB function qr, used in these test
files, gives wrong results for certain special
matrix sizes (in Releases 2013b and 2014a/b).
New versions of SLICOT-based MATLAB toolboxes:
=============================================
SLICOT-based MATLAB toolboxes on Windows platforms (64 bit) under
MATLAB 8.0 (R2012b), MATLAB 8.1 (R2013a), MATLAB 8.3 (R2014a), and
MATLAB 8.4 (R2014b) are available under commercial licenses.
===============================================================================
Update December 4, 2012
Updated routines:
================
AB07ND, : replaced ILAENV by calls with LDWORK/LZWORK = -1, to conform
AB08ND, to the MKL strategy to query the optimal workspace, used in
AB08NX, the MATLAB recent releases.
AB08NZ,
AB8NXZ,
AG08BD,
AG08BY,
AG08BZ,
AG8BYZ,
IB01MD,
MB02GD,
MB02HD,
MB02ID,
MB02JD,
MB02UD,
MB03UD,
MB04AD,
MB04ID,
MB04IZ,
MB05MY,
SB02MU,
SB02PD,
TF01MY,
TG01FD,
TG01FZ
AB08MD, : included code for the optimal workspace query, based on calls
AB08MZ, with LDWORK/LZWORK = -1, such that optimal workspace can be
IB01MY, precomputed.
MB01UX,
MB02KD,
MB02MD,
MB02ND,
MB02QY,
MB03OD,
MB03VY,
MB03ZD,
MB04PB,
MB04QB,
MB04TB,
MB04WD,
MB04WP,
MB04WR,
MB04XD,
SB02QD,
SB02SD,
SB03MD,
SB03OD,
SB03OU,
SB03QD,
SB03SD,
SB04MD,
SB04QD,
SG03AD,
SG03BD
AB08MD, : minor changes, mainly removing unused parameters or variables.
AB08MZ,
AB09HD,
AB09ID,
AB09JD,
AB13DD,
BB03AD,
BB04AD,
BD02AD,
DE01PD,
FB01QD,
FB01TD,
MA01BD,
MB01UD,
MB02CY,
MB02JX,
MB03BC,
MB03KD,
MB03KE,
MB03VD,
MB04ND,
MB04OD,
MB04VD,
MD03AD,
MD03BF,
SB01BY,
SB01MD,
SB02OV,
SB02OX,
SB02SD,
SB03MV,
SB10YD,
SB16AD,
SB16BD,
SB16CY,
TF01QD,
UD01BD
AB13CD : set AB13CD to zero if M or NP is 0 (Quick Return).
MA01BD : initialized SL when TEMP = 0 in the loop 10.
MB02CY : initialized MAXWRK in all code segments.
MB03BB : added logic to return either two real or complex conjugate
eigenvalues;
defined INFO = 2, when eigenvalues might be inaccurate;
eigenvalues are returned even if INFO is set to 1 or 2.
Initialized SL when RHS = 0 in the loop 60.
MB03BD, : checked also INFO = 2 on output from MB03BB.
MB03ID
MB03BE : increased the maximum number of iterations from 10 to 20 to allow
splitting of the matrix eigenvalues for difficult examples.
Made convergence tests at iteration 6 and after iteration 10.
MB03ID : improved the detection of eigenvalues on the imaginary axis.
MB03KB : improved the calculation of optimal workspace.
MB03KD : error exit with INFO < 0 take precedence over exit with optimal
workspace.
MB03LD : some improvements (slight speed increase for computation of
eigenvalues, as well as deflating subspace; memory reduction
by N**2 for computation of eigenvalues).
Set optimal workspace before returning for COMPQ = 'N'.
Set INFO = 4 if the SVD algorithm does not converge
(if ORTH = 'S').
Deleted the option QR for the argument QRTH, since there is no
theoretical guarantee that QR decomposition could work in general.
MB03LD, : added a comment about the remaining eigenvalues.
MB04BD
MB03LD, : argument BWORK has been moved before IWARN or INFO, to conform
MB04HD to the SLICOT standards.
MB03OV : replaced the test with 0 by a test with a small real number given
as an additional input argument.
MB03OY : called MB03OV with an additional input argument set to the safe
minimum. This allows to obtain correct results when the right hand
side of the equation has entries around/below the underflow limit.
MB03OY is the only routine calling MB03OV.
MB03XD : replaced ONE by TWO in the optimal workspace for n = 0.
On normal exit, set DWORK(2) to the 1-norm of the (scaled,
if BALANC = 'S' or 'B') Hamiltonian matrix (suggested by
Pascal Gahinet.) Requires LDWORK >= 2.
Changed the definition of the eigenvalues which are returned:
namely, those that have nonnegative imaginary part. Their
complex conjugate eigenvalues are not stored. If imaginary
parts are zero (i.e., for real eigenvalues), only positive
eigenvalues are stored. (Requested by Pascal Gahinet.)
MB03XD, : changed the upper bound of ILO, according to the MB04DD
MB04TB output.
MB04AD : modified to accept initial transformation matrices on input
(partly made by Matthias Voigt). Performed proper initialization
of Q2 if COMPQ2 = 'I', and multiplication on the right of
the reduction transformations. IQ is always initialized.
Improved the calculation of optimal workspace.
Corrected the comments about the returned eigenvalues.
MB04AD, : minor change related to possible IWARN = M from MB03BD.
MB04BD
MB04BD : increased the precision parameter PREC.
MB04DS : replaced N by N+1 as the number of columns of QG (in comments).
MB04HD : fixed the logic for eigenvalue selection in case of infinite
eigenvalues.
Excluded the call of DTGSEN for finding its optimal workspace,
since it is known for IJOB = 0.
MB04QC : replaced argument STRUCT by STRAB, since "struct" is a
reserved word in C. (Change made by Pascal Gahinet for
automatic generating C headers for SLICOT routines.)
SB03OY : modified a test to be safer for right hand side close
to underflow. (Modification suggested by Daniel Kressner.)
SG03AD, : replaced deprecated LAPACK routine DGEGS by DGGES. However,
SG03BD for backward compatibility with minimal workspace length,
a call to DGEGS may be enforced in such a case.
TF01MY : minimal workspace is MAX(1,N).
TG01AD : replaced the test GAMMA.EQ.ZERO by ABS( GAMMA ).LE.EPS with
EPS = DLAMCH( 'Precision' ).
UE01MD : modified for addition of the new routine MB04RB.
Deleted the LAPACK test for the first character in the
routine name (unsuitable for SLICOT).
Updated Documentation:
=====================
MB03BB.html, : removed references to IWARN in the statements about
MB03BD.html the returned eigenvalues.
MB03LD.html, : updated for changes in the source routines.
MB03XD.html,
MB04AD.html,
MB04BD.html,
MB04TB.html,
TF01MY.html
MB03LD.html, : argument BWORK has been moved before IWARN or INFO,
MB04HD.html to conform to the SLICOT standards.
MB04QC.html : replaced argument STRUCT by STRAB.
Updated Example Programs:
========================
TMB03LD : change related to BWORK in the call of MB03LD.
TMB03XD : minor changes required by the modification in MB03XD.
TMB04AD : modified to agree with the changes of optional parameters and the
order of arguments in MB04AD.
MB04AD.dat : modified the options to agree with the changes of optional
parameters in MB04AD.
New Routines:
============
AB13ID : check whether the transfer function of a descriptor system
is proper.
MA01BZ : computes the general product of k complex scalars without
over- or underflow.
MA02ES : stores by skew-symmetry the upper or lower triangle of a
skew-symmetric matrix, given the other triangle.
MA02EZ : stores by (skew-)symmetry the upper or lower triangle of a
skew-symmetric/Hermitian complex matrix, given the other
triangle.
MA02GZ : performs column interchanges on a complex matrix.
MA02IZ : computes the value of the one norm, or the Frobenius norm, or
the infinity norm, or the element of largest absolute value
of a complex skew-Hamiltonian matrix.
MA02JZ : computes || Q^H Q - I ||_F for a complex symplectic matrix.
MB03BZ : computes the eigenvalues of the complex generalized formal matrix
product
s1 s2 sk
A = A1 * A * ... * Ak , s1 = 1,
where sj = 1 or sj = -1, j = 2, ..., k, A1 is upper Hessenberg and
Ai, i > 1, is upper triangular, using a single-shift version of
the periodic QZ algorithm. In addition, A may be reduced to
periodic Schur form: all factors Ai are upper triangular.
Optionally, the unitary factors Qi used, i = 1, ..., k, are
computed.
MB03CZ : computes unitary matrices Q1, Q2, Q3 for a complex 2-by-2 regular
pencil aAB - bD, with A, B, D upper triangular, such that Q3' A Q2,
Q2' B Q1, Q3' D Q1 are still upper triangular, but the eigenvalues
are in reverse order.
MB03DZ : computes unitary matrices Q1 and Q2 for a complex 2-by-2 regular
pencil aA - bB, with A, B upper triangular, such that
Q2' (aA - bB) Q1 is still upper triangular, but the eigenvalues
are in reverse order.
MB03FZ : computes the relevant eigenvalues of a complex N-by-N skew-
Hamiltonian/Hamiltonian pencil aS - bH, with
( B F ) ( 0 I )
S = J Z' J' Z and H = ( ), J = ( ). (1)
( G -B' ) ( -I 0 )
Optionally, orthonormal bases of the right deflating subspace
and companion subspace of aS - bH corresponding to the eigenvalues
with strictly negative real part are computed.
MB03GZ : computes a unitary matrix Q and a unitary symplectic matrix U
for a complex regular 2-by-2 skew-Hamiltonian/Hamiltonian
pencil a J B' J' B - b D with
( B11 B12 ) ( D11 D12 )
B = ( ), D = ( ),
( 0 B22 ) ( 0 -D11' )
such that J Q' J' D Q and U' B Q are upper triangular, but the
eigenvalues are in reversed order.
MB03HZ : computes a unitary matrix Q for a complex regular 2-by-2
skew-Hamiltonian/Hamiltonian pencil
( A11 A12 ) ( B11 B12 )
aA - bB = a ( ) - b ( )
( 0 A11' ) ( 0 -B11' )
such that J Q' J' (aA - bB) Q is upper triangular, but the
eigenvalues are in reversed order.
MB03IZ : moves the eigenvalues with strictly negative real parts of an
N-by-N complex skew-Hamiltonian/Hamiltonian pencil aS - bH in
structured Schur form, with
( 0 I ) ( A D ) ( B F )
S = J Z' J' Z, J = ( ), Z = ( ), H = ( ),
( -I 0 ) ( 0 C ) ( 0 -B' )
to the leading principal subpencil, while keeping the triangular
form. Above, A and B are upper triangular, and C is lower
triangular. Optionally, a unitary matrix Q and a unitary
symplectic matrix U performing this transformation are computed.
MB03JZ : moves the eigenvalues with strictly negative real parts of an
N-by-N complex skew-Hamiltonian/Hamiltonian pencil aS - bH in
structured Schur form, with
( A D ) ( B F )
S = ( ), H = ( ),
( 0 A' ) ( 0 -B' )
to the leading principal subpencil, while keeping the triangular
form. Above, A and B are upper triangular. Optionally, a unitary
matrix Q performing this transformation is computed.
MB03LF : computes the relevant eigenvalues of a real N-by-N skew-
Hamiltonian/Hamiltonian pencil aS - bH in (1).
Optionally, orthogonal bases of the right deflating subspace
and of the companion subspace of aS - bH corresponding to the
eigenvalues with strictly negative real part are computed.
MB03LZ : computes the relevant eigenvalues of a complex N-by-N skew-
Hamiltonian/Hamiltonian pencil aS - bH, with
( A D ) ( B F )
S = ( ) and H = ( ). (2)
( E A' ) ( G -B' )
Optionally, an orthonormal basis of the right deflating subspace
of aS - bH corresponding to the eigenvalues with strictly negative
real part is computed.
MB03XS : computes the eigenvalues and real skew-Hamiltonian Schur form of
a skew-Hamiltonian matrix,
[ A G ]
W = [ ], G = -G', Q = -Q'. (3)
[ Q A' ]
MB03XZ : computes the eigenvalues of a complex Hamiltonian matrix,
[ A G ]
H = [ ], G = G', Q = Q'. (4)
[ Q -A' ]
MB04AZ : computes the eigenvalues of a complex N-by-N skew-Hamiltonian/
Hamiltonian pencil aS - bH in (1), using the structured Schur form
of an embedded real skew-Hamiltonian/skew-Hamiltonian pencil.
MB04BZ : computes the eigenvalues of a complex N-by-N skew-Hamiltonian/
Hamiltonian pencil aS - bH in (2), using the structured Schur form
of an embedded real skew-Hamiltonian/skew-Hamiltonian pencil.
MB04CD : computes the transformed matrices A, B and D, using orthogonal
matrices Q1, Q2 and Q3 for a real N-by-N regular pencil
( A11 0 ) ( B11 0 ) ( 0 D12 )
aA*B - bD = a ( ) ( ) - b ( ),
( 0 A22 ) ( 0 B22 ) ( D21 0 )
where A11, A22, B11, B22 and D12 are upper triangular, D21 is
upper quasi-triangular and the generalized matrix product
-1 -1 -1 -1
A11 D12 B22 A22 D21 B11 is upper quasi-triangular, such
that Q3' A Q2, Q2' B Q1 are upper triangular, Q3' D Q1 is upper
quasi-triangular and the transformed pencil
a(Q3' A B Q1) - b(Q3' D Q1) is in generalized Schur form.
MB04DZ : balances a complex Hamiltonian matrix (4).
MB04ED : computes the eigenvalues of a real N-by-N skew-Hamiltonian/
skew-Hamiltonian pencil aS - bT with
( B F ) ( 0 I )
S = J Z' J' Z and T = ( ), where J = ( ).
( G B' ) ( -I 0 )
Optionally, the pencil aS - bT is transformed to the structured
Schur form: an orthogonal transformation matrix Q and an
orthogonal symplectic transformation matrix U are computed,
such that
( Z11 Z12 ) ( Bo Fo )
U' Z Q = ( ), and J Q' J' T Q = ( ),
( 0 Z22 ) ( 0 Bo' )
where Z11 and Z22' are upper triangular and Bo is upper quasi-
triangular.
MB04FD : computes the eigenvalues of a real N-by-N skew-Hamiltonian/
skew-Hamiltonian pencil aS - bT with
( A D ) ( B F )
S = ( ) and H = ( ).
( E A' ) ( G -B' )
Optionally, the pencil aS - bT is transformed to the structured
Schur form: an orthogonal transformation matrix Q is computed,
such that
( Ao Do ) ( Bo Fo )
J Q' J' S Q = ( ), and J Q' J' T Q = ( ),
( 0 Ao' ) ( 0 Bo' )
where Ao is upper triangular and Bo is upper quasi-triangular.
MB04QS : overwrites general real m-by-n/n-by-m matrices C and D with
[ op(C) ] [ op(C) ]
U * [ ], or U' * [ ],
[ op(D) ] [ op(D) ]
where U is defined as the product of symplectic reflectors and
Givens rotations, and op(M) = M or op(M) = M'.
MB04RB : reduces a skew-Hamiltonian matrix in (3) to Paige/Van Loan (PVL)
form. That is, an orthogonal symplectic matrix U is computed so that
[ Ao Go ]
U'W U = [ ] ,
[ 0 Ao' ]
where Ao is in upper Hessenberg form. Blocked version.
MB04RU : reduces a skew-Hamiltonian matrix to PVL form.
Unblocked version.
TG01HY : reduces a descriptor system to staircase controllability form
with no uncontrollable finite eigenvalues. Blocked version.
TG01JY : computes an irreducible descriptor representation.
Blocked version.
New example programs:
====================
TAB13ID, : example programs for AB13ID, MB03BZ, MB03FZ, ..., MB04FD,
TMB03BZ, and TG01JY, respectively.
TMB03FZ,
TMB03LF,
TMB03LZ,
TMB03XZ,
TMB04AZ,
TMB04BZ,
TMB04DZ,
TMB04ED,
TMB04FD,
TTG01JY
Documentation:
=============
All the new 30 routines have associated html documentation, accessible
from the Library indexes libindex.html (11 new documents) and support.html
(19 new documents).
New MEX-files:
=============
HaeigZ : computes the eigenvalues of a complex Hamiltonian matrix.
isprpr : checks whether the transfer function of a descriptor
system is proper.
skewHamil2eig : computes the eigenvalues of a real skew-Hamiltonian/
skew-Hamiltonian pencil.
skewHamil2feig : computes the eigenvalues of a real skew-Hamiltonian/
skew-Hamiltonian pencil (factored version).
skewHamildeflf : computes the eigenvalues of a real skew-Hamiltonian/
Hamiltonian pencil and the right deflating subspace
corresponding to the eigenvalues with strictly negative
real part (factored version).
skewHamildeflZ : computes the eigenvalues of a complex skew-Hamiltonian/
Hamiltonian pencil and the right deflating subspace
corresponding to the eigenvalues with strictly negative
real part.
skewHamildeflfZ : computes the eigenvalues of a complex skew-Hamiltonian/
Hamiltonian pencil and the right deflating subspace
corresponding to the eigenvalues with strictly negative
real part (factored version).
skewHamileigZ : computes the eigenvalues of a complex skew-Hamiltonian/
Hamiltonian pencil.
symplURVZ : computes the eigenvalues and generalized symplectic URV
decomposition of a complex skew-Hamiltonian/Hamiltonian
pencil in factored form.
New M-files:
===========
New M-files for skew-Hamiltonian/Hamiltonian matrix pencils
sHHeig : computes the eigenvalues of skew-Hamiltonian/(skew-)Hamiltonian
matrix pencils.
sHHstab : computes the stable right deflating subspace and a companion
subspace (for pencils in factored form).
sHHurvps - computes generalized symplectic URV/periodic Schur form of a
skew-Hamiltonian/(skew-)Hamiltonian matrix pencil.
test_HaeigZ, : tests for the MEX-files HaeigZ, skewHamil2eig, ... ,
test_skewHamil2eig, symplURVZ, respectively.
test_skewHamil2feig,
test_skewHamildeflf,
test_skewHamildeflZ,
test_skewHamildeflfZ,
test_skewHamileigZ,
test_symplURVZ
Updated MEX-files:
=================
Hnorm, : prepared for being preprocessed (for reproducibility, see below).
Kfiltupd, Updated for too long lines after preprocessing.
deadbeat,
fstoep,
gsyscom,
gsystra,
invert,
slmexp,
specfact
Hnorm, : modified for ensuring full reproducibility of the results,
Kfiltupd, when using optimized LAPACK and BLAS libraries.
TotalLS, (Replaced ALLOCATE by mxCalloc for arrays (except INTEGER
arecond, or LOGICAL ones.) Also, updated these files for being
bldiag, portable on 64-bit platform.
cfsys, All these files have now extension F instead f.
condis,
deadbeat,
gsyscom,
gsystra,
hapack_haeig,
invert,
ldsim,
perschur,
polezero,
polezeroz,
slmexp,
specfact,
sysconn,
sysfconn
hapack_haeig : updated for changes in MB03XD.
hapack_haeig, : simplified the work with auxiliary array(s) DW (and TMP),
invert, now allocated using mxCalloc, instead of ALLOCATE;
polezeroz, reduced the memory allocated for DW (and TMP, if any).
skewHamileig,
sysconn
polezeroz : modified to accept part of the matrices as real ones.
Improved the segment of code related to the matrix E at
input (complex, real, or identity; square or rectangular).
skewHamildefl : change related to BWORK in the call of MB03LD.
Updated to avoid errors generated by too long lines
after preprocessing.
symplURV : corrected the comments about the returned eigenvalues.
Modified to allow updating given transformation matrices.
Updated M-files:
===============
test_TotalLS : replaced the equality test for the "null" right singular
vectors for meth = 1 and l = 0 or ro = 0 by a test that the
SLICOT and svd results span the same subspace.
test_dsim : replaced the use of the function cputime by calls of the
test_wiener functions tic and toc.
test_polezero, : replaced the calls to the MATLAB function zero by calls to
test_polezeroz the MATLAB function tzero, to avoid warnings.
test_skewHamildefl, : corrected the test for checking the default values.
test_skewHamileig
test_symplURV : modified to test updating given transformation matrices.
New versions of SLICOT-based MATLAB toolboxes:
=============================================
SLICOT-based MATLAB toolboxes on Windows platforms under MATLAB 7.11 (R2010b),
MATLAB 7.14 (R2012a), and MATLAB 7.15 (R2012b) are available under commercial
licenses.
SLICOT-based MATLAB toolboxes on Linux platforms under MATLAB 7.12 (R2011a)
and MATLAB 7.14 (R2012a) are also available under commercial licenses.
===============================================================================
Update November 22, 2010
Improved routines:
=================
AG08BY, : replaced the logic for updating the column/row norms following
AG8BYZ, Bujanovic and Drmac's suggestion, in order to avoid a possibly
MB02CU, erratic behavior described in SLICOT Working note SLWN2010-1.
MB03OY,
MB03PY,
MB3OYZ,
MB3PYZ,
MB04GD,
TG01HX
Updated routines:
================
AB09JV, : replaced DLAMCH( 'Epsilon' ) by DLAMCH( 'Precision' ) when setting
AB09JW TOLMIN
New Routines:
============
MA01BD : computes the general product of k real scalars without over-
or underflow.
MA01CD : computes, without over- or underflow, the sign of the sum of two
real numbers represented using integer powers of a base (usually,
the machine base). Any base can be used, but it should the same
for both numbers. The result is an integer with value 1, 0, or -1,
depending on the sum being found as positive, zero, or negative,
respectively.
MB01KD : performs one of the skew-symmetric rank 2k operations
C := alpha*A*B' - alpha*B*A' + beta*C,
or
C := alpha*A'*B - alpha*B'*A + beta*C,
where alpha and beta are scalars, C is a real N-by-N skew-
symmetric matrix and A, B are N-by-K matrices in the first case
and K-by-N matrices in the second case. The notation M' denotes
the transpose of the matrix M.
MB01LD : computes the matrix formula
_
R = alpha*R + beta*op( A )*X*op( A )',
_
where alpha and beta are scalars, R, X, and R are skew-symmetric
matrices, A is a general matrix, and op( A ) is one of
op( A ) = A or op( A ) = A'.
MB02UW : solves a system of the form A X = s B or A' X = s B with
possible scaling ("s") and perturbation of A, where A is an
N-by-N real matrix, and X and B are N-by-M matrices. N may
be 1 or 2. The scalar s is a scaling factor (.LE. 1), computed
by this subroutine, which is so chosen that X can be computed
without overflow. X is further scaled if necessary to assure
that norm(A)*norm(X) is less than overflow.
MB03AD : computes two Givens rotations (C1,S1) and (C2,S2) such that the
orthogonal matrix
[ C1 S1 0 ] [ 1 0 0 ]
Q = [ -S1 C1 0 ] * [ 0 C2 S2 ]
[ 0 0 1 ] [ 0 -S2 C2 ]
makes the first column of the real Wilkinson single/double shift
polynomial of the general product of matrices, stored in the
array A, parallel to the first unit vector.
MB03BA : computes the suitable maps for Hessenberg index and signature
array.
MB03BB : computes the eigenvalues of a general 2-by-2 matrix product via
a complex single shifted periodic QZ algorithm.
MB03BC : computes the product singular value decomposition of the K-1
triangular factors corresponding to a 2-by-2 product of K
factors in upper Hessenberg-triangular form.
MB03BD : computes the eigenvalues of the generalized formal matrix product
s1 s2 sk
A = A1 * A * ... * Ak ,
where sj = 1 or sj = -1, j = 1, ..., k, Ah is upper Hessenberg and
Ai, i <> h, is upper triangular, using a double-shift version of
the periodic QZ algorithm. In addition, A may be reduced to
periodic Schur form: Ah is upper quasi-triangular and all the other
factors A_i are upper triangular. Optionally, the 2-by-2 triangular
matrices corresponding to 2-by-2 diagonal blocks in Ah are reduced
so that their product is a 2-by-2 diagonal matrix. Optionally, the
orthogonal factors Qj used, j = 1, ..., k, are accumulated.
MB03BE : applies 10 iterations of a real single shifted periodic QZ
algorithm to a 2-by-2 product of matrices stored in an array.
MB03CD : computes orthogonal matrices Q1, Q2, Q3 for a real 2-by-2,
3-by-3, or 4-by-4 regular block upper triangular pencil
( A11 A12 ) ( B11 B12 ) ( D11 D12 )
aAB - bD = a ( ) ( ) - b ( ),
( 0 A22 ) ( 0 B22 ) ( 0 D22 )
such that the pencil a(Q3' A Q2 )(Q2' B Q1 ) - b(Q3' D Q1) is
still in block upper triangular form, but the eigenvalues in
Spec(A11 B11, D11), Spec(A22 B22, D22) are exchanged, where
Spec(X,Y) denotes the spectrum of the matrix pencil (X,Y).
Optionally, upper triangularizes a real regular pencil in block
lower triangular form while keeping the eigenvalues in the same
diagonal position.
MB03DD : computes orthogonal matrices Q1 and Q2 for a real 2-by-2,
3-by-3, or 4-by-4 regular block upper triangular pencil
( A11 A12 ) ( B11 B12 )
aA - bB = a ( ) - b ( ),
( 0 A22 ) ( 0 B22 )
such that the pencil a(Q2' A Q1) - b(Q2' B Q1) is still in block
upper triangular form, but the eigenvalues in Spec(A11, B11),
Spec(A22, B22) are exchanged.
Optionally, upper triangularizes a real regular pencil in block
lower triangular form while keeping the eigenvalues in the same
diagonal position.
MB03ED : computes orthogonal matrices Q1, Q2, Q3 for a real 2-by-2 or
4-by-4 regular pencil
( A11 0 ) ( B11 0 ) ( 0 D12 )
aAB - bD = a ( ) ( ) - b ( ),
( 0 A22 ) ( 0 B22 ) ( D21 0 )
such that Q3' A Q2 and Q2' B Q1 are upper triangular, Q3' D Q1 is
upper quasi-triangular, and the eigenvalues with negative real
parts (if there are any) are allocated on the top. The submatrices
A11, A22, B11, B22 and D12 are upper triangular. If D21 is 2-by-2,
then all other blocks are nonsingular and the product
-1 -1 -1 -1
A22 D21 B11 A11 D12 B22 has a pair of complex conjugate
eigenvalues.
MB03FD : computes orthogonal matrices Q1 and Q2 for a real 2-by-2 or
4-by-4 regular pencil
( A11 0 ) ( 0 B12 )
aA - bB = a ( ) - b ( ),
( 0 A22 ) ( B21 0 )
such that Q2' A Q1 is upper triangular, Q2' B Q1 is upper quasi-
triangular, and the eigenvalues with negative real parts (if there
are any) are allocated on the top. The submatrices A11, A22, and
B12 are upper triangular. If B21 is 2-by-2, then all the other
blocks are nonsingular and the product
-1 -1
A11 B12 A22 B21 has a pair of complex conjugate eigenvalues.
MB03GD : computes an orthogonal matrix Q and an orthogonal symplectic
matrix U for a real regular 2-by-2 or 4-by-4 skew-Hamiltonian/
Hamiltonian pencil a J B' J' B - b D with
( B11 B12 ) ( D11 D12 )
B = ( ), D = ( ),
( 0 B22 ) ( 0 -D11' )
such that J Q' J' D Q and U' B Q keep block triangular form, but
the eigenvalues are reordered.
MB03HD : determines an orthogonal matrix Q, for a real regular 2-by-2 or
4-by-4 skew-Hamiltonian/Hamiltonian pencil
( A11 A12 ) ( B11 B12 )
aA - bB = a ( ) - b ( )
( 0 A11' ) ( 0 -B11' )
in structured Schur form, such that J Q' J' (aA - bB) Q is still
in structured Schur form but the eigenvalues are exchanged.
MB03ID : moves the eigenvalues with strictly negative real parts of an
N-by-N real skew-Hamiltonian/Hamiltonian pencil aS - bH in
structured Schur form, with
( 0 I ) ( A D ) ( B F )
S = J Z' J' Z, J = ( ), Z = ( ), H = ( ),
( -I 0 ) ( 0 C ) ( 0 -B' )
to the leading principal subpencil, while keeping the triangular
form. Above, A is upper triangular, B is upper quasi-triangular,
and C is lower triangular.
The matrices Z and H are transformed by an orthogonal symplectic
matrix U and an orthogonal matrix Q such that
( Aout Dout )
Zout = U' Z Q = ( ), and
( 0 Cout )
( Bout Fout )
Hout = J Q' J' H Q = ( ),
( 0 -Bout' )
where Aout, Bout and Cout remain in triangular form.
Optionally, the matrices Q and U are computed.
MB03JD : moves the eigenvalues with strictly negative real parts of an
N-by-N real skew-Hamiltonian/Hamiltonian pencil aS - bH in
structured Schur form,
( A D ) ( B F )
S = ( ), H = ( ),
( 0 A' ) ( 0 -B' )
with A upper triangular and B upper quasi-triangular, to the
leading principal subpencil, while keeping the triangular form:
( Aout Dout ) ( Bout Fout )
Sout = ( ), Hout = ( ), where
( 0 Aout' ) ( 0 -Bout' )
Optionally, the matrix Q is computed, where
J Q' J' (aS - bH) Q = aSout - bHout.
MB03KA : reorders the diagonal blocks of the formal matrix product
T22_K^S(K) * T22_K-1^S(K-1) * ... * T22_1^S(1), (1)
of length K, in the generalized periodic Schur form
[ T11_k T12_k T13_k ]
T_k = [ 0 T22_k T23_k ], k = 1, ..., K, (2)
[ 0 0 T33_k ]
where
- the submatrices T11_k are NI(k+1)-by-NI(k), if S(k) = 1, or
NI(k)-by-NI(k+1), if S(k) = -1, and contain dimension-induced
infinite eigenvalues,
- the submatrices T22_k are NC-by-NC and contain core eigenvalues,
which are generically neither zero nor infinite,
- the submatrices T33_k contain dimension-induced zero
eigenvalues,
such that the block with starting row index IFST in (1) is moved
to row index ILST. The indices refer to the T22_k submatrices.
Optionally, the transformation matrices Q_1,...,Q_K from the
reduction into generalized periodic Schur form are updated with
respect to the performed reordering.
MB03KB : reorders the diagonal blocks of the formal matrix product (1)
of length K, in the generalized periodic Schur form (2), such
that pairs of adjacent diagonal blocks of sizes 1 and/or 2 in
the product (1) are swapped.
Optionally, the transformation matrices Q_1,...,Q_K are updated
with respect to the performed reordering.
MB03KC : reduces a 2-by-2 general, formal matrix product A of length K,
A_K^s(K) * A_K-1^s(K-1) * ... * A_1^s(1),
to the periodic Hessenberg-triangular form using a K-periodic
sequence of elementary reflectors (Householder matrices). The
matrices A_k, k = 1, ..., K, are stored in an N-by-N-by-K array
starting in the R-th row and column, and N can be 3 or 4.
MB03KD : reorders the diagonal blocks of the formal matrix product (1)
of length K, in the generalized periodic Schur form (2), such
that M selected eigenvalues pointed to by a logical vector
end up in the leading part of the matrix sequence T22_k.
MB03KE : solves small periodic Sylvester-like equations
op(A(i))*X( i ) + isgn*X(i+1)*op(B(i)) = -scale*C(i), S(i) = 1,
op(A(i))*X(i+1) + isgn*X( i )*op(B(i)) = -scale*C(i), S(i) = -1.
i = 1, ..., K, where op(A) means A or A', for the K-periodic
matrix sequence X(i) = X(i+K), where A, B and C are K-periodic
matrix sequences and A and B are in periodic real Schur form. The
matrices A(i) are M-by-M and B(i) are N-by-N, with 1 <= M, N <= 2.
MB03LD : computes the relevant eigenvalues of a real N-by-N skew-
Hamiltonian/Hamiltonian pencil aS - bH, with
( A D ) ( B F )
S = ( ) and H = ( ).
( E A' ) ( G -B' )
Optionally, an orthogonal basis of the right deflating subspace
of aS - bH corresponding to the eigenvalues with strictly negative
real part is computed.
MB04AD : computes the eigenvalues and a generalized symplectic URV
decomposition for a real N-by-N factored pencil a T Z - b H, i.e.,
it determines orthogonal matrices Q1, Q2 and orthogonal symplectic
matrices U1, U2 such that,
Q1' T U1 = [ T11 T12; 0 T22 ],
U2' Z Q2 = [ Z11 Z12; 0 Z22 ],
Q1' H Q2 = [ H11 H12; 0 H22 ],
where T11, T22', Z11, Z22', H11 are upper triangular and H22' is
upper quasi-triangular.
Optionally, the matrices Q1, Q2, U1 and U2 are computed.
MB04BD : computes the eigenvalues of a real N-by-N skew-Hamiltonian/
Hamiltonian pencil a S - b H, with
S = [ A D; E A' ], H = [ C V; W -C' ].
Optionally, decompositions of S and H are computed via orthogonal
transformations Q1 and Q2, as follows:
Q1' S J Q1 J' = [ Ao Do; 0 Ao' ],
J' Q2' J S Q2 = [ Bo Fo; 0 Bo' ],
Q1' H Q2 = [ C1 Vo; 0 C2' ],
and Ao, Bo, C1 are upper triangular, C2 is upper quasi-triangular
and Do and Fo are skew-symmetric. Optionally, the orthogonal
transformation matrices Q1 and Q2 are computed.
MB04HD : computes the transformed matrices A and B, using orthogonal
matrices Q1 and Q2 for a real N-by-N regular pencil
( A11 0 ) ( 0 B12 )
aA - bB = a ( ) - b ( ),
( 0 A22 ) ( B21 0 )
where A11, A22, and B12 are upper triangular and the generalized
-1 -1
matrix product A11 B12 A22 B21 is upper quasi-triangular.
MB04SU : computes a symplectic QR decomposition of a real 2M-by-N matrix.
Unblocked version.
New test programs:
=================
TMB03BD : test program for MB03BD.f.
TMB03KD : test program for MB03KD.f.
TMB03LD : test program for MB03LD.f.
TMB04AD : test program for MB04AD.f.
TMB04BD : test program for MB04BD.f.
Documentation:
=============
All the new 29 routines have associated html documentation, accessible
from the Library indexes libindex.html (3 new documents) and support.html
(26 new documents).
New MEX-files:
=============
skewHamildefl : computes the eigenvalues of a skew-Hamiltonian/Hamiltonian
pencil and the right deflating subspace corresponding to the
eigenvalues with strictly negative real part.
skewHamileig : computes the eigenvalues and orthogonal decomposition of a
skew-Hamiltonian/Hamiltonian pencil.
symplURV : computes the eigenvalues and generalized symplectic URV
decomposition of a skew-Hamiltonian/Hamiltonian pencil in
factored form.
New M-files:
===========
test_skewHamildefl
test_skewHamileig
test_symplURV
Updated M-files:
===============
test_M_haeig.m - some tests are performed only when there are no eigenvalues
on the imaginary axis. Since the results might have
different T, G0, and S submatrices than in the R matrix,
their comparison may be by-passed, and the reduction is
compared.
Replaced i by 1i, and the argument dum by different names
in the calls of the function qr.
Compared the absolute value of some orthogonal matrices
instead of the values themselves.
test_genleq.m - replaced the value 0 for flag by [0,0] in the second call
of slgesg.
test_polezeroz.m - the matrices Af obtained using A, B, C, D, E are no longer
compared with those obtained using the system objects ss
or dss, just their (generalized) eigenvalues are compared.
Increased tole to eps^(2/3).
test_TotalLS.m - changed the sequences for comparing the singular vectors
corresponding to the smallest singular values.
New version of SLICOT-based MATLAB toolboxes:
============================================
SLICOT-based MATLAB toolboxes on Linux platforms under MATLAB 7.10 (R2010a)
are now available under commercial licenses.
The versions on Windows platforms have been available since spring 2010.
===============================================================================
Update October 17, 2009
GNU General Public License:
==========================
SLICOT Library has been updated for being distributed under the GNU General
Public License. All source files for the routines now include the following
text (in comments):
Copyright (c) 2002-2009 NICONET e.V.
This program is free software: you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see
.
The file gpl-2.0.txt has been included in the slicotPC.zip and slicot.tar.gz
archives.
The SLICOT-based MATLAB MEX- and M-files are not distributed under the
GNU GPL license, and their source codes are not included in the archives
mentioned above.
Improved routines:
=================
AB13DD : square-reduced approach has been replaced by the HAPACK approach
(using the symplectic URV and periodic Schur decompositions).
The call to the LAPACK routine DGGES has been replaced by a
call to DGGEV, for efficiency. Consequently, the argument BWORK
has been removed. The workspace length LDWORK has changed.
Few other changes improved the obtainable results.
Updated documentation files:
===========================
AB13DD.html : modified due to the changes in AB13DD.
All documentation files have been regenerated. The new copyright statement
was included when needed.
Updated example files (in the subdirectories examples and examples77):
=====================
TAB13DD.f : modified due to the changes in AB13DD.
All files : modified to include the new copyright statement.
Updated dat files (in the subdirectories examples and examples77):
=================
AB08NZ.dat, : modified for being accepted on Linux platforms too
AG08BZ.dat, (complex format needed also for real values).
TB01IZ.dat,
TG01AZ.dat,
TG01FZ.dat
Updated MEX-files:
=================
linorm.f : modified due to the changes in AB13DD.
All files : modified to include the new copyright statement.
Updated M-files:
===============
All files : modified to include the new copyright statement.
Updated info files:
==================
Installation.txt
readme files in the root directory and src_aux subdirectory.
New version of SLICOT-based MATLAB toolboxes:
============================================
SLICOT-based MATLAB toolboxes on Linux platforms under MATLAB 7.8 (R2009a)
are now available under commercial licenses.
The versions on Windows platforms have been available since spring 2009.
===============================================================================
Update June 3, 2009
Bugs removed:
============
AB08ND : the matrices of the reduced pencil are moved in front of the
arrays AF and BF, as stated in the documentation.
AG08BD : the pointers for the matrices of the reduced pencil are now correct,
and suitable submatrices are finally moved in the arrays A and E.
dhgeqz : (in directory src_aux) replaced LDH by LDT in line 780 (bug in LAPACK
3.2 routine). Preserved the exceptional shift strategy, not included
in LAPACK.
dtgsy2 : (in directory src_aux) replaced (I+1) by IWORK(I+1) in line 640 (bug
in LAPACK 3.2 routine). Also, added dtrsyl.f in src_aux, since the
MATLAB library file (in libmwlapack.lib) does not call the correct
dtgsy2 routine.
Updated routines:
================
AB08MD, : optimal workspace query allowed; length of IWORK and DWORK
AB08ND, slightly changed. BLAS 3 routines are called when possible.
AB08NX
AB13DD : few changes in the code.
AG08BD, : optimal workspace query allowed. BLAS 3 routines are called when
AG08BY possible. AG08BY has the additional argument LDWORK.
MB02CV, : replaced argument STRUCT by STRUCG, since "struct" is a reserved
MB02CY word in C. Change proposed by Pascal Gahinet for automatic
generating C headers for SLICOT routines.
MB04ID : optimal workspace query allowed.
MB03OY, : LDWORK reduced by 1. Minor improvements in MB03PY.
MB03PY
TG01AD : minor improvements.
TG01FD : optimal workspace query allowed; LDWORK slightly changed.
BLAS 3 routines are called when possible.
UD01MD : the format editors for INTEGER values replaced by I5.
Updated MEX-files:
=================
linmeq.f : replaced DWORK by DUM in line 401.
Set FLAG(2) (and FLAG(3), if TASK = 1) to 0, if it is
not 0 or 1 (or 2, if TASK = 1).
Made few changes in the optimal workspace calculation
for TASK = 1.
Set SCALE = 1 if min(M,N) = 0, after the call of the LAPACK
routine DTRSYL, since DTRSYL does not set it in this case.
polezero.f : rnk now returns the normal rank of the system pencil,
not of the transfer-function matrix of the system.
Default value for TOL has been set, if not read.
Optimal workspace is used, but the length of some arrays
was slightly reduced.
The system zeros are computed faster if Af and Ef are not
needed.
April, 2009 : all MEX-files have been updated by replacing the calls
to the MATLAB function mxCreateFull, which became deprecated
in MATLAB Release 2009a, by calls to the function
mxCreateDoubleMatrix.
Updated M-files:
===============
applyg.m, : included identifier(s) in warning message(s).
btoeplitz2.m,
ckstair.m,
createg.m,
slgconf.m,
slgobsf.m,
slgsHes.m,
slgsSVD.m,
slstart.m
aredata.m, : minor improvements (& -> &&, | -> ||, etc.).
bdiag.m,
bst.m,
btoeplitz.m,
btoeplitz2.m,
cf2ss.m,
cfconred.m,
ckstair.m,
cmp_ident.m,
cmp_red.m,
convKf.m,
createg.m,
ctdsx.m,
ctlex.m,
deadbt.m,
def_Ntests.m,
dsim.m,
dsimt.m,
dtdsx.m,
dtlex.m,
dex_wident.m,
dex_widentc.m,
ex_wident.m,
ex_widentc.m,
findABCD.m,
findAC.m,
findBDK.m,
findR.m,
findx0BD.m,
find_models.m,
fstdemo1.m,
fstdemo2.m,
fstdemo3.m,
fstdemo4.m,
fstdemo5.m,
fstlsq.m,
fstqr.m,
fstupd.m,
fwbconred.m,
fwbred.m,
fwhna.m,
Hameig.m,
Hessl.m,
housh.m,
inistate.m,
nrank.m,
o2s.m,
page_plot.m,
plot_ye.m,
plot_yu.m,
polysf.m,
polzer.m,
red_slv.m,
s2o.m,
slapp.m,
slcaregs.m,
slcares.m,
slcaresc.m,
slconv.m,
sldaregs.m,
sldaregsv.m,
sldares.m,
sldaresc.m,
sldeconv.m,
sldsyl.m,
slexpe.m,
slfeed.m,
slgcare.m,
slgconf.m,
slgdare.m,
slgely.m,
slgest.m,
slgminr.m,
slgobsf.m,
slgsHes.m,
slgsQRQ.m,
slgsSVD.m,
slgsly.m,
slgsst.m,
slidemo1.m,
slidemo2.m,
slidemo3.m,
slidemo4.m,
slidemo5.m,
slihinf.m,
slimju.m,
sllyap.m,
slmoen4.m,
slmoesm.m,
slmoesp.m,
sln4sid.m,
slofeed.m,
slosfeed.m,
slpar.m,
slpole.m,
slredemo1.m,
slredemo2.m,
slser.m,
slspar.m,
slstart.m,
slstei.m,
slstly.m,
slstst.m,
slsylv.m,
slwidemo1.m,
slwidemo2.m,
slwidemo3.m,
slwidemo4.m,
slwidemo5.m,
slzero.m,
srcf.m,
srif.m,
sysredget.m,
sysredset.m,
test_all.m,
test_allr.m,
test_arecond.m,
test_aresol.m,
test_aresolc.m,
test_bldiag.m,
test_cfsys.m,
test_ckstair.m,
test_deadbeat.m,
test_dlsdz.m,
test_findBD.m,
test_fstoem.m,
test_fstoep.m,
test_fstoeq.m
test_garesol.m,
test_gsyscom.m,
test_gsystra.m,
test_Hessol.m,
test_Hnorm.m,
test_invert.m,
test_Kfiltupd.m,
test_linorm.m,
test_order.m,
test_pass.m,
test_persch.m,
test_polezero.m,
test_s2o.m,
test_sident.m,
test_slinorm.m,
test_slmoen4.m,
test_slmoesm.m,
test_slmoesp.m,
test_sln4sid.m,
test_specfact.m,
test_sysconn.m,
test_sysfconn.m,
test_TotalLS.m
TLS.m,
tLSfilt.m
bdiag.m, : replaced complex i by 1i for speed and robustness.
Hameig.m,
Hessl.m,
pass.m,
persch.m,
slDFT.m,
slexpe.m,
sliDFT.m,
test_bldiag.m,
test_datana.m,
test_Hameig.m,
test_Hessol.m,
test_Hnorm.m,
test_pass.m
cmp_ident.m, : added a second argument when calling "exist".
cmp_red.m,
def_Ntests.m,
dex_wident.m,
dex_widentc.m,
ex_wident.m,
ex_widentc.m,
find_models.m,
fstdemo1.m,
fstdemo2.m,
fstdemo3.m,
fstdemo4.m,
fstdemo5.m,
plot_ye.m,
plot_yu.m,
red_slv,
slicotdemos.m,
slidemo1.m,
slidemo2.m,
slidemo3.m,
slidemo4.m,
slidemo5.m,
slredemo1.m,
slredemo2.m,
slstart.m,
slwidemo1.m,
slwidemo2.m,
slwidemo3.m,
slwidemo4.m,
slwidemo5.m,
test_all.m,
test_allr.m,
test_dlsdz.m,
test_findBD.m,
test_order.m,
test_s2o.m,
test_sident.m,
test_slmoen4.m,
test_slmoesm.m,
test_slmoesp.m,
test_sln4sid.m,
cmp_ident.m, : initialized arrays possibly increasing in loops before
createg.m, those loops.
ctlex.m,
dtlex.m,
fstdemo5.m,
fstqr.m,
perf_slgely.m,
perf_slgesg.m,
perf_slgest.m,
perf_slgsly.m,
perf_slgsst.m,
perf_sllyap.m,
perf_slstei.m,
perf_slstly.m,
perf_slstst.m,
perf_slsylv.m,
perfb_slgely.m,
perfb_slgest.m,
perfb_slgsly.m,
perfb_slgsst.m,
perfb_sllyap.m,
perfb_slstei.m,
perfb_slstly.m,
perfb_slstst.m,
slidemo5.m,
test_Hessol.m,
test_Hnorm.m,
tLSfilt.m
ctdsx.m, : simplified the calls of error function (no sprintf).
ctlex.m,
dtdsx.m,
dtlex.m,
sysredget.m
def_Ntests.m : added code for choosing resonable dimensions for matrices.
dsim.m, : replaced prod( size( x ) ) by numel( x ).
dsimt.m,
o2s.m,
s2o.m,
slgcare.m,
slgdare.m,
slmoen4.m,
slmoesm.m,
slmoesp.m,
sln4sid.m,
test_polezero.m,
tLSfilt.m
find_models.m, : replaced ~isempty(find(...)) by any(...).
test_aresol.m,
test_aresolc.m,
test_garesol.m
init.m : used the new version for a saved state in the rand calls,
for MATLAB Release 2008b and above.
nrank.m, : updated to allow also systems with complex matrices.
polzer.m, Accept also no output argument.
slpole.m,
slzero.m
polezero.m : rnk now returns the normal rank of the system pencil,
not of the transfer-function matrix of the system.
red_slv, : used identifiers in the "catch" statements.
test_all.m,
test_allr.m,
test_slimju.m
slH2norm.m, : replaced getst(sys) by sys.Ts.
slHknorm.m,
slinorm.m
slicot.m, : updated for the new M- and MEX-files, respectively.
slicotmex.m
slmoen4.m, : removed the obsolete option 'v6' (for backward
slmoesm.m, compatibility).
slmoesp.m,
sln4sid.m
sysredset.m : simplified the calls of error function (no sprintf).
Replaced the deprecated function isstr by ischar.
test_all.m, : added calls to the new MEX-functions.
test_allr.m
test_cfsys.m : used eps instead of 0 in tests for errors for MATLAB 7 and above.
Used relative errors in functionality tests.
test_conred.m : deleted the output argument hsv (or hsvd or hsvc),
as well as dr or dr1, when they are not used.
test_deadbeat.m : set toler = 100*eps instead of 10*eps for MATLAB 7 and above.
test_fstoem.m : for MATLAB release 7 and greater, err is compared with tol
instead of 0.
test_fstoeq.m : used maximum between a norm and 1 for relative error
calculations.
test_gsystra.m : used 100*eps instead of 0 in tests for errors for MATLAB 7
and above (default value tests: gsystra, task = 6).
Used relative errors in these tests.
test_ldsimt.m : deleted the calls to the function warning.
test_persch.m : the values for norm( Ao(:) - Ao1(:), 1), and similarly for Ao2,
are now not compared to 0, but to a tolerance, for MATLAB
Release 7 and above. The relative error of W and W1 is tested.
test_polezero.m : deleted the term abs( rnk - min( p,m ) ) in line 724,
to account the change in the definition of rnk.
Compared Af1 to Af3, Af2 to Af4, Ef1 to Ef3, Ef2 to Ef4,
but abs( Af1 ) to abs( Af2 ), and abs( Ef1 ) to
abs( Ef2 ) (instead of Af1 to Af2, and Ef1 to Ef2,
respectively), in the lines 768-770 and 828-830.
Performed several minor improvements in the code.
test_slmexp.m : replaced the calls to the function length by calls to isempty.
For MATLAB release 7 and greater, err is compared to 100*eps
instead of 0.
test_specfact.m : the error norms of E and res are divided by norm(E,1).
test_syscom.m : deleted the output argument s in the calls of slconf and slobsf,
and the call of max when computing the error norm of the Markov
parameters.
test_sysred_tools.m : deleted the output argument hsv (or hsvc),
when it is not used.
test_TotalLS.m : simplified setting of the array bv.
Updated make files:
==================
make.inc : updated for Intel Fortran Compiler 11 for Windows.
makefile : (in src_aux) updated to compile dtgsy2 and dtrsyl.
Updated html-files:
==================
libindex.html, : updated to include links to the 48 new documentation files.
support.html
AB13DD.html : replaced MAXIT = 10 by MAXIT = 30 in the NUMERICAL ASPECTS
Section.
IB01MY.html, : added full bibliographic references, when incomplete.
MB03SD.html,
MB04DY.html,
MB04ZD.html,
SB16AY.html
MA02GD.html : permuted the dimension M and N for B in the Section
FURTHER COMMENTS.
SB04OD.html : the (2,1) and (2,2) entries in the displayed formula for Z,
Section METHOD, have been interchanged. This agrees with
what is implemented, and, moreover, the coefficients
for the unknows in R depend on A and E, not on D.
New Routines:
============
AB08MZ, : versions of AB08MD, AB08ND for complex matrices.
AB08NZ
AB8NXZ : version of AB08NX for complex matrices.
AG08BZ : version of AG08BD for complex matrices.
AG8BYZ : version of AG08BY for complex matrices.
MA02BZ, : versions of MA02BD, MA02CD, MB04ID for complex matrices.
MA02CZ,
MB04IZ
MA02ID : matrix 1-, Frobenius, or infinity norms of a skew-Hamiltonian matrix.
MA02JD : test if a matrix is an orthogonal symplectic matrix.
MB01MD : matrix-vector operation alpha*A*x + beta*y, with A a skew-symmetric
matrix.
MB01ND : rank 2 operation alpha*x*trans(y) - alpha*y*trans(x) + A, with A a
skew-symmetric matrix, and trans - transposition operator.
MB01UX : computation of matrix expressions alpha*T*A or alpha*A*T,
T quasi-triangular.
MB03TD : reordering the diagonal blocks of a matrix in (skew-)Hamiltonian
Schur form.
MB03TS : swapping two diagonal blocks of a matrix in (skew-)Hamiltonian
canonical Schur form.
MB03WA : swapping two adjacent diagonal blocks in a periodic real Schur
canonical form.
MB03XD : eigenvalues of a Hamiltonian matrix.
MB03XP : periodic Schur decomposition and eigenvalues of a matrix product A*B,
with A upper Hessenberg and B upper triangular.
MB03XU : panel reduction of columns and rows of a real (k+2n)-by-(k+2n) matrix
by orthogonal symplectic transformations.
MB03YA : annihilation of one or two entries on the subdiagonal of a Hessenberg
matrix corresponding to zero elements on the diagonal of a triangular
matrix.
MB03YD : periodic QR iteration.
MB03YT : periodic Schur factorization of a real 2-by-2 matrix pair (A,B)
with B upper triangular.
MB03ZA : reordering a selected cluster of eigenvalues of a given matrix pair
in periodic Schur form.
MB03ZD : stable and unstable invariant subspaces for a dichotomic
Hamiltonian matrix.
MB04DD : balancing a real Hamiltonian matrix.
MB04DI : applying the inverse of a balancing transformation for a real
Hamiltonian matrix.
MB04DS : balancing a real skew-Hamiltonian matrix.
MB04PA : special reduction of a (skew-)Hamiltonian like matrix by an
orthogonal symplectic transformation.
MB04PB : Paige/Van Loan form of a Hamiltonian matrix (blocked algorithm).
MB04PU : Paige/Van Loan form of a Hamiltonian matrix (unblocked algorithm).
MB04QB : applying a product of symplectic reflectors and Givens rotators to two
general real matrices.
MB04QC : premultiplying a real matrix with an orthogonal symplectic block
reflector.
MB04QF : forming the triangular block factors of a symplectic block reflector.
MB04QU : applying a product of symplectic reflectors and Givens rotators to
two general real matrices (unblocked algorithm).
MB04TB : symplectic URV decomposition of a real 2N-by-2N matrix.
MB04TS : symplectic URV decomposition of a real 2N-by-2N matrix
(unblocked version).
MB04WD : generating an orthogonal basis spanning an isotropic subspace.
MB04WP : generating an orthogonal symplectic matrix which performed the
reduction in MB04PU.
MB04WR : generating orthogonal symplectic matrices defined as products of
symplectic reflectors and Givens rotators.
MB04WU : generating an orthogonal basis spanning an isotropic subspace
(unblocked version).
MB3OYZ : version of MB03OY for complex matrices.
MB3PYZ : version of MB03PY for complex matrices.
SB04OW : solving a periodic Sylvester equation with matrices in periodic
Schur form.
TB01IZ, : versions of TB01ID, TB01XD, TG01AD, TG01FZ, UD01MD
TB01XZ, for complex matrices.
TG01AZ,
TG01FZ,
UD01MZ
UE01MD : default machine-specific parameters for (skew-)Hamiltonian
computation routines
Added corrected LAPACK 3.2 routine dtgsy2 (in src_aux subdirectory):
replaced line 640
IE = ( I+1 ) - 1
with
IE = IWORK( I+1 ) - 1
Also added LAPACK 3.2 routine dtgsyl (in src_aux subdirectory), since
otherwise the MEX-file genleq didn't work well for "transposed" generalized
Sylvester equations under MATLAB 2008b.
New test programs:
=================
TAB08NZ : test program for AB08NZ.f.
TAG08BZ : test program for AG08BZ.f.
TMB03TD : test program for MB03TD.f.
TMB03XD : test program for MB03XD.f.
TMB03XP : test program for MB03XP.f.
TMB03ZD : test program for MB03ZD.f.
TMB04DD : test program for MB04DD.f.
TMB04DS : test program for MB04DS.f.
TMB04PB : test program for MB04PB.f.
TMB04PU : test program for MB04PU.f.
TMB04TB : test program for MB04TB.f.
TMB04TS : test program for MB04TS.f.
TTB01IZ : test program for TB01IZ.f.
TTG01AZ : test program for TG01AZ.f.
TTG01FZ : test program for TG01FZ.f.
New MEX-files:
=============
hapack_haeig.f : computes eigenvalues for Hamiltonian matrices.
polezeroz.f : computes the poles and zeros of a standard or descriptor
system, and the Kronecker structure of the system pencil,
for systems with complex matrices.
New M-files:
===========
comp_RBA.m : auxiliary function for testing polezeroz.f.
habalance.m : symplectic scaling of a Hamiltonian matrix to improve
eigenvalue accuracy.
haconv.m : convertions between storage representations for a
Hamiltonian matrix.
haeig.m : eigenvalues of a Hamiltonian matrix using HAPACK approach.
hapvl.m : Paige-Van Loan's form of a Hamiltonian matrix.
haschord.m : reordering the Schur form of a Hamiltonian matrix.
hastab.m : complete stable/unstable invariant subspace of a
Hamiltonian matrix.
hasub.m : selected stable/unstable invariant subspace of a
Hamiltonian matrix.
haurv.m : symplectic URV form of a general 2n-by-2n matrix.
haurvps.m : symplectic URV/periodic Schur form of a Hamiltonian
matrix.
polezeroz.m : documentation file for the MEX-file polezeroz.
shbalance.m : symplectic scaling of a skew-Hamiltonian matrix to improve
eigenvalue accuracy.
shconv.m : convertions between storage representations for a
skew-Hamiltonian matrix.
test_allr_77.m : similar to test_allr.m, but uses the new version for a
saved state in the rand calls.
test_haeig.m : tests for SLICOT Hamiltonian eigenvalue solver hapack_haeig.
test_M_haeig.m : tests for SLICOT (skew-)Hamiltonian M-files.
test_polezeroz.m : tests for polezeroz.f.
New html-files:
==============
AM08MZ.html, ... : 48 new documentation files for the new routines, except for MB04PA.
UE01MD.html
===============================================================================
Update June 20, 2005
Library File Structure Reorganization:
=====================================
1) A new subdirectory, called SLdemos, was added under the slicot directory.
It contains all additionally needed files for performing demonstrations
using SLICOT-based MATLAB executables.
2) A new subdirectory, called SLTests, was added under the SLTools directory.
It contains the test files for MATLAB MEX- and M-files currently available
in SLICOT.
In addition, similarly, the Unix version includes an additional subdirectory,
SLTests77, under the SLTools/F77 directory.
Moreover, template scripts for generating the MEX-files, and for running the
MATLAB test scripts are now included.
3) Another new subdirectory is src_aux, under the SLICOT root directory, slicot.
It contains few auxiliary LAPACK and BLAS source files which either slightly
differ from the standard distribution, or are explicitly needed for generating
the SLICOT-based MATLAB executable files (MEX-files) for a specific platform.
The currently included files are dhgeqz (for both Unix and Windows platforms),
and dcabs1, dgees, and dgges (for Windows platforms). The file dhgeqz is the
David Day's slightly modified version of the corresponding LAPACK routine.
Without that modification, trivial examples have been encountered on which the
convergence of the QZ algorithm was not achieved. The files dcabs1, dgees,
and dgges are copies of the corresponding BLAS and LAPACK routines. When
building the MEX-files using MATLAB 6.5(.1) on Windows platforms, using the
MATLAB-provided LAPACK+BLAS library file, the routine dcabs1 is missing, and
the routines dgees and dgges do not work properly when ordering of the real
(generalized) Schur forms is desired. The file dcabs1 is also needed on
Linux platforms or on Sun platforms under MATLAB 6.0 and 6.1.
4) In addition, all distributed SLICOT (sub)directories now include suitable
readme files, specifying the main content of the corresponding (sub)directories
and giving short hints on their use. Moreover, a file Installation.txt has
been added to the slicot directory. It contains details about how to generate
the object and executable files, including the SLICOT-based executable
MEX-files, and how to test the programs, and to conveniently use them
thereafter.
5) Many changes have been performed to replace deprecated LAPACK routines with
newer ones. Specifically, the following BLAS 2 calls have been replaced:
- DGELSX by DGELSY in AB09CX.f;
- DGEQPF by DGEQP3 in MB03OD.f;
- DLATMZ by DORMRZ in MB02QD.f;
- DORM2R by DORMQR in MB02QD.f;
- DTZRQF by DTZRZF in MB02QD.f.
The changes required to introduce the parameter LDWORK in MB02QD and MB03OD,
slightly increase the workspace, and update several other routines calling the
above mentioned subroutines. Details are given below.
The archives Renamed.zip and Renamed.tar.gz from the SLICOT root directory
contain two renamed SLICOT Library routines whose interface has been slightly
changed in Release 5.0 compared to the previous releases. The names have been
changed as follows:
MB02QD --> MB02QX
MB03OD --> MB03OX.
Except for the one letter difference in their names, the renamed routines are
otherwise identical with the corresponding routines in the previous releases
(with names ending in D). They are provided to enable the easiest updating
of the users' programs calling the former versions (since just the names have
to be changed), but their use is no longer recommended. They are not called,
and not included in the standard SLICOT distribution starting with Release 5.0.
The new routines are called instead.
The new routines have an additional parameter, LDWORK (specifying the length
of the workspace array, DWORK), introduced for enabling more BLAS 3 calls
instead of BLAS 2 calls. The minimum size of DWORK has been also slightly
increased, as mentioned in the detailed documentation.
6) The deprecated MEX-file hinorm.f and the related M-files hinorm.m and
thinorm.m have been removed. The files linorm.f and slinorm.m are more
general and reliable.
Few files in slicotPC.zip were previously stored as Unix files.
They were now replaced. E.g., BB01AD.f, BB02AD.f.
Some previous DOS files had not an end of file newline. E.g., cndricd.m.
This has been added.
Note: All updates mentioned above and below have been saved in the compressed
library files, slicot.tar.gz and slicotPC.zip.
Bugs Fixed:
==========
AB05RD : Set RCOND to 1 in the Quick Return section.
MB01RD : The diagonal of X is scaled before the Quick return.
MB02SD, : Removed the parameter ONE, which was not used.
MB02SZ
MB04UD : Replaced the test EMXNRM.LT.TOLER by EMXNRM.LE.TOLER
(change proposed by A. Varga).
MB05OD : The translation with the mean of the eigenvalues of A*DELTA
is not made if that mean is larger than LOG( DLAMCH( 'Overflow' ) )
or smaller than LOG( DLAMCH( 'Underflow' ) ), or if the matrix norm
is not really reduced.
The scaling of the matrix by 2**(-M) is done as much as needed,
if possible.
Reliability and accuracy are increased by improving the computations
with possibly large quantities and avoiding overflows.
NF01BX : Deleted the local variables FULL and UPPER, which are
not used. (This is not a bug, but some compilers generate
a warning.)
SB01BD : Replaced the test IB.EQ.1 by IB.EQ.1 .OR. SIMPLB when a simple
1x1 block is uncontrollable and changed the logic for setting NSUP,
NPR, NPC, and NUP in that case (changes proposed by A. Varga).
SB02OD : Set RCOND to 1 if N = 0.
SB02QD, : When the same array is used as the 7-th and 11-st argument
SB02RD, in the calls of MB01RU, its diagonal is scaled by 2.0 after
SB02SD, each such call.
SB03QX,
SB03QY,
SB03SX,
SB03SY,
SB03TD,
SB03UD
SB03TD, : Deleted .NOT. in the tests for JOBC .OR. JOBE.
SB03UD
Improvements:
============
AB09CX : Replaced the call of BLAS 2 routine DGELSX by a call of BLAS 3
routine DGELSY. This required to increase by 1 one term in the
expression for the minimal value for the variable LDW2 in the
description of the parameter LDWORK. Specifically,
LDW2 = N*(M+P+2) + 2*M*P + MIN(N,M) +
MAX( 3*M, MIN(N,M)+P ).
was replaced by
LDW2 = N*(M+P+2) + 2*M*P + MIN(N,M) +
MAX( 3*M+1, MIN(N,M)+P ).
For optimum performance LDWORK should be larger than
MAX( LDW1,LDW2 ), and computed in terms of the maximum of the
block sizes for DGEQP3, DTZRZF, DTZRQF, DORMQR, and DORMRZ.
AB09CD, : These are all routines calling AB09CX, and the workspace size
AB09ED, was slightly changed accordingly. AB09CD and AB09ED have been
AB09JD, changed as shown for AB09CX. For AB09JD and AB09KD, LDW4 was
AB09KD changed as LDW2 above.
IB01AD, : These are all routines calling MB03OD, possibly indirectly,
IB01BD, and have been modified according to the changes in MB03OD
IB01ND, (see below). LDWORK in IB01AD was increased from 5*(M+L)*NOBR
IB01PD, to 5*(M+L)*NOBR+1, if METH = 'N', and ALG = 'C', BATCH = 'L'
IB01PY, or 'O', or ALG = 'Q', BATCH = 'O', and LDR >= NS. Similarly,
IB03AD, for IB01ND, if METH = 'N'. For IB01BD, the term 3*L*NOBR was
IB03BD, increased by 1, if M > 0 and JOB = 'A', 'B', or 'D', and
MB02QD, similarly for the term 4*(M*NOBR+N), when it appears (twice).
MB02YD, These changes were requested by similar ones made in IB01PD,
MD03BY, and the first change in IB01PY, if JOB <> 'N', and M > 0.
NF01BR For IB03AD and IB03BD, the term 4*(M*NOBR+N) was increased by 1.
Besides the addition of LDWORK in the call of MB03OD, several
changes, described below, have been performed in MB02QD.
For MB02YD, MD03BY, and NF01BR, the parameter LDWORK has been
added in the calls of MB03OD, with no consequences (JOBQR = 'N').
MB02QD : Added the parameter LDWORK and offered the possibility to use
an optimal workspace. On successful exit, DWORK(1) returns
the optimal value of LDWORK, and the scalar factors of the
elementary reflectors used are now stored starting at DWORK(2)
(not DWORK(1) as stored previously). The first term of the
expression giving the minimal length of DWORK was increased by 1.
The calls to the BLAS 2 routines DLATZM, DORM2R, and DTZRQF have
been replaced by calls to the corresponding BLAS 3 routines,
DORMQR, DORMRZ, and DTZRZF, respectively.
MB03OD : Added the parameter LDWORK and offered the possibility to use
an optimal workspace (for JOBQR = 'Q'). On successful exit,
DWORK(1) returns the optimal value of LDWORK. The minimal
length of DWORK for JOBQR = 'Q' was increased by 1.
The call to the BLAS 2 routine DGEQPF has been replaced by
a call to the corresponding BLAS 3 routine, DGEQP3.
MB02TZ : The length of the array DWORK was reduced from 2*N to N locations.
SB01DD : Added the parameter LDWORK in the calls of MB02QD and offered
the possibility to use an optimal workspace. On successful exit,
DWORK(1) returns the optimal value of LDWORK. The second term of
the expression giving the minimal length of DWORK was increased
by 1.
Documentation:
=============
AB09CD, : Increased by 1 one term in the expression for the minimal
AB09CX, value for the variable LDW2 or LDW4 in the description of the
AB09ED, parameter LDWORK.
AB09JD,
AB09KD,
IB01AD,
IB01BD,
IB01ND,
IB01PD,
IB01PY,
IB03AD,
IB03BD
FB01VD : Specifed that only the upper triangular part of P is
needed, and only the upper triangular part of P is
returned.
MB02QD, : Added the parameter LDWORK, offering the possibility to use
MB03OD an optimal workspace, and increased by 1 one term in the expression
for the minimal length of DWORK.
MB02TZ : The length of the array DWORK was reduced from 2*N to N locations.
MB04OD : Removed the variable INFO, which is not needed, in the Program
Text subsection.
SB01DD : Increased by 1 one term in the expression for the minimal length
of DWORK. On successful exit, DWORK(1) returns the optimal length.
SB10DD, : The section Program results slightly changed (some condition
SB10KD, numbers).
SB10ZD
libindex : Replaced the wrong name MB030D by MB03OD.
Updated test programs:
=====================
TAB09CD, : increased by 1 the corresponding term of the expression for
TAB09ED, LDWORK, according to the change performed in the associated
TAB09JD, routine.
TAB09KD,
TIB03AD,
TIB03BD,
TSB01DD
TBB01AD, : replaced (only in the examples77 subdirectory)
TBB02AD CHARACTER CHPAR(255)
by
CHARACTER CHPAR*255
to work on certain Linux systems with g77 compiler.
TMB02QD, : increased by 1 the corresponding term of the expression for
TMB03OD LDWORK and added the parameter LDWORK in the call of the
associated routine.
TMB04OD : removed the variable INFO, which is not needed.
Updated make files:
==================
makefile : the file in the SLICOT root directory, together with the new
makefile in the src_aux subdirectory, now include commands
for building the auxiliary library lpk_aux, containing LAPACK
and BLAS object files which either slightly differ from those
derived from the standard distribution, or are explicitly
needed for generating the SLICOT-based MATLAB executable
MEX-files for a specific platform.
makefile : (in the examples and examples77 subdirectories for Unix
machines): inserted ./ in front of the executable names, for
being run on certain Linux machines. Also, the user-callable
routine related to each example program was deleted from
the corresponding link command.
Updated MEX-files:
=================
All MEX-files for Windows platforms have been updated by removing the
specific Windows statements related to the use of the DFLIB library and
to control the floating point exceptions, which proved to be unnecessary.
Now, the Unix and Windows versions of the files are practically identical
(except for the end of line characters). Additional changes are described
below.
arebench : replaced L by I2 in the WRITE statement in lines 367-368
and added L as variable to be printed.
arecond : added an error test if eq is given as 0, and enabled to get
the results when INFO was set to N+1.
fwehna, : increased by 1 the corresponding term of the expressions for
sident, LDWORK due to the changes in AB09JD, IB01BD, and AB09ED,
sysred respectively.
garesol : changed the dimension of arrays FLAG and FLAGR from 4 to 10.
Hessol : added the calculation of condition number estimate also
for JOB = 2, and removed the calls of DLASET and ZLASET,
which are not necessary.
Kfiltupd : specifed that only the upper triangular part of P is
needed, and only the upper triangular part of P1 is
returned.
muHopt : set LDAK and LDBK to MAX( 1, NE ) before the
second call of SB10AD.
Deleted the printing statements in lines 751-753.
polezero : INFE is output to MATLAB workspace only if requested.
syscom : inserted the statement
TOL = TOL*DLAMCH( 'EPSILON' )
after the line 385 (for single-input and/or single-output
systems).
sysfconn : corrected an error message related to the size of H, and reduced
the memory allocation for DC if JOBD = 'Z'.
Updated MEX-files in the Unix SLmex/F77 subdirectory (for Fortran 77):
=====================================================================
findBD, : removed all MAX and MIN intrinsic function references in
genleq, PARAMETER statements.
linmeq,
order,
sident
Updated M-files:
===============
Contents : added descriptions for the new MEX-files and M-files.
Restructured for easier use.
dtdsx : set ; at the end of the line 178.
Hesscond, : replaced hessol by Hessol, for avoiding case sensitivity
Hessl problems on certain machines.
Kfiltupd : specifed that only the upper triangular part of P is
needed, and only the upper triangular part of P1 is
returned.
polzer, : replaced the tests related to the function issystem
slpole, with equivalent tests calling the function isa with
slzero 'ss' as an argument.
slihinf : replaced the test "if ni == 6" with "if ni <= 6" in
the line 92.
slmoen4, : replaced the obsolete call of bar with the recommended
slmoesm, call, and made the MATLAB 7 version compatible with
slmoesp, previous versions.
sln4sid
ex_wident, : replaced the test "if ~( exist( 'range' ) )" for a local
ex_widentc variable range by "if exist( 'range' ) ~= 1", since range is
a function in a MATLAB toolbox. (Suggested by Pierre Vacher.)
t1dhin, : deleted the definition of data matrices, and used instead
t2dhin, the corresponding new MAT-files. These MAT-files also contain
t1hin, the values for the results, so automatic testing is now
t2hin, possible. The results are no longer printed.
tclsdp,
tdlsdp,
tmucomp
test_arecond : relaxed or changed some tests for running on Unix/Linux
machines or Windows, under MATLAB 7.0.4.
test_aresol, : the error messages now print "Failed: ", together with the
test_garesol, corresponding error number, not just a number.
test_Hnorm,
test_slmexp
test_cfsys : replaced the use of the 2-norm by 1-norm in the last part of
the section "Check functionality" and added a test on max_err.
Also, slightly relaxed the tests for reciprocal condition
numbers on Unix machines or for MATLAB releases larger than 13.
test_deadbeat, : slightly relaxed the tests on Unix machines or for MATLAB
test_fstoeq, releases larger than 13, and made some tests relative.
test_gsyscom, This is needed since the results could slightly differ if
test_gsystra, computed with different options.
test_Hessol,
test_polezero,
test_specfact,
test_TotalLS
test_fstoeq : replaced the tolerance value with a slightly larger one,
related to the machine accuracy (10*sqrt( eps )).
test_genleq : slightly increased the tolerance for testing slgely.
test_gsystra : the tests on B and C for task = 0 (balancing) are done
only if specified by flag(1).
test_Hameig.m : splitted up the command starting in line 127 in two equivalent
commands, to avoid an error occuring in MATLAB 7.0.4
("Nesting of {, [, and ( cannot exceed a depth of 32.").
test_Hnorm, : relaxed one and four tests, respectively, which formerly
test_sysfconn compared the error to 0. The corresponding tolerance in
test_sysfconn is set to 5*eps. Replaced eps = 1 by err = 1
in test_Hnorm.
test_Kfiltupd : added code to test the new M-files (convKf, srcf, and srif).
test_pass : error messages printing "Failed: ", together with the
corresponding error number were added, and the fixed
poles were removed from the comparisons.
test_polezero : Added several new tests.
test_slimju : The results are no longer printed, and automatic testing
is used.
test_TotalLS : replaced p in the lines 282 and 404 by min( n, p ).
tLSfilt : replaced the call to "Givens" by a call to "givens",
to suppress the warning message concerning an
inexact name match.
Updated demonstrations M-files:
==============================
basicdemo : added two statements, disp('Press any key to continue') and
pause on.
def_Ntests : added global variables sz and sz2.
page_plot : used capital letters for SLICOT and MATLAB.
perfb_slgsst, : few minor changes in comments.
perfb_slgsly,
perfb_slstei,
perfb_sllyap,
perfb_slgest,
perfb_slgely,
perfb_slstly,
perfb_slstst
perf_slgesg, : introduced variable starting orders (sz and sz2) of the
perf_slgsst, matrices, depending on the computer speed (based on timing
perf_slgsly, matrix multiplication).
perf_slgest,
perf_slgely,
perf_slstst,
perf_slstly,
perf_slstei,
perf_sllyap,
perf_slsylv
perfb_slstly, : comparison is done with lyapchol and dlyapchol, respectively,
perfb_slstst, for MATLAB version larger than or equal to 7 (and to lyap and
perf_slstly, dlyap, for former versions).
perf_slstst
Updated dll files:
=================
All dll files have been updated. For Windows platforms, versions for
MATLAB 6.1, 6.5.1 (with optimized BLAS from MATLAB), and MATLAB 7.0.4 (idem)
are available. The names of these files start with dllfiles, and continue
with suffixes 61, 651, and 704, respectively. Versions for MATLAB 5.3 are
no longer available.
Updated zip-files:
=================
basic_demo.zip : replaced def_ntests by def_Ntests, for avoiding case
sensitivity problems on certain machines.
Replaced the name control of the main demo file by
basicdemo, since "control" is too common.
slident_demo.zip, : replaced the data files with corresponding mat files, for
wident_demo.zip reducing the disk space and the loading time.
Note: Demonstrations files are now available for MATLAB 6.1, 6.5.1 (with
optimized BLAS from MATLAB), and MATLAB 7.0.4 (idem). Consequently,
the names of the demonstration files have suffixes 61, 651, and 704,
respectively, added to the former names. Versions for MATLAB 5.3 are
no longer available.
Updated SLICOT web page files:
=============================
The SLICOT documentation files have been moved under a new, publicly
accessible directory, and all former links to these files have been
updated accordingly.
The Fortran and MATLAB contributed files have been moved under
new, publicly accessible directories.
The files of the large-scale model reduction benchmark collection have
been coppied on the SLICOT web site (new subdirectory bench-data,
under shared directory).
New M-files:
===========
Contents : added descriptions for the Unix MEX-files and M-files
included in the subdirectory SLdemos and in the
subdirectories F77 of SLTools and SLmex.
convKf : computes one recursion of the conventional Kalman filter
equations.
srcf : computes a combined measurement and time update of one
iteration of the time-varying or time-invariant Kalman
filter in the Square Root Covariance Form.
srif : computes a combined measurement and time update of one
iteration of the time-varying or time-invariant Kalman
filter in the Square Root Information Form.
gen_mex : generates all SLICOT-based executable MEX-functions for
a specific MATLAB release. (The former template batch
file gen_mex.bat for Windows platforms is no longer needed,
and it has been removed from subdirectory SLmex, together
with the object file dlamch.obj, which is now created by
the new gen_mex.m file.)
gen_mex77 : generates a restricted set of SLICOT-based executable
MEX-functions for a specific MATLAB release and a
Fortran 77 compiler.
slicot_demos : performs SLICOT-based MATLAB demonstrations.
slicot : help function for SLICOT M-files, stored in SLTools.
slicot77 : help function for SLICOT M-files, stored in SLTools/F77.
slicotdemos : help function for SLICOT-based MATLAB demonstrations.
slicotmex : help function for SLICOT MEX-files, stored in SLTools.
slicotmex77 : help function for SLICOT MEX-files, stored in SLTools/F77
(for Unix platforms).
slstart : adds the SLICOT-based MATLAB directories to the search path.
test_all : performs all tests for the SLICOT-based M- and MEX-functions.
test_allr : performs all tests for the SLICOT-based M- and MEX-functions,
enabling to obtain reproducible results on the same platform
and MATLAB version.
tex_wident : performs severall tests for the SLICOT-based executable
MEX-function wident (added to the SLTests subdirectory of
the SLTools directory).
New MAT-files:
=============
t1dhin.mat, : for quick testing the MEX-file dishin.
t2dhin.mat
t1hin.mat, : for quick testing the MEX-file conhin.
t2hin.mat
tclsdp.mat : for quick testing the MEX-file clsdp.
tdlsdp.mat : for quick testing the MEX-file dlsdp.
tmucomp.mat : for quick testing the MEX-file mucomp.
New demo files:
==============
modred_demo*.zip: contains all needed files to demonstrate some features
of the toolbox for model reduction. The suffix * is
61, 651, or 704.
Updated NICONET Web page files:
==============================
All NICONET/SLICOT Web page files have been updated.
The hyperlink "SLICOT software" now includes a link for downloading
the object library for 64 bits Itanium processors, under
Linux 2.4.21-251-itanium2-smp operating system.