1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305
|
<HTML>
<HEAD><TITLE>IB01PX - SLICOT Library Routine Documentation</TITLE>
</HEAD>
<BODY>
<H2><A Name="IB01PX">IB01PX</A></H2>
<H3>
Estimating system matrices B and D using Kronecker products
</H3>
<A HREF ="#Specification"><B>[Specification]</B></A>
<A HREF ="#Arguments"><B>[Arguments]</B></A>
<A HREF ="#Method"><B>[Method]</B></A>
<A HREF ="#References"><B>[References]</B></A>
<A HREF ="#Comments"><B>[Comments]</B></A>
<A HREF ="#Example"><B>[Example]</B></A>
<P>
<B><FONT SIZE="+1">Purpose</FONT></B>
<PRE>
To build and solve the least squares problem T*X = Kv, and
estimate the matrices B and D of a linear time-invariant (LTI)
state space model, using the solution X, and the singular
value decomposition information and other intermediate results,
provided by other routines.
The matrix T is computed as a sum of Kronecker products,
T = T + kron(Uf(:,(i-1)*m+1:i*m),N_i), for i = 1 : s,
(with T initialized by zero), where Uf is the triangular
factor of the QR factorization of the future input part (see
SLICOT Library routine IB01ND), N_i is given by the i-th block
row of the matrix
[ Q_11 Q_12 ... Q_1,s-2 Q_1,s-1 Q_1s ] [ I_L 0 ]
[ Q_12 Q_13 ... Q_1,s-1 Q_1s 0 ] [ ]
N = [ Q_13 Q_14 ... Q_1s 0 0 ] * [ ],
[ : : : : : ] [ ]
[ Q_1s 0 ... 0 0 0 ] [ 0 GaL ]
and where
[ -L_1|1 ] [ M_i-1 - L_1|i ]
Q_11 = [ ], Q_1i = [ ], i = 2:s,
[ I_L - L_2|1 ] [ -L_2|i ]
are (n+L)-by-L matrices, and GaL is built from the first n
relevant singular vectors, GaL = Un(1:L(s-1),1:n), computed
by IB01ND.
The vector Kv is vec(K), with the matrix K defined by
K = [ K_1 K_2 K_3 ... K_s ],
where K_i = K(:,(i-1)*m+1:i*m), i = 1:s, is (n+L)-by-m.
The given matrices are Uf, GaL, and
[ L_1|1 ... L_1|s ]
L = [ ], (n+L)-by-L*s,
[ L_2|1 ... L_2|s ]
M = [ M_1 ... M_s-1 ], n-by-L*(s-1), and
K, (n+L)-by-m*s.
Matrix M is the pseudoinverse of the matrix GaL, computed by
SLICOT Library routine IB01PD.
</PRE>
<A name="Specification"><B><FONT SIZE="+1">Specification</FONT></B></A>
<PRE>
SUBROUTINE IB01PX( JOB, NOBR, N, M, L, UF, LDUF, UN, LDUN, UL,
$ LDUL, PGAL, LDPGAL, K, LDK, R, LDR, X, B, LDB,
$ D, LDD, TOL, IWORK, DWORK, LDWORK, IWARN,
$ INFO )
C .. Scalar Arguments ..
DOUBLE PRECISION TOL
INTEGER INFO, IWARN, L, LDB, LDD, LDK, LDPGAL, LDR,
$ LDUF, LDUL, LDUN, LDWORK, M, N, NOBR
CHARACTER JOB
C .. Array Arguments ..
DOUBLE PRECISION B(LDB, *), D(LDD, *), DWORK(*), K(LDK, *),
$ PGAL(LDPGAL, *), R(LDR, *), UF(LDUF, *),
$ UL(LDUL, *), UN(LDUN, *), X(*)
INTEGER IWORK( * )
</PRE>
<A name="Arguments"><B><FONT SIZE="+1">Arguments</FONT></B></A>
<P>
<B>Mode Parameters</B>
<PRE>
JOB CHARACTER*1
Specifies which of the matrices B and D should be
computed, as follows:
= 'B': compute the matrix B, but not the matrix D;
= 'D': compute both matrices B and D.
</PRE>
<B>Input/Output Parameters</B>
<PRE>
NOBR (input) INTEGER
The number of block rows, s, in the input and output
Hankel matrices processed by other routines. NOBR > 1.
N (input) INTEGER
The order of the system. NOBR > N > 0.
M (input) INTEGER
The number of system inputs. M >= 0.
L (input) INTEGER
The number of system outputs. L > 0.
UF (input/output) DOUBLE PRECISION array, dimension
( LDUF,M*NOBR )
On entry, the leading M*NOBR-by-M*NOBR upper triangular
part of this array must contain the upper triangular
factor of the QR factorization of the future input part,
as computed by SLICOT Library routine IB01ND.
The strict lower triangle need not be set to zero.
On exit, the leading M*NOBR-by-M*NOBR upper triangular
part of this array is unchanged, and the strict lower
triangle is set to zero.
LDUF INTEGER
The leading dimension of the array UF.
LDUF >= MAX( 1, M*NOBR ).
UN (input) DOUBLE PRECISION array, dimension ( LDUN,N )
The leading L*(NOBR-1)-by-N part of this array must
contain the matrix GaL, i.e., the leading part of the
first N columns of the matrix Un of relevant singular
vectors.
LDUN INTEGER
The leading dimension of the array UN.
LDUN >= L*(NOBR-1).
UL (input/output) DOUBLE PRECISION array, dimension
( LDUL,L*NOBR )
On entry, the leading (N+L)-by-L*NOBR part of this array
must contain the given matrix L.
On exit, if M > 0, the leading (N+L)-by-L*NOBR part of
this array is overwritten by the matrix
[ Q_11 Q_12 ... Q_1,s-2 Q_1,s-1 Q_1s ].
LDUL INTEGER
The leading dimension of the array UL. LDUL >= N+L.
PGAL (input) DOUBLE PRECISION array, dimension
( LDPGAL,L*(NOBR-1) )
The leading N-by-L*(NOBR-1) part of this array must
contain the pseudoinverse of the matrix GaL, computed by
SLICOT Library routine IB01PD.
LDPGAL INTEGER
The leading dimension of the array PGAL. LDPGAL >= N.
K (input) DOUBLE PRECISION array, dimension ( LDK,M*NOBR )
The leading (N+L)-by-M*NOBR part of this array must
contain the given matrix K.
LDK INTEGER
The leading dimension of the array K. LDK >= N+L.
R (output) DOUBLE PRECISION array, dimension ( LDR,M*(N+L) )
The leading (N+L)*M*NOBR-by-M*(N+L) part of this array
contains details of the complete orthogonal factorization
of the coefficient matrix T of the least squares problem
which is solved for getting the system matrices B and D.
LDR INTEGER
The leading dimension of the array R.
LDR >= MAX( 1, (N+L)*M*NOBR ).
X (output) DOUBLE PRECISION array, dimension
( (N+L)*M*NOBR )
The leading M*(N+L) elements of this array contain the
least squares solution of the system T*X = Kv.
The remaining elements are used as workspace (to store the
corresponding part of the vector Kv = vec(K)).
B (output) DOUBLE PRECISION array, dimension ( LDB,M )
The leading N-by-M part of this array contains the system
input matrix.
LDB INTEGER
The leading dimension of the array B. LDB >= N.
D (output) DOUBLE PRECISION array, dimension ( LDD,M )
If JOB = 'D', the leading L-by-M part of this array
contains the system input-output matrix.
If JOB = 'B', this array is not referenced.
LDD INTEGER
The leading dimension of the array D.
LDD >= L, if JOB = 'D';
LDD >= 1, if JOB = 'B'.
</PRE>
<B>Tolerances</B>
<PRE>
TOL DOUBLE PRECISION
The tolerance to be used for estimating the rank of
matrices. If the user sets TOL > 0, then the given value
of TOL is used as a lower bound for the reciprocal
condition number; an m-by-n matrix whose estimated
condition number is less than 1/TOL is considered to
be of full rank. If the user sets TOL <= 0, then an
implicitly computed, default tolerance, defined by
TOLDEF = m*n*EPS, is used instead, where EPS is the
relative machine precision (see LAPACK Library routine
DLAMCH).
</PRE>
<B>Workspace</B>
<PRE>
IWORK INTEGER array, dimension ( M*(N+L) )
DWORK DOUBLE PRECISION array, dimension ( LDWORK )
On exit, if INFO = 0, DWORK(1) returns the optimal value
of LDWORK, and, if M > 0, DWORK(2) contains the
reciprocal condition number of the triangular factor of
the matrix T.
On exit, if INFO = -26, DWORK(1) returns the minimum
value of LDWORK.
LDWORK INTEGER
The length of the array DWORK.
LDWORK >= MAX( (N+L)*(N+L), 4*M*(N+L)+1 ).
For good performance, LDWORK should be larger.
</PRE>
<B>Warning Indicator</B>
<PRE>
IWARN INTEGER
= 0: no warning;
= 4: the least squares problem to be solved has a
rank-deficient coefficient matrix.
</PRE>
<B>Error Indicator</B>
<PRE>
INFO INTEGER
= 0: successful exit;
< 0: if INFO = -i, the i-th argument had an illegal
value.
</PRE>
<A name="Method"><B><FONT SIZE="+1">Method</FONT></B></A>
<PRE>
The matrix T is computed, evaluating the sum of Kronecker
products, and then the linear system T*X = Kv is solved in a
least squares sense. The matrices B and D are then directly
obtained from the least squares solution.
</PRE>
<A name="References"><B><FONT SIZE="+1">References</FONT></B></A>
<PRE>
[1] Verhaegen M., and Dewilde, P.
Subspace Model Identification. Part 1: The output-error
state-space model identification class of algorithms.
Int. J. Control, 56, pp. 1187-1210, 1992.
[2] Van Overschee, P., and De Moor, B.
N4SID: Two Subspace Algorithms for the Identification
of Combined Deterministic-Stochastic Systems.
Automatica, Vol.30, No.1, pp. 75-93, 1994.
[3] Van Overschee, P.
Subspace Identification : Theory - Implementation -
Applications.
Ph. D. Thesis, Department of Electrical Engineering,
Katholieke Universiteit Leuven, Belgium, Feb. 1995.
</PRE>
<A name="Numerical Aspects"><B><FONT SIZE="+1">Numerical Aspects</FONT></B></A>
<PRE>
The implemented method is numerically stable.
</PRE>
<A name="Comments"><B><FONT SIZE="+1">Further Comments</FONT></B></A>
<PRE>
None
</PRE>
<A name="Example"><B><FONT SIZE="+1">Example</FONT></B></A>
<P>
<B>Program Text</B>
<PRE>
None
</PRE>
<B>Program Data</B>
<PRE>
None
</PRE>
<B>Program Results</B>
<PRE>
None
</PRE>
<HR>
<A HREF=support.html><B>Return to Supporting Routines index</B></A></BODY>
</HTML>
|