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.