# gram

Controllability and observability Gramians

## Syntax

`Wc = gram(sys,'c')`

Wc = gram(sys,'o')

Wc = gram(___,opt)

## Description

calculates the controllability Gramian of the state-space (`Wc`

= gram(`sys`

,'c')`ss`

) model `sys`

.

calculates the observability Gramian of the `Wc`

= gram(`sys`

,'o')`ss`

model `sys`

.

calculates time-limited or frequency-limited Gramians. `Wc`

= gram(___,`opt`

)`opt`

is an
option set that specifies time or frequency intervals for the computation. Create
`opt`

using the `gramOptions`

command.

You can use Gramians to study the controllability and observability properties of
state-space models and for model reduction [1] . They have better numerical properties than the controllability and observability
matrices formed by `ctrb`

and `obsv`

.

Given the continuous-time state-space model

$$\begin{array}{l}\dot{x}=Ax+Bu\\ y=Cx+Du\end{array}$$

the controllability Gramian is defined by

$${W}_{c}={\displaystyle {\int}_{0}^{\infty}{e}^{A\tau}}B{B}^{T}{e}^{{A}^{T}\tau}d\tau $$

The controllability Gramian is positive definite if and only if (*A*,
*B*) is controllable.

The observability Gramian is defined by

$${W}_{o}={\displaystyle {\int}_{0}^{\infty}{e}^{{A}^{T}\tau}{C}^{T}C{e}^{A\tau}d\tau}$$

The observability Gramian is positive definite if and only if (*A*,
*C*) is observable.

The discrete-time counterparts of the controllability and observability Gramians are

$$\begin{array}{cc}{W}_{c}={\displaystyle \sum _{k=0}^{\infty}{A}^{k}B{B}^{T}{({A}^{T})}^{k},}& {W}_{o}=\end{array}{\displaystyle \sum _{k=0}^{\infty}{({A}^{T})}^{k}{C}^{T}C{A}^{k}}$$

respectively.

Use time-limited or frequency-limited Gramians to examine the controllability or observability of states within particular time or frequency intervals. The definition of these Gramians is as described in [2].

## Examples

### Compute Frequency-Limited Gramian

Compute the controllability Gramian of the following state-space model. Focus the computation on the frequency interval with the most energy.

sys = ss([-.1 -1;1 0],[1;0],[0 1],0);

The model contains a peak at 1 rad/s. Use `gramOptions`

to specify an interval around that frequency.

opt = gramOptions('FreqIntervals',[0.8 1.2]); gc = gram(sys,'c',opt)

`gc = `*2×2*
4.2132 0.0000
0.0000 4.2433

## Limitations

The *A* matrix must be stable (all eigenvalues have negative real
part in continuous time, and magnitude strictly less than one in discrete time).

## Algorithms

The controllability Gramian *W _{c}* is obtained
by solving the continuous-time Lyapunov equation

$$A{W}_{c}+{W}_{c}{A}^{T}+B{B}^{T}=0$$

or its discrete-time counterpart

$$A{W}_{c}{A}^{T}-{W}_{c}+B{B}^{T}=0$$

Similarly, the observability Gramian *W _{o}*
solves the Lyapunov equation

$${A}^{T}{W}_{o}+{W}_{o}A+{C}^{T}C=0$$

in continuous time, and the Lyapunov equation

$${A}^{T}{W}_{o}A-{W}_{o}+{C}^{T}C=0$$

in discrete time.

The computation of time-limited and frequency-limited Gramians is as described in [2].

## References

[1] Kailath, T., *Linear Systems*,
Prentice-Hall, 1980.

[2] Gawronski, W. and J.N. Juang. “Model Reduction in
Limited Time and Frequency Intervals.” *International Journal of
Systems Science*. Vol. 21, Number 2, 1990, pp. 349–376.

## Version History

**Introduced before R2006a**

## See Also

`gramOptions`

| `hsvd`

| `balreal`

| `lyap`

| `dlyap`