**Purpose**

To compute the inverse (Ai-lambda*Ei,Bi,Ci,Di) of a given descriptor system (A-lambda*E,B,C,D).

SUBROUTINE AG07BD( JOBE, N, M, A, LDA, E, LDE, B, LDB, C, LDC, $ D, LDD, AI, LDAI, EI, LDEI, BI, LDBI, CI, LDCI, $ DI, LDDI, INFO ) C .. Scalar Arguments .. CHARACTER JOBE INTEGER INFO, LDA, LDAI, LDB, LDBI, LDC, LDCI, $ LDD, LDDI, LDE, LDEI, M, N C .. Array Arguments .. DOUBLE PRECISION A(LDA,*), AI(LDAI,*), B(LDB,*), BI(LDBI,*), $ C(LDC,*), CI(LDCI,*), D(LDD,*), DI(LDDI,*), $ E(LDE,*), EI(LDEI,*)

**Mode Parameters**

JOBE CHARACTER*1 Specifies whether E is a general square or an identity matrix as follows: = 'G': E is a general square matrix; = 'I': E is the identity matrix.

N (input) INTEGER The order of the square matrices A and E; also the number of rows of matrix B and the number of columns of matrix C. N >= 0. M (input) INTEGER The number of system inputs and outputs, i.e., the number of columns of matrices B and D and the number of rows of matrices C and D. M >= 0. A (input) DOUBLE PRECISION array, dimension (LDA,N) The leading N-by-N part of this array must contain the state matrix A of the original system. 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 part of this array must contain the descriptor matrix E of the original system. 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) DOUBLE PRECISION array, dimension (LDB,M) The leading N-by-M part of this array must contain the input matrix B of the original system. LDB INTEGER The leading dimension of the array B. LDB >= MAX(1,N). C (input) DOUBLE PRECISION array, dimension (LDC,N) The leading M-by-N part of this array must contain the output matrix C of the original system. LDC INTEGER The leading dimension of the array C. LDC >= MAX(1,M). D (input) DOUBLE PRECISION array, dimension (LDD,M) The leading M-by-M part of this array must contain the feedthrough matrix D of the original system. LDD INTEGER The leading dimension of the array D. LDD >= MAX(1,M). AI (output) DOUBLE PRECISION array, dimension (LDAI,N+M) The leading (N+M)-by-(N+M) part of this array contains the state matrix Ai of the inverse system. If LDAI = LDA >= N+M, then AI and A can share the same storage locations. LDAI INTEGER The leading dimension of the array AI. LDAI >= MAX(1,N+M). EI (output) DOUBLE PRECISION array, dimension (LDEI,N+M) The leading (N+M)-by-(N+M) part of this array contains the descriptor matrix Ei of the inverse system. If LDEI = LDE >= N+M, then EI and E can share the same storage locations. LDEI INTEGER The leading dimension of the array EI. LDEI >= MAX(1,N+M). BI (output) DOUBLE PRECISION array, dimension (LDBI,M) The leading (N+M)-by-M part of this array contains the input matrix Bi of the inverse system. If LDBI = LDB >= N+M, then BI and B can share the same storage locations. LDBI INTEGER The leading dimension of the array BI. LDBI >= MAX(1,N+M). CI (output) DOUBLE PRECISION array, dimension (LDCI,N+M) The leading M-by-(N+M) part of this array contains the output matrix Ci of the inverse system. If LDCI = LDC, CI and C can share the same storage locations. LDCI INTEGER The leading dimension of the array CI. LDCI >= MAX(1,M). DI (output) DOUBLE PRECISION array, dimension (LDDI,M) The leading M-by-M part of this array contains the feedthrough matrix Di = 0 of the inverse system. DI and D can share the same storage locations. LDDI INTEGER The leading dimension of the array DI. LDDI >= MAX(1,M).

INFO INTEGER = 0: successful exit; < 0: if INFO = -i, the i-th argument had an illegal value.

The matrices of the inverse system are computed with the formulas ( E 0 ) ( A B ) ( 0 ) Ei = ( ) , Ai = ( ) , Bi = ( ), ( 0 0 ) ( C D ) ( -I ) Ci = ( 0 I ), Di = 0.

The routine does not perform an invertibility test. This check can be performed by using the SLICOT routines AB08NX or AG08BY.

**Program Text**

None

None

None