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
|
<HTML>
<HEAD><TITLE>AB13DX - SLICOT Library Routine Documentation</TITLE>
</HEAD>
<BODY>
<H2><A Name="AB13DX">AB13DX</A></H2>
<H3>
Maximum singular value of a transfer-function matrix
</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 compute the maximum singular value of a given continuous-time
or discrete-time transfer-function matrix, either standard or in
the descriptor form,
-1
G(lambda) = C*( lambda*E - A ) *B + D ,
for a given complex value lambda, where lambda = j*omega, in the
continuous-time case, and lambda = exp(j*omega), in the
discrete-time case. The matrices A, E, B, C, and D are real
matrices of appropriate dimensions. Matrix A must be in an upper
Hessenberg form, and if JOBE ='G', the matrix E must be upper
triangular. The matrices B and C must correspond to the system
in (generalized) Hessenberg form.
</PRE>
<A name="Specification"><B><FONT SIZE="+1">Specification</FONT></B></A>
<PRE>
DOUBLE PRECISION FUNCTION AB13DX( DICO, JOBE, JOBD, N, M, P,
$ OMEGA, A, LDA, E, LDE, B, LDB,
$ C, LDC, D, LDD, IWORK, DWORK,
$ LDWORK, ZWORK, LZWORK, INFO )
C .. Scalar Arguments ..
CHARACTER DICO, JOBD, JOBE
INTEGER INFO, LDA, LDB, LDC, LDD, LDE, LDWORK, LZWORK,
$ M, N, P
DOUBLE PRECISION OMEGA
C .. Array Arguments ..
COMPLEX*16 ZWORK( * )
DOUBLE PRECISION A( LDA, * ), B( LDB, * ), C( LDC, * ),
$ D( LDD, * ), DWORK( * ), E( LDE, * )
INTEGER IWORK( * )
</PRE>
<B><FONT SIZE="+1">Function Value</FONT></B>
<PRE>
AB13DX DOUBLE PRECISION
The maximum singular value of G(lambda).
</PRE>
<A name="Arguments"><B><FONT SIZE="+1">Arguments</FONT></B></A>
<P>
<B>Mode Parameters</B>
<PRE>
DICO CHARACTER*1
Specifies the type of the system, as follows:
= 'C': continuous-time system;
= 'D': discrete-time system.
JOBE CHARACTER*1
Specifies whether E is an upper triangular or an identity
matrix, as follows:
= 'G': E is a general upper triangular matrix;
= 'I': E is the identity matrix.
JOBD CHARACTER*1
Specifies whether or not a non-zero matrix D appears in
the given state space model:
= 'D': D is present;
= 'Z': D is assumed a zero matrix.
</PRE>
<B>Input/Output Parameters</B>
<PRE>
N (input) INTEGER
The order of the system. N >= 0.
M (input) INTEGER
The column size of the matrix B. M >= 0.
P (input) INTEGER
The row size of the matrix C. P >= 0.
OMEGA (input) DOUBLE PRECISION
The frequency value for which the calculations should be
done.
A (input/output) DOUBLE PRECISION array, dimension (LDA,N)
On entry, the leading N-by-N upper Hessenberg part of this
array must contain the state dynamics matrix A in upper
Hessenberg form. The elements below the subdiagonal are
not referenced.
On exit, if M > 0, P > 0, OMEGA = 0, DICO = 'C', B <> 0,
and C <> 0, the leading N-by-N upper Hessenberg part of
this array contains the factors L and U from the LU
factorization of A (A = P*L*U); the unit diagonal elements
of L are not stored, L is lower bidiagonal, and P is
stored in IWORK (see SLICOT Library routine MB02SD).
Otherwise, this array is unchanged on exit.
LDA INTEGER
The leading dimension of the array A. LDA >= max(1,N).
E (input) DOUBLE PRECISION array, dimension (LDE,N)
If JOBE = 'G', the leading N-by-N upper triangular part of
this array must contain the upper triangular descriptor
matrix E of the system. The elements of the strict lower
triangular part of this array are not referenced.
If JOBE = 'I', then E is assumed to be the identity
matrix and is not referenced.
LDE INTEGER
The leading dimension of the array E.
LDE >= MAX(1,N), if JOBE = 'G';
LDE >= 1, if JOBE = 'I'.
B (input/output) DOUBLE PRECISION array, dimension (LDB,M)
On entry, the leading N-by-M part of this array must
contain the system input matrix B.
On exit, if M > 0, P > 0, OMEGA = 0, DICO = 'C', B <> 0,
C <> 0, and INFO = 0 or N+1, the leading N-by-M part of
this array contains the solution of the system A*X = B.
Otherwise, this array is unchanged on exit.
LDB INTEGER
The leading dimension of the array B. LDB >= max(1,N).
C (input) DOUBLE PRECISION array, dimension (LDC,N)
The leading P-by-N part of this array must contain the
system output matrix C.
LDC INTEGER
The leading dimension of the array C. LDC >= max(1,P).
D (input/output) DOUBLE PRECISION array, dimension (LDD,M)
On entry, if JOBD = 'D', the leading P-by-M part of this
array must contain the direct transmission matrix D.
On exit, if (N = 0, or B = 0, or C = 0) and JOBD = 'D',
or (OMEGA = 0, DICO = 'C', JOBD = 'D', and INFO = 0 or
N+1), the contents of this array is destroyed.
Otherwise, this array is unchanged on exit.
This array is not referenced if JOBD = 'Z'.
LDD INTEGER
The leading dimension of array D.
LDD >= MAX(1,P), if JOBD = 'D';
LDD >= 1, if JOBD = 'Z'.
</PRE>
<B>Workspace</B>
<PRE>
IWORK INTEGER array, dimension (LIWORK), where
LIWORK = N, if N > 0, M > 0, P > 0, B <> 0, and C <> 0;
LIWORK = 0, otherwise.
This array contains the pivot indices in the LU
factorization of the matrix lambda*E - A; for 1 <= i <= N,
row i of the matrix was interchanged with row IWORK(i).
DWORK DOUBLE PRECISION array, dimension (LDWORK)
On exit, if INFO = 0, DWORK(1) contains the optimal value
of LDWORK, and DWORK(2), ..., DWORK(MIN(P,M)) contain the
singular values of G(lambda), except for the first one,
which is returned in the function value AB13DX.
If (N = 0, or B = 0, or C = 0) and JOBD = 'Z', the last
MIN(P,M)-1 zero singular values of G(lambda) are not
stored in DWORK(2), ..., DWORK(MIN(P,M)).
LDWORK INTEGER
The dimension of the array DWORK.
LDWORK >= MAX(1, LDW1 + LDW2 ),
LDW1 = P*M, if N > 0, B <> 0, C <> 0, OMEGA = 0,
DICO = 'C', and JOBD = 'Z';
LDW1 = 0, otherwise;
LDW2 = MIN(P,M) + MAX(3*MIN(P,M) + MAX(P,M), 5*MIN(P,M)),
if (N = 0, or B = 0, or C = 0) and JOBD = 'D',
or (N > 0, B <> 0, C <> 0, OMEGA = 0, and
DICO = 'C');
LDW2 = 0, if (N = 0, or B = 0, or C = 0) and JOBD = 'Z',
or MIN(P,M) = 0;
LDW2 = 6*MIN(P,M), otherwise.
For good performance, LDWORK must generally be larger.
ZWORK COMPLEX*16 array, dimension (LZWORK)
On exit, if INFO = 0, ZWORK(1) contains the optimal
LZWORK.
LZWORK INTEGER
The dimension of the array ZWORK.
LZWORK >= 1, if N = 0, or B = 0, or C = 0, or (OMEGA = 0
and DICO = 'C') or MIN(P,M) = 0;
LZWORK >= MAX(1, (N+M)*(N+P) + 2*MIN(P,M) + MAX(P,M)),
otherwise.
For good performance, LZWORK must generally be larger.
</PRE>
<B>Error Indicator</B>
<PRE>
INFO INTEGER
= 0: successful exit;
< 0: if INFO = -i, the i-th argument had an illegal
value;
> 0: if INFO = i, U(i,i) is exactly zero; the LU
factorization of the matrix lambda*E - A has been
completed, but the factor U is exactly singular,
i.e., the matrix lambda*E - A is exactly singular;
= N+1: the SVD algorithm for computing singular values
did not converge.
</PRE>
<A name="Method"><B><FONT SIZE="+1">Method</FONT></B></A>
<PRE>
The routine implements standard linear algebra calculations,
taking problem structure into account. LAPACK Library routines
DGESVD and ZGESVD are used for finding the singular values.
</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>
|