Gap metric and Vinnicombe (nu-gap) metric for distance between two systems

`[`

computes the gap and Vinnicombe (`gap`

,`nugap`

] = gapmetric(`P1,P2`

)*ν*-gap) metrics for the distance between
dynamic systems `P1`

and `P2`

. The gap metric values
satisfy 0 ≤ `nugap`

≤ `gap`

≤ 1. Values close to zero imply that any controller that stabilizes
`P1`

also stabilizes `P2`

with similar closed-loop
gains.

Create two plant models. One plant, `P1`

, is an unstable first-order system with transfer function 1/(*s*–0.001). The other plant, `P2`

, is stable, with transfer function 1/(*s* +0.001).

P1 = tf(1,[1 -0.001]); P2 = tf(1,[1 0.001]);

Despite the fact that one plant is unstable and the other is stable, these plants are close as measured by the `gap`

and `nugap`

metrics.

[gap,nugap] = gapmetric(P1,P2)

gap = 0.0021

nugap = 0.0020

The gap is very small compared to 1. Thus a controller that yields a stable closed-loop system with `P2`

also tends to stabilize `P1`

. For instance, the feedback controller `C = 1`

stabilizes both plants and renders nearly identical closed-loop gains. To see this, examine the sensitivity functions of the two closed-loop systems.

C = 1; H1 = loopsens(P1,C); H2 = loopsens(P2,C); subplot(2,2,1); bode(H1.Si,'-',H2.Si,'r--'); subplot(2,2,2); bode(H1.Ti,'-',H2.Ti,'r--'); subplot(2,2,3); bode(H1.PSi,'-',H2.PSi,'r--'); subplot(2,2,4); bode(H1.CSo,'-',H2.CSo,'r--');

Next, consider two stable plant models that differ by a first-order system. One plant, `P3`

, is the transfer function 50/(*s*+50), and the other plant, `P4`

, is the transfer function [50/(*s*+50)]*8/(*s*+8).

P3 = tf(50,[1 50]); P4 = tf(8,[1 8])*P3; figure bode(P3,P4)

Although the two systems have similar high-frequency dynamics and the same unity gain at low frequency, by the `gap`

and `nugap`

metrics, the plants are fairly far apart.

[gap,nugap] = gapmetric(P3,P4)

gap = 0.6148

nugap = 0.6147

Consider a plant and a stabilizing controller.

P1 = tf([1 2],[1 5 10]); C = tf(4.4,[1 0]);

Compute the stability margin for this plant and controller.

b1 = ncfmargin(P1,C)

b1 = 0.1961

Next, compute the gap between `P1`

and the perturbed plant, `P2`

.

P2 = tf([1 1],[1 3 10]); [gap,nugap] = gapmetric(P1,P2)

gap = 0.1391

nugap = 0.1390

Because the stability margin `b1 = b(P1,C)`

is greater than the gap between the two plants, `C`

also stabilizes `P2`

. As discussed in Gap Metrics and Stability Margins, the stability margin `b2 = b(P2,C)`

satisfies the inequality `asin(b(P2,C)) ≥ asin(b1)-asin(gap)`

. Confirm this result.

b2 = ncfmargin(P2,C); [asin(b2) asin(b1)-asin(gap)]

`ans = `*1×2*
0.0997 0.0579

`P1,P2`

— Input systemsdynamic system models

Input systems, specified as dynamic system models. `P1`

and
`P2`

must have the same input and output dimensions. If
`P1`

or `P2`

is a generalized state-space model
(`genss`

or `uss`

) then
`gapmetric`

uses the current or nominal value of all control design
blocks.

`gap`

— Gap between `P1`

and `P2`

scalar in [0,1]

Gap between
`P1`

and `P2`

, returned as a scalar in the range
[0,1]. A value close to zero implies that any controller that stabilizes
`P1`

also stabilizes `P2`

with similar closed-loop
gains. A value close to 1 means that `P1`

and `P2`

are
far apart. A value of 0 means that the two systems are identical.

`nugap`

