File: MB04RS.html

package info (click to toggle)
slicot 5.9.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 23,528 kB
  • sloc: fortran: 148,076; makefile: 964; sh: 57
file content (201 lines) | stat: -rw-r--r-- 7,131 bytes parent folder | download | duplicates (2)
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
<HTML>
<HEAD><TITLE>MB04RS - SLICOT Library Routine Documentation</TITLE>
</HEAD>
<BODY>

<H2><A Name="MB04RS">MB04RS</A></H2>
<H3>
Solution of a generalized real Sylvester equation with matrix pairs in generalized real Schur form
</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 solve the generalized real Sylvester equation

           A * R - L * B = scale * C,                            (1)
           D * R - L * E = scale * F,

  using Level 1 and 2 BLAS, where R and L are unknown real M-by-N
  matrices, and (A, D), (B, E) and (C, F) are given matrix pairs of
  size M-by-M, N-by-N and M-by-N, respectively. (A,D) and (B,E) must
  be in generalized Schur canonical form, i.e., A, B are upper
  quasi-triangular and D, E are upper triangular.

  The solution (R, L) overwrites (C, F). 0 &lt;= SCALE &lt;= 1 is an
  output scaling factor chosen to avoid overflow.

  This routine is intended to be called only by SLICOT Library
  routine MB04RT. For efficiency purposes, the computations are
  aborted when the absolute value of an element of R or L is greater
  than a given value PMAX.

</PRE>
<A name="Specification"><B><FONT SIZE="+1">Specification</FONT></B></A>
<PRE>
      SUBROUTINE MB04RS( M, N, PMAX, A, LDA, B, LDB, C, LDC, D, LDD, E,
     $                   LDE, F, LDF, SCALE, IWORK, INFO )
C     .. Scalar Arguments ..
      INTEGER            INFO, LDA, LDB, LDC, LDD, LDE, LDF, M, N
      DOUBLE PRECISION   PMAX, SCALE
C     .. Array Arguments ..
      INTEGER            IWORK( * )
      DOUBLE PRECISION   A( LDA, * ), B( LDB, * ), C( LDC, * ),
     $                   D( LDD, * ), E( LDE, * ), F( LDF, * )

</PRE>
<A name="Arguments"><B><FONT SIZE="+1">Arguments</FONT></B></A>
<P>

</PRE>
<B>Input/Output Parameters</B>
<PRE>
  M       (input) INTEGER
          The order of the matrices A and D, and the row dimension
          of C, F, R and L.  M &gt;= 0.

  N       (input) INTEGER
          The order of the matrices B and E, and the column
          dimension of C, F, R and L.  N &gt;= 0.

  PMAX    (input) DOUBLE PRECISION
          An upper bound for the absolute value of the elements of
          the solution (R, L).  PMAX &gt;= 1.0D0.

  A       (input) DOUBLE PRECISION array, dimension (LDA, M)
          On entry, the leading M-by-M upper quasi-triangular part
          of this array must contain the matrix A in the generalized
          real Schur form, as returned by LAPACK routine DGGES.

  LDA     INTEGER
          The leading dimension of the array A.  LDA &gt;= max(1, M).

  B       (input) DOUBLE PRECISION array, dimension (LDB, N)
          On entry, the leading N-by-N upper quasi-triangular part
          of this array must contain the matrix B in the generalized
          real Schur form.

  LDB     INTEGER
          The leading dimension of the array B.  LDB &gt;= max(1, N).

  C       (input/output) DOUBLE PRECISION array, dimension (LDC, N)
          On entry, the leading M-by-N part of this array must
          contain the right-hand-side of the first matrix equation
          in (1).
          On exit, if INFO = 0, the leading M-by-N part of this
          array contains the solution R.

  LDC     INTEGER
          The leading dimension of the array C.  LDC &gt;= max(1, M).

  D       (input) DOUBLE PRECISION array, dimension (LDD, M)
          On entry, the leading M-by-M upper triangular part of this
          array must contain the matrix D in the generalized real
          Schur form. The diagonal elements are non-negative.

  LDD     INTEGER
          The leading dimension of the array D.  LDD &gt;= max(1, M).

  E       (input) DOUBLE PRECISION array, dimension (LDE, N)
          On entry, the leading N-by-N upper triangular part of this
          array must contain the matrix E in the generalized real
          Schur form. The diagonal elements are non-negative.

  LDE     INTEGER
          The leading dimension of the array E.  LDE &gt;= max(1, N).

  F       (input/output) DOUBLE PRECISION array, dimension (LDF, N)
          On entry, the leading M-by-N part of this array must
          contain the right-hand-side of the second matrix equation
          in (1).
          On exit, if INFO = 0, the leading M-by-N part of this
          array contains the solution L.

  LDF     INTEGER
          The leading dimension of the array F.  LDF &gt;= max(1, M).

  SCALE   (output) DOUBLE PRECISION
          On exit, 0 &lt;= SCALE &lt;= 1. If 0 &lt; SCALE &lt; 1, the solutions
          R and L (C and F on entry) will hold the solutions to a
          slightly perturbed system but the input matrices A, B, D
          and E have not been changed. If SCALE = 0, R and L will
          hold the solutions to the homogeneous system with C = 0
          and F = 0. Normally, SCALE = 1.

</PRE>
<B>Workspace</B>
<PRE>
  IWORK   INTEGER array, dimension (M+N+2)

</PRE>
<B>Error Indicator</B>
<PRE>
  INFO    INTEGER
          = 0:  successful exit;
          = 1:  an element of R or L had the absolute value greater
                than the given value PMAX.
          = 2:  the matrix pairs (A, D) and (B, E) have common or
                very close eigenvalues. The matrix Z in section
                METHOD is (almost) singular.

</PRE>
<A name="Method"><B><FONT SIZE="+1">Method</FONT></B></A>
<PRE>
  The routine uses an adaptation of the method for solving
  generalized Sylvester equations [1], which controls the magnitude
  of the individual elements of the computed solution [2].

  In matrix notation, solving equation (1) corresponds to solve
  Zx = scale * b, where Z is defined as

         Z = [ kron(In, A)  -kron(B', Im) ]                      (2)
             [ kron(In, D)  -kron(E', Im) ],

  Ik is the identity matrix of size k and X' is the transpose of X.
  kron(X, Y) is the Kronecker product between the matrices X and Y.
  The routine solves a number of systems (2) with n and m at most 2.

</PRE>
<A name="References"><B><FONT SIZE="+1">References</FONT></B></A>
<PRE>
  [1] Kagstrom, B. and Westin, L.
      Generalized Schur Methods with Condition Estimators for
      Solving the Generalized Sylvester Equation.
      IEEE Trans. Auto. Contr., 34, pp. 745-751, 1989.
  [2] Kagstrom, B. and Westin, L.
      GSYLV - Fortran Routines for the Generalized Schur Method with
      Dif Estimators for Solving the Generalized Sylvester Equation.
      Report UMINF-132.86, Institute of Information Processing,
      Univ. of Umea, Sweden, July 1987.

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