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

    %% Approximate Model with Unstable or Near-Unstable Pole  
% This example shows how to compute a reduced-order approximation of a
% system when the system has unstable or near-unstable poles. 
%
% When computing a reduced-order approximation, the |balred| command (or
% the *Model Reducer* app) does not eliminate unstable poles because doing
% so would fundamentally change the system dynamics. Instead, the software
% decomposes the model into stable and unstable parts and reduces the
% stable part of the model.
%
% If your model has near-unstable poles, you might want to ensure that the
% reduced-order approximation preserves these dynamics.  This example shows
% how to use the |Offset| option of |balred| to preserve poles that are
% close to the stable-unstable boundary.  You can achieve the same result
% in the *Model Reducer* app, on the *Balanced Truncation* tab, under
% *Options*, using the *Offset* field, as shown:
%%
% 
% <<../mr_baltrunc_options1.png>>
% 
%% 
% Load a model with unstable and near-unstable poles. 
load('reduce.mat','gasf35unst')

%%
% |gasf35unst| is a 25-state SISO model with two unstable poles (Re(s) >
% 0).  Examine the system poles to find the near-unstable poles.
pzplot(gasf35unst)
axis([-0.0015 0.0015 -0.0005 0.0005])    

%%
% The pole-zero plot shows several poles (marked by |x|) that fall in the
% left half-plane, but relatively close to the imaginary axis.  These are
% the near-unstable poles.  Two of these fall within 0.0005 of instability.
% Three more fall within 0.001 of instability.
%%
% Examine a Hankel singular-value plot
% of the model.
hsvplot(gasf35unst)
%%
% The plot shows the two unstable modes, but you cannot easily determine
% the energy contribution of the near-unstable poles. In your application,
% you might want to reduce the model without discarding those poles nearest
% to instability, even if they are of relatively low energy. Use the
% |Offset| option of |balred| to calculate a reduced-order system that
% preserves the two stable poles that are closest to the imaginary axis.
% The |Offset| option sets the boundary between poles
% that |balred| can discard, and poles that |balred| must preserve (treat
% as unstable).
opts = balredOptions('Offset',0.0005);
gasf_arr = balred(gasf35unst,[10 15],opts); 
%%
% Providing |balred| an array of target approximation orders |[10 15]| causes
% |balred| to return an array of approximated models. The array |gasf_arr|
% contains two models, a 10th-order and a 15th-order approximation of
% |gasf35unst|. In both approximations, |balred| does not discard the two
% unstable poles or the two nearly-unstable poles.  
%% 
% Compare the reduced-order approximations to the original model. 
 bodeplot(gasf35unst,gasf_arr,'r--')    
%%
% The 15th order approximation is a good frequency-domain match to the original
% model. However, the 10th-order approximation shows changes in high-frequency
% dynamics, which might be too large to be acceptable. The 15th-order approximation
% is likely a better choice.