# gram

Controllability and observability Gramians

## Syntax

```Wc = gram(sys,'c') Wc = gram(sys,'o') Wc = gram(___,opt) ```

## Description

`Wc = gram(sys,'c')` calculates the controllability Gramian of the state-space (`ss`) model `sys`.

`Wc = gram(sys,'o')` calculates the observability Gramian of the `ss` model `sys`.

`Wc = gram(___,opt)` calculates time-limited or frequency-limited Gramians. `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 . 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}\stackrel{˙}{x}=Ax+Bu\\ y=Cx+Du\end{array}$`

the controllability Gramian is defined by

`${W}_{c}={\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}={\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}=\sum _{k=0}^{\infty }{A}^{k}B{B}^{T}{\left({A}^{T}\right)}^{k},& {W}_{o}=\end{array}\sum _{k=0}^{\infty }{\left({A}^{T}\right)}^{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 .

## 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 Wc 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 Wo 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 .

## References

 Kailath, T., Linear Systems, Prentice-Hall, 1980.

 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