# tzero

Invariant zeros of linear system

## Syntax

```z = tzero(sys) z = tzero(A,B,C,D,E) z = tzero(___,tol) [z,nrank] = tzero(___) ```

## Description

`z = tzero(sys)` returns the invariant zeros of the multi-input, multi-output (MIMO) dynamic system, `sys`. If `sys` is a minimal realization, the invariant zeros coincide with the transmission zeros of `sys`.

`z = tzero(A,B,C,D,E)` returns the invariant zeros of the state-space model

`$\begin{array}{c}E\frac{dx}{dt}=Ax+Bu\\ y=Cx+Du.\end{array}$`

Omit `E` for an explicit state-space model (E = I).

`z = tzero(___,tol)` specifies the relative tolerance, `tol`, controlling rank decisions.

```[z,nrank] = tzero(___)``` also returns the normal rank of the transfer function of `sys` or of the transfer function H(s) = D + C(sE – A)–1B.

## Input Arguments

 `sys` MIMO dynamic system model. If `sys` is not a state-space model, then `tzero` computes `tzero(ss(sys))`. `A,B,C,D,E` State-space matrices describing the linear system `$\begin{array}{c}E\frac{dx}{dt}=Ax+Bu\\ y=Cx+Du.\end{array}$` `tzero` does not scale the state-space matrices when you use the syntax `z = tzero(A,B,C,D,E)`. Use `prescale` if you want to scale the matrices before using `tzero`. Omit `E` to use E = I. `tol` Relative tolerance controlling rank decisions. Increasing tolerance helps detect nonminimal modes and eliminate very large zeros (near infinity). However, increased tolerance might artificially inflate the number of transmission zeros. Default: `eps^(3/4)`

## Output Arguments

 `z` Column vector containing the invariant zeros of `sys` or the state-space model described by `A,B,C,D,E`. `nrank` Normal rank of the transfer function of `sys` or of the transfer function H(s) = D + C(sE – A)–1B. The normal rank is the rank for values of s other than the transmission zeros. To obtain a meaningful result for `nrank`, the matrix `s*E-A` must be regular (invertible for most values of s). In other words, `sys` or the system described by `A,B,C,D,E` must have a finite number of poles.

## Examples

collapse all

Create a MIMO transfer function, and locate its invariant zeros.

```s = tf('s'); H = [1/(s+1) 1/(s+2);1/(s+3) 2/(s+4)]; z = tzero(H)```
```z = 2×1 complex -2.5000 + 1.3229i -2.5000 - 1.3229i ```

The output is a column vector listing the locations of the invariant zeros of `H`. This output shows that `H` a has complex pair of invariant zeros. Confirm that the invariant zeros coincide with the transmission zeros.

Check whether the first invariant zero is a transmission zero of `H`.

If z(1) is a transmission zero of `H`, then `H` drops rank at `s = z(1)`.

```H1 = evalfr(H,z(1)); svd(H1)```
```ans = 2×1 1.5000 0.0000 ```

`H1` is the transfer function, `H`, evaluated at `s = z(1)`. `H1` has a zero singular value, indicating that `H` drops rank at that value of `s`. Therefore, `z(1)` is a transmission zero of `H`.

A similar analysis shows that `z(2)` is also a transmission zero.

Obtain a MIMO model.

```load ltiexamples gasf size(gasf)```
```State-space model with 4 outputs, 6 inputs, and 25 states. ```

`gasf` is a MIMO model that might contain uncontrollable or unobservable states.

To identify the unobservable and uncontrollable modes of `gasf`, you need the state-space matrices `A`, `B`, `C`, and `D` of the model. `tzero` does not scale state-space matrices. Therefore, use `prescale` with `ssdata` to scale the state-space matrices of `gasf`.

`[A,B,C,D] = ssdata(prescale(gasf));`

Identify the uncontrollable states of `gasf`.

` uncon = tzero(A,B,[],[])`
```uncon = 6×1 -0.0568 -0.0568 -0.0568 -0.0568 -0.0568 -0.0568 ```

When you provide `A` and `B` matrices to `tzero`, but no `C` and `D` matrices, the command returns the eigenvalues of the uncontrollable modes of `gasf`. The output shows that there are six degenerate uncontrollable modes.

Identify the unobservable states of `gasf`.

`unobs = tzero(A,[],C,[])`
```unobs = 0x1 empty double column vector ```

When you provide `A` and `C` matrices, but no `B` and `D` matrices, the command returns the eigenvalues of the unobservable modes. The empty result shows that `gasf` contains no unobservable states.

collapse all

### Invariant zeros

For a MIMO state-space model

`$\begin{array}{c}E\frac{dx}{dt}=Ax+Bu\\ y=Cx+Du,\end{array}$`

the invariant zeros are the complex values of s for which the rank of the system matrix

`$\left[\begin{array}{cc}A-sE& B\\ C& D\end{array}\right]$`

drops from its normal value. (For explicit state-space models, E = I).

### Transmission zeros

For a MIMO state-space model

`$\begin{array}{c}E\frac{dx}{dt}=Ax+Bu\\ y=Cx+Du,\end{array}$`

the transmission zeros are the complex values of s for which the rank of the equivalent transfer function H(s) = D + C(sE – A)–1B drops from its normal value. (For explicit state-space models, E = I.)

Transmission zeros are a subset of the invariant zeros. For minimal realizations, the transmission zeros and invariant zeros are identical.

## Tips

• You can use the syntax `z = tzero(A,B,C,D,E)` to find the uncontrollable or unobservable modes of a state-space model. When `C` and `D` are empty or zero, `tzero` returns the uncontrollable modes of `(A-sE,B)`. Similarly, when `B` and `D` are empty or zero, `tzero` returns the unobservable modes of `(C,A-sE)`. See Identify Unobservable and Uncontrollable Modes of MIMO Model for an example.

## Algorithms

`tzero` is based on SLICOT routines AB08ND, AB08NZ, AG08BD, and AG08BZ. `tzero` implements the algorithms in [1] and [2].

## Alternatives

To calculate the zeros and gain of a single-input, single-output (SISO) system, use `zero`.

## References

[1] Emami-Naeini, A. and P. Van Dooren, "Computation of Zeros of Linear Multivariable Systems," Automatica, 18 (1982), pp. 415–430.

[2] Misra, P, P. Van Dooren, and A. Varga, “Computation of Structural Invariants of Generalized State-Space Systems,” Automatica, 30 (1994), pp. 1921-1936.

## Version History

Introduced in R2012a