www.gusucode.com > control 案例程序 matlab源码代码 > control/ChooseaLowOrderApproximationMethodExample.m

    %% Compare Truncated and DC Matched Low-Order Model Approximations 
% This example shows how to compute a low-order approximation in two ways
% and compares the results. When you compute a low-order approximation by
% the balanced truncation method, you can either:
%
% * Discard the states that make the smallest contribution to system
% behavior, altering the remaining states to preserve the DC gain of the
% system.
% * Discard the low-energy states without altering the remaining states.
% 
% Which method you choose depends on what dynamics are most important to your
% application. In general, preserving DC gain comes at the expense of accuracy
% in higher-frequency dynamics. Conversely, state truncation can yield more
% accuracy in fast transients, at the expense of low-frequency accuracy.
%%
% This example compares the state-elimination
% methods of the |balred| command, |Truncate| and |MatchDC|. You can
% similarly control the state-elimination method in the *Model Reducer*
% app, on the *Balanced Truncation* tab, using the *Preserve DC Gain* check
% box, as shown.
%%
% 
% <<../mr_baltrunc5.png>>
% 
%%
%
% Consider the following system.
%%
% 
% <<../transformation23.png>>
% 
%% 
% Create a closed-loop model of this system from _r_ to _y_. 
G = zpk([0 -2],[-1 -3],1);
C = tf(2,[1 1e-2]);
T = feedback(G*C,1) 

%%
% |T| is a third-order system that has a pole-zero near-cancellation close
% to _s_ = 0. Therefore, it is a good candidate for order reduction by approximation.  

%% 
% Compute two second-order approximations to |T|, one that preserves the DC
% gain and one that truncates the lowest-energy state without changing the
% other states. Use |balredOptions| to specify the approximation methods,
% |MatchDC| and |Truncate|, respectively.
matchopt = balredOptions('StateElimMethod','MatchDC');
truncopt = balredOptions('StateElimMethod','Truncate');
Tmatch = balred(T,2,matchopt);
Ttrunc = balred(T,2,truncopt); 
%% 
% Compare the frequency responses of the approximated models. 
bodeplot(T,Tmatch,Ttrunc)
legend('Original','DC Match','Truncate')    

%%
% The truncated model |Ttrunc| matches the original model well at high frequencies,
% but differs considerably at low frequency. Conversely, |Tmatch| yields
% a good match at low frequencies as expected, at the expense of high-frequency
% accuracy.  

%% 
% You can also see the differences between the two methods by examining
% the time-domain response in different regimes. Compare the slow dynamics
% by looking at the step response of all three models with a long time horizon. 
stepplot(T,Tmatch,'r--',Ttrunc,1500)
legend('Original','DC Match','Truncate')    

%%
% As expected, on long time scales the DC-matched approximation |Tmatch|
% has a very similar response to the original model.  

%% 
% Compare the fast transients in the step response. 
stepplot(T,Tmatch,'r',Ttrunc,'g--',0.5)
legend('Original','DC Match','Truncate')    

%%
% On short time scales, the truncated approximation |Ttrunc| provides a
% better match to the original model. Which approximation method you should
% use depends on which regime is most important for your application.