www.gusucode.com > robust 案例源码程序 matlab代码 > robust/RobustnessMarginAsAFunctionOfFrequencyExample.m
%% Robust Stability Margin as a Function of Frequency % Consider a model of a control system containing % uncertain elements. %% k = ureal('k',10,'Percent',40); delta = ultidyn('delta',[1 1]); G = tf(18,[1 1.8 k]) * (1 + 0.5*delta); C = pid(2.3,3,0.38,0.001); CL = feedback(G*C,1); %% % By default, |robstab| computes only the weakest stability margin over % all frequencies. To see how the stability margin varies with frequency, % use the |'VaryFrequency'| option of |robOptions|. For example, compute the stability % margin of the system at frequency points between 0.1 and 10 rad/s. opts = robOptions('VaryFrequency','on'); [stabmarg,wcu,info] = robstab(CL,{0.1,10},opts); info %% % |robstab| returns the vector of frequencies in the |info| output, in the % |Frequencies| field. |info.Bounds| contains the upper and lower bounds on % the stability margin at each frequency. Use these values to plot the % frequency dependence of the stability margin. semilogx(info.Frequency,info.Bounds) title('Stability Margin vs. Frequency') ylabel('Margin') xlabel('Frequency') legend('Lower bound','Upper bound') %% % When you use the |'VaryFrequency'| option, |robstab| chooses frequency % points automatically. The frequencies it selects are guaranteed to % include the frequency at which the stability margin is weakest (within the % specified range). Display the returned frequency values to confirm that % they include the critical frequency. info.Frequency stabmarg.CriticalFrequency %% % Alternatively, instead of using |'VaryFrequency'|, you can specify % particular frequencies at which to compute the robust stability margins. % |info.Bounds| contains the margins at all specified frequencies. However, % these results are not guaranteed to include the weakest margin, which % might fall between specified frequency points. w = logspace(-1,1,25); [stabmarg,wcu,info] = robstab(CL,w); semilogx(w,info.Bounds) title('Stability Margin vs. Frequency') ylabel('Margin') xlabel('Frequency') legend('Lower bound','Upper bound')