235 lines
7.9 KiB
Fortran
235 lines
7.9 KiB
Fortran
SUBROUTINE TF01QD( NC, NB, N, IORD, AR, MA, H, LDH, INFO )
|
|
C
|
|
C SLICOT RELEASE 5.0.
|
|
C
|
|
C Copyright (c) 2002-2009 NICONET e.V.
|
|
C
|
|
C This program is free software: you can redistribute it and/or
|
|
C modify it under the terms of the GNU General Public License as
|
|
C published by the Free Software Foundation, either version 2 of
|
|
C the License, or (at your option) any later version.
|
|
C
|
|
C This program is distributed in the hope that it will be useful,
|
|
C but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
C GNU General Public License for more details.
|
|
C
|
|
C You should have received a copy of the GNU General Public License
|
|
C along with this program. If not, see
|
|
C <http://www.gnu.org/licenses/>.
|
|
C
|
|
C PURPOSE
|
|
C
|
|
C To compute N Markov parameters M(1), M(2),..., M(N) from a
|
|
C multivariable system whose transfer function matrix G(z) is given.
|
|
C
|
|
C ARGUMENTS
|
|
C
|
|
C Input/Output Parameters
|
|
C
|
|
C NC (input) INTEGER
|
|
C The number of system outputs, i.e. the number of rows in
|
|
C the transfer function matrix G(z). NC >= 0.
|
|
C
|
|
C NB (input) INTEGER
|
|
C The number of system inputs, i.e. the number of columns in
|
|
C the transfer function matrix G(z). NB >= 0.
|
|
C
|
|
C N (input) INTEGER
|
|
C The number of Markov parameters M(k) to be computed.
|
|
C N >= 0.
|
|
C
|
|
C IORD (input) INTEGER array, dimension (NC*NB)
|
|
C This array must contain the order r of the elements of the
|
|
C transfer function matrix G(z), stored row by row.
|
|
C For example, the order of the (i,j)-th element of G(z) is
|
|
C given by IORD((i-1)xNB+j).
|
|
C
|
|
C AR (input) DOUBLE PRECISION array, dimension (NA), where
|
|
C NA = IORD(1) + IORD(2) + ... + IORD(NC*NB).
|
|
C The leading NA elements of this array must contain the
|
|
C denominator coefficients AR(1),...,AR(r) in equation (1)
|
|
C of the (i,j)-th element of the transfer function matrix
|
|
C G(z), stored row by row, i.e. in the order
|
|
C (1,1),(1,2),...,(1,NB), (2,1),(2,2),...,(2,NB), ...,
|
|
C (NC,1),(NC,2),...,(NC,NB). The coefficients must be given
|
|
C in decreasing order of powers of z; the coefficient of the
|
|
C highest order term is assumed to be equal to 1.
|
|
C
|
|
C MA (input) DOUBLE PRECISION array, dimension (NA)
|
|
C The leading NA elements of this array must contain the
|
|
C numerator coefficients MA(1),...,MA(r) in equation (1)
|
|
C of the (i,j)-th element of the transfer function matrix
|
|
C G(z), stored row by row, i.e. in the order
|
|
C (1,1),(1,2),...,(1,NB), (2,1),(2,2),...,(2,NB), ...,
|
|
C (NC,1),(NC,2),...,(NC,NB). The coefficients must be given
|
|
C in decreasing order of powers of z.
|
|
C
|
|
C H (output) DOUBLE PRECISION array, dimension (LDH,N*NB)
|
|
C The leading NC-by-N*NB part of this array contains the
|
|
C multivariable Markov parameter sequence M(k), where each
|
|
C parameter M(k) is an NC-by-NB matrix and k = 1,2,...,N.
|
|
C The Markov parameters are stored such that H(i,(k-1)xNB+j)
|
|
C contains the (i,j)-th element of M(k) for i = 1,2,...,NC
|
|
C and j = 1,2,...,NB.
|
|
C
|
|
C LDH INTEGER
|
|
C The leading dimension of array H. LDH >= MAX(1,NC).
|
|
C
|
|
C Error Indicator
|
|
C
|
|
C INFO INTEGER
|
|
C = 0: successful exit;
|
|
C < 0: if INFO = -i, the i-th argument had an illegal
|
|
C value.
|
|
C
|
|
C METHOD
|
|
C
|
|
C The (i,j)-th element of G(z), defining the particular I/O transfer
|
|
C between output i and input j, has the following form:
|
|
C
|
|
C -1 -2 -r
|
|
C MA(1)z + MA(2)z + ... + MA(r)z
|
|
C G (z) = ----------------------------------------. (1)
|
|
C ij -1 -2 -r
|
|
C 1 + AR(1)z + AR(2)z + ... + AR(r)z
|
|
C
|
|
C The (i,j)-th element of G(z) is defined by its order r, its r
|
|
C moving average coefficients (= numerator) MA(1),...,MA(r) and its
|
|
C r autoregressive coefficients (= denominator) AR(1),...,AR(r). The
|
|
C coefficient of the constant term in the denominator is assumed to
|
|
C be equal to 1.
|
|
C
|
|
C The relationship between the (i,j)-th element of the Markov
|
|
C parameters M(1),M(2),...,M(N) and the corresponding element of the
|
|
C transfer function matrix G(z) is given by:
|
|
C
|
|
C -1 -2 -k
|
|
C G (z) = M (0) + M (1)z + M (2)z + ... + M (k)z + ...(2)
|
|
C ij ij ij ij ij
|
|
C
|
|
C Equating (1) and (2), we find that the relationship between the
|
|
C (i,j)-th element of the Markov parameters M(k) and the ARMA
|
|
C parameters AR(1),...,AR(r) and MA(1),...,MA(r) of the (i,j)-th
|
|
C element of the transfer function matrix G(z) is as follows:
|
|
C
|
|
C M (1) = MA(1),
|
|
C ij
|
|
C k-1
|
|
C M (k) = MA(k) - SUM AR(p) x M (k-p) for 1 < k <= r and
|
|
C ij p=1 ij
|
|
C r
|
|
C M (k+r) = - SUM AR(p) x M (k+r-p) for k > 0.
|
|
C ij p=1 ij
|
|
C
|
|
C From these expressions the Markov parameters M(k) are computed
|
|
C element by element.
|
|
C
|
|
C REFERENCES
|
|
C
|
|
C [1] Luenberger, D.G.
|
|
C Introduction to Dynamic Systems: Theory, Models and
|
|
C Applications.
|
|
C John Wiley & Sons, New York, 1979.
|
|
C
|
|
C NUMERICAL ASPECTS
|
|
C
|
|
C The computation of the (i,j)-th element of M(k) requires:
|
|
C (k-1) multiplications and k additions if k <= r;
|
|
C r multiplications and r additions if k > r.
|
|
C
|
|
C CONTRIBUTOR
|
|
C
|
|
C Release 3.0: V. Sima, Katholieke Univ. Leuven, Belgium, Dec. 1996.
|
|
C Supersedes Release 2.0 routine TF01ED by S. Van Huffel, Katholieke
|
|
C Univ. Leuven, Belgium.
|
|
C
|
|
C REVISIONS
|
|
C
|
|
C -
|
|
C
|
|
C KEYWORDS
|
|
C
|
|
C Markov parameters, multivariable system, transfer function,
|
|
C transfer matrix.
|
|
C
|
|
C ******************************************************************
|
|
C
|
|
C .. Parameters ..
|
|
DOUBLE PRECISION ZERO
|
|
PARAMETER ( ZERO = 0.0D0 )
|
|
C .. Scalar Arguments ..
|
|
INTEGER INFO, LDH, N, NB, NC
|
|
C .. Array Arguments ..
|
|
INTEGER IORD(*)
|
|
DOUBLE PRECISION AR(*), H(LDH,*), MA(*)
|
|
C .. Local Scalars ..
|
|
INTEGER I, J, JJ, JK, K, KI, LDHNB, NL, NORD
|
|
C .. External Functions ..
|
|
DOUBLE PRECISION DDOT
|
|
EXTERNAL DDOT
|
|
C .. External Subroutines ..
|
|
EXTERNAL XERBLA
|
|
C .. Intrinsic Functions ..
|
|
INTRINSIC MAX
|
|
C .. Executable Statements ..
|
|
C
|
|
INFO = 0
|
|
C
|
|
C Test the input scalar arguments.
|
|
C
|
|
IF( NC.LT.0 ) THEN
|
|
INFO = -1
|
|
ELSE IF( NB.LT.0 ) THEN
|
|
INFO = -2
|
|
ELSE IF( N.LT.0 ) THEN
|
|
INFO = -3
|
|
ELSE IF( LDH.LT.MAX( 1, NC ) ) THEN
|
|
INFO = -8
|
|
END IF
|
|
C
|
|
IF ( INFO.NE.0 ) THEN
|
|
C
|
|
C Error return.
|
|
C
|
|
CALL XERBLA( 'TF01QD', -INFO )
|
|
RETURN
|
|
END IF
|
|
C
|
|
C Quick return if possible.
|
|
C
|
|
IF ( MAX( NC, NB, N ).EQ.0 )
|
|
$ RETURN
|
|
C
|
|
LDHNB = LDH*NB
|
|
NL = 1
|
|
K = 1
|
|
C
|
|
DO 60 I = 1, NC
|
|
C
|
|
DO 50 J = 1, NB
|
|
NORD = IORD(K)
|
|
H(I,J) = MA(NL)
|
|
JK = J
|
|
C
|
|
DO 20 KI = 1, NORD - 1
|
|
JK = JK + NB
|
|
H(I,JK) = MA(NL+KI) - DDOT( KI, AR(NL), 1, H(I,J),
|
|
$ -LDHNB )
|
|
20 CONTINUE
|
|
C
|
|
DO 40 JJ = J, J + (N - NORD - 1)*NB, NB
|
|
JK = JK + NB
|
|
H(I,JK) = -DDOT( NORD, AR(NL), 1, H(I,JJ), -LDHNB )
|
|
40 CONTINUE
|
|
C
|
|
NL = NL + NORD
|
|
K = K + 1
|
|
50 CONTINUE
|
|
C
|
|
60 CONTINUE
|
|
C
|
|
RETURN
|
|
C *** Last line of TF01QD ***
|
|
END
|