Purpose
To separate the strictly proper part G0 from the constant part D of an P-by-M proper transfer function matrix G.Specification
SUBROUTINE TB04BV( ORDER, P, M, MD, IGN, LDIGN, IGD, LDIGD, GN, $ GD, D, LDD, TOL, INFO ) C .. Scalar Arguments .. CHARACTER ORDER DOUBLE PRECISION TOL INTEGER INFO, LDD, LDIGD, LDIGN, M, MD, P C .. Array Arguments .. DOUBLE PRECISION D(LDD,*), GD(*), GN(*) INTEGER IGD(LDIGD,*), IGN(LDIGN,*)Arguments
Mode Parameters
ORDER CHARACTER*1 Specifies the order in which the polynomial coefficients of the transfer function matrix are stored, as follows: = 'I': Increasing order of powers of the indeterminate; = 'D': Decreasing order of powers of the indeterminate.Input/Output Parameters
P (input) INTEGER The number of the system outputs. P >= 0. M (input) INTEGER The number of the system inputs. M >= 0. MD (input) INTEGER The maximum degree of the polynomials in G, plus 1, i.e., MD = MAX(IGD(I,J)) + 1. I,J IGN (input/output) INTEGER array, dimension (LDIGN,M) On entry, the leading P-by-M part of this array must contain the degrees of the numerator polynomials in G: the (i,j) element of IGN must contain the degree of the numerator polynomial of the polynomial ratio G(i,j). On exit, the leading P-by-M part of this array contains the degrees of the numerator polynomials in G0. LDIGN INTEGER The leading dimension of array IGN. LDIGN >= max(1,P). IGD (input) INTEGER array, dimension (LDIGD,M) The leading P-by-M part of this array must contain the degrees of the denominator polynomials in G (and G0): the (i,j) element of IGD contains the degree of the denominator polynomial of the polynomial ratio G(i,j). LDIGD INTEGER The leading dimension of array IGD. LDIGD >= max(1,P). GN (input/output) DOUBLE PRECISION array, dimension (P*M*MD) On entry, this array must contain the coefficients of the numerator polynomials, Num(i,j), of the transfer function matrix G. The polynomials are stored in a column-wise order, i.e., Num(1,1), Num(2,1), ..., Num(P,1), Num(1,2), Num(2,2), ..., Num(P,2), ..., Num(1,M), Num(2,M), ..., Num(P,M); MD memory locations are reserved for each polynomial, hence, the (i,j) polynomial is stored starting from the location ((j-1)*P+i-1)*MD+1. The coefficients appear in increasing or decreasing order of the powers of the indeterminate, according to ORDER. On exit, this array contains the coefficients of the numerator polynomials of the strictly proper part G0 of the transfer function matrix G, stored similarly. GD (input) DOUBLE PRECISION array, dimension (P*M*MD) This array must contain the coefficients of the denominator polynomials, Den(i,j), of the transfer function matrix G. The polynomials are stored as for the numerator polynomials. D (output) DOUBLE PRECISION array, dimension (LDD,M) The leading P-by-M part of this array contains the matrix D. LDD INTEGER The leading dimension of array D. LDD >= max(1,P).Tolerances
TOL DOUBLE PRECISION The tolerance to be used in determining the degrees of the numerators Num0(i,j) of the strictly proper part of the transfer function matrix G. If the user sets TOL > 0, then the given value of TOL is used as an absolute tolerance; the leading coefficients with absolute value less than TOL are considered neglijible. If the user sets TOL <= 0, then an implicitly computed, default tolerance, defined by TOLDEF = IGN(i,j)*EPS*NORM( Num(i,j) ) is used instead, where EPS is the machine precision (see LAPACK Library routine DLAMCH), and NORM denotes the infinity norm (the maximum coefficient in absolute value).Error Indicator
INFO INTEGER = 0: successful exit; < 0: if INFO = -i, the i-th argument had an illegal value; = 1: if the transfer function matrix is not proper; = 2: if a denominator polynomial is null.Method
The (i,j) entry of the real matrix D is zero, if the degree of Num(i,j), IGN(i,j), is less than the degree of Den(i,j), IGD(i,j), and it is given by the ratio of the leading coefficients of Num(i,j) and Den(i,j), if IGN(i,j) is equal to IGD(i,j), for i = 1 : P, and for j = 1 : M.Further Comments
For maximum efficiency of index calculations, GN and GD are implemented as one-dimensional arrays.Example
Program Text
NoneProgram Data
NoneProgram Results
None