# minreal

Minimal realization or pole-zero cancellation

## Syntax

```sysr = minreal(sys) sysr = minreal(sys,tol) [sysr,u] = minreal(sys,tol) ... = minreal(sys,tol,false) ... = minreal(sys,[],false) ```

## Description

`sysr = minreal(sys) ` eliminates uncontrollable or unobservable state in state-space models, or cancels pole-zero pairs in transfer functions or zero-pole-gain models. The output `sysr` has minimal order and the same response characteristics as the original model `sys`.

`sysr = minreal(sys,tol) ` specifies the tolerance used for state elimination or pole-zero cancellation. The default value is` tol = sqrt(eps)` and increasing this tolerance forces additional cancellations.

`[sysr,u] = minreal(sys,tol) `returns, for state-space model `sys`, an orthogonal matrix `U` such that `(U*A*U',U*B,C*U')` is a Kalman decomposition of (`A`,`B`,`C`)

`... = minreal(sys,tol,false)` and ```... = minreal(sys,[],false)``` disable the verbose output of the function. By default, `minreal` displays a message indicating the number of states removed from a state-space model `sys`.

## Examples

The commands

```g = zpk([],1,1); h = tf([2 1],[1 0]); cloop = inv(1+g*h) * g ```

produce the nonminimal zero-pole-gain model `cloop`.

```cloop = s (s-1) ------------------- (s-1) (s^2 + s + 1) Continuous-time zero/pole/gain model. ```

To cancel the pole-zero pair at s = 1, type

```cloopmin = minreal(cloop) ```

This command produces the following result.

```cloopmin = s ------------- (s^2 + s + 1) Continuous-time zero/pole/gain model. ```

## Algorithms

Pole-zero cancellation is a straightforward search through the poles and zeros looking for matches that are within tolerance. Transfer functions are first converted to zero-pole-gain form.

Model Reducer