# isproper

Determine if dynamic system model is proper

## Syntax

`B = isproper(sys)`

B = isproper(sys,'elem')

[B,sysr] = isproper(sys)

## Description

`B = isproper(sys)`

returns
a logical value of `1`

(`true`

)
if the dynamic system model `sys`

is proper and a
logical value of `0`

(`false`

) otherwise.

A proper model has relative degree ≤ 0 and is causal.
SISO transfer functions and zero-pole-gain models are proper if the
degree of their numerator is less than or equal to the degree of their
denominator (in other words, if they have at least as many poles as
zeroes). MIMO transfer functions are proper if all their SISO entries
are proper. Regular state-space models (state-space models having
no `E`

matrix) are always proper. A descriptor state-space
model that has an invertible `E`

matrix is always
proper. A descriptor state-space model having a singular (non-invertible) `E`

matrix
is proper if the model has at least as many poles as zeroes.

If `sys`

is a model array, then `B`

is `1`

if
all models in the array are proper.

`B = isproper(sys,'elem')`

checks each model
in a model array `sys`

and returns a logical array
of the same size as `sys`

. The logical array indicates
which models in `sys`

are proper.

`[B,sysr] = isproper(sys)`

also returns an
equivalent model `sysr`

with fewer states (reduced
order) and a non-singular `E`

matrix, if `sys`

is
a proper descriptor state-space model with a non-invertible `E`

matrix.
If `sys`

is not proper, `sysr = sys`

.

## Examples

## References

[1] Varga, Andràs. "Computation of
irreducible generalized state-space realizations." *Kybernetika* 26.2
(1990): 89-106.

## Version History

**Introduced before R2006a**