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