### 30.6 System Analysis-Properties

— Function File: analdemo ()

> Octave Controls toolbox demo: State Space analysis demo

— Function File: [n, m, p] = abcddim (a, b, c, d)

> Check for compatibility of the dimensions of the matrices defining the linear system [A, B, C, D] corresponding to

>               dx/dt = a x + b u
>               y = c x + d u

> or a similar discrete-time system.

> If the matrices are compatibly dimensioned, then `abcddim` returns

> n
>   The number of system states.
> m
>   The number of system inputs.
> p
>   The number of system outputs.

> Otherwise `abcddim` returns n = m = p = −1.

> Note: n = 0 (pure gain block) is returned without warning.

> See also: is_abcd.

— Function File: ctrb (sys, b)
— Function File: ctrb (a, b)

> Build controllability matrix:

>                            2       n-1
>               Qs = [ B AB A B ... A   B ]

> of a system data structure or the pair (a, b).

> `ctrb` forms the controllability matrix. The numerical properties of `is_controllable` are much better for controllability tests.

— Function File: h2norm (sys)

> Computes the H-2 norm of a system data structure (continuous time only).

> Reference: Doyle, Glover, Khargonekar, Francis, State-Space Solutions to Standard H-2 and H-infinity Control Problems, IEEE TAC August 1989.

— Function File: [g, gmin, gmax] = hinfnorm (sys, tol, gmin, gmax, ptol)

> Computes the H-infinity norm of a system data structure.

> Inputs

> sys
>   system data structure
> tol
>   H-infinity norm search tolerance (default: 0.001)
> gmin
>   minimum value for norm search (default: 1e-9)
> gmax
>   maximum value for norm search (default: 1e+9)
> ptol
>   pole tolerance:
>   - if sys is continuous, poles with |real(pole))| < ptol*||H|| (H is appropriate Hamiltonian) are considered to be on the imaginary axis.
>   - if sys is discrete, poles with |abs(pole)-1| < ptol*||[s1,s2]|| (appropriate symplectic pencil) are considered to be on the unit circle.
>   - Default value: 1e-9

> Outputs

> g
>   Computed gain, within tol of actual gain. g is returned as Inf if the system is unstable.
> gmin
> gmax
>   Actual system gain lies in the interval [gmin, gmax].

> References: Doyle, Glover, Khargonekar, Francis, State-space solutions to standard H-2 and H-infinity control problems, IEEE TAC August 1989; Iglesias and Glover, State-Space approach to discrete-time H-infinity control, Int. J. Control, vol 54, no. 5, 1991; Zhou, Doyle, Glover, Robust and Optimal Control, Prentice-Hall, 1996.

— Function File: obsv (sys, c)
— Function File: obsv (a, c)

> Build observability matrix:

>                    | C        |
>                    | CA       |
>               Qb = | CA^2     |
>                    | ...      |
>                    | CA^(n-1) |

> of a system data structure or the pair (a, c).

> The numerical properties of `is_observable` are much better for observability tests.

— Function File: [zer, pol] = pzmap (sys)

> Plots the zeros and poles of a system in the complex plane.

> Input

> sys
>   System data structure.

> Outputs

> pol
> zer
>   if omitted, the poles and zeros are plotted on the screen. otherwise, pol and zer are returned as the system poles and zeros (see `sys2zp` for a preferable function call).

— Function File: retval = is_abcd (a, b, c, d)

> Returns retval = 1 if the dimensions of a, b, c, d are compatible, otherwise retval = 0 with an appropriate diagnostic message printed to the screen. The matrices b, c, or d may be omitted.

> See also: abcddim.

— Function File: [retval, u] = is_controllable (sys, tol)
— Function File: [retval, u] = is_controllable (a, b, tol)

> Logical check for system controllability.

> Inputs

> sys
>   system data structure
> a
> b
>   n by n, n by m matrices, respectively
> tol
>   optional roundoff parameter. Default value: `10*eps`

> Outputs

> retval
>   Logical flag; returns true (1) if the system sys or the pair (a, b) is controllable, whichever was passed as input arguments.
> u
>   u is an orthogonal basis of the controllable subspace.

> Method Controllability is determined by applying Arnoldi iteration with complete re-orthogonalization to obtain an orthogonal basis of the Krylov subspace

>               span ([b,a*b,...,a^{n-1}*b]).

> The Arnoldi iteration is executed with `krylov` if the system has a single input; otherwise a block Arnoldi iteration is performed with `krylovb`.

> See also: size, rows, columns, length, ismatrix, isscalar, isvector is_observable, is_stabilizable, is_detectable, krylov, krylovb.

— Function File: retval = is_detectable (a, c, tol, dflg)
— Function File: retval = is_detectable (sys, tol)

> Test for detectability (observability of unstable modes) of (a, c).

> Returns 1 if the system a or the pair (a, c) is detectable, 0 if not, and -1 if the system has unobservable modes at the imaginary axis (unit circle for discrete-time systems).

