Go to the first, previous, next, last section, table of contents.


Control Theory

Function File: abcddim (a, b, c, d)
Check for compatibility of the dimensions of the matrices defining the linear system [A, B, C, D] corresponding to or a similar discrete-time system.

If the matrices are compatibly dimensioned, then abcddim returns n = number of system states, m = number of system inputs, and p = number of system outputs. Otherwise abcddim returns n = m = p = -1.

Function File: are (a, b, c, opt)

Returns the solution, x, of the algebraic Riccati equation

a' x + x a - x b x + c = 0

for identically dimensioned square matrices a, b, c. If b (c) is not square, then the function attempts to use b*b' (c'*c) instead.

Solution method: apply Laub's Schur method (IEEE Transactions on Automatic Control, 1979) to the appropriate Hamiltonian matrix.

opt is an option passed to the eigenvalue balancing routine. Default is "B".

Function File: c2d (a, b, t)
Converts the continuous time system described by: into a discrete time equivalent model

via the matrix exponential assuming a zero-order hold on the input and sample time t.

Function File: dare (a, b, c, r, opt)

Returns the solution, x of the discrete-time algebraic Riccati equation

a' x a - x + a' x b (r + b' x b)^(-1) b' x a + c = 0

for matrices with dimensions:

a: n by n
b: n by m
c: n by n, symmetric positive semidefinite
r: m by m, symmetric positive definite (invertible)

If c is not square, then the function attempts to use c'*c instead.

Solution method: Laub's Schur method (IEEE Transactions on Automatic Control, 1979) is applied to the appropriate symplectic matrix.

See also: Ran and Rodman, Stable Hermitian Solutions of Discrete Algebraic Riccati Equations, Mathematics of Control, Signals and Systems, Volume 5, Number 2 (1992).

opt is an option passed to the eigenvalue balancing routine. The default is "B".

Function File: dgram (a, b)
Returns the discrete controllability and observability gramian for the discrete time system described by

dgram (a, b) returns the discrete controllability gramian and dgram (a', c') returns the observability gramian.

Function File: dlqe (a, g, c, sigw, sigv [, z])
Linear quadratic estimator (Kalman filter) design for the discrete time system where w, v are zero-mean gaussian noise processes with respective intensities sigw = cov (w, w) and sigv = cov (v, v).

If specified, z is cov (w, v). Otherwise cov (w, v) = 0.

The observer structure is

Returns:

l is the observer gain, (A - A L C) is stable.

m is the Ricatti equation solution.

p is the estimate error covariance after the measurement update.

e are the closed loop poles of (A - A L C).

Function File: dlqr (a, b, q, r [, z])
Linear quadratic regulator design for the discrete time system to minimize the cost functional

J = Sum [ x' Q x + u' R u ],              Z omitted

or

J = Sum [ x' Q x + u' R u +2 x' Z u ],    Z included

Returns:

k is the state feedback gain, (A - B K) is stable.

p is the solution of algebraic Riccati equation.

e are the closed loop poles of (A - B K).

Function File: dlyap (a, b)
Solve the discrete-time Lyapunov equation

a x a' - x + b = 0

for square matrices a, b. If b is not square, then the function attempts to solve either

a x a' - x + b b' = 0

or

a' x a - x + b' b = 0

whichever is appropriate.

Uses Schur decomposition method as in Kitagawa, International Journal of Control (1977); column-by-column solution method as suggested in Hammarling, IMA Journal of Numerical Analysis, (1982).

Function File: is_controllable (a, b, tol)

If the pair (a, b) is controllable, then return value 1. Otherwise, returns a value of 0.

tol is a roundoff parameter, set to 2*eps if omitted.

Currently just constructs the controllability matrix and checks rank. A better method is as follows (Boley and Golub, Systems and Control Letters, 1984): Controllability is determined by applying Arnoldi iteration with complete re-orthogonalization to obtain an orthogonal basis of the Krylov subspace

Function File: is_observable (a, c, tol)

Returns 1 if the pair (a, c) is observable. Otherwise, returns a value of 0.

Function File: lqe (a, g, c, sigw, sigv, z)

[k, p, e] = lqe (a, g, c, sigw, sigv, z)

Linear quadratic estimator (Kalman filter) design for the continuous time system where w, v are zero-mean gaussian noise processes with respective intensities

sigw = cov (w, w)
sigv = cov (v, v)

z (if specified) is the cross-covariance cov (w, v); the default value is cov (w, v) = 0.

Observer structure is dz/dt = A z + B u + k (y - C z - D u)

returns:

k is observer gain: (A - K C) is stable.

p is solution of algebraic Riccati equation.

e is the vector of closed loop poles of (A - K C).

Function File: lqr (a, b, q, r, z)
Function File: [k, p, e] = lqr (a, b, q, r, z)
Linear quadratic regulator design for the continuous time system to minimize the cost functional

z omitted or z included

Returns:

k is state feedback gain: (A - B K) is stable.

p is the stabilizing solution of appropriate algebraic Riccati equation.

e is the vector of the closed loop poles of (A - B K).

Function File: lyap (a, b, c)
Solve the Lyapunov (or Sylvester) equation via the Bartels-Stewart algorithm (Communications of the ACM, 1972).

If (a, b, c) are specified, then lyap returns the solution of the Sylvester equation

a x + x b + c = 0

If only (a, b) are specified, then lyap returns the solution of the Lyapunov equation

a' x + x a + b = 0

If b is not square, then lyap returns the solution of either

a' x + x a + b' b = 0

or

a x + x a' + b b' = 0

whichever is appropriate.

Solves by using the Bartels-Stewart algorithm (1972).

Function File: tzero (a, b, c, d, bal)
Compute the transmission zeros of [A, B, C, D].

bal = balancing option (see balance); default is "B".

Needs to incorporate mvzero algorithm to isolate finite zeros; see Hodel, Computation of System Zeros with Balancing, Linear Algebra and its Applications, July 1993.


Go to the first, previous, next, last section, table of contents.