www.gusucode.com > robust 案例源码程序 matlab代码 > robust/RobustPerformanceMarginAsAFunctionOfFrequencyExample.m

    %% Robust Performance 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);
S = feedback(1,G*C);
%%
% By default, |robgain| computes only the weakest performance margin over
% all frequencies. To see how the margin varies with frequency, use the
% |'VaryFrequency'| option of |robOptions|. For example, compute the
% performance margin of the system for a performance level of 1.5, at
% frequency points between 0.1 and 100 rad/s.
opts = robOptions('VaryFrequency','on');
[perfmarg,wcu,info] = robgain(S,1.5,{0.1,100},opts);
info
%%
% |robgain| returns the vector of frequencies in the |info| output, in the
% |Frequencies| field. |info.Bounds| contains the upper and lower bounds on
% the performance margin at each frequency. Use these values to plot the
% frequency dependence of the performance margin.
semilogx(info.Frequency,info.Bounds)
title('Performance Margin vs. Frequency')
ylabel('Margin')
xlabel('Frequency')
legend('Lower bound','Upper bound')
%%
% When you use the |'VaryFrequency'| option, |robgain| chooses frequency
% points automatically. The frequencies it selects are guaranteed to
% include the frequency at which the margin is smallest (within the
% specified range). Display the returned frequency values to confirm that
% they include the critical frequency.
info.Frequency
perfmarg.CriticalFrequency
%% 
% Alternatively, instead of using |'VaryFrequency'|, you can specify
% particular frequencies at which to compute the robust performance 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,2,20); 
[perfmarg,wcu,info] = robgain(S,1.5,w);
semilogx(w,info.Bounds)
title('Performance Margin vs. Frequency')
ylabel('Margin')
xlabel('Frequency')
legend('Lower bound','Upper bound')