www.gusucode.com > robust_featured 案例源码程序 matlab代码 > robust_featured/caution_demo.m
%% Getting Reliable Estimates of Robustness Margins % This example illustrates the pitfalls of using frequency gridding to % compute robustness margins for systems with only real uncertain % parameters. It presents a safer approach along with ways to mitigate % discontinuities in the structured singular value $\mu$. %% How Discontinuities Can Hide Robustness Issues % Consider a spring-mass-damper system with 100% parameter % uncertainty in the damping coefficient and 0% uncertainty in the % spring coefficient. Note that all uncertainty is of |ureal| type. m = 1; k = 1; c = ureal('c',1,'plusminus',1); sys = tf(1,[m c k]); %% % As the uncertain element |c| varies, the only place where the poles can % migrate from stable to unstable is at s = j*1 (1 rad/sec). No amount of % variation in |c| can cause them to migrate across the jw-axis at any % other frequency. As a result, the robust stability margin is infinite at % all frequencies except 1 rad/s, where the margin with respect to the % specified uncertainty is 1. In other words, the robust stability margin and the % underlying structured singular value $\mu$ are discontinuous as a function % of frequency. % % The traditional approach to computing the robust stability margin is to % pick a frequency grid and compute lower and upper bounds for $\mu$ at % each frequency point. Under most conditions, the robust stability margin % is continuous with respect to frequency and this approach gives good % estimates provided you use a sufficiently dense frequency grid. However % in problems with only |ureal| uncertainty, such as the example % above, poles can migrate from stable to unstable only at specific % frequencies (the points of discontinuity for $\mu$), so any frequency % grid that excludes these particular frequencies will lead to over-optimistic % stability margins. % % To see this effect, pick a frequency grid for the spring-mass-damper system % above and compute the robust stability margins at these frequency points % using |robstab|. omega = logspace(-1,1,40); % one possible grid [stabmarg,wcu,info] = robstab(sys,omega); stabmarg %% % The field |info.Bounds| gives the margin lower and upper bounds at each % frequency. Verify that the lower bound (the guaranteed margin) is large % at all frequencies. loglog(omega,info.Bounds(:,1)) title('Robust stability margin: 40 frequency points') %% % Note that making the grid denser would not help. Only by adding f=1 to the % grid will we find the true margin. f = 1; stabmarg = robstab(sys,f) %% Safe Computation of Robustness Margins % Rather than specifying a frequency grid, apply |robstab| directly to the % USS model |sys|. This uses a more advanced algorithm that is guaranteed % to find the peak of $\mu$ even in the presence of a discontinuity. This % approach is more accurate and often faster than frequency gridding. [stabmarg,wcu] = robstab(sys) %% % This computes the correct robust stability margin (1), identifies the % critical frequency (|f=1|), and finds the smallest destabilizing % perturbation (setting |c=0|, as expected). %% Modifying the Uncertainty Model to Eliminate Discontinuities % The example above shows that the robust stability margin can be a % discontinuous function of frequency. In other words, it can have jumps. % We can eliminate such jumps by adding a small amount of uncertain % dynamics to every uncertain real parameter. This amounts to adding some % dynamics to pure gains. Importantly, as the size of the added dynamics % goes to zero, the estimated margin for the modified problem converges to % the true margin for the original problem. % % In the spring-mass-damper example, we model |c| as a |ureal| with the % range [0.05,1.95] rather than [0,2], and add a |ultidyn| perturbation with % gain bounded by 0.05. This combination covers the original uncertainty in % |c| and introduces only 5% conservatism. cc = ureal('cReal',1,'plusminus',0.95) + ultidyn('cUlti',[1 1],'Bound',0.05); sysreg = usubs(sys,'c',cc); %% % Recompute the robust stability margin over the frequency grid % |omega|. [stabmarg,~,info] = robstab(sysreg,omega); stabmarg %% % Now the frequency-gridded calculation yields a margin of % 2.36. This is still greater than 1 % (the true margin) because the density of frequency points is % not high enough. Increase the number of points from 40 to 200 % and recompute the margin. OmegaDense = logspace(-1,1,200); [stabmarg,~,info] = robstab(sysreg,OmegaDense); stabmarg %% % Plot the robustness margin as a function of frequency. loglog(OmegaDense,info.Bounds(:,1),OmegaDense,info.Bounds(:,2)) title('Robust stability margin: 5% added dynamics, 200 frequency points') legend('Lower bound','Upper bound') %% % The computed margin is now close to 1, % the true margin for the original problem. In general, the stability % margin of the modified problem is less than or equal to that of the % original problem. If it is significantly less, then the answer to the % question "What is the stability margin?" is very sensitive to the % uncertainty model. In this case, we put more faith in the value that % allows for a few percents of unmodeled dynamics. Either way, the % stability margin for the modified problem is more trustworthy. %% Automated Regularization of Discontinuous Problems % The command |complexify| automates the procedure of replacing a |ureal| % with the sum of a |ureal| and |ultidyn|. The analysis above can be % repeated using |complexify| obtaining the same results. sysreg = complexify(sys,0.05,'ultidyn'); [stabmarg,~,info] = robstab(sysreg,OmegaDense); stabmarg %% % Note that such regularization is only needed when using frequency % gridding. Applying |robstab| directly to the original uncertain % model |sys| yields the correct % margin without frequency gridding or need for regularization. %% References % The continuity of the robust stability margin, and the subsequent % computational and interpretational difficulties raised by the presence of % discontinuities are considered in [1]. The consequences and % interpretations of the regularization illustrated in this small example % are described in [2]. An extensive analysis of regularization for % 2-parameter example is given in [2]. % % [1] Barmish, B.R., Khargonekar, P.P, Shi, Z.C., and R. Tempo, "Robustness % margin need not be a continuous function of the problem data," Systems & % Control Letters, Vol. 15, No. 2, 1990, pp. 91-98. % % [2] Packard, A., and P. Pandey, "Continuity properties of the % real/complex structured singular value," Vol. 38, No. 3, 1993, pp. % 415-428.