File Release4.History
=====================
This file contains a short description of the previous modifications
performed in the Release 4.0 of SLICOT Library since November 1999,
in reverse chronological order.
The latest changes are listed in the file Release.Notes. Both files
will be updated from time to time.
========================================================================
Update Jan. 05, 2005
Corrected Bugs:
==============
AB13DD : Used SAFMAX for TM if the pencil has too large eigenvalues.
Moved the statements for "Return if the lower bound is zero"
just before "Start the modified gamma iteration for the
Bruinsma-Steinbuch algorithm".
Set INFO = 4 if ITER > MAXIT.
AB13DX : Set the minimal workspace IWORK and CWORK to 0 and 1
if P = 0 or M = 0.
IB03AD : Replaced INFO by INFOL in the two calls of MD03AD in the
loop 10.
SB10ED : Replaced A by A - I in the call of SB10PD, since SB10PD
performs the corresponding tests for continuous-time systems.
Array A is modified internally, but it is restored on exit.
Made the Quick return conditions more restrictive, as needed.
In some cases, slightly reduced the size of IWORK.
Improvements:
============
SB08ED, : Replaced the scalar argument ALPHA by an array argument of
SB08FD length 2. The first entry contains the stability degree,
and the second entry contains the stability margin.
Previously, these entities have been equal.
Documentation:
=============
AB13DD : LCWORK can be 1 also if P = 0 or M = 0.
AB13DX : Added that A and B are changed (as previously mentioned)
only if M > 0 and P > 0.
If P = 0 or M = 0, the lengths of IWORK and CWORK may be 0
or 1, respectively.
SB08ED, : Updated for the changes in SB08ED and SB08FD (see above).
SB08FD
SB10ED : Replaced A by A - I in two formulas, and mentioned that the
array A is modified internally, but it is restored on exit.
In some cases, slightly reduced the size of IWORK.
Updated test programs:
=====================
TSB08ED, : Updated for the changes in SB08ED and SB08FD.
TSB08FD
Updated MEX-files:
=================
aresolc : set SEP = 0 if N = 0.
deadbeat : arrays V and IWORK are also allocated (minimally) for
ISTAIR = -1 and for ISTAIR = -2 and ISTAIR = 1, respectively;
array U is initialized to identity matrix if WithU = 0 and
ISTAIR = 0 or 1;
set INFO = 0 if SB06ND is not called (i.e., ISTAIR < 0);
printed INFO1, if INFO1 <> 0.
fstoep : set INFO = 0 if UPDATE is TRUE, but MB02DD is not called
(i.e., M = 0).
gsystra : set M = 0 and P = 0 for task = 3 and 2, respectively.
Deallocated IWORK if task = 5.
mucomp : replaced maximally allocated arrays with arrays allocated
exactly as needed. The former code, containing arrays with
sizes specified in PARAMETER statements did not work under
Linux with g95 Fortran compiler and MATLAB 14.
Removed the arrays DK and DT and used X instead.
Mentioned the limitations concerning the size of a real
block and the sum of sizes.
syscf : updated for the changes in SB08ED and SB08FD.
Updated M-files:
===============
cmpoles : replaced "cmppoles" (in comments) by "cmpoles".
gsystra : replaced "decresingly" (in comments) by "decreasingly".
mucomp : mentioned the limitations concerning the size of a real
block and the sum of sizes.
syscf : updated for the changes in SB08ED and SB08FD.
test_dlsdz : used tol = tole/10 for Unix machines, instead of 0.
Updated demonstrations M-files:
==============================
basicdemo : inserted a final command uiwait to force the user to close
this demo before exploring another demo.
Simplified the callback to the button "close".
cmp_red : changed the current directory to SLdemos (in order to use
the data files stored there), and finally restored the
initial working directory.
Saved the variable "saved" also when vars is empty.
Contents : replaced "slicot_demos" by "slicotdemos".
dex_wident, : replaced the statement
dex_widentc if exist( 'range' ) ~= 1 | isempty( range ),
by the code sequence
if exist( 'range' ) ~= 1,
range = 40;
elseif isempty( range ),
since "range" is already used in the Stats toolbox.
slicot_demos : the file was deleted, but its contents have been incorporated
in slicotdemos (moved from subdirectory SLTools in SLdemos).
slicotdemos : added the functionality of slicot_demos.
Added two tuning parameters (pause_duration and reproducible)
so that the user can adapt more easily the demos.
slmodred : deleted the reference to cmp_red, since now cmp_red is
called from slredemo.
slredemo : added a new demo function, comparing SLICOT and MATLAB
model reduction functions.
slwidemo5 : set n = size(sys.a,1); after calling slmoen4.
Replaced the file SEED.mat by Seed.mat.
========================================================================
Update April 14, 2004
Note: All updates have been saved in the compressed library files,
slicot.tar.gz and slicotPC.zip.
Corrected Bugs:
==============
MB01RD, : In the Quick return section, R is set also if N = 0.
MB01RU,
MB01RX
MB02CU : RNK is set to 0 when K = 0 and TYPEG = 'D'.
Array A2 is referenced instead of A1 at the second
DNRM2 call in loop 50.
MB02CV : Replaced F1(LEN,J) by F1(J,LEN) in line 639.
MB02FD : Added the term 4*K in the formula for the workspace
length.
MB02ID : Corrected the formula of optimal workspace in line 486
and performed slight code improvements.
MB02JD : Added the parameter tests P >= 0 and S >= 0.
MB02JX : Defined DWORK(2:3) and RNK for quick returns.
MB02KD : Before the Quick return section, C is set to 0, if BETA = 0.
Quick return is also performed if R = 0.
TB01PD : In the Quick return section, IWORK is set to 0.
TG01AD : Replaced B(I,J) by B(I,1) in statement 379.
TG01JD : Moved the initialization of INFRED before the test for
Quick return, to be used in all cases.
Several calls to DCOPY (most often with negative increments) have been
replaced with in-line FOR loops, to avoid possible overwritting when
using optimized BLAS libraries. Specifically, such changes have been
performed in the following routines and in the specified loops:
AB05MD, : Loops 10, 20, 30, and 40.
AB05PD,
AB05QD,
AB05RD
AB05ND : Loops 10, 30, and 40.
FB01SD : Loop 20.
FB01TD : Loop 30.
IB01MD : Loops 10, 380, and 390.
IB01ND : Loops 20 and 30.
Specifically, Z is set to an identity matrix if JOBZ = 'I',
and Z and TAU are set to zero matrix and vector, respectively,
if JOBF = 'I'.
IB03AD, : DCOPY before the first call of TF01MX.
IB03BD
MB02DD : Loop 40.
MB02MD : The call of DCOPY.
MB02ND : Loops 360 and 380.
MB05MD, : The call of DCOPY.
MB05MY
MD03BD : The last call of DCOPY.
NF01BP : The last call of DCOPY (in the line 641).
NF01BS : Loops 50, 100 (second DCOPY call) and 120 (second
DCOPY call).
SB01BD : All two calls of DCOPY.
SB01BX : All three calls of DCOPY.
SB03OT : The call of DCOPY in the line 477.
SG03BD : The call of DCOPY in the line 691 is made only if N > 1.
TB01VD : Loop 40. The call of DCOPY in the line 355 is made only
if L <> 2.
TB01VY : Loop 10.
TB04BV : Loop 70.
TB04BW : Loop 50.
All Fortran and Matlab tests have been redone using a library
version built with the debug option activated.
Several routines, listed below, have been changed in order to avoid
exceeding array bounds. While this could previously happen, no
writting action was actually performed, but just wrong references to
array elements in the calls. The changes also enabled to make
slight improvements of some codes (AB05ND, FB01RD, IB01MD,
IB01MY, MB01UW, SB02MU), see below.
AB01ND : The last call of DLASET (in line 425) is made only if
N >= IQR.
AB05MD : Quick return is now made if MAX( N, MIN( M1, P2 ) ) = 0.
The calls of DLACPY and DLASET containing references to
subarrays are made if the corresponding dimensions are
nonzero.
AB05OD : Quick return is now made if MAX( N, MIN( M, P1 ) ) = 0.
The calls of DLACPY and DGEMM containing references to
subarrays are made if the corresponding dimensions are
nonzero.
AB05PD, : Quick return is now made if MAX( MAX( N, MIN( M, P ) ) = 0.
AB05QD The calls of DLACPY and DLASET containing references to
subarrays are made if the corresponding dimensions are
nonzero.
AB07MD : Quick return is now made if MAX( N, MINMP ) = 0. The loops
10 and 20 are entered only if N > 0, and the loop 30 is
entered only if JOBD = 'D' and MIN( M, P) > 0.
AB08ND : The loop labelled 240 is rerun only if DINFZ > 0.
IB01RD : The call of DCOPY in line 439 is made only if N > 1.
MA02CD : N-1 was replaced by N-2 in the expressions for the
counter I in the loops 10 and 20.
MB02CD : The calls of MB02CY in lines 340, 397, 488, and 546 are done
only if N > I.
The calls of DTRSM in lines 277 and 425, and the calls of
DLACPY in lines 287, 380, 435, and 529 are made only
if N > 1.
MB02CU : All calls of DLARFG, DLARF, DROT, DAXPY, and DSCAL are
now made such that array bounds are not exceeded.
MB02CV : Defined LEN = MAX( N - K, 0 ), instead of LEN = N - K.
MB02CX : All calls of DLARFG and DLARF are now made such that
array bounds are not exceeded.
MB02CY : The two calls of DLASET are made only if Q > 1.
MB02DD : The first call of MB02CY in each of the loops 30 and 60
is made only if M > I. Also, the calls to DLACPY before
the loops 10 and 40 are made only if N > 1.
MB02ED : The first call of DGEMM in each of the loops 10 and 20
is made only if N > I. Also, when needed, certain calls
to DGEMM, DLACPY, and DTRSM are made only if N > 1.
MB02FD : The two calls of DTRSM are made only if N > 1.
MB02GD : The two calls of DTRSM are made only if NL > 1.
The call of DLASET in the line 340 is made only if I > 1.
MB02HD : The call of DLASET in the line 364 is made only if
LENR < N*L and I > 1.
MB02JX : The calls of DLASET, DLACPY, MA02AD, and MB02KD are
now made such that array bounds are not exceeded.
MB02ND : The call of DLASET in the line 504 is made only if NL > 1.
MB02UV : Before the loop 100, DSCAL and DGER are called only if N > 1.
MB03VY : The call of DORGQR in line 183 is made only if NH > 1.
TB01XD : The transposition of D was moved before the Quick return
section, so that D is modified even if N = 0.
N-1 was replaced by N-2 in the expressions for the
counter J in the loops 20 and 30.
TB01YD : The call of DSWAP after the loop 10 is made if N is odd
and N > 2.
Note: In many cases, there were no indication of errors, but the
mentioned changes increase the reliability.
Slight improvements:
===================
AB05ND : The loop 20 (containing a call of DCOPY with negative
increments) has been replaced with a call to DLACPY from
a copy of the matrix C. The IF THEN ELSE clauses have
been modified accordingly.
FB01RD : The negative increments in the DCOPY call in loop 20 have
been replaced by 1.
IB01MD : The counter J of loop 10 now starts with 2.
IB01MY : The counter I of loop 10 now starts with 2, and the negative
increments in the DCOPY call have been replaced by 1.
MB01UW : The cases M = 1 and SIDE = 'L' or N = 1 and SIDE = 'R' are
now solved by calling DSCAL and RETURN.
SB02MU : The loops 280 and 320 have been rewritten, by separating the
cases UPLO = 'U' and UPLO = 'L'; each case has now its own
loop, executed N-1 times, and the remaining DCOPY call is done
outside the loop.
Documentation:
=============
MB02CV, : Minor changes.
MB02CX,
MB02GD,
MB02HD,
MB02JD,
MB02JX,
MB02KD
MB02FD : Added the term 4*K in the formula for the workspace
length.
TG01ID : Replaced the first occurrence of E(1,1) in (1) by E(1,2),
and similarly replaced the first occurrence of A(1,1) in (3)
by A(1,2).
TG01JD : Replaced Hessenebrg by Hessenberg in line 90.
Updated mex-files:
=================
gsyscom.f, : The calls of DCOPY with negative increments have been
invert.f, replaced by suitable FOR loops.
sysconn.f,
TotalLS.f
Updated m-files:
===============
Contents.m : added descriptions for the new mexfiles and m-files.
test_persch : modified the tests when only the eigenvalues between
ilo and ihi are computed (for given argument index).
test_polezero : modified the tests for defining Znrm in lines 772, 773,
and those for Pnrm in lines 835, 836, to avoid the
warning "Future versions will return empty for
empty == scalar comparisons" in MATLAB version 6.1.
New mexfiles:
============
muHopt.f : computes the mu optimal or H_inf controller.
New m-files:
===========
muHopt.m : help function for the mexfile muHopt.f.
slihinf.m : computes the H_inf optimal controller given a state
space model.
slimju.m : computes the mu optimal controller given a state space
model. Also, computes the mu norm of the closed loop system.
test_slimju.m : test for slimju.m.
========================================================================
Update January 3, 2004
Note: All updates have been saved in the compressed library files
slicotPC.zip and slicot.tar.gz. Moreover, the files update.zip and
update.tar.gz contain the updated and new files.
Corrected Bugs:
==============
AB01ND : Set Z, TAU, and DWORK(1) in the Quick return part if N > 0.
Specifically, Z is set to an identity matrix if JOBZ = 'I',
and Z and TAU are set to zero matrix and vector, respectively,
if JOBF = 'I'.
AB01OD : Set U, V, and DWORK(1) in the Quick return part, if needed.
AB08MD : Set DINFZ to 0 before Quick return, and made a quick return
if MIN( M, P ) is 0, in addition to N = 0. As consequences,
the calls of DLACPY and TB01ID are made only if NN and PP
are nonzero.
The loop labelled 240 is entered only if N > 0.
AB08ND : Replaced DWORK(NP*M+NP+1) by DWORK(NP*M+N+1) in the call of TB01ID.
AB09JV, : The calls of DTGSYL and DTRSYL are now made only if N > 0.
AB09JW
FB01QD : A Quick return is now made if N = 0.
FB01RD : A Quick return is now made if N = 0.
The routine now also works for P > N.
Replaced N-P-1 by MAX( N-P-1, 0 ) in the MB04JD call.
FB01SD, : A Quick return is now made if MAX( N, P ) = 0, and a return
FB01TD is made before applying the transformations to the last column
of the pre-array, if N = 0.
X is also suitably set when JOBX = 'N'.
FB01TD : The routine now also works for M > N.
Replaced N-MP1 by MAX( N-MP1, 0 ) in the MB04ID call.
FB01VD : A Quick return is now made if MAX( N, L ) = 0.
MB02MD : Quick return is now done if min( M, N+L ) = 0, and, if M = 0,
C is set to an identity matrix and X to a zero matrix.
Another return is added after the loop 40 if L = 0.
Also, the WHILE loop 80 is entered only if RANK < min( M, N+L ).
MB02ND : Quick return is now done if min( M, N+L ) = 0, and, if M = 0,
C is set to an identity matrix, X to a zero matrix, and INUL
is set to .TRUE.. The definition of the variable SUFWRK was slightly
changed. Another return is made before starting STEP 4 if L = 0.
MB03MD : Added the statement
IF ( N.EQ.1 ) RETURN
after the line calling the function MB03MY.
SB08CD, : Replaced the arguments involving NQ-1 in the call of TB01XD by
SB08ED MAX( 0, NQ-1 ).
SB10MD : Replaced LORD by ORD in the second call of TB05AD (19-th
argument).
SB10YD : Replaced TOL by TOLL in the two calls of DGELSY.
SG03BX : Replaced the in-line calculation of the eigenvalues of the 2-by-2
pencil A - lambda * E by a call to LAPACK Library routine DLAG2.
Fixed a bug in the normalization of the (2,2) entry of the
upper triangular factor in the QR factorization of B.
TB01UD : Set FNRM to ONE if FNRM < TOLDEF.
Z and TAU are now set when M = 0, but N > 0 (Quick return).
Replaced MAX( 1, ITAU-1 ) by ITAU-1 in the call of DORGQR, for
getting a correct transformation matrix when B is negligible.
TB01ZD : Set TAU(1) = ZERO if N = 0 (line 324).
TB05AD : The Quick return is now done if N = 0 and G is then set to
the complex zero matrix when MIN( M, P ) > 0.
DSWAP and DSCAL are now called only if M > 0 or P > 0.
TG01HX : Set SVLMAX to ONE if SVLMAX < RCOND.
Improvements:
============
FB01RD : The routine now also works for P > N.
FB01TD : The routine now also works for M > N.
MB02ND : The necessary workspace length was somewhat reduced.
SB06ND : The code was slightly changed to allow the computation of
the minimum norm feedback matrix also when the uncontrollable
part of the system is zero.
Documentation:
=============
AB08ND : Replaced N+1 by MAX(N,M)+1 and MAX(N,P)+1 for the dimensions
of the arrays KRONR and KRONL, respectively, to allow dealing
with with systems with more inputs/outputs than states.
FB01QD, : Updated the statement about the content of K when JOBK = 'N',
FB01RD or JOBK = 'K' and INFO = 1.
FB01SD, : Added the term "innovation" in the statement about the
FB01TD content of QINV on exit.
FB01VD : Replaced "discrete algebraic Riccati" by "discrete-time
difference Riccati".
MB02MD : The columns N+L-RANK : N+L of C on exit contain the
transformed right singular vectors of C, modified
as described in Step 3 of the TLS algorithm, if RANK > 0
and L > 0. Otherwise, the right singular vectors are
not transformed.
MB02ND : The right singular vectors corresponding to the small singular
values of C are transformed as described in Step 4 of the PTLS
and L > 0. Otherwise, the right singular vectors are not
transformed.
The formula for the necessary workspace length was somewhat
reduced.
Updated m-files:
===============
Contents.m : added descriptions for the new mexfiles and m-files.
New mexfiles:
============
cfsys.f : constructs the state-space representation of a system from
the factors of its left or right coprime factorization.
deadbeat.f : constructs the minimum norm feedback matrix performing
"deadbeat control" on an (A,B)-pair.
Kfiltupd.f : computes a combined measurement and time update of one
iteration of the Kalman filter.
polezero.f : computes the normal rank, poles, zeros, and the Kronecker
structure of the system pencil for a standard or descriptor
system.
specfact.f : computes the spectral factorization of a real polynomial.
TotalLS.f : solves the Total Least Squares (TLS) problem using a
singular value decomposition (SVD) approach or a Partial
SVD (PSVD) approach.
New m-files:
===========
cfsys.m : help function for the mexfile cfsys.f.
cf2ss.m : constructs the state-space representation of a system from
the factors of its left or right coprime factorization.
test_cfsys.m : test for cfsys.f and cf2ss.m.
deadbeat.m : help function for the mexfile deadbeat.f.
ckstair.m : checks that a system is in a staircase form.
deadbt.m : constructs the minimum norm feedback matrix performing
"deadbeat control" on a system.
test_ckstair.m : test for ckstair.m.
test_deadbeat.m: test for deadbeat.f and deadbt.m.
Kfiltupd.m : help function for the mexfile Kfiltupd.f.
tLSfilt.m : computes a combined measurement and time update of
the recursive least-squares filter. It is intended
for testing the gateway Kfiltupd for task = 3.
test_Kfiltupd.m: test for Kfiltupd.f.
polezero.m : help function for the mexfile polezero.f.
nrank.m : computes the normal rank of the transfer-function matrix
of a standard system.
polzer.m : computes the normal rank, poles, zeros, and the Kronecker
structure of the system pencil for a standard or descriptor
system.
slpole.m : computes the poles of a standard or descriptor system.
slzero.m : computes the normal rank, zeros, and the Kronecker
structure of the system pencil for a standard or descriptor
system.
test_polezero.m: test for polezero.f and the associated M-files.
specfact.m : help function for the mexfile specfact.f.
polysf.m : computes the spectral factorization of a real polynomial.
test_specfact.m: test for specfact.f and polysf.m.
TotalLS.m : help function for the mexfile deadbeat.f
TLS.m : solves the TLS problem using a SVD or partial SVD
approach.
housh.m : computes a Householder transformation which modifies
one element of a vector and annihilates all other
elements.
test_TotalLS.m : test for TotalLS.f and associated M-files.
========================================================================
Update September 5, 2003
Note: All updates have been saved in the compressed library files,
slicot.tar.gz and slicotPC.zip.
Corrected Bugs:
==============
AB05MD, : Added new tests for dealing with matrices with zero dimensions,
AB05ND, and to ensure that LDC (or LDCx) is 1 when N (or Nx) is 0.
AB05OD, Details are given below.
AB05PD
AB05MD : Replaced C(I1,1) by C(1,I1) in a DGEMM call (in the line 491).
Replaced I1 = N2 + 1 by I1 = MIN( N2 + 1, N ), and similarly
for I2.
Added tests IF ( N1.GT.0 ) when forming the off-diagonal
blocks of matrix A, and when forming C.
AB05ND : For OVER = 'O', increased the workspace by N1*P1 (to save C1,
which otherwise is overwritten by part of C), and replaced
M1*M1 by M1*(M1+1), if M1 > N*N2.
The BLAS 2 code in the loop labelled 30 is used for M1 <= N*N2,
and another loop with additional M1 workspace is used for M1 > N*N2.
Replaced the second ONE by ZERO in the DGEMV call before the
label 30.
The statements containing references to rows/columns indexed N1+1
are not executed if N2 = 0.
Added tests IF ( N1.GT.0 ), IF ( N2.GT.0 ), IF ( M1.GT.0 ),
or IF ( P1.GT.0 ) whenever needed. Added some code to avoid
overwritting parts of A and B if OVER = 'O'.
AB05OD, Added the test N.GT.0 for the DLASCL call for C.
AB05PD
AB05RD : The two DGEMM calls for computing Ac and C1 using K are
executed only for BETA.NE.0 and N.GT.0.
The DGEMM call for computing Cc is executed only for N.GT.0.
AB05SD : The first DGETRS call is executed only if N.GT.0.
After the calculation of Cc and Dc, the routine returns
if N = 0.
The last DGEMM call is executed only if JOBD = 'D'.
AB13DD : The bugs in applying the permutations for the balancing
transformations on B and C have been fixed. In particular,
LAPACK routines DGGBAK and DGEBAK cannot be used.
MB05MD, : The backward transformation of the eigenvectors for
MB05MY balancing (when BALANC = 'S') was moved from MB05MY to
MB05MD, since it must be done after premultiplication with
the orthogonal matrix performing the reduction to real Schur
form. The scaling is also used when computing the inverse
of the matrix V. The scaling factors are stored in DWORK(2),
..., DWORK(N+1).
MB05OD : RERL is set to 0 when SIZE <= EMNORM.
SB01BD : Added few suitable statements after the call of SB01BY,
when a simple 1x1 block is uncontrollable.
SB01BY : If R is 0, it is reset to EPSM, the machine accuracy, to avoid
a division by 0. If Y in the loop 10 is 0, then the loop is
exited, for the same reason.
SB08CD, : Replaced MIN( N, M, P ).EQ.0 by MIN( N, P ).EQ.0 in the
SB08ED Quick return part. That is, if M = 0, but MIN( N, P ) > 0,
the calculation continues appropriately, delivering the
result for a system (A,C).
SB08DD, : Replaced MIN( N, M, P ).EQ.0 by MIN( N, M ).EQ.0 in the
SB08FD Quick return part. That is, if P = 0, but MIN( N, M ) > 0,
the calculation continues appropriately, delivering the
result for a system (A,B).
SB08FD : INFO on exit from SB01BY is now checked, since, due to
roundoff, an uncontrollable 2x2 block could appear, which
actually corresponds to a double real eigenvalue; one
eigenvalue is then eliminated, and the procedure restarted.
Such a block wasn't previously removed.
SB10LD : replaced NP2 by M2 in the penultimate call of DGEMM
(bug found by A. Markovski).
SG03BX : Added the statement INFO = 0. (Proposed by Klaus Schnepper.)
TF01MD, : The computation of the output vectors when n = 0 (non-dynamic
TF01ND system case) was made correct.
TG01AD : LSCALE or RSCALE is set to 1 if L > 0 but N = 0, or L = 0
but N > 0, respectively. (Quick return sequence.)
TG01CD : The call of DORMQR for updating B is made only if M > 0.
TG01AD, : The calling statements containing indexed references to the
TG01ED, arrays B and/or C are now not executed if M = 0 and/or P = 0,
TG01FD, so that B and/or C can have 0 length.
TG01HX
TG01ID : Added the statement
IF ( P.EQ.0 .OR. NR.EQ.0 ) LBE = MAX( 0, N - 1 )
before the last call of TB01XD.
TG01JD : The leading dimensions N, M, and P in the calls of DLACPY have
been replaced by MAX(1,N), MAX(1,M), and MAX(1,P), respectively.
The leading dimension LDC has been replaced by MAX( LDC, P )
in the call of TG01AD and the first two calls of TG01HX, and
by MAX( LDC, M ) in the last two calls of TG01HX. This is needed
for N = 0.
INFRED has been set for Quick return.
Improvements:
============
MB03RD : - Two new options, SORT = 'C' and SORT = 'B' have been added,
which allow a "closest-neighbour" strategy to be used for
selecting the block to be added to the current block for
block diagonalization. The previous options SORT = 'N' and
SORT = 'S' use the "closest to the mean" strategy. The new
strategy often performs block-diagonalization when the old
strategy does not succeed, and/or produces better conditioned
transformations. The closest-neighbour strategy was
suggested by Pascal Gahinet.
- Quick return (for N = 0) has been included.
New Routines:
============
SB10AD : to compute the matrices of an H-infinity optimal n-state
controller, using modified Glover's and Doyle's 1988 formulas.
SB10MD : to perform the D-step in the D-K iteration (continuous-time
case).
SB10YD : to fit a supplied frequency response data with a stable, minimum
phase SISO (single-input single-output) system represented by its
matrices A, B, C, D.
SB10ZP : to transform a SISO system [A,B;C,D] by mirroring its unstable
poles and zeros in the boundary of the stability domain, thus
preserving the frequency response of the system, but making it
stable and minimum phase.
Documentation:
=============
AB05ND : For OVER = 'O', increased the workspace by N1*P1, and
replaced M1*M1 by M1*(M1+1), if M1 > N*N2.
MB03RD : Two new options, SORT = 'C' and SORT = 'B' have been added,
which allow a "closest-neighbour" strategy to be used for
selecting the block to be added to the current block.
MB05MD, : Few changes mainly due to moving the backward transformation
MB05MY of the eigenvectors for balancing (when BALANC = 'S'), see
above.
TB05AD : Replaced "If BALEIG = 'B' or 'E' or BALEIG = 'A'" by
"INITA = 'G'" in the description of A, B, and C (on exit).
TG01JD : Replaced "INDRED(7)" by "INFRED(7)" in the description of
IWORK.
The title texts for Phases 1 to 4 (METHOD) now mention that
"all" corresponding eigenvalues are eliminated.
libindex, : added links to the new document files.
support
Updated M-files:
===============
Contents.m : added descriptions for the new MEX-files and M-files.
Mentioned that sparse matrix format is not currently
supported.
slH2norm.m, : replaced the test "if Ts > 0" by "if Ts ~= 0", to
slHknorm.m, allow dealing with discrete-time ss systems with
slinorm.m unspecified sampling time.
test_aresol.m, : deleted the commands "clear all" since it appears to
test_aresolc.m, suspend the execution of MATLAB 6.1, and to avoid
test_conred.m, destroying the user data.
test_genleq.m,
test_linmeq.m,
test_syscf.m,
test_syscom.m,
test_sysred.m,
test_sysred_tools.m,
test_systra.m
test_datana.m, : deleted the commands "clear variables" to avoid
test_Hessol.m, destroying the user data.
test_Hnorm.m
test_dsim.m : set "warning off" before the loop for comparison with
lsim, to suppress warnings produced by MATLAB 6.5
\toolbox\control\ctrlguis\rfinputs and lsim, and
set "warning on" after the loop.
test_linorm.m : replaced the command "E = eye(n);" by "E = [];" for
testing this new option (for standard systems).
Updated MEX-files:
=================
linorm.f : Standard systems (with E an identity matrix) may now be
defined by setting E as an empty matrix (i.e., with 0 rows
and/or columns), to reduce the memory requirements.
syscf.f : The routine names SB08AD and SB08BD in two error messages
have been replaced with the correct ones (SB08ED and
SB08FD, respectively).
New MEX-files:
============
bldiag.f : performs block-diagonalization of a general matrix or a
matrix in real Schur form.
condis.f : performs a transformation on the parameters (A,B,C,D) of a
system, which is equivalent to a bilinear transformation
of the corresponding transfer function matrix.
gsyscom.f : transforms a descriptor system, by equivalence
transformations, to a controllable or observable staircase
form, or to a reduced (controllable, observable, or
irreducible) form.
gsystra.f : performs various equivalence transformations for descriptor
systems with scaling, generalized Schur form, etc.
invert.f : computes the dual or inverse of a linear (descriptor) system.
ldsimt.f : computes the output response of a linear discrete-time
system. The input and output trajectories are stored
column-wise (each column contains all inputs or outputs
measured at a certain time instant).
slmexp.f : computes the matrix exponential and optionally its integral.
sysconn.f : computes a state-space model (A,B,C,D) for various
inter-connections of two systems given in state-space form.
sysfconn.f : computes, for a given state-space system (A,B,C,D), the
closed-loop system (Ac,Bc,Cc,Dc) corresponding to the output,
or mixed output and state, feedback control law.
New M-files:
===========
bldiag.m : help function for the MEX-file bldiag.f.
bdiag.m : block diagonalization of a general matrix or a
matrix in real Schur form.
test_bldiag.m : test for bldiag.f and bdiag.m.
condis.m : help function for the MEX-file condis.f.
slc2d.m : bilinear transformation of a continuous-time system
to a discrete-time system.
sld2c.m : bilinear transformation of a discrete-time system
to a continuous-time system.
test_condis.m : test for condis.f and associated M-files.
gsyscom.m : help function for the MEX-file gsyscom.f.
slgconf.m : reduces a descriptor system to controllable staircase
form.
slgobsf.m : reduces a descriptor system to observable staircase
form.
slgminr.m : reduces a descriptor system to an irreducible form.
test_gsyscom.m : test for gsyscom.f and associated M-files.
gsystra.m : help function for the MEX-file gsystra.f.
slgsbal.m : balances the system matrix for a descriptor system.
slgsHes.m : transforms the pair (A,E) of a descriptor system to a
generalized Hessenberg form.
slgsQRQ.m : transforms the pair (A,E) of a descriptor system to a
QR- or RQ-coordinate form.
slgsrsf.m : transforms the pair (A,E) of a descriptor system to a
real generalized Schur form.
slgsSVD.m : transforms the pair (A,E) of a descriptor system to a
singular value decomposition (SVD) or SVD-like coordinate
form.
test_gsystra.m : test for gsystra.f and associated M-files.
invert.m : help function for the MEX-file invert.f.
sldual.m : computes the dual of a standard system.
slinv.m : computes the inverse of a standard system.
test_invert.m : test for invert.f and associated M-files.
ldsimt.m : help function for the MEX-file ldsimt.f.
dsimt.m : computes the output response of a linear discrete-time
system. The trajectories are stored column-wise.
test_ldsimt.m : test for ldsimt.f and dsimt.m.
slmexp.m : help function for the MEX-file slmexp.f.
slexpe.m : computes the matrix exponential basically using an
eigenvalue/eigenvector decomposition technique, but
a diagonal Pade approximant with scaling and squaring,
if the matrix appears to be defective.
slexpm.m : computes the matrix exponential using a diagonal Pade
approximant with scaling and squaring.
slexpi.m : computes the matrix exponential and optionally its
integral, using a Pade approximation of the integral.
test_slmexp.m : test for slmexp.f and associated M-files.
sysconn.m : help function for the MEX-file sysconn.f.
slapp.m : appends two systems in state-space form.
slfeed.m : feedback inter-connection of two systems in
state-space form.
slpar.m : parallel inter-connection of two systems in
state-space form.
slser.m : series inter-connection of two systems in
state-space form.
slspar.m : rowwise inter-connection of two systems in
state-space form.
test_sysconn.m : test for sysconn.f and associated M-files.
sysfconn.m : help function for the MEX-file sysfconn.f.
slosfeed.m : closed-loop system for a mixed output and state
feedback control law.
slofeed.m : closed-loop system for an output feedback
control law.
test_sysfconn.m: test for sysfconn.f and associated M-files.
========================================================================
Update March 27, 2003
Note: All updates have been saved in the compressed library files,
slicot.tar.gz and slicotPC.zip.
Corrected Bugs:
==============
AB13BD : recomputed the Frobenius norm of D if NR.GT.0.
AB13ED : set LOW and HIGH also for N = 0.
AB13FD : set BETA and OMEGA also for N = 0.
DF01MD : works for N >= 5 (not 3, as assumed before).
MA02HD : replaced
IF ( J.NE.M ) THEN
by
IF ( J.LT.M ) THEN
before the loop labelled 60.
MB03SD : removed the values JOBSCL = 'P' and 'B', for which the
Hessenberg form of the matrix A'' would not be preserved.
Annihilated the lower triangle below the Hessenberg form
when JOBSCL = 'S'.
Improved efficiency by using BLAS 3 calls to DSYMM as much
as possible.
SB03QD, : replaced the first two occurrences of IF( UPDATE ) THEN by
SB03SD IF( NOFACT .OR. UPDATE ) THEN.
SB10SD : redefined IWRK = IWV + N*N before the second call of SB02SD.
Improvements:
============
SB02MD : the scaling factor used is now returned in DWORK(2).
(The reciprocal condition number of the matrix A is
returned in DWORK(3) in the discrete-time case.)
SB02OD : - Internal scaling has been incorporated, to increase accuracy
and reliability for poorly scaled equations.
- The natural tendency of the QZ algorithm to get the largest
eigenvalues in the leading part of the matrix pencil is
exploited for discrete-time Riccati equations, by computing
the unstable eigenvalues of the permuted matrix pencil.
- A standard eigenproblem is solved for continuous-time equations
when G is given (JOBB = 'G').
SB02OY : the second matrix is not built (and memory is saved) for
continuous-time problems with G given and identity E matrix,
since a standard eigenproblem is solved in this case.
SB02RD : if JOB = 'X', the scaling factor used is now returned in SEP.
SG02AD : the natural tendency of the QZ algorithm to get the largest
eigenvalues in the leading part of the matrix pencil is
exploited for discrete-time Riccati equations, by computing
the unstable eigenvalues of the permuted matrix pencil.
Documentation:
=============
DF01MD : works for N >= 5 (not 3, as assumed before).
MB03SD : removed the values JOBSCL = 'P' and 'B', for which the
Hessenberg Schur form of the matrix A' would not be
preserved.
SB02MD : the scaling factor used is now returned in DWORK(2).
(The reciprocal condition number of the matrix A is
returned in DWORK(3) in the discrete-time case.)
SB02OD : if JOBB = 'B', mentioned that the arrays Q, R, and L are
modified internally, but are restored on exit.
DWORK(3) returns the scaling factor used internally.
SB02OY : the second matrix is not built (and memory is saved) for
continuous-time problems with G given and identity E matrix,
since a standard eigenproblem is solved in this case.
SB02RD : the scaling factor used is now returned in SEP.
SG02AD : DWORK(4) is always set to the scaling factor (or to 1, when
scaling is not used).
DAESolver,: added documentation files for these SLICOT interfaces to
ODESolver, various solvers.
FSQP,
KINSOL
libindex : added links to the new document files.
Updated m-files:
===============
Contents.m : added descriptions for the new mexfiles and m-files.
slcaregs.m, : updated X2 for the scaling factor used.
slcares.m,
slcaresc.m,
sldaregs.m,
sldaregsv.m,
sldares.m,
sldaresc.m
test_aresol.m, : updated some tests for the scaling factor used. Also, non-zero
test_aresolc.m coupling matrix L is now used.
Updated mex-files:
=================
aresol.f, : updated for changes in SB02MD, SB02OD, and/or SB02RD.
aresolc.f The scaling factor used is now returned when a basis
for the stable subspace is computed.
Updated files for MATLAB 6.5:
============================
bst.m, : files on the left have been updated by changing
bta.m, a command like
btabal.m, discr = sys.ts > 0;
btabal_cf.m, to
bta_cf.m, discr = double(sys.ts > 0);
cfconred.m, since MATLAB 6.5 assumes discr to be a logical array,
fwbconred.m, and this is not accepted by the called mex-files.
fwbred.m, These changes are also valid for MATLAB 5.3 and 6.1.
fwhna.m,
hna.m,
lcf.m,
lcfid.m,
rcf.m,
rcfid.m,
spa.m,
spabal.m,
spabal_cf.m,
spa_cf.m,
test_conred.m
All SLICOT test functions for SLICOT mex-files and m-files have been
run under MATLAB 6.5, and the changed funtions re-checked under
MATLAB 5.3 and 6.1.
Executable mex-files for MATLAB 6.5 on Windows platforms have been
generated and made available on the SLICOT ftp site (file
dllfiles65.zip, subdirectory SLTools). These mex-files are
significantly smaller than the corresponding MATLAB 6.1 mex-files.
Updated zip-files:
=================
basic_mex.zip : updated for the changes performed.
modred_mex.zip,
data_mex.zip : new .zip file for data analysis calculations.
conred_mex.zip : now includes help functions for bstred, conred,
fwehna, fwered, and sfored mex-files.
Replaced the files bstred.dll and conred.mat from
the archive in subdirectory SLToolboxes5 by their
Matlab 5.3 versions. Now, the included tests are
also working under Matlab 5.3.
hinf_mex.zip : updated for the changes performed (updated dishin,
dlsdp, dlsdz).
New mexfiles:
============
arecond.f : estimates condition and forward errors for Lyapunov and
algebraic Riccati equations.
garesol.f : solves descriptor algebraic Riccati equations.
datana.f : performs various transforms of real or complex vectors
(data analysis calculations).
Hessol.f : performs analysis and solution of a system of linear
equations with an upper Hessenberg coefficient matrix.
Hnorm.f : computes various system norms (Hankel norm, H2 norm) and
complex stability radius.
Hamileig.f : computes the eigenvalues of a Hamiltonian matrix using the
square-reduced approach.
New m-files:
===========
arecond.m : help function for the the mexfile arecond.f.
carecond.m : reciprocal condition number of a continuous-time
algebraic Riccati equation.
darecond.m : reciprocal condition number of a discrete-time
algebraic Riccati equation.
lyapcond.m : reciprocal condition number of a Lyapunov equation.
steicond.m : reciprocal condition number of a Stein equation.
test_arecond.m : test for arecond.f and associated M-files.
garesol.m : help function for the the mexfile garesol.f.
slgcare.m : solution of a descriptor continuous-time algebraic
Riccati equation.
slgdare.m : solution of a descriptor discrete-time algebraic
Riccati equation.
test_garesol.m : test for garesol.f and associated M-files.
cndclyap.m, : auxiliary test files for test_garesol.m.
cnddlyap.m,
cndricc.m,
cndricd.m
datana.m : help function for the the mexfile datana.f.
sincos.m : sine or cosine transform of a real signal.
slDFT.m : discrete Fourier transform of a signal.
sliDFT.m : inverse discrete Fourier transform of a signal.
slHart.m : discrete Hartley transform of a real signal.
slconv.m : convolution of two real signals using either FFT or
Hartley transform.
sldeconv.m : deconvolution of two real signals using either FFT or
Hartley transform.
slwindow.m : anti-aliasing window applied to a real signal.
test_datana.m : test for datana.f (via the M-files).
sncs.m : auxiliary test file for sincos.m.
Hessol.m : help function for the the mexfile Hessol.f.
Hesscond.m : computes an estimate of the reciprocal of the condition
number of an upper Hessenberg matrix.
Hessl.m : solves a set of systems of linear equations with an
upper Hessenberg coefficient matrix.
test_Hessol.m : test for Hessl.m and Hessol.f.
Hnorm.m : help function for the the mexfile Hnorm.f.
slH2norm.m : computes H2/L2 norm of a system.
slHknorm.m : computes Hankel-norm of a stable projection of a system.
slstabr.m : computes complex stability radius.
test_Hnorm.m : test for slH2norm.m, slHknorm.m, slstabr.m, and Hnorm.f.
Hamileig.m : help function for the the mexfile Hamileig.f.
Hameig.m : computes the eigenvalues of a Hamiltonian matrix.
test_Hameig.m : test for Hameig.m and Hamileig.f.
bstred.m, : help functions for the corresponding mexfiles.
conred.m,
fwehna.m,
fwered.m,
sfored.m
New contributed files:
=====================
munorm.m : mu-norm computation file wrote by Craig T. Lawrence and
Andre L. Tits.
test_scalar.m, : test files for munorm.
test_mixed.m,
test_complex.m
robpole.m, : robust pole assignment codes by Y. Yang and
complex_pair.m, Andre L. Tits. The underlying algorithm is somewhat
one_column.m, faster than the algorithm due to Kautsky, Nichols and
real_pair.m Van Dooren (1985), and it can handle complex prescribed
eigenvalues.
========================================================================
Update October 1, 2002
Corrected Bugs:
==============
MB02CU : the calls to DLARF and DROT in the loops 100, 120, 130,
and 150 are made only if K.GT.J. Similarly, the calls
to DSCAL and DAXPY in the loops 130 and 150.
MB02HD : the conditions on ML and NU were set in a way so that
the first MIN(M*K,N*L) columns of T generically have
full rank.
Checked the added conditions on ML and NU.
Replaced "MIN( I-1, N )*L," by "MIN( I-1, N-1 )*L," in
the first DGEMM call in the loop 20.
Replaced "LENR.LT.N*L" by "LENR.LT.MIN( ML+NU+1,N )*L" in
the test of the loop 40.
Added " .AND. J.GT.1" in the test of the loop 80.
MB02ID : replaced N*L by M*K (twice) in the DO 10 statement.
Replaced "LDB" by "LDC" in the second DGEMM call after
the label 40.
The calls to DGEMM for "Block Gaussian elimination to B"
and "Block Gaussian elimination to C" are made only if
LEN.GT.L.
Replaced "NB" by "RB" and "RC", respectively, in the two
calls of DTRMM.
MB02JD : The three calls to MB02KD are made only if N.GT.1.
The first MB02CV call is made only if LEN.GT.KK, and the
next DLACPY call is made only if M.GT.1.
Replaced the check of the bound on LDR (see section
"Documentation").
MB02JX : replaced "5*L" by "9*L" (twice) in the value of LDWORK.
The first two calls to MB02KD are made only if N.GT.1.
The DLACPY call after the label 70 is made only if N.GT.2.
Replaced "(M-1)*K" by "M*K" in a DLASET call after 90.
The first MB02CV call is made only if LEN.GT.KK.
The fifth argument in the two MB02CV calls was changed to PP.
The DLACPY call in the loop 170 is made only if LEN.GT.2*L.
Documentation:
=============
MB02HD : deleted the condition "M*K >= L" in the description of M.
Added new conditions in the description of ML and NU.
MB02JD : replaced MAX by MIN in the description of parameter R on
exit, the previous formula being
MAX( N*L,(N-P+1)*L )-by-MIN( S*L, MIN( M*K,N*L )-P*L )
and replaced accordingly the bound on LDR.
MB02JX : replaced "5*L" by "9*L" (twice) in the value of LDWORK.
SB10ZD : added the document file for this routine.
SG02AD : added comments related to the solution of the associated
optimal control problem when matrix R is singular.
libindex : added links to the new document files.
On-line HTML documentation files for SLICOT routines performing model
reduction on parallel computers, using either direct or iterative methods
have been made available on the SLICOT ftp site.
Updated m-files:
===============
Contents.m : added descriptions for the new mexfiles and m-files.
pass.m : if DISCR = 1, replaced ALPHA = Inf with ALPHA = 0
(in the help part).
persch.m : replaced
% [W,Z] = PERSCH(A,JOB,COMPZ,INDEX) with JOB = 0, or
by
% [AO,Z] = PERSCH(A,JOB,COMPZ,INDEX) with JOB = 0, or
(in the help part).
polass.m : if discr = 1, replaced alpha = Inf with alpha = 0
(second item in section Comments).
Updated mex-files:
=================
perschur.f : annihilated the elements of A(:,:,2:p) below the main
diagonal and of A(:,:,1) below the first subdiagonal
also for JOB = 0.
polass.f : if discr = 1, replaced alpha = Inf with alpha = 0
(second item in section Comments).
Also, replaced the use of DWORK for storing the number
of unmodified, assigned, and uncontrollable poles by TMP
(needed for N = M = 0).
New mexfiles:
============
fstoeq.f : computes an orthogonal-triangular/trapezoidal decomposition
(with partial column pivoting) of a (banded) block Toeplitz
matrix.
Executable Matlab 6.1 mexfiles have been generated for Sun Sparc-Solaris
and are stored in the compressed file mexsolfiles6.tar.gz, subdirectory
MatlabTools/Unix/SLTools of the SLICOT ftp site. The mexfiles fstoeq,
perschur and polass are not included. The available mexfiles have been
tested on a Sun sparc SUNW Ultra-2 (machine hardware sun4u,
OS version 5.8).
New m-files:
===========
SB10ZD.m : script called by test_dlsdz.m for testing SB10ZD.
btoeplitz2.m : generates general block Toeplitz matrices.
fstlsq.m : solves linear least-squares problems min(B-T*X) or finds
the minimum norm solution of T'*Y = C where T is a (block)
Toeplitz matrix with full column rank, given the first
block column and the first block row of T.
fstmul.m : computes the matrix-vector products X = T*B for a block
Toeplitz matrix T, given the first block column and the
first block row of T.
fstqr.m : computes the orthogonal-triangular decomposition of a
(block) Toeplitz matrix T and solves associated linear
least-squares problems, given the first block column
and the first block row of T, and assuming that the first
min(size(T)) columns of T have full rank.
test_fstoeq.m : test script for the fast solver for linear least-squares
problems involving an mxk-by-nxl (banded) block Toeplitz
matrix.
test_pass.m : script for testing the m-file pass and mexfile polass.
test_persch.m : script for testing the m-file persch and mexfile perschur.
New demo files:
==============
wident_demo.zip : contains all needed files to demonstrate some features
of the toolbox for Wiener system identification.
All previously available Matlab 5.3 demo files have been moved in a
subdirectory called SLdemos5, and new versions for Matlab 6.1 replaced
the existing files in the subdirectory SLdemos.
New directory:
=============
prebuilt : contains prebuilt SLICOT object library files. The following
files are currently included:
slicot_solaris77.tar.gz : containing slicot.a - object library file
for Sun sparc Ultra-2 machines, built using
Sun WorkShop Compiler FORTRAN 77 5.0.
slicot_solaris90.tar.gz : containing slicot.a - object library file
for Sun sparc Ultra-2 machines, built using
Sun WorkShop Compiler FORTRAN 90 2.0.
slicot_win32.zip : containing slicot.lib - object library file
for PC Windows 9x/NT/ME/2000 machines,
built using Compaq Visual Fortran 6.5.
slicot_linux77.tar.gz : containing slicot.a - object library file
for Red Hat Linux 7.2 machines,
built using Fortran 77.
========================================================================
Update June 29, 2002
Note: All updates have been saved in the compressed library files,
slicot.tar.gz and slicotPC.zip.
Corrected Bugs:
==============
AB13FD : replaced the statement
PARAMETER ( CONE = ( ONE, ZERO ),
$ RTMONE = ( ZERO, ONE ) )
by
PARAMETER ( CONE = ( 1.0D0, 0.0D0 ),
$ RTMONE = ( 0.0D0, 1.0D0 ) )
in order to avoid compilation errors on certain Fortran
compilers.
IB03AD, : replaced the statement
IB03BD IWARN = MAX( IWARN, 10*IWARNL )
by
IF ( IWARN.GT.100 ) THEN
IWARN = MAX( IWARN, ( IWARN/100 )*100 + 10*IWARNL )
ELSE
IWARN = MAX( IWARN, 10*IWARNL )
END IF
after calling the Levenberg-Marquardt routine(s) for
initialization of the nonlinear part.
MB03NY : replaced the statement
PARAMETER ( CONE = ( ONE, ZERO ) )
by
PARAMETER ( CONE = ( 1.0D0, 0.0D0 ) )
in order to avoid compilation errors on certain Fortran
compilers.
MC01OD : moved the statements
REP(1) = ONE
IMP(1) = ZERO
(previously placed before the DO statement) before the
return for K = 0. So, REP(1) and IMP(1) are now
initialized also when K = 0. This is not a bug, but more
convenient in usage.
MC01PD : moved the statement
P(1) = ONE
(previously placed before the commented WHILE statement)
before the return for K = 0. So, P(1) is now initialized
also when K = 0. This is not a bug, but more convenient
in usage.
SB02OD : replaced the statements
WRKOPT = U(1,1)
IF ( LJOBB ) RCONDL = U(2,1)
by
WRKOPT = DWORK(1)
IF ( LJOBB ) RCONDL = DWORK(2)
after the call of SB02OY.
New Routines:
============
MC01PY : to compute the coefficients of a real polynomial P(x) from its
zeros. The coefficients are stored in decreasing order of the
powers of x.
SG02AD : to solve either the continuous-time or discrete-time algebraic
Riccati equations for descriptor systems.
TB04BD : to compute the transfer function matrix G of a state-space
representation (A,B,C,D) of a linear time-invariant multivariable
system, using the pole-zeros method. Each element of the transfer
function matrix is returned in a cancelled, minimal form, with
numerator and denominator polynomials stored either in increasing
or decreasing order of the powers of the indeterminate.
TB04BV : to separate the strictly proper part from the constant part
of a proper transfer function matrix.
TB04BW : to compute the sum of an P-by-M rational matrix and a real
P-by-M matrix.
TB04BX : to compute the gain of a single-input single-output linear system,
given its state-space representation (A,b,c,d), and its poles and
zeros. The matrix A is assumed to be in an upper Hessenberg form.
TB04CD : to compute the transfer function matrix G of a state-space
representation (A,B,C,D) of a linear time-invariant multivariable
system, using the pole-zeros method. The transfer function matrix
is returned in a minimal pole-zero-gain form.
New test programs:
=================
TSG02AD : test program for SG02AD.f.
TTB04BD : test program for TB04BD.f.
TTB04CD : test program for TB04CD.f.
Documentation:
=============
MC01OD : replaced the phrase "If K = 0, these arrays are not referenced."
(in the description of the arguments REP, IMP) by "If K = 0,
then REP(1) is set to one and IMP(1) is set to zero.".
MC01PD : replaced the phrase "If K = 0, this array is not referenced."
(in the description of the argument P) by "If K = 0, then P(1)
is set to one.".
SB02OD : replaced "output" by "state" in the description of the argument Q.
Deleted the obsolete paragraph referring to LDWORK in section
FURTHER COMMENTS.
* : for user's and programmer's callable newly added routines.
libindex, : added links to the new document files.
support
support added links to MB02WD.html and MB02XD.html.
Updated m-files:
===============
Contents.m : included the description of the new mexfiles and m-files
(mainly for the Wiener System Identification Toolbox).
test_genleq : made the tolerance for slgesg 10^-8
(in the Basic Toolbox for standard and generalized state
space systems and transfer matrix factorizations).
Updated NICONET web page files:
==============================
The files describing Tasks I.A, III.A, III.B, and IV.A have been updated.
New mexfiles:
============
polass.f : performs (partial) pole assignment.
perschur.f : computes the periodic Hessenberg or periodic Schur decomposition
of a matrix product.
New m-files:
===========
pass.m : performs (partial) pole assignment (calling polass).
persch.m : computes the periodic Hessenberg or periodic Schur decomposition
of a matrix product (calling perschur).
========================================================================
Update April 9, 2002
Corrected Bugs:
==============
AG08BD : - replaced the test
ELSE IF( TOL.GT.ONE ) THEN
by
ELSE IF( TOL.GE.ONE ) THEN
(also in the documentation).
- changed the dimension of the integer arrays KRONR, INFE,
and KRONL to (N+M+1), (1+MIN(L+P,N+M)), and (L+P+1),
respectively.
AG08BY : inserted the statement
PR = 0
in the "Quick return" section.
IB03BD : - replaced the statement
CALL TF01MX( N, M, L, NSMP, DWORK(AC), LDAC, U, LDU, DWORK(IX),
$ DWORK(Z), NSMP, DWORK(JWORK), LDWORK-JWORK+1,
$ INFO )
by
CALL DCOPY( N, DWORK(IX), 1, X(NTHS+1), 1 )
CALL TF01MX( N, M, L, NSMP, DWORK(AC), LDAC, U, LDU, X(NTHS+1),
$ DWORK(Z), NSMP, DWORK(JWORK), LDWORK-JWORK+1,
$ INFO )
- replaced the statement
WORK(2) = WORK(2) + DWORK(JWORK+1)
by
WORK(2) = MAX( WORK(2), DWORK(JWORK+1) )
after the call of MD03BD for the initialization step.
- corrected the value of JWORK (and hence of LDWORK) for the
whole optimization.
- corrected the returned value of IWARN.
MB04VX : replaced throughout the variable CE by CJE, and replaced
the variable CA by CJA just before the loop 80, and inside
that loop.
MD03BF : replaced INF0 by INFO.
SB03MX : the two calls of DSYMV in the loop 120 are now made
only if L2 < N.
SB03OD : the strict lower triangle of the resulted Cholesky factor U
is set to zero. Also, if M = 0, then U is set to zero.
These are not bugs, but simplify the external work, and
ensure compatibility with SG03BD.
In addition, LDWORK may be 1 for M = 0.
SG03BD : the call of DLASET before the "DO 140" statement is now made
only if N > 1.
TB01UD : the test "IF( IQR.LE.N )" is made before calling DLASET for
annihilating the trailing blocks of B.
TB01VD, : replaced the statements
TB01VY IF ( LAPPLY ) (THEN)
by
IF ( LAPPLY .AND. TI.NE.ZERO ) (THEN)
TB01VY : replaced the statements
IF ( N.EQ.0 )
$ RETURN
by
IF ( N.EQ.0 ) THEN
RETURN
ELSE IF ( L.EQ.0 ) THEN
CALL DCOPY( N, THETA(N*M+1), 1, X0, 1 )
RETURN
END IF
in the Quick Return part of the code.
Corrected Bugs in Example Programs:
==================================
TAG08BD : changed the dimension of the integer arrays KRONR, INFE,
and KRONL to (N+M+1), (1+MIN(L+P,N+M)), and (L+P+1),
respectively.
Corrected Bugs in m/mexfiles:
============================
plot_ye.m, : inserted commas before the calls of "num2str" in "ylabel"
plot_yu.m statements. (These files are contained in the SLIDENT
demonstration file slident_demo.zip, which was updated.)
ex_wident.m: simplified the logic when initx = 1;
initialized errL, errN, errLm, and errNm to 0.
test_wiener: corrected the value of ldwin.
Updated Documentation:
=====================
AG08BD : changed the declared dimension of the integer arrays KRONR,
INFE, and KRONL to (N+M+1), (1+MIN(L+P,N+M)), and (L+P+1),
respectively.
IB03BD : - replaced ML by L + M in the definition of LTHS (for LDWORK).
- the possible values for i and j, defining INFO, can be
from 1 to 7 (separated the values for FNC with IFLAG = 1
and 2).
NF01AY : inserted the missing section heading "ARGUMENTS".
SB03OD : the strict lower triangle of the resulted Cholesky factor
is set to zero. LDWORK may be 1 for M = 0.
libindex, : added links to the new document files.
support
New Routines:
============
IB03AD : to compute a set of parameters for approximating a Wiener system
in a least-squares sense, using a neural network approach and a
conjugate gradients-based Levenberg-Marquardt algorithm.
MB02WD : to solve a system of linear equations Ax = b, with A symmetric,
positive definite, or, in the implicit form, f(A, x) = b, where
y = f(A, x) is a symmetric positive definite linear mapping
from x to y, using the conjugate gradient algorithm without
preconditioning.
MB02XD : to solve a set of systems of linear equations, A'*A*X = B, or,
in the implicit form, f(A)*X = B, with A'*A positive definite,
using symmetric Gaussian elimination.
MD03AD : to find the parameters PARA for a function F(X, PARA) that give
the best approximation for Y = F(X, PARA) in a least-squares sense.
NF01BA : template routine to evaluate the functions and Jacobian matrices
for optimizing the parameters of the nonlinear part of a Wiener
system (initialization phase) using SLICOT Library routines MD03AD
and IB03AD.
NF01BB : template routine to evaluate the functions and Jacobian matrices
for solving a standard nonlinear least squares problem using
SLICOT Library routines MD03AD and IB03AD.
NF01BU : to compute the matrix J'*J + c*I, for the Jacobian J given in
a compressed form.
NF01BV : to compute the matrix J'*J + c*I, for the Jacobian J fully
given, for one output variable.
NF01BW : to compute the matrix-vector product x <-- (J'*J + c*I)*x,
where J is given in a compressed form.
NF01BX : to compute x <-- (A'*A + c*I)*x, where A is an m-by-n real
matrix, c is a scalar.
New test programs:
=================
TIB03AD : test program for IB03AD.f.
TIB03BD : test program for IB03BD.f.
TMD03AD : test program for MD03AD.f.
New directories:
===============
plicmr : contains the index of the available parallel SLICOT
library routines (for large order model reduction).
plicmr/doc : contains the documentation html files for the available
parallel SLICOT library routines (for large order
model reduction).
Documentation:
=============
* : for all user's and programmer's callable newly added
routines listed above.
New mexfiles:
============
widentc.f : computes a discrete-time model of a Wiener system
using a neural network approach and a Levenberg-
Marquardt algorithm with a Cholesky-based or conjugate
gradients solver.
New m-files:
===========
ex_widentc.m : script demonstrating the use of the mexfile widentc.
Updated Toolbox:
===============
Wident : to incorporate the updates and the new routines mentioned
above for identifying Wiener systems.
========================================================================
Update February 22, 2002
Note: All updates (including those in October 3, 2001) have been saved
in the compressed library files, slicot.tar.gz and slicotPC.zip.
Corrected Bugs:
==============
Most of the changes below have been performed to initialize some variables
in certain cases. Some of them are related to the optimal workspace
length.
AB01MD,: added "B1 = B(1)" when N = 1.
TB01ZD
AB09HD : replaced IWARNL by IWARN in the call of AB09IX.
AB09HX : permuted the values for the workspace pointers KU and KV, so
that the space for V (with pointer KV) could be reused.
KTAU is now initialized to KV (not to 1) before the block of
code containing the loop 70, to avoid possible overwriting of
the workspace and/or possible non-initialization.
AB09KD : replaced (twice)
DWORK(1) = MAX( WRKOPT, DWORK(1) )
by
WRKOPT = MAX( WRKOPT, DWORK(1) )
and added
DWORK(1) = MAX( WRKOPT, DWORK(1) )
before return.
BB01AD : replaced the statement "Q(ISYMM) = 100.0D0" by
"Q(ISYMM) = 10.0D0", for example 3.1.
BB02AD : replaced the statement "IF ((NR(2) .EQ. 3) .OR. (NR(2) .EQ. 6))
THEN" by "IF ((NR(2) .EQ. 5) .OR. (NR(2) .EQ. 6)) THEN" (for
example 1.5), and the statement "C(3,11) = ONE" by
"C(4,11) = ONE" (for example 1.11).
Deleted the second statement setting TEMP for example 2.4.
Also, set X for example 2.1.
MA02CD : the three calls to DSWAP are made only if I1.GT.0.
MB01PD : moved the statement "ISUM = 0" before "IF( NBL.GT.0 ) THEN",
and the tests of the argument TYPE before those of the argument
SCUN, to avoid possibly non-initialized variables ISUM and
ITYPE.
MB03PY : replaced "IF ( RANK.LT.M ) THEN" by "IF ( RANK.LT.K ) THEN".
MB03WD : moved the statements
HP00 = ONE
HP01 = ZERO
before "IF( K.GT.L+1 ) THEN", in the loop labelled 80,
to avoid possibly non-initialized variables HP00 and HP01.
SB02RD : inserted the statement
IF ( .NOT.JOBA )
$ WRKOPT = 0
after
IF ( .NOT.JOBX ) THEN
to initialize the variable WRKOPT for JOB = 'C' or JOB = 'E'.
SB03OD : - inserted
ELSE
WRKOPT = 0
at the end of the "IF ( NOFACT ) THEN" block.
- put the update of WRKOPT just after the first calls of DGERQF
and DGEQRF.
SB10RD : inserted
LWAMAX = 0
before the "IF( ND1.GT.0 ) THEN" block.
TB01LD : inserted
WRKOPT = 0
in the "ELSE" part of the "IF( LSAME( JOBA, 'G' ) ) THEN" block.
TG01ED : inserted
IR1 = 1
in the body of the "IF( LN2.EQ.0 ) THEN" block.
Improved Routines:
=================
AB09HY : replaced BLAS Level 2 routines DGERQ2 and DORGR2 with
corresponding BLAS Level 3 routines.
Corrected Bugs in Example Programs:
==================================
TAB09MD,
TAB09ND : in the computation of LDWORK, replaced the lines
$ MAX( NMAX, MMAX, PMAX) + 5 +
$ ( NMAX*(NMAX+1)/2) ) )
by
$ MAX( NMAX, MMAX, PMAX ) + 5 ) +
$ ( NMAX*(NMAX+1) )/2 )
TAB13MD : added the lines
* .. Intrinsic Functions ..
INTRINSIC MAX
TBB01AD, In format statements, replaced "rows of B" by "columns of B"
TBB02AD : and "columns of C" by "rows of C".
These changes also resulted in BB01AD.res and BB02AD.res.
TBB02AD : replaced "N" by "P" in the loop 60 (twice).
About 50 compressed tar files "name".tar.gz, calling the above routines
or example programs, have been updated on the ftp site.
Corrected Bugs in benchmark data files:
======================================
BB012091.dat, : inserted a space between two consecutive data values.
BB012092.dat,
BB02113.dat
BB012091.dat, : deleted a ; character from the end of a line.
BB012092.dat
Corrected Bugs in m/mexfiles:
============================
syscom.f : defined the default tolerance for single-input (m = 1) or
single-output (p = 1) systems, and decided nonminimality
for such systems if the Frobenius norm of B (if m = 1),
or the Frobenius norm of C (if p = 1), is smaller than
the given or default tolerance.
findBD.f : the line below, which exceeded 72 characters,
WRITE( TEXT, '(''A must have '',I6,'' rows and columns'')' ) N
was splitted in two lines.
New Routines:
============
IB03BD : to compute a set of parameters for approximating a Wiener system
in a least-squares sense, using a neural network approach and a
MINPACK-like Levenberg-Marquardt algorithm.
MB02YD : to solve a system of linear equations
A*x = b , D*x = 0 ,
in the least squares sense, with D is a diagonal matrix,
given a QR factorization with column pivoting of A.
MB04OW : to perform the QR factorization
( U ) = Q*( R ), where U = ( U1 U2 ), R = ( R1 R2 ),
( x' ) ( 0 ) ( 0 T ) ( 0 R3 )
where U and R are (m+n)-by-(m+n) upper triangular matrices, x is
an m+n element vector, U1 is m-by-m, T is n-by-n, stored
separately, and Q is an (m+n+1)-by-(m+n+1) orthogonal matrix.
MD03BA : interface to SLICOT Library routine MD03BX, for solving standard
nonlinear least squares problems using SLICOT routine MD03BD.
MD03BB : interface to SLICOT Library routine MD03BY, for solving standard
nonlinear least squares problems using SLICOT routine MD03BD.
MD03BD : to find the parameters PARA for a function F(X, PARA) that give
the best approximation for Y = F(X, PARA) in a least-squares sense,
using a MINPACK-like Levenberg-Marquardt algorithm.
MD03BF : template routine to evaluate the functions and Jacobian matrices
for solving a standard nonlinear least squares problem using
SLICOT Library routine MD03BD.
MD03BX : to compute the QR factorization with column pivoting of an
m-by-n matrix J (m >= n), that is, J*P = Q*R, where Q is a matrix
with orthogonal columns, P a permutation matrix, and R an upper
trapezoidal matrix with diagonal elements of nonincreasing
magnitude, and to apply the transformation Q' on the error
vector e (in-situ). The 1-norm of the scaled gradient is also
returned. Standard nonlinear least squares problems are solved.
MD03BY : to determine a value for the parameter PAR such that if x solves
the system
A*x = b , sqrt(PAR)*D*x = 0 ,
in the least squares sense, where A is an m-by-n matrix, D is an
n-by-n nonsingular diagonal matrix, and b is an m-vector, and if
DELTA is a positive number, DXNORM is the Euclidean norm of D*x,
then either PAR is zero and
( DXNORM - DELTA ) .LE. 0.1*DELTA ,
or PAR is positive and
ABS( DXNORM - DELTA ) .LE. 0.1*DELTA .
It is assumed that a QR factorization, with column pivoting, of A
is available. Standard nonlinear least squares problems are solved.
NF01AD : to compute the output of a Wiener system.
NF01AY : to compute the output of a set of neural networks.
NF01BD : to compute the Jacobian of a Wiener system.
NF01BE : template routine to evaluate the functions and Jacobian matrices
for optimizing the parameters of the nonlinear part of a Wiener
system (initialization phase), using SLICOT Library routine MD03BD.
NF01BF : template routine to evaluate the functions and Jacobian matrices
for optimizing all parameters of a Wiener system, using SLICOT
Library routine MD03BD.
NF01BP : to determine a value for the Levenberg-Marquardt parameter PAR
such that if x solves the system
J*x = b , sqrt(PAR)*D*x = 0 ,
in the least squares sense, where J is an m-by-n matrix, D is an
n-by-n nonsingular diagonal matrix, and b is an m-vector, and if
DELTA is a positive number, DXNORM is the Euclidean norm of D*x,
then either PAR is zero and
( DXNORM - DELTA ) .LE. 0.1*DELTA ,
or PAR is positive and
ABS( DXNORM - DELTA ) .LE. 0.1*DELTA .
The matrix J is the current Jacobian matrix of a nonlinear least
squares problem, provided in a compressed form by SLICOT Library
routine NF01BD. It is assumed that a block QR factorization, with
column pivoting, of J is available.
NF01BQ : to determine a vector x which solves the system of linear equations
J*x = b , D*x = 0 ,
in the least squares sense, where J is an m-by-n matrix,
D is an n-by-n diagonal matrix, and b is an m-vector. The matrix J
is the current Jacobian of a nonlinear least squares problem,
provided in a compressed form by SLICOT Library routine NF01BD.
It is assumed that a block QR factorization, with column pivoting,
of J is available.
NF01BR : to solve one of the systems of linear equations
R*x = b , or R'*x = b ,
in the least squares sense, where R is an n-by-n block upper
triangular matrix, with a block diagonal structure, plus an
additional block column to the right, with the upper triangular
diagonal submatrices R_k square, and of the same order, except
for the last. The diagonal elements of each block R_k have
nonincreasing magnitude. The matrix R is stored in a compressed
form, as returned by SLICOT Library routine NF01BS. If the
matrix R has not a full rank, then a least squares solution
is obtained. Optionally, the transpose of the matrix R can be stored.
NF01BS : to compute the QR factorization of the Jacobian matrix J, as
received in compressed form from SLICOT Library routine NF01BD,
and to apply the transformation Q on the error vector e (in-situ).
The factorization is J*P = Q*R, where Q is a matrix with
orthogonal columns, P a permutation matrix, and R an upper
trapezoidal matrix with diagonal elements of nonincreasing
magnitude for each block column. The 1-norm of the scaled gradient
is also returned.
NF01BY : to compute the Jacobian of the error function for a neural
network (for one output variable).
TB01VD : to convert the linear discrete-time system given as (A, B, C, D),
with initial state x0, into the output normal form, with
parameter vector THETA. The matrix A is assumed to be stable.
The matrices A, B, C, D and the vector x0 are transformed, so that
on exit they correspond to the system defined by THETA.
TB01VY : to convert the linear discrete-time system given as its output
normal form, with parameter vector THETA, into the state-space
representation (A, B, C, D), with the initial state x0.
TF01MX : to compute the output sequence of a linear time-invariant
open-loop system given by its discrete-time state-space model
with an (N+P)-by-(N+M) general system matrix S (the input and
output trajectories are stored differently from SLICOT Library
routine TF01MD).
TF01MY : to compute the output sequence of a linear time-invariant
open-loop system given by its discrete-time state-space model
(A,B,C,D), where A is an N-by-N general matrix (the input and
output trajectories are stored differently from SLICOT Library
routine TF01MD).
New test programs:
=================
TMD03BD : test program for MD03BD.f.
Test programs for F77:
=====================
All test (example) programs which contained MAX and/or MIN intrinsic
functions calls in PARAMETER statements have now a version without these
calls, in order to be compliant with the Fortran 77 standard. The codes
have not been optimized: the arguments of those intrinsic functions
have just been added together, and the function references removed.
The modified files (over 100) are stored in the subdirectory examples77.
For convenience, this subdirectory contains all the example programs,
data (.dat) and results (.res) files.
New directory:
=============
The Matlab 5.3 toolboxes have been saved in a new subdirectory, called
"SLToolboxes5", of the MatlabTools directory of the ftp site. The former
subdirectory "SLToolboxes" now contains the Matlab 6 versions of all
files, including .dll files. The Matlab 5.3 files will not be updated
in the future.
Documentation:
=============
AB09HX : deleted "*HNORM(A,B,C)" and the text referring to it in the
description of NR.
added " and ORDSEL = 'A'" in the last line of the
description of TOL2.
changed the numbering of the formulas in the section METHOD.
AB09HY : replaced "Aw = A - Bw*Cw" by "Aw = A - Bw*Hw" in the section
PURPOSE, and added the mention that matrix A must be stable
and in a real Schur form.
AB09KD : added M in the two MAX formulas for LIWORK, and made other
minor changes.
AB13AD, : added "(if INFO = 0 )" in the definition of the function
AB13AX, value.
AB13BD,
MB03NY
AB13CD : added "If INFO = 0," in the definition of the function
value.
AB13MD : replaced "cummulative" by "cumulative" (in the internal comments).
MA02GD : replaced " If IPIV is negative" by " If INCX is negative"
in the definition of INCX.
* : for programmer's callable newly added routines.
Updated m-files:
================
fstdemo5.m : replaced "cummulative" by "cumulative".
New mexfiles:
=============
arebench.f : generates ARE examples.
New m-files:
============
aredata.m : generates ARE examples.
New toolbox:
===========
Wident : beta-version of the toolbox for nonlinear, Wiener system
identification will be posted by the end of February 2002.
========================================================================
Update October 3, 2001
Note:
====
The changes described below are not yet performed in the
compressed library files (slicot.tar.gz and slicotPC.zip), but they
are included in the files update.tar.gz (for Unix platforms) and
update.zip (for Windows platforms).
Corrected Bugs:
==============
AB09IY : replaced the test after the label 10 by
IF( ALPHAO.LT.ONE .AND. NV.GT.0 ) THEN
and the test after the label 50, and the next line, by
IF( ALPHAC.LT.ONE .AND. NW.GT.0 ) THEN
KTAU = N*NNW + 1
Also, the matrix D is not referenced if JOB = 'B' or 'F',
hence LDD may be 1 in this case.
IB01PD : replaced "TOLL" by "TOLL1" in the second test involving RCOND1,
and in the second call of MB03OD.
IB01BD,: replaced "ELSE IF( LDWORK.GE.1 ) THEN" by "ELSE".
IB01PD,
IB01PX,
IB01PY
SB16AD : the workspace formula includes N, when WEIGHT = 'N' and
EQUIL = 'S'.
SB16BD : the workspace formula for ORDSEL = 'F' and NCR = N has been
added in the code. Also, some minor changes have been
performed in the comments (corrected "facorization", etc.).
Corrected Bugs in example programs:
==================================
TAB09ID : updated the formula for LDWORK.
Corrected Bugs in m/mexfiles:
=============================
slinorm.m : replaced the test "elseif size(fpeak0) == 1" by the safer test
"elseif isinf(fpeak0)".
aresol.f, : put the line "IP = 5" in front of the statement "IF ( NRHS.GE.6 ) THEN".
aresolc.f
findBD.f : inserted "LDWMIN = 2" in the IF branch setting "LDWORK = 2".
find_models.m (in ident_demo.zip) : replaced "rcnds = zeros(k,14);" by
"rcnds = zeros(k,12);" in the first branch "if nout == 3",
and "rcnds(k,:) = rcnd;" by "rcnds(k,:) = rcnd';", in the second
such if branch.
New Routines:
============
SB10ZD to compute the matrices of a positive feedback controller
in the Discrete-Time Loop Shaping Design Procedure.
New test programs:
=================
TSB10ZD : test program for SB10ZD.f.
Documentation Updates:
=====================
AB09ID : inserted a line "LRCF = 0, and" before "LMINR = 0, ..."
if WEIGHT = 'L' or 'N' or NW = 0, in the formulas for
LDWORK. Other minor changes have also been performed.
AB09IX : replaced S by R in the description of the parameter SCALEO.
SB16AD : the workspace formula includes N, when WEIGHT = 'N' and
EQUIL = 'S'; the reference to non-existing bibliographic
item 4 has been replaced to item 2.
SB16CD : deleted one of the two consecutive "of" in the description
of JOBCF.
New mexfiles:
=============
dlsdz.f : Loop Shaping Design of discrete-time systems.
New m-files:
============
Contents.m : lists the SLICOT m-files and mexfiles and their function.
dlsdz.m : help function for the Loop Shaping Design routine for
discrete-time systems.
test_dlsdz.m associated test function for dlsdz.m.
Parallel Codes:
==============
A new file, plicmr.tar.gz, has been added to the SLICOT root directory.
It contains 3 model reduction routines, 7 associated routines (solvers
for coupled stable Lyapunov/Stein equations, stable Sylvester equations,
etc.), and 12 lower-level routines, all for parallel computers.
Details are given in the incorporated .html documentation, accessible
from the file index.html, included in the archive.
========================================================================
Update June 29, 2001
Removed Bugs:
============
AB08NX : the call of DLASET setting ABCD(NU+SIGMA+1,SIGMA) is made only
if RO1 > 1.
AB09CX : replaced the statement "NKR1 = NR1 + KR" by the correct one
"NKR1 = MIN( NMINR, NR1 + KR )".
MB04ZD : a symplectic rotation is now applied on rows/columns J+2 of A
and Q/G only for J < N-1.
SB16AY : Replaced the ELSE statement before the comment line
"Define B1 and C2 for Ge21" by "ELSE IF( PERF ) THEN".
New Routines:
============
AB08MD to compute the normal rank of the transfer-function matrix of a
state-space model (A,B,C,D).
AB09JD : to compute a reduced order model (Ar,Br,Cr,Dr) for an original
state-space representation (A,B,C,D) by using the frequency
weighted optimal Hankel-norm approximation method.
AB09JV : to construct a state-space representation (A,Bs,Cs,Ds) of the
projection of V*G or conj(V)*G containing the poles of G, from the
state-space representations (A,B,C,D) and (AV-lambda*EV,BV,CV,DV),
of the transfer-function matrices G and V, respectively.
G is assumed to be a stable transfer-function matrix and
the state matrix A must be in a real Schur form.
AB09JW : to construct a state-space representation (A,Bs,Cs,Ds) of the
projection of G*W or G*conj(W) containing the poles of G, from the
state-space representations (A,B,C,D) and (AW-lambda*EW,BW,CW,DW),
of the transfer-function matrices G and W, respectively.
G is assumed to be a stable transfer-function matrix and
the state matrix A must be in a real Schur form.
AB09JX to check stability/antistability of finite eigenvalues with
respect to a given stability domain.
AB13DD to compute the L-infinity norm of a continuous-time or
discrete-time system, either standard or in the descriptor form.
AB13DX to compute the maximum singular value of a given continuous-time
or discrete-time transfer-function matrix, either standard or in
the descriptor form.
AG07BD : to compute the inverse (Ai-lambda*Ei,Bi,Ci,Di) of a given
descriptor system (A-lambda*E,B,C,D).
DE01PD : to compute the convolution or deconvolution of two real signals
using the Hartley transform.
delctg : void logical function for LAPACK routine DGGES.
DG01OD : to compute the (scrambled) discrete Hartley transform of a real
signal.
MA02HD : to check if A = DIAG*I, where I is an M-by-N matrix with ones on
the diagonal and zeros elsewhere.
MB02CU : to bring the first blocks of a generator to proper form.
(Extended version of MB02CX, with a higher BLAS3 fraction and a
pivoting scheme for rank-deficient generators.)
MB02CV : to apply the transformations created by the SLICOT Library routine
MB02CU on other columns / rows of the generator.
MB02FD : to compute the incomplete Cholesky (ICC) factor of a symmetric
positive definite block Toeplitz matrix T, defined by either its
first block row, or its first block column.
MB02GD : to compute the Cholesky factor of a banded symmetric positive
definite block Toeplitz matrix.
MB02HD : to compute the Cholesky factor of the matrix T'*T, with T a
banded block Toeplitz matrix of full rank.
MB02ID : to solve overdetermined or underdetermined real linear systems
involving a full rank block Toeplitz matrix.
MB02JD : to compute a full QR factorization of a block Toeplitz matrix
of full rank.
MB02JX : to compute a low rank QR factorization with column pivoting of a
block Toeplitz matrix.
MB02KD : to compute the product C = alpha*op( T )*B + beta*C, where
alpha and beta are scalars and T is a block Toeplitz matrix.
TG01BD : to reduce the matrices A and E of a system pencil corresponding
to the descriptor triple (A-lambda E,B,C) to generalized
upper Hessenberg form using orthogonal transformations.
TG01WD : to reduce the pair (A,E) of a descriptor system to a real
generalized Schur form using an orthogonal equivalence
transformation, (A,E) <-- (Q'*A*Z,Q'*E*Z) and to apply the
transformation to the matrices B and C: B <-- Q'*B and C <-- C*Z.
New test programs:
=================
TAB09JD : test program for AB09JD.f.
TAB13DD : test program for AB13DD.f.
TDE01PD : test program for DE01PD.f.
TDG01OD : test program for DG01OD.f.
TMB02FD : test program for MB02FD.f.
TMB02GD : test program for MB02GD.f.
TMB02HD : test program for MB02HD.f.
TMB02ID : test program for MB02ID.f.
TMB02JD : test program for MB02JD.f.
TMB02JX : test program for MB02JX.f.
TMB02KD : test program for MB02KD.f.
Updated files for results:
=========================
Using Compaq Visual Fortran 6.5, the following 4 .res files
obtained on a PC machine, which previously slightly differ from
those obtained on the Sun Solaris platform, now coincide (check!).
These files are: AB09DD.res, BB03AD.res, SB08MD.res, and
SB08ND.res.
Documentation:
=============
* : all newly added routines.
libindex, : added links to the new document files.
support
New mexfiles:
=============
bstred.f : balanced stochastic truncation model reduction
based on SLICOT user-callable routine AB09HD.
conred.f : frequency-weighted balancing related controller reduction
based on SLICOT user-callable routine SB16AD.
fwehna.f : frequency-weighted Hankel-norm approximation
based on SLICOT user-callable routine AB09JD.
fwered.f : frequency-weighted balancing related model reduction
based on SLICOT user-callable routine AB09ID.
sfored.f : state-feedback-observer controller reduction
based on SLICOT user-callable routines SB16BD and SB16CD.
linorm.f : L-infinity norm of a linear continuous- or discrete-time system
based on SLICOT user-callable routine AB13DD.
New m-files:
============
bst.m : balanced stochastic truncation based model reduction.
cfconred.m : coprime factorization based controller reduction of
state-feedback controllers.
fwbconred.m : frequency-weighted balancing related controller reduction.
fwbred.m : frequency-weighted balancing related model reduction.
fwhna.m : frequency-weighted Hankel-notm approximation model reduction.
sysredset.m : creation of a system order reduction options structure.
sysredget.m : extracts the value of the named parameter from
a system order reduction options structure.
linorm.m : documentation for linorm.f mex-function.
slinorm.m : L-infinity norm of a state-space system.
test_conred.m : test files for various mexfiles and m-files.
test_sysred_tools.m
test_linorm.m
test_slinorm.m
conred.mat
========================================================================
Update February 25, 2001
March 3, 2001
Corrected Bugs:
==============
AB09ED,: few lines added to finish if only unstable part is present.
AB09MD,
AB09ND
AB13CD : adequate workspace has been provided even for the quick return
cases;
replaced IW3 by IW2 in the loop 30;
replaced LDWORK by LDWORK-IWRK in the call of DGEES after the
label 200;
the routine now also deliver the peak frequency for which the
estimated infinity norm is achieved; moreover, it works for
systems without dynamic part (the case with n = 0 did not
cause now the same quick return as for m = 0 or p = 0);
the maximal singular value of D is properly taken into account;
the lower bound on the norm is not set to 0 before the loop 320.
SB02CX : changed the tolerance to 100*EPS.
IB01ND : removed the first use of the non-initialized variable MAXWRK.
IB01PD : replaced TOLL, at its first use, by TOLL1.
recomputed RANKM before calling MB02QY.
Updated Example Programs:
========================
TAB13CD : LIWORK is N;
the unused variables LDAK, LDBK, LDCK, and LDDK have been deleted;
the peak frequency is also displayed.
New Routines:
============
AB09HD : to compute a reduced order model (Ar,Br,Cr,Dr) for an original
state-space representation (A,B,C,D) by using the stochastic
balancing approach in conjunction with the square-root or
the balancing-free square-root Balance & Truncate (B&T)
or Singular Perturbation Approximation (SPA) model reduction
methods for the ALPHA-stable part of the system.
AB09HX : to compute a reduced order model (Ar,Br,Cr,Dr) for an original
stable state-space representation (A,B,C,D) by using the
stochastic balancing approach in conjunction with the
square-root or the balancing-free square-root Balance &
Truncate (B&T) or Singular Perturbation Approximation (SPA)
model reduction methods. The state dynamics matrix A of the
original system is an upper quasi-triangular matrix in real
Schur canonical form and D must be full row rank.
AB09HY : to compute the Cholesky factors Su and Ru of the controllability
Grammian P = Su*Su' and observability Grammian Q = Ru'*Ru.
AB09ID : to compute a reduced order model (Ar,Br,Cr,Dr) for an original
state-space representation (A,B,C,D) by using the frequency
weighted square-root or balancing-free square-root
Balance & Truncate (B&T) or Singular Perturbation Approximation
(SPA) model reduction methods. The algorithm tries to minimize
the norm of the frequency-weighted error ||V*(G-Gr)*W||,
where G and Gr are the transfer-function matrices of the original
and reduced order models, respectively, and V and W are
frequency-weighting transfer-function matrices without poles
on the boundary of the stability domain. If G is unstable,
only the ALPHA-stable part of G is reduced.
AB09IX : to compute a reduced order model (Ar,Br,Cr,Dr) for an original
state-space representation (A,B,C,D) by using the square-root
or balancing-free square-root Balance & Truncate (B&T) or
Singular Perturbation Approximation (SPA) model reduction
methods. The computation of truncation matrices is based on
the Cholesky factor of a controllability Grammian and the
Cholesky factor of an observability Grammian.
AB09IY : to compute the Cholesky factors of the frequency-weighted
controllability and observability Grammians corresponding
to a frequency-weighted model reduction problem, for stable
transfer-function matrices of the system and the weightings,
with state matrices in real Schur form.
AB09KD : to compute a reduced order model (Ar,Br,Cr,Dr) for an original
state-space representation (A,B,C,D) by using the frequency
weighted optimal Hankel-norm approximation method in conjunction
with square-root balancing for the ALPHA-stable part of the
system.
AB09KX : to construct a state-space representation (A,BS,CS,DS) of the
stable projection of V*G*W or conj(V)*G*conj(W) from the state-space
representations of (A,B,C,D), (AV,BV,CV,DV), and (AW,BW,CW,DW)
of the transfer-function matrices G, V and W, respectively,
for the state matrix A in a real Schur form. It is assumed
that G is stable.
AB13MD : to compute an upper bound on the structured singular value for a
given square complex matrix and a given block structure of the
uncertainty.
MB01WD : to compute the matrix formula
_
R = alpha*( op( A )'*op( T )'*op( T ) + op( T )'*op( T )*op( A ) )
+ beta*R, (1)
or
_
R = alpha*( op( A )'*op( T )'*op( T )*op( A ) - op( T )'*op( T ))
+ beta*R, (2)
_
where alpha and beta are scalars, R, and R are symmetric matrices,
T is a triangular matrix, A is a general or Hessenberg matrix, and
op( M ) = M or op( M ) = M'.
MB01XD : to compute the matrix product U' * U or L * L', where U and L are
upper and lower triangular matrices, respectively, stored in the
corresponding upper or lower triangular part of the array A
(block algorithm).
MB01XY : to compute the matrix product U' * U or L * L', where U and L are
upper and lower triangular matrices, respectively, stored in the
corresponding upper or lower triangular part of the array A
(unblocked algorithm).
MB01YD : to perform the symmetric rank k operations
C := alpha*op( A )*op( A )' + beta*C,
where alpha and beta are scalars, C is an n-by-n symmetric matrix,
op( A ) is an n-by-k matrix, and op( A ) = A or op( A ) = A'.
The matrix A has l nonzero codiagonals, either upper or lower.
MB01ZD : to compute the matrix product
H := alpha*op( T )*H, or H := alpha*H*op( T ),
where alpha is a scalar, H is an m-by-n upper or lower
Hessenberg-like matrix (with l nonzero subdiagonals or
superdiagonals, respectively), T is a unit, or non-unit, upper
or lower triangular matrix, and op( T ) = T or op( T ) = T'.
MB02CD : to compute the Cholesky factor and the generator and/or the
Cholesky factor of the inverse of a symmetric positive definite
block Toeplitz matrix, defined by either its first block row,
or its first block column.
MB02CX : to bring the first blocks of a generator in proper form.
MB02CY : to apply the transformations created by the SLICOT Library
routine MB02CX on other columns or rows of the generator.
MB02DD : to update the Cholesky factor, the generator, and/or the
Cholesky factor of the inverse of a symmetric positive definite
block Toeplitz matrix, given the information from a previous
factorization and additional blocks of its first block row,
or its first block column.
MB02ED : to solve a system of linear equations, T*X = B or X*T = B,
with a symmetric positive definite block Toeplitz matrix T,
defined either by its first block row or its first block column.
SB10ID : to compute the matrices of the positive feedback controller
for the continuous-time shaped plant.
SB10JD : to convert a descriptor state-space system into regular
state-space form.
SB10KD : to compute the matrices of the positive feedback controller
for the discrete-time shaped plant.
SB16AD : to compute a reduced order controller (Acr,Bcr,Ccr,Dcr) for an
original state-space controller representation (Ac,Bc,Cc,Dc) by
using the frequency weighted square-root or balancing-free
square-root Balance & Truncate (B&T) or Singular Perturbation
Approximation (SPA) model reduction methods.
SB16AY : to compute the Cholesky factors of the frequency-weighted
controllability and observability Grammians corresponding
to a frequency-weighted model reduction problem, with the
controller state matrix in a block-diagonal real Schur form.
SB16BD : to compute, for a given open-loop model (A,B,C,D), and for a
given state feedback gain F and full observer gain G,
such that A+B*F and A+G*C are stable, a reduced order
controller model (Ac,Bc,Cc,Dc) using a coprime factorization
based controller reduction approach.
SB16CD : to compute, for a given open-loop model (A,B,C,D), and for a
given state feedback gain F and full observer gain G,
such that A+B*F and A+G*C are stable, a reduced order
controller model (Ac,Bc,Cc,Dc) using a coprime factorization
based controller reduction approach. For reduction of the
coprime factors, a stability enforcing frequency-weighted
model reduction is performed using either the square-root or
the balancing-free square-root versions of the Balance & Truncate
(B&T) model reduction method.
SB16CY : to compute, for a given open-loop model (A,B,C,0), and for a
given state feedback gain F and full observer gain G,
such that A+B*F and A+G*C are stable, the Cholesky factors
Su and Ru of a controllability Grammian, P = Su*Su', and
an observability Grammian, Q = Ru'*Ru, corresponding to a
frequency-weighted model reduction of the left or right coprime
factors of the state-feedback controller.
Updated Routines (after February 26, 2001):
================
AB13MD : the input/output argument X was moved before the output
arguments, and some improvements have been performed in the
code.
SB10ID : minor changes in the code and documentation.
SB10JD minor changes in the documenting comments.
SB10KD : improvements have been performed in the code, the workspace
has been reduced.
Updated files for results:
=========================
For reference purposes, all example programs have been relinked with
the prebuilt libraries for LAPACK compiled for Sun Solaris, SunOS
enterprise 5.7 Generic_106541-03 sun4u sparc SUNW, Ultra-4 (file
lapack_solaris.tgz), and LAPACK compiled for Pentium Pro, Windows NT,
Visual Fortran (file lapack_win32.zip), both available on netlib, at
the address http://www.netlib.org/lapack/archives.
As a result, the following 25 .res files have been replaced:
AB09AD.res, AB09BD.res, AB09CD.res, AB09ED.res, AB09FD.res, AB09GD.res,
AB09MD.res, AB09ND.res, AB13FD.res, MB03QD.res, MB04DY.res, MB05MD.res,
SB01BD.res, SB04MD.res, SB04PD.res, SB04QD.res, SB08CD.res, SB08DD.res,
SB08ED.res, SB08FD.res, SB10FD.res, TB01KD.res, TB01LD.res, TB01TD.res,
TB01WD.res.
The differences to the previously stored values, obtained on a Sun
Ultra 2 machine, using LAPACK Release 2.0 (with additional Release 3.0
codes for the generalized eigenproblems), are mainly due to the different
Schur forms computed. Namely, the 2-by-2 blocks could have the
off-diagonal elements permuted, or with the signs interchanged, and/or
the diagonal blocks could come in a different order, in which case the
corresponding rows and columns have different elements.
The differences are essentially those described at the previous update,
in the file readme from the compressed tar archive diff_results.tar.gz,
then stored in the root directory of the SLICOT ftp site:
- AB09AD, AB09BD, AB09FD, AB09GD, SB04MD, TB01KD, TB01LD, and TB01WD :
differ only in the signs of some elements;
- AB13FD : one or two less significant digits differ;
- AB09CD, AB09ED, AB09MD, AB09ND, and MB03QD : some rows/columns are
permuted, possibly with signs of some elements changed;
- SB01BD : a different relative residual norm (the absolute residual
norm is close to machine accuracy);
- MB04DY : different scaling factors (and, hence, off-diagonal elements);
- TB01TD : different balancing factors;
- SB08CD, SB08DD, SB08ED, and SB08FD : Schur forms are different,
as mentioned above;
- MB05MD : some eigenvalues are interchanged, and the corresponding
rows/columns are permuted;
- SB10FD : two real poles are interchanged;
- SB04PD and SB04QD : two columns of the orthogonal matrix differ.
The following 5 .res files obtained on a PC machine slightly differ from
those obtained on the Sun Solaris platform: AB09DD.res, BB03AD.res,
MC03ND.res, SB08MD.res, and SB08ND.res:
- SB08MD and SB08ND : differ only in white spaces;
- MC03ND : differs only in the signs of some elements;
- BB03AD and AB09DD : one or two less significant digits differ.
The file slicotPC.zip contains the results got on a PC machine.
Documentation:
=============
AB09ND : On exit, if INFO = 0, IWORK(1) contains the order of the
minimal realization of the ALPHA-stable part of the system.
AB13CD : inserted a function value description;
IWORK has length just N;
on exit, DWORK(2) now contains the frequency where the gain of
the frequency response achieves its peak value.
MB02SD,: changed the operations count to 0(n^2) at NUMERICAL ASPECTS.
MB02SZ
libindex, : added links to the new document files.
support
The documentation files corresponding to the changed .res files
mentioned above have been also updated. The results on the Sun platform
were used.
Corrected Bugs in mexfiles:
===========================
aresolc.f : an error is produced if the reciprocal condition number
and forward error bound are asked, but cannot be
computed; these results are obtained just for
meth = 1, and flag(4) = 2;
replaced the name ARESOL by ARESOLC.
findBD.f : moved the tests involving IJOB after IJOB initialization.
order.f : replaced > by .GT. in a test for CSIZE.
sysred.f : replaced MAX(N, M, P) by MAX(N, M+P) in the formula
for LWR.
Corrected Bugs in m-files:
==========================
test_aresol.m : replaced find(ev ... by ~isempty(find(real(ev) ...
test_aresolc.m and find(abs(ev) ... by ~isempty(find(abs(ev) ...
New mexfiles:
=============
clsdp.f : Loop Shaping Design of continuous-time systems
dlsdp.f : Loop Shaping Design of discrete-time systems
fstoep.f : fast Toeplitz solver for symmetric positive definite matrices
mucomp.f : computing the structured singular value
New m-files:
============
clsdp.m, : m-files for the loop shaping design
dlsdp.m, (added after February 26, 2001)
tclsdp.m,
tdlsdp.m
fstoep.m, : m-files for the fast Toeplitz solver.
fstchol.m,
fstgen.m,
fstsol.m,
fstupd.m,
test_fstoep.m,
test_fstoem.m
mucomp.m, : m-files for the structured singular value problem
tmucomp.m (added after February 26, 2001)
Updated Mexfiles:
=================
hinorm : added the peak frequency for which the estimated infinity norm
is achieved as an optional output parameter;
TOL cannot be smaller than 100*EPS, where EPS is the relative
machine precision;
removed AB13CD from the External Subroutines list and added
AB13CD and DLAMCH in the External Functions list.
New Unix mex- and m-files: (after February 26, 2001)
==========================
The previous Unix mexfiles used maximally dimensioned arrays, according
to the Fortran 77 standards. The previous archives in the subdirectories
MatlabTools/Unix/SLmex and MatlabTools/Unix/SLTools have been renamed
as mexfiles77.tar.gz and mfiles77.tar.gz, respectively. They will
not be updated in the future. New archives, mexfiles.tar.gz and
mfiles.tar.gz, which use the Fortran 90/95 dynamic allocation feature
for arrays, have been added in the same subdirectories. These archives
have now essentially the same contents as the corresponding Windows
archives, mexfiles.zip and mfiles.zip, respectively.
The compressed Unix library file slicot.tar.gz includes now subdirectories
called F77, added to both SLmex and SLTools subdirectories. The
Fortran 77-related files have been moved into these F77 subdirectories,
while the SLmex and SLTools subdirectories contain the Fortran 90/95
versions of the mexfiles and associated m-files, respectively.
Moreover, the mexfiles have been also compiled for Matlab 6 (using
Compaq Visual Fortran Version 6.5), and they are stored in the archive
dllfiles6.zip, subirectory MatlabTools/Windows/SLTools.
New contributed m-files (included in the LYAPACK collections in the
======================= subdirectory MatlabTools/contrib)
lyapack.tar.gz : LYAPACK collection for Unix platforms (see below);
lyapack.zip : LYAPACK collection for Windows platforms;
lyapack.pdf : Adobe Acrobat pdf Users' Guide documentation file for
the LYAPACK collection.
Note: The two compressed files (.gz and .zip) contain
the Users' Guide in both Postscript and pdf formats.
LYAPACK is an efficient MATLAB toolbox (based on
MATLAB m-functions) for the solution of certain
large scale problems in control theory, which are
closely related to Lyapunov equations. It can solve
Lyapunov and Riccati equations, and do model reduction.
LYAPACK uses iterative algorithms and is intended for
large, sparse problems.
LYAPACK Developer: Dr. Thilo Penzl.
New demo files:
==============
fstoep_demo.zip, : Matlab 5.3 demonstration packages for the SLICOT
slident_demo.zip fast Toeplitz solvers and linear system
identification software.
========================================================================
Update September 21, 2000
Corrected Bugs:
==============
AB07ND : replaced ONE by -ONE in the call of DGEMV in the loop 20.
IB01AD,: added (M+L)*2*NOBR in the expression for LDWORK when ALG = 'F'
IB01MD and BATCH = 'O' or BATCH = 'L' and CONCT = 'N';
reduced the length of LDWORK in the other cases for ALG = 'F'.
IB01MD : activated the call of IB01MY (for ALG = 'F');
return after the call of IB01MY if BATCH = 'F' or 'I'.
SB04MD : set DWORK(1) = ONE for Quick return, and checked that LDWORK
is at least 1.
SB04QD : checked that LDWORK is at least 1.
Updated Routines:
================
IB01OD : replaced the second parameter in the call of IB01OY with
NOBR-1. Also, the estimated order is not allowed to exceed
NOBR-1.
Updated Example Programs:
========================
TAB01ND,: added the type declaration "INTRINSIC MAX".
TAB01OD,
TAB05RD,
TAB07MD, TAB08ND, TAB09ED, TAB09FD, TAB09GD, TAB09MD, TAB09ND, TAB13AD,
TAB13BD, TAB13CD, TFB01QD, TFB01RD, TFB01SD, TFB01TD, TFB01VD, TIB01AD,
TIB01BD, TIB01CD, TMB02MD, TMB02QD, TMB03UD, TMB04OD, TMB04UD, TMB04VD,
TMB04XD, TMC01RD, TMC03ND, TSB01BD, TSB01DD, TSB02ND, TSB02OD, TSB02PD,
TSB02RD, TSB03OD, TSB03QD, TSB03SD, TSB03TD, TSB03UD, TSB04MD, TSB04ND,
TSB04OD, TSB04PD, TSB04QD, TSB04RD, TSB06ND, TSB08CD, TSB08DD, TSB08ED,
TSB08FD, TSB10DD, TSB10ED, TSB10FD, TSB10HD, TSG03AD, TSG03BD, TTB01PD,
TTB01UD, TTB01ZD, TTC01OD, TTG01AD, TTG01CD, TTG01DD, TTG01ED, TTG01FD,
TTG01HD, TTG01ID, TTG01JD
TAB09ED,: added the type declaration "INTRINSIC MIN".
TAB13BD,
TIB01CD, TMB02QD, TMB03OD, TMB03PD, TMB04GD, TSB03OD, TTG01CD, TTG01DD,
TTG01ED, TTG01FD,
Note: the changes related to the INTRINSIC declarations above
are not incorporated in the module files AB01ND.tar.gz,
etc., except when additional changes were needed.
TSB04MD,: LDWORK is at least 1.
TSB04QD
New Routines:
============
IB01MY : to compute the upper triangular factor in the QR factorization
of the concatenated block Hankel matrices, using a fast
QR algorithm.
MA02FD : to construct a hyperbolic plane rotation.
New Directory (under the subdirectory MatlabTools)
=============
contrib : contains externally contributed Matlab files and mexfiles
based on SLICOT library. Included are, currently, a Fortran
program, two routines, and other associated files for calling
SLICOT TB03AD routine from a Matlab environment. These files
were developed by Dr. P.-O. Malaterre and used to compare
SLICOT results with the Polynomial Toolbox results. The codes
are described in the NICONET Newsletter, 5, pp. 13-20,
July 2000.
Documentation:
=============
IB01AD,: corrected the length of DWORK and its description for ALG = 'F';
IB01MD corrected the factor K (for ALG = 'F') of the number of
connection elements (used in the description of DWORK).
IB01BD : the length of IWORK is now also specified for METH = 'C'.
SB04MD,: LDWORK is at least 1.
SB04QD
libindex, : added links to the new document files.
support
Corrected Bugs in m-files:
==========================
markov.m : the previously omitted term C*B was added, and the revised
code is more efficient.
findABCD.m, : few comments have been changed.
findAC.m,
findBD.m,
findBDK.m, findR.m, inistate.m, order.m, sident.m,
slgely.m, slgesg.m, slgest.m, slgsly.m, slgsst.m, slsylv.m
findx0BD.m : few comments have been changed, and the tests for withx0
and withd have been corrected.
inistate.m : the value for job when calling findBD for nargin = 6 has
been corrected.
Improved m-files:
================
slsylv.m : a new option enables to choose between Bartels-Stewart and
Hessenberg-Schur methods.
New m-files:
============
sldsyl.m : to solve discrete-time Sylvester equations.
slmoesp.m : to identify a linear system using MOESP approach.
sln4sid.m : to identify a linear system using N4SID approach.
slmoen4.m : to identify a linear system using combined MOESP and N4SID
approaches.
slmoesm.m : to identify a linear system using combined MOESP and
simulation approaches.
test_order : tests order.f for multiple data batches.
call_torder: calls test_order with different option combinations.
test_sl* : similarly, for * = moen4, moesm, moesp, or n4sid.
call_tsl*
Updated Mexfiles:
=================
linmeq : discrete-time Sylvester equations can now be solved;
Sylvester equations with op(A) = 'N', op(B) = 'T', or
op(A) = 'T', op(B) = 'N', can be solved.
A new option for Sylvester equations enables to select between
the Bartels-Stewart and Hessenberg-Schur methods.
order : few changes have been performed mainly for computing LDWORK
and LIWORK, and for saving the connection elements.
sident : few changes in the comments, and for computing LDWORK for METH = 'C'.
findBD : few changes in the comments, as well as for returning X0.
Also, the first dimension of U is not checked when M = 0.
Alternate Results:
=================
Recently, it has been drawn to our attention that some results obtained
using the SLICOT example programs could (slightly) depend on the
specific platform and LAPACK release installed. The files included in
the standard SLICOT collection (the compressed archives slicot.tar.gz,
slicotPC.zip, AB01MD.tar.gz, etc., as well as in the documentation
html files) have been obtained on a Sun Ultra 2 machine, using LAPACK
Release 2.0 (with additional Release 3.0 codes for the generalized
eigenproblems).
The differences that have been observed when using a PC and LAPACK
Release 3.0 are mainly due to the different Schur forms computed.
Namely, the 2-by-2 blocks could have the off-diagonal elements permuted,
or with the signs interchanged, and/or the diagonal blocks could come
in a different order, in which case the corresponding rows and columns
have different elements.
For convenience, the alternate results obtained on a PC with LAPACK
Release 3.0 are stored in the compressed tar file diff_results.tar.gz,
in the root directory of the SLICOT ftp site. Details are given in the
readme file included in the mentioned archive.
========================================================================
Update June 30, 2000
Corrected Bugs:
==============
AB09BX : if the order of the reduced system is zero, call AB09DD and
exit.
AB09CX : the system is transformed such that Ar is in a real Schur form
also for NR.EQ.NMINR.
MB01TD : the non-initialized value of DWORK(N) is no longer used.
The length of DWORK is N-1.
SB04MD : replaced 3*M by 5*M in the workspace length.
SB04ND
SB08HD : replaced the call of LAPACK routine DLAPMT by a call to the new
SB10HD SLICOT routine MA02GD.
TB03AD : replaced the call of LAPACK routine DLAPMT by a call to the new
SLICOT routine MA02GD;
corrected the description of the parameter QCOEFF when LERI ='R';
TTB03AD has been updated accordingly.
Improved Routines:
=================
SB03MX : replaced the calls to SLICOT routine SB03MU by either calls
to LAPACK routine DLALN2 (for linear systems of order 2), or
to the new, slightly more efficient SLICOT routine SB04PX
(for linear systems of order 4).
SB03OR : replaced the called routine SB03MU by the new, slightly more
efficient routine SB04PX.
SB04ND : calls DTRSYL when both matrices A and B are in real Schur form.
Updated Routines, due to the changes in MB03UD and in the LAPACK routines
================ DBDSQR and DGESVD (in LAPACK Release 3.0, Update
October 31, 1999):
AB09AX : replaced MAX(4*N, 5*N-4) by 5*N in a comment concerning
AB09BX, MB03UD.
AB13AX
MB02MD : replaced everywhere (in the workspace statements) "5*x-4" by
"5*x", due to the change in DGESVD.
MB02UD : replaced everywhere "4*L, 5*L-4" by "5*L", due to the change in
MB03UD.
MB03UD : replaced LDWORK = MAX(1, 4*N, 5*N-4) by LDWORK = MAX(1, 5*N),
due to the change in DBDSQR.
SB10DD, : replaced everywhere (in the workspace statements) "5*x-4" by
SB10ED, "5*x", due to the change in DGESVD.
SB10FD,
SB10HD,
SB10PD,
SB10UD
TG01ED : replaced 5*MIN(L,N)-4 by 5*MIN(L,N) in LDWORK, due to the
changes in MB03UD and in DGESVD.
Updated Example Programs:
========================
TMB01TD, TMB02MD : updated the length of LDWORK, due to the changes in
TMB03UD, TSB04MD MB01TD, MB02MD, MB03UD, SB04MD, SB04ND, and TG01ED,
TSB04ND, TTG01ED respectively.
TTB03AD : corrected printing of QCOEFF when LERI ='R'.
New Routines:
============
AB07ND : compute the inverse (Ai,Bi,Ci,Di) of a given system (A,B,C,D).
IB01AD : preprocess the input-output data for estimating the matrices
of a linear time-invariant dynamical system and find an
estimate of the system order. The input-output data can,
optionally, be processed sequentially.
IB01BD : estimate the system matrices A, C, B, and D, the noise
covariance matrices Q, Ry, and S, and the Kalman gain matrix K
of a linear time-invariant state space model, using the
processed triangular factor R of the concatenated block-Hankel
matrices, provided by SLICOT Library routine IB01AD.
IB01CD : estimate the initial state and, optionally, the system matrices
B and D of a linear time-invariant discrete-time system,
given the system matrices (A,B,C,D), or only the matrix pair
(A,C), and the input and output trajectories of the system.
IB01MD : compute the upper triangular factor in the QR factorization of
the block-Hankel matrix built from input-output data for
subspace identification.
IB01ND : find the singular value decomposition giving the system order,
using the triangular factor of the concatenated block-Hankel
matrices.
IB01OD : find the system order, using the singular value decomposition.
IB01OY : ask for user's confirmation of the system order found.
IB01PD : estimate the system matrices and covariance matrices of a
linear time-invariant state space model.
IB01PX : compute the matrices B and D of a linear time-invariant
state space model using Kronecker products.
IB01PY : compute the triangular QR factor of a structured matrix and
estimate the matrices B and D of a linear time-invariant
state space model.
IB01QD : estimate the initial state and the system matrices B and D of a
linear time-invariant state space model, given the matrix pair
(A,C) and the input and output trajectories.
IB01RD : estimate the initial state of a linear time-invariant state
space model, given the system matrices (A,B,C,D) and the input
and output trajectories.
MA02GD : perform a series of column interchanges on the matrix factored
by LAPACK Library routine DGETRF.
MB01VD : compute the Kronecker product of two matrices.
MB02VD : solve X*A = B or X*A' = B.
SB02PD : solve continuous-time Riccati equations by the matrix sign function
and estimate the reciprocal condition number and forward error
bound.
SB04PD : solve continuous-time or discrete-time Sylvester equations.
SB04PX : solve discrete-time Sylvester equations with matrices of order
at most 2 (slightly improved version of SB03MU).
SB04PY : solve discrete-time Sylvester equations with matrices in real
Schur form.
SB04QD : solve discrete-time Sylvester equations using the Hessenberg-Schur
method.
SB04QR : solve a linear algebraic system of order M whose coefficient
matrix has zeros below the third subdiagonal and zero elements on
the third subdiagonal with even column indices. The matrix is
stored compactly, row-wise.
SB04QU : construct and solve a linear algebraic system of order 2*M
whose coefficient matrix has zeros below the third subdiagonal,
and zero elements on the third subdiagonal with even column
indices. Such systems appear when solving discrete-time Sylvester
equations using the Hessenberg-Schur method.
SB04QY : construct and solve a linear algebraic system of order M whose
coefficient matrix is in upper Hessenberg form. Such systems
appear when solving discrete-time Sylvester equations using the
Hessenberg-Schur method.
SB04RD : solve for X the discrete-time Sylvester equation X + AXB = C,
with at least one of the matrices A or B in Schur form and the
other in Hessenberg or Schur form (both either upper or lower).
SB04RV : construct the right-hand sides for a system of equations in
Hessenberg form solved via SB04RX (case with 2 right-hand sides).
SB04RW : construct the right-hand side for a system of equations in
Hessenberg form solved via SB04RY (case with 1 right-hand side).
SB04RX : solve a system of equations in Hessenberg form with two
consecutive offdiagonals and two right-hand sides
(discrete-time case).
SB04RY : solve a system of equations in Hessenberg form with one
offdiagonal and one right-hand side (discrete-time case).
Documentation:
=============
MB01TD, MB02MD, : updated the length of LDWORK, due to the changes in
MB02UD, MB03UD, corresponding subroutines.
SB10DD, SB10ED,
SB10FD, SB10HD,
SB10PD, SB10UD,
TG01ED
SB04ND : TOL, IWORK and DWORK are not needed when both
matrices A and B are in real Schur form.
TB03AD : corrected the description of the parameter QCOEFF
when LERI ='R'.
New Mexfiles:
============
Three new mexfiles and ten Matlab m files have been added in the
subdirectories ./SLmex and ./SLTools, respectively. They are useful
for performing system identification using subspace techniques (MOESP,
N4SID, or their combination).
========================================================================
Update February 18, 2000
Known Bugs:
===========
TB03AD: Few days ago, a bug has been reported. It has been almost
fixed, but additional analysis and improvements are needed.
The routine will be replaced by the corrected one as soon as
possible.
Bugs Corrected:
==============
TAB13ED: deleted the second definition of the variable LDA.
TAB13FD
TAG08BD: changed a format statement to avoid a warning when using F90
TMB03WD compiler on a SUN machine.
New Routines Added:
==================
BB01AD : generate the benchmark examples for the numerical solution of
continuous-time algebraic Riccati equations (CAREs).
The associated data files have been added in the subdirectory
benchmark_data.
BB02AD : generate the benchmark examples for the numerical solution of
discrete-time algebraic Riccati equations (DAREs).
The associated data files have been added in the subdirectory
benchmark_data.
New Data Files Added:
====================
BB01*.dat: 14 data files to be used in conjunction with the new Riccati
BB02*.dat benchmark collections have been added in the subdirectory
benchmark_data.
Documentation:
=============
SB10HD : deleted the compound matrices in the description of the error
return INFO = 3.
SB10TD : replaced D2 by D22 in the formula from the NUMERICAL ASPECTS
section.
libindex : updated in the files slicot.tar.gz and slicotPC.zip.
New Mexfiles Added:
===================
aresolc.f: added (in conjunction with aresolc.m, test_aresolc.m).
The help file for the standard Riccati solver (aresol.m) has been
modified.
New Makefiles Added:
===================
Makefiles for compiling the library, as well as for linking and
running the example programs on PC's under Windows 95, 98, or
NT operating systems, have been added.
========================================================================
Update December 18, 1999
Bugs Corrected:
==============
SB04OD : initialized IJOB = 0 also when TRANS = 'T', to avoid an error
message for a non-initialized variable on some compilers.
TAB09CD: deleted the last " )" in "( NMAX*( NMAX + 1 ) )/2 )" from
the statement defining LDWORK.
TMB03OD: replaced "Row" by "Columns" in FORMAT statement 99994.
New Routines Added:
==================
AB13ED : estimates the distance from a real matrix to the nearest
complex matrix with an eigenvalue on the imaginary axis,
using bisection.
AB13FD : computes the distance from a real matrix to the nearest
complex matrix with an eigenvalue on the imaginary axis,
using bisection and SVD (quadratically convergent algorithm).
FD01AD : computes a fast recursive least-squares filter using a
QR-decomposition based approach.
MB03NY : computes the smallest singular value of A - jwI.
Changes in the organization of the compressed library files:
===========================================================
The directory tree structure of the compressed library files slicot.tar.gz,
for Unix platforms, and slicotPC.zip (former slicotPC.tar.gz), for Windows
platforms (Windows 95, 98, and NT), has been changed. The new tree
structure is as follows:
slicot : contains the files libindex.html, make.inc, makefile,
and the following subdirectories:
benchmark_data : contains benchmark data files for Fortran benchmark
routines (*.dat);
doc : contains SLICOT documentation files for routines,
(.html);
examples : contains SLICOT example programs, data, and
results (.f, .dat, .res), and makefile, for compiling,
linking and executing these programs;
src : contains SLICOT source files for routines (.f),
and makefile, for compiling all routines;
SLTools : contains Matlab .m files, mex files (optionally),
and data .mat files (optionally);
SLmex : contains Fortran source codes for mexfiles.
Currently, there are no makefiles for the PC version, and no executable
Matlab files (e.g., .dll files) have been included. These files may,
however, be separately taken from the ftp site.
New Directories Added:
=====================
FD/ : Fast Recursive Least Squares Filters.
FD01/
MatlabTools/ : Matlab files and mexfiles, contained in its
subdirectories:
Unix/ : Matlab files and mexfiles for Unix platforms.
SLTools/ : Matlab source and data files (.m and .mat).
SLmex/ : Fortran source codes for Matlab mexfiles based on
SLICOT library.
Windows/ : Matlab files and mexfiles for Windows platforms.
SLToolboxes/ : Matlab executable files (.dll) groupped in
several archives, according to their functionality.
SLTools/ : Matlab source and data files (.m and .mat).
SLdemos/ : Matlab source and executable files (.m, .mat, and .dll),
for a GUI-based demo.
SLmex/ : Fortran source codes for Matlab mexfiles based on
SLICOT library.
contrib/ : routines which were previously proposed for being
included in the SLICOT Library, but which could not
be included yet. These routines do not follow the
latest SLICOT Implementation and Documentation
Standards, but could be of interest to some users.
Included are G. Miminis' routines for solving the
Pole Placement Single-input or Multi-input problem,
and A.J. Geurts and C. Praagman's routines for
computing a unimodular polynomial matrix U(s) such
that R(s) = P(s) * U(s) is column reduced, given a
polynomial matrix P(s).
Note: the former directory Mexfiles (under SLICOT/ directory), and all
its subdirectories have been removed, their contents being replaced
by the contents of the new directory MatlabTools/ and its
subdirectories.
========================================================================
Update November 27, 1999
Important Notice: Release 4.0 of SLICOT Library took place
===========================================================
Release 4.0 of the SLICOT Library has been announced and took place
in November 27, 1999. All Library source files then contained the
Release 4.0 statement notice. Several routines, together to the
associated documentation files, example program files, data and results,
have been removed from SLICOT Release 3.0. The removed files have
better counterparts, and their removal has been announced in the
previous versions of the Release.Notes file (see Release3.History file).
The table below indicates the removed files, and their functionally
equivalent routines.
-----------------------------------------------------------------------
Table 1: Routines removed in Release 4.0 of the SLICOT Library and
their functional correspondents.
-----------------------------------------------------------------------
Routines removed Functionally equivalent routines
-----------------------------------------------------------------------
AB06MD.f TB01PD.f
MB04SD.f MB04UD.f
MB04TD.f MB04VD.f
TB01QD.f TB04AD.f
TB01QY.f TB04AY.f
TB01RD.f TB05AD.f
TB01SD.f TB03AD.f
TB01SY.f TB03AY.f
TC01MD.f TC05AD.f
TC01ND.f TC04AD.f
TD01MD.f TD05AD.f
TD01ND.f TD03AD.f
TD01NY.f TD03AY.f
TD01OD.f TD04AD.f
-----------------------------------------------------------------------
In addition, the entire subdirectory LAPACK_N of /pub/WGS/SLICOT/,
containing used LAPACK files not included in LAPACK Release 2.0, has
been removed, because the needed files are now included in the
LAPACK Release 3.0.
========================================================================