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