isPassive

Check passivity of linear systems

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.

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.

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 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

35.3759       Inf       Inf    0.1130    4.3096

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 kth 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.