— Vinnicombe gap (`P1`

and `P2`

scalar in [0,1]

Vinnicombe gap
(*ν*-gap) between `P1`

and `P2`

,
returned as a scalar value in the range [0,1]. As with `gap`

, a value
close to zero implies that any controller that stabilizes `P1`

also
stabilizes `P2`

with similar closed-loop gains. A value close to 1
means that `P1`

and `P2`

are far apart. A value of 0
means that the two systems are identical. Because 0 ≤ `nugap`

≤ `gap`

≤ 1, the *ν*-gap can provide a more stringent test for
robustness as described in Gap Metrics and Stability Margins.

For plants *P*_{1} and
*P*_{2}, let $${P}_{1}={N}_{1}{M}_{1}^{-1}$$ and $${P}_{2}={N}_{2}{M}_{2}^{-1}$$ be right normalized coprime factorizations (see `rncf`

). Then the
gap metric *δ _{g}* is given by:

$${\delta}_{g}\left({P}_{1},{P}_{2}\right)=\mathrm{max}\left\{{\overrightarrow{\delta}}_{g}\left({P}_{1},{P}_{2}\right),{\overrightarrow{\delta}}_{g}\left({P}_{2},{P}_{1}\right)\right\}.$$

Here, $${\overrightarrow{\delta}}_{g}\left({P}_{1},{P}_{2}\right)$$ is the *directed gap*, given by

$${\overrightarrow{\delta}}_{g}\left({P}_{1},{P}_{2}\right)=\underset{\text{stable}Q\left(s\right)}{\mathrm{min}}{\Vert \left[\begin{array}{c}{M}_{1}\\ {N}_{1}\end{array}\right]-\left[\begin{array}{c}{M}_{2}\\ N2\end{array}\right]Q\Vert}_{\infty}.$$

For more information, see Chapter 17 of [1].

For *P*_{1} and
*P*_{2}, the Vinnicombe gap metric is given by

$${\delta}_{\nu}\left({P}_{1},{P}_{2}\right)=\underset{\omega}{\mathrm{max}}{\Vert {\left(I+{P}_{2}{P}_{2}^{*}\right)}^{-1/2}\left({P}_{1}-{P}_{2}\right){\left(I+{P}_{1}{P}_{1}^{*}\right)}^{-1/2}\Vert}_{\infty},$$

provided that $$\mathrm{det}\left(I+{P}_{2}^{*}{P}_{1}\right)$$ has the right winding number. Here, * denotes the conjugate (see `ctranspose`

).
This expression is a weighted difference between the two frequency responses
*P*_{1}(*jω*) and
*P*_{2}(*jω*). For more information,
see Chapter 17 of [1].

The gap and *ν*-gap metrics give a numerical value
*δ*(*P*_{1},*P*_{2})
for the distance between two LTI systems. For both metrics, the following robust performance
result holds:

arcsin
*b*(*P*_{2},*C*_{2})
≥ arcsin
*b*(*P*_{1},*C*_{1})
– arcsin
δ(*P*_{1},*P*_{2})
– arcsin
δ(*C*_{1},*C*_{2}),

where the stability margin *b* (see `ncfmargin`

), assuming negative-feedback architecture, is given by

$$b(P,C)={\Vert \left[\begin{array}{c}I\\ C\end{array}\right]{(I+PC)}^{-1}\left[\begin{array}{cc}I& P\end{array}\right]\Vert}_{\infty}^{-1}={\Vert \left[\begin{array}{c}I\\ P\end{array}\right]{(I+CP)}^{-1}\left[\begin{array}{cc}I& C\end{array}\right]\Vert}_{\infty}^{-1}.$$

To interpret this result, suppose that a nominal plant
*P*_{1} is stabilized by controller
*C*_{1} with stability margin *b*(*P*_{1},*C*_{1}). Then, if *P*_{1} is perturbed to
*P*_{2} and
*C*_{1} is perturbed to
*C*_{2}, the stability margin is degraded by no more
than the above formula. For an example, see Compute Gap Metric and Stability Margin.

The *ν*-gap is always less than or equal to the gap, so its predictions
using the above robustness result are tighter.

The quantity
*b*(*P*,*C*)^{–1}
is the signal gain from disturbances on the plant input and output to the input and output
of the controller.

To make use of the gap metrics in robust design, you must introduce
weighting functions. In the robust performance formula, replace *P* by
*W*_{2}*P**W*_{1},
and replace *C* by $${W}_{1}^{-1}C{W}_{2}^{-1}$$. You can make similar substitutions for
*P*_{1},
*P*_{2}, *C*_{1}
and *C*_{2}. This form makes the weighting functions
compatible with the weighting structure in the *H*_{∞}
loop shaping control design procedure used by functions such as `loopsyn`

and `ncfsyn`

.

[1] Zhou, K., Doyle, J.C.,
*Essentials of Robust Control*. London, UK: Pearson, 1997.

A modified version of this example exists on your system. Do you want to open this version instead?

You clicked a link that corresponds to this MATLAB command:

Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

Select web siteYou can also select a web site from the following list:

Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.

- América Latina (Español)
- Canada (English)
- United States (English)

- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)

- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)