## Documentation Center |

Robust performance margin of uncertain multivariable system

perfmarg = robustperf(usys) [perfmarg,wcu,report,info] = robustperf(usys) [perfmarg,wcu,report,info] = robustperf(usys,opt)

The performance of a nominally stable uncertain system model
will generally degrade for specific values of its uncertain elements. `robustperf`,
largely included for historical purposes, computes the robust performance
margin, which is one measure of the level of degradation brought on
by the modeled uncertainty.

As with other *uncertain-system* analysis
tools, only bounds on the performance margin are computed. The exact
robust performance margin is guaranteed to lie between these upper
and lower bounds.

The computation used in `robustperf` is a frequency-domain
calculation. Coupled with stability of the nominal system, this frequency
domain calculation determines robust performance of `usys`. If the input system `usys` is a `ufrd`,
then the analysis is performed on the frequency grid within the `ufrd`.
Note that the stability of the nominal system is not verified by the
computation. If the input system sys is a `uss`,
then the stability of the nominal system is first checked, an appropriate
frequency grid is generated (automatically), and the analysis performed
on that frequency grid. In all discussion that follows, *N* denotes
the number of points in the frequency grid.

Suppose `usys` is a `ufrd` or `uss` with *M* uncertain
elements. The results of

[perfmarg,perfmargunc,Report] = robustperf(usys)

are such that `perfmarg` is a structure with
the following fields:

Field | Description |
---|---|

LowerBound | Lower bound on robust performance margin, positive scalar. |

UpperBound | Upper bound on robust performance margin, positive scalar. |

CriticalFrequency | The value of frequency at which the performance degradation
curve crosses the |

`perfmargunc` is a `struct` of
values of uncertain elements associated with the intersection of the
performance degradation curve and the *y* = 1/*x* curve.
See Generalized Robustness Analysis. There
are *M* field names, which are the names of uncertain
elements of `usys`.

`Report` is a text description of the robust
performance analysis results.

If `usys` is
an array of uncertain models, the outputs are struct arrays whose
entries correspond to each model in the array.

Create a plant with a nominal model of an integrator, and include additive unmodeled dynamics uncertainty of a level of 0.4 (this corresponds to 100% model uncertainty at 2.5 rads/s).

P = tf(1,[1 0]) + ultidyn('delta',[1 1],'bound',0.4);

Design a "proportional" controller *K* that
puts the nominal closed-loop bandwidth at 0.8 rad/s. Roll off *K* at
a frequency 25 times the nominal closed-loop bandwidth. Form the closed-loop
sensitivity function.

BW = 0.8; K = tf(BW,[1/(25*BW) 1]); S = feedback(1,P*K);

Assess the performance margin of the closed-loop sensitivity function. Because the nominal gain of the sensitivity function is 1, and the performance degradation curve is monotonically increasing (see Generalized Robustness Analysis), the performance margin should be less than 1.

[perfmargin,punc] = robustperf(S); perfmargin perfmargin = UpperBound: 7.4305e-001 LowerBound: 7.4305e-001 CriticalFrequency: 5.3096e+000

You can verify that the upper bound of the performance margin
corresponds to a point on or above the *y*=1/*x* curve.
First, compute the normalized size of the value of the uncertain element,
and check that this agrees with the upper bound.

nsize = actual2normalized(S.Uncertainty.delta, punc.delta) nsize = perfmargin.UpperBound ans = 7.4305e-001

Compute the system gain with that value substituted, and verify that the product of the normalized size and the system gain is greater than or equal to 1.

gain = norm(usubs(S,punc),inf,.00001); nsize*gain ans = 1.0000e+000

Finally, as a sanity check, verify that the robust performance margin is less than the robust stability margin.

[stabmargin] = robuststab(S); stabmargin stabmargin = UpperBound: 3.1251e+000 LowerBound: 3.1251e+000 DestabilizingFrequency: 4.0862e+000

While the robust stability margin is easy to describe (poles
migrating from stable region into unstable region), describing the
robust performance margin is less elementary. See the diagrams and
figures in Generalized Robustness Analysis. Rather than
finding values for uncertain elements that lead to instability, the
analysis finds values of uncertain elements "corresponding
to the intersection point of the performance degradation curve with
a *y*=1/*x* hyperbola." This
characterization, mentioned above in the description of `perfmarg.CriticalFrequency` and `perfmargunc`,
is used often in the descriptions below.

A fourth output argument yields more specialized information, including sensitivities and frequency-by-frequency information.

[perfmarg,perfmargunc,Report,Info] = robustperf(usys)

In addition to the first 3 output arguments, described previously, `Info` is
a structure with the following fields:

Use `robustperfOptions` to
specify additional options for the `robustperf` computation.
For example, you can control what is displayed during the computation,
turn the sensitivity computation on or off, set the step size in the
sensitivity computation, or control the option argument used in the
underlying call to `mussv`. For example, you can
turn the display on and turn off the sensitivity by executing

opt = robustperfOptions('Sensitivity','off','Display','on'); [PerfMarg,Destabunc,Report,Info] = robustperf(usys,opt)

See the `robustperfOptions` reference
page for more information about available options.

Because the calculation is carried out with a frequency gridding,
it is possible (likely) that the true critical frequency is missing
from the frequency vector used in the analysis. This is similar to
the problem in `robuststab`. However, in comparing
to `robuststab`, the problem in `robustperf` is
less acute. The robust performance margin, considered a function of
problem data and frequency, is typically a continuous function (unlike
the robust stability margin, described in Getting Reliable Estimates of
Robustness MarginsGetting Reliable Estimates of
Robustness Margins). Hence, in robust performance margin calculations,
increasing the density of the frequency grid will always increase
the accuracy of the answers, and in the limit, answers arbitrarily
close to the actual answers are obtainable with finite frequency grids.

`actual2normalized` | `mussv` | `norm` | `robustperfOptions` | `robuststab` | `wcgain` | `wcmargin` | `wcsens`

Was this topic helpful?