> See `is_stabilizable` for detailed description of arguments and computational method.

> See also: is_stabilizable, size, rows, columns, length, ismatrix, isscalar, isvector.

— Function File: [retval, dgkf_struct ] = is_dgkf (asys, nu, ny, tol )

> Determine whether a continuous time state space system meets assumptions of DGKF algorithm. Partitions system into:

>               [dx/dt]   [A  | Bw  Bu  ][w]
>               [ z   ] = [Cz | Dzw Dzu ][u]
>               [ y   ]   [Cy | Dyw Dyu ]

> or similar discrete-time system. If necessary, orthogonal transformations qw, qz and nonsingular transformations ru, ry are applied to respective vectors w, z, u, y in order to satisfy DGKF assumptions. Loop shifting is used if dyu block is nonzero.

> Inputs

> asys
>   system data structure
> nu
>   number of controlled inputs
> ny
>   number of measured outputs
> tol
>   threshold for 0; default: 200*`eps`.
> Outputs
> retval
>   true(1) if system passes check, false(0) otherwise
> dgkf_struct
>   data structure of `is_dgkf` results. Entries:
>   nw
>   nz
>     dimensions of w, z
>   a
>     system A matrix
>   bw
>     (n x nw) qw-transformed disturbance input matrix
>   bu
>     (n x nu) ru-transformed controlled input matrix;

>     B = [Bw Bu]

>   cz
>     (nz x n) Qz-transformed error output matrix
>   cy
>     (ny x n) ry-transformed measured output matrix

>     C = [Cz; Cy]

>   dzu
>   dyw
>     off-diagonal blocks of transformed system D matrix that enter z, y from u, w respectively
>   ru
>     controlled input transformation matrix
>   ry
>     observed output transformation matrix
>   dyu_nz
>     nonzero if the dyu block is nonzero.
>   dyu
>     untransformed dyu block
>   dflg
>     nonzero if the system is discrete-time
> `is_dgkf` exits with an error if the system is mixed discrete/continuous.

> References

> [1]
>   Doyle, Glover, Khargonekar, Francis, State Space Solutions to Standard H-2 and H-infinity Control Problems, IEEE TAC August 1989.
> [2]
>   Maciejowksi, J.M., Multivariable Feedback Design, Addison-Wesley, 1989.

— Function File: digital = is_digital (sys, eflg)

> Return nonzero if system is digital.

> Inputs

> sys
>   System data structure.
> eflg
>   When equal to 0 (default value), exits with an error if the system is mixed (continuous and discrete components); when equal to 1, print a warning if the system is mixed (continuous and discrete); when equal to 2, operate silently.

> Output

> digital
>   When equal to 0, the system is purely continuous; when equal to 1, the system is purely discrete; when equal to -1, the system is mixed continuous and discrete.
> Exits with an error if sys is a mixed (continuous and discrete) system.

— Function File: [retval, u] = is_observable (a, c, tol)
— Function File: [retval, u] = is_observable (sys, tol)

> Logical check for system observability.

> Default: tol = `tol = 10*norm(a,'fro')*eps`

> Returns 1 if the system sys or the pair (a, c) is observable, 0 if not.

> See `is_controllable` for detailed description of arguments and default values.

> See also: size, rows, columns, length, ismatrix, isscalar, isvector.

— Function File: is_sample (ts)

> Return true if ts is a valid sampling time (real, scalar, > 0).

— Function File: is_siso (sys)

> Returns nonzero if the system data structure sys is single-input, single-output.

— Function File: retval = is_stabilizable (sys, tol)
— Function File: retval = is_stabilizable (a, b, tol, dflg)

> Logical check for system stabilizability (i.e., all unstable modes are controllable). Returns 1 if the system is stabilizable, 0 if the system is not stabilizable, -1 if the system has non stabilizable modes at the imaginary axis (unit circle for discrete-time systems.

> Test for stabilizability is performed via Hautus Lemma. If dflg!=0 assume that discrete-time matrices (a,b) are supplied.

> See also: size, rows, columns, length, ismatrix, isscalar, isvector is_observable, is_stabilizable, is_detectable.

— Function File: is_signal_list (mylist)

> Return true if mylist is a list of individual strings.

— Function File: is_stable (a, tol, dflg)
— Function File: is_stable (sys, tol)

> Returns 1 if the matrix a or the system sys is stable, or 0 if not.

> Inputs

> tol
>   is a roundoff parameter, set to 200*`eps` if omitted.
> dflg
>   Digital system flag (not required for system data structure):
>   dflg`!= 0`
>     stable if eig(a) is in the unit circle
>   dflg`== 0`
>     stable if eig(a) is in the open LHP (default)

> See also: size, rows, columns, length, ismatrix, isscalar, isvector is_observable, is_stabilizable, is_detectable, krylov, krylovb.