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

    %% Worst-Case Gain at Frequencies in a Range
% 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, |wcgain| returns only the worst-case peak gain over all
% frequencies. To obtain worst-case gain values at multiple frequencies,
% use the |'VaryFrequency'| option of |wcOptions|. For example, compute the
% highest possible gain of the system at frequency points between 0.1 and 10
% rad/s. 
opts = wcOptions('VaryFrequency','on');
[wcg1,wcu1,info1] = wcgain(CL,{0.1,10},opts);
info1
%%
% |wcgain| returns the vector of frequencies in the |info| output, in the
% |Frequencies| field. |info.Bounds| contains the upper and lower bounds on
% the worst-case gain at each frequency. Use these values to plot the
% frequency dependence of the worst-case gain.
semilogx(info1.Frequency,info1.Bounds)
title('Worst-Case Gain vs. Frequency')
ylabel('Gain')
xlabel('Frequency')
legend('Lower bound','Upper bound','Location','northwest')
%%
% The curve shows the high-gain envelope for all systems within the
% uncertainty ranges of |CL|. You can also use |wcsigma| to plot this
% envelope along with samples of the system.
%%
% When you use the |'VaryFrequency'| option, |wcgain| chooses frequency
% points automatically.  The frequencies it selects are guaranteed to
% include the frequency at which the worst-case gain is highest (within the
% specified range). Display the returned frequency values to confirm that
% they include the critical frequency.
info1.Frequency
wcg1.CriticalFrequency
%%
% Alternatively, instead of using |'VaryFrequency'|, you can specify
% particular frequencies at which to compute the worst-case gains.
% |info.Bounds| contains the worst-case gains at all specified frequencies.
w = logspace(-1,1,24); 
[wcg2,wcu2,info2] = wcgain(CL,w);
semilogx(w,info2.Bounds)
title('Worst-Case Gain vs. Frequency')
ylabel('Gain')
xlabel('Frequency')
legend('Lower bound','Upper bound','Location','northwest')  
%%
% When you provide the frequency grid in this way, the results are not
% guaranteed to include the overall worst-case gain, which might fall
% between specified frequency points. To see this, examine |wcg1| and
% |wcg2|, which contain the bounds for the two approaches. 
wcg1
%%
wcg2
%%
% |wcg1|, computed using |VaryFrequency|, finds a higher peak gain than the
% specified frequency grid.