| Robust Control Toolbox | |
| Provide feedback about this page |
Calculate robust stability margins of uncertain multivariable system
Syntax
[stabmarg,destabunc,report,info] = robuststab(sys) [stabmarg,destabunc,report,info] = robuststab(sys,opt)
Description
A nominally stable uncertain system is generally unstable for specific values of its uncertain elements. Determining the values of the uncertain elements closest to their nominal values for which instability occurs is a robust stability calculation.
If the uncertain system is stable for all values of uncertain elements within their allowable ranges (ranges for ureal, norm bound or positive-real constraint for ultidyn, radius for ucomplex, weighted ball for ucomplexm), the uncertain system is robustly stable. Conversely, if there is a combination of element values that cause instability, and all lie within their allowable ranges, then the uncertain system is not robustly stable.
robuststab computes the margin of stability robustness for an uncertain system. A stability robustness margin greater than 1 means that the uncertain system is stable for all values of its modeled uncertainty. A stability robustness margin less than 1 implies that certain allowable values of the uncertain elements, within their specified ranges, lead to instability.
Numerically, a margin of 0.5 (for example) implies two things: the uncertain system remains stable for all values of uncertain elements that are less than 0.5 normalized units away from their nominal values and, there is a collection of uncertain elements that are less than or equal to 0.5 normalized units away from their nominal values that results in instability. Similarly, a margin of 1.3 implies that the uncertain system remains stable for all values of uncertain elements up to 30% outside their modeled uncertain ranges. See actual2normalized for converting between actual and normalized deviations from the nominal value of an uncertain element.
As with other uncertain-system analysis tools, only bounds on the exact stability margin are computed. The exact robust stability margin is guaranteed to lie in between these upper and lower bounds.
The computation used in robuststab is a frequency-domain calculation, which determines whether poles can migrate (due to variability of the uncertain atoms) across the stability boundary (imaginary axis for continuous-time, unit circle for discrete-time). Coupled with stability of the nominal system, determining that no migration occurs constitutes robust stability. If the input system sys 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.
Basic Syntax
Suppose sys is a ufrd or uss with M uncertain elements. The results of
are that stabmarg is a structure with the following fields
destabunc is a structure of values of uncertain elements, closest to nominal, that cause instability. There are M field names, which are the names of uncertain elements of sys. The value of each field is the corresponding value of the uncertain element, such that when jointly combined, lead to instability. The command pole(usubs(sys,destabunc)) shows the instability. If A is an uncertain atom of sys, then
will be less than or equal to UpperBound, and for at least one uncertain element of sys, this normalized distance will be equal to UpperBound, proving that UpperBound is indeed an upper bound on the robust stability margin.
Report is a text description of the robustness analysis results.
Example
Construct a feedback loop with a second-order plant and a PID controller with approximate differentiation. The second-order plant has frequency-dependent uncertainty, in the form of additive unmodeled dynamics, introduced with an ultidyn object and a shaping filter.
robuststab is used to compute the stability margins of the closed-loop system with respect to the plant model uncertainty.
P = tf(4,[1 .8 4]); delta = ultidyn('delta',[1 1],'SampleStateDim',5); Pu = P + 0.25*tf([1],[.15 1])*delta; C = tf([1 1],[.1 1]) + tf(2,[1 0]); S = feedback(1,Pu*C); [stabmarg,destabunc,report,info] = robuststab(S);
You can view the stabmarg variable.
As the margin is less than 1, the closed-loop system is not stable for plant models covered by the uncertain model Pu. There is a specific plant within the uncertain behavior modeled by Pu (actually about 82% of the modeled uncertainty) that leads to closed-loop instability, with the poles migrating across the stability boundary at 9.1 rads/s.
The report variable is specific, giving a plain-language version of the conclusion.
report report = Uncertain System is NOT robustly stable to modeled uncertainty. -- It can tolerate up to 81.8% of modeled uncertainty. -- A destabilizing combination of 81.8% the modeled uncertainty exists, causing an instability at 9.13 rad/s. -- Sensitivity with respect to uncertain element ... 'delta' is 100%. Increasing 'delta' by 25% leads to a 25% decrease in the margin.
Because the problem has only one uncertain element, the stability margin is completely determined by this element, and hence the margin exhibits 100% sensitivity to this uncertain element.
You can verify that the destabilizing value of delta is indeed about 0.82 normalized units from its nominal value.
Use usubs to substitute the specific value into the closed-loop system. Verify that there is a closed-loop pole near j9.1, and plot the unit-step response of the nominal closed-loop system, as well as the unstable closed-loop system.
Sbad = usubs(S,destabunc); pole(Sbad) ans = 1.0e+002 * -3.2318 -0.2539 -0.0000 + 0.0913i -0.0000 - 0.0913i -0.0203 + 0.0211i -0.0203 - 0.0211i -0.0106 + 0.0116i -0.0106 - 0.0116i step(S.NominalValue,'r--',Sbad,'g',4);
Finally, as an ad-hoc test, set the gain bound on the uncertain delta to 0.81 (slightly less than the stability margin). Sample the closed-loop system at 100 values, and compute the poles of all these systems.
S.Uncertainty.delta.Bound = 0.81; S100 = usample(S,100); p100 = pole(S100); max(real(p100(:))) ans = -6.4647e-007
As expected, all poles have negative real parts.
Basic Syntax with Fourth Output Argument
A fourth output argument yields more specialized information, including sensitivities and frequency-by-frequency information.
In addition to the first 3 output arguments, described previously, Info is a structure with the following fields
Options (e.g., controlling what is displayed during the computation, turning on/off the sensitivity computation, setting the step-size in the sensitivity computation, and controlling the option argument used in the underlying call to mussv) can be specified using the robustness analysis options robopt object. For instance, you can turn the display on, and the sensitivity calculation off by executing
opt = robopt('Sensitivity','off','Display','on'); [StabMarg,Destabunc,Report,Info] = robuststab(sys,opt)
Handling Array Dimensions
If sys has array dimensions (for example, suppose that the size of sys is rxcxd1xd2x...xdF, refer to the d1xd2x...xdF as the array dimensions) then the margin calculation is performed pointwise (individually, at each and every array value) and the computed answers all have array dimensions as well. Details are described below. Again, assume that there are N frequency points and M uncertain elements.
are stabmarg is a structure with the following fields:
destabunc is a d1x...xdF structure array of values of uncertain elements, that cause instability. Using single-indexing, for each i, the destabilizing values of uncertain elements for uncertain system sys(:,:,i) is destabunc(i).
Report is a character array, dimensions 3, 4, ... , F+2 are d1x...xdF, containing text description of the robustness analysis results at each grid in the array dimensions.
In addition to the first 3 output arguments, described previously, Info is a structure with the following fields
You can compute the smallest stability margin over all array dimensions via
Computing i = find(UpperBound==min(UpperBound(:))) and then destabunc(i) yields values for an uncertainty corresponding to the smallest stability margin across all array dimensions.
Algorithm
A rigorous robust stability analysis consists of two steps:
Because the stability boundary is also associated with the frequency response, the second step can be interpreted (and carried out) as a frequency domain calculation. This amounts to a classical µ-analysis problem.
The algorithm in robuststab follows this in spirit, but might require user attention.
If sys is a uss object, then the first requirement of stability of nominal value is explicitly checked within robuststab. However, if sys is an ufrd, then the verification of nominal stability from the nominal frequency response data is not performed, and is instead assumed.
In the second step (monitoring the stability boundary for the migration of poles), rather than check all points on stability boundary, the algorithm only detects migration of poles across the stability boundary at the frequencies in info.Frequency.
See the "Limitations" section below about issues related to migration detection.
The exact stability margin is guaranteed to be no larger than UpperBound (some uncertain elements associated with this magnitude cause instability - one instance is returned in the structure destabunc). The instability created by destabunc occurs at the frequency value in DestabilizingFrequency.
Similarly, the exact stability margin is guaranteed to be no smaller than LowerBound. In other words, for all modeled uncertainty with magnitude up to LowerBound, the system is guaranteed stable. These bounds are derived using the upper bound for the structured singular value, which is essentially optimally-scaled, small-gain theorem analysis.
Limitations
Under most conditions, the robust stability margin that occurs at each frequency is a continuous function of the problem data at that frequency. Because the problem data, in turn, is a continuous function of frequency, it follows that finite frequency grids are usually adequate in correctly assessing robust stability bounds, assuming the frequency grid is dense enough.
Nevertheless, there are simple examples that violate this. In some problems, the migration of poles from stable to unstable only occurs at a finite collection of specific frequencies (generally unknown to you). Any frequency grid that excludes these critical frequencies (and almost every grid will exclude them) will result in undetected migration and misleading results, namely stability margins of
.
See the Robust Control Toolbox demo titled "Getting Reliable Estimates of Robustness Margins" in the online documentation about circumventing the problem in an engineering-relevant fashion.
See Also
loopmargin Comprehensive analysis of a feedback loop
mussv Calculates bounds on the Structured Singular Value
(µ)
robopt Creates a robuststab/robustperf options object
robustperf Calculates performance margins of uncertain systems
wcgain Calculates worst-case gain of uncertain systems
wcsens Calculates worst-case sensitivities for a feedback loop
wcmargin Calculates worst-case margins for a feedback loop
| Provide feedback about this page |
![]() | robustperf | frd/schur | ![]() |
| © 1984-2008- The MathWorks, Inc. - Site Help - Patents - Trademarks - Privacy Policy - Preventing Piracy - RSS |