# isPassive

Check passivity of linear systems

## Syntax

``pf = isPassive(G)``
``pf = isPassive(G,nu,rho)``
``````[pf,R] = isPassive(G,___)``````

## Description

example

````pf = isPassive(G)` returns a logical value of 1 (`true`) if the dynamic system model `G` is passive, and a logical value of 0 (`false`) otherwise. A system is passive if all its I/O trajectories (u(t),y(t)) satisfy:${\int }_{0}^{T}y{\left(t\right)}^{T}u\left(t\right)dt>0,$for all T > 0. Equivalently, a system is passive if its frequency response is positive real, which means that for all ω > 0,$G\left(j\omega \right)+G{\left(j\omega \right)}^{H}>0$(or the discrete-time equivalent). If `G` is a model array, then `isPassive` returns a logical array of the same array dimensions as `G`, where each entry in the array reflects the passivity of the corresponding entry in `G`.For more information about the notion of passivity, see About Passivity and Passivity Indices.```

example

````pf = isPassive(G,nu,rho)` returns 1 (`true`) if `G` is passive with index `nu` at the inputs, and index `rho` at the outputs. Such systems satisfy:${\int }_{0}^{T}y{\left(t\right)}^{T}u\left(t\right)dt>\nu {\int }_{0}^{T}u{\left(t\right)}^{T}u\left(t\right)dt+\rho {\int }_{0}^{T}y{\left(t\right)}^{T}y\left(t\right)dt,$for all T > 0.Use `rho` = 0 to check whether a system is input passive with index `nu` at the inputs.Use `nu` = 0 to check whether a system is output passive with index `rho` at the outputs.For more information about input and output passivity, see About Passivity and Passivity Indices.```

example

``````[pf,R] = isPassive(G,___)``` also returns the relative index for the corresponding passivity bound (see `getPassiveIndex`). `R` measures the amount by which the passivity property is satisfied (`R` < 1) or violated (`R` > 1). You can use this syntax with any of the previous combinations of input arguments.```

## Examples

collapse all

Test whether the following transfer function is passive:

`$G\left(s\right)=\frac{s+1}{s+2}.$`

```G = tf([1,1],[1,2]); [pf,R] = isPassive(G)```
```pf = logical 1 ```
```R = 0.3333 ```

`pf = 1` indicates that `G` is passive. `R = 0.3333` indicates that `R` has a relative excess of passivity.

Test whether the transfer function `G` is input passive with index 0.25. To do so, use `nu` = 0.25 and `rho` = 0.

```G = tf([1,1],[1,2]); [pfin,Rin] = isPassive(G,0.25,0)```
```pfin = logical 1 ```
```Rin = 0.6096 ```

The result shows that `G` is input passive with this `nu` value and has some excess passivity.

Test whether `G` is output passive with index 2.

`[pfout,Rout] = isPassive(G,0,2)`
```pfout = logical 0 ```
```Rout = 2.6180 ```

Here, the result `pfout = 0` shows that `G` is not output passive with this `rho` value. The `R` value gives a relative measure of the shortage of passivity.

You can use `isPassive` to evaluate the passivity of multiple models in a model array simultaneously. For this example, generate a random array of transfer function models.

`G = rss(3,1,1,1,5);`

`G` is a 1-by-5 array of 3-state SISO models. Check the passivity of all the models in `G`.

`[pf,R] = isPassive(G)`
```pf = 1x5 logical array 0 0 0 1 0 ```
```R = 1×5 43.8048 Inf Inf 0.2989 9.6958 ```

`pf` and `R` are also 1-by-5 arrays. Each `pf` entry indicates whether the corresponding model in `G` is passive. Likewise, each `R` value gives the relative excess or shortage of passivity in the corresponding model in `G`. For instance, examine the passivity of the second entry in `G`, and compare the result with the second entries in `pf` and `R`.

`[pf2,R2] = isPassive(G(:,:,2))`
```pf2 = logical 0 ```
```R2 = Inf ```

## Input Arguments

collapse all

Model to analyze for passivity, specified as a dynamic system model such as a `tf`, `ss`, or `genss` model. `G` can be MIMO, if the number of inputs equals the number of outputs. `G` can be continuous or discrete. If `G` is a generalized model with tunable or uncertain blocks, `isPassive` evaluates passivity of the current, nominal value of `G`.

Input passivity index, specified as a real scalar value. Use `nu` and `rho` to specify particular passivity bounds. To check whether a system is passive with a particular index at the inputs, set `nu` to that value and set `rho` = 0.

Output passivity index, specified as a real scalar value. Use `nu` and `rho` to specify particular passivity bounds. To check whether a system is passive with a particular passivity index at the outputs, set `rho` to that value and set `nu` = 0.

## Output Arguments

collapse all

Passivity indicator, returned as a boolean value:

• 1 (`true`) if `G` is passive.

• 0 (`false`) if `G` is not passive.

If you specify input and output passivity indices `nu` and `rho`, then `pf` indicates passivity with respect to the corresponding passivity bound.

If `G` is a model array, then `pf` is an array of the same size, where `pf(k)` indicates the passivity of the `k`th entry in `G`, `G(:,:,k)`.

Relative passivity index, returned as a positive real scalar. `R` measures the excess (`R` < 1) or shortage (`R` > 1) of passivity in the system.

If you specify `nu` ≠ 0 or `rho` ≠ 0, then `R` measures how much the specified passivity properties are satisfied or violated.