home *** CD-ROM | disk | FTP | other *** search
- echo off
- clear
- clg
- clc
- echo on
-
- % SYSTEM DEMO %
-
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %% This demo illustrates the use of the following functions %%
- %% from the Robust-Control Toolbox: %%
- %% %%
- %% TREE MKSYS BRANCH %%
- %% %%
- %% These commands endow matlab with a special data structure called %%
- %% a TREE which enables many matrices, along with their names and %%
- %% relationships to each other to be represented by a single TREE %%
- %% variable. A SYSTEM is a special kind of tree. %%
- %%------------------------------------------------------------------%%
- %% Many matlab commands such as SIGMA, H2LQG, and HINF make use of %%
- %% the TREE and SYSTEM data structures to simplify user interaction %%
- %% and reduce the amount of typing required to get a job done! %%
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- % R. Y. Chiang & M. G. Safonov 11/11/90
- % Copyright (c) 1988 by the MathWorks, Inc.
- % All Rights Reserved.
- % ----------------------------------------------------------------------
-
- pause % Press any key to continue
- clc
- % LOAD SOME MATRICES %
-
- % Lets load a few matrices and see what SYSTEM and TREE can do:
-
- echo off
- hplant
- echo on
-
- who
-
- % The matrices [ag,bg,cg,dg] describe a standard state-space system,viz.,
- % the logitudinal dynamics of an aircraft. The set of matrices
- % [A,B1,B2,C1,C2,D11,D12,D21,D22] also describe a two-port state-space
- % system, such as might be obtained by augmenting the aircraft in
- % preparation for HINF or H2LQG control design.
-
- pause % Press any key to continue
- clc
- % MKSYS %
-
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %% The MKSYS command packs matrices describing a system into %%
- %% a single vector. %%
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- % For example,
- ss_g = mksys(ag,bg,cg,dg);
-
- % MKSYS also creates two-port systems:
- TSS_ = mksys(A,B1,B2,C1,C2,D11,D12,D21,D22,'tss');
-
-
- % Other sorts of systems can be created too, e.g., descriptor systems ('des')
- % transfer function systems ('tf'), general polynomial system matrices
- % ('gpsm'), etc.
-
-
-
- pause % Press any key to continue
- echo off
- clc
- help mksys
- pause % Press any key to continue
- clc
- echo on
-
- % BRANCH %
-
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %% The BRANCH function recovers matrices packed in a SYSTEM or %%
- %% other TREE vector. %%
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- % Let's clear the matrices the matrices [ag,bg,cg,dg] and [A,B1,B2, ..
- % C1,C2,D11,D12,D21,D22] from the workspace so we can see how BRANCH
- % works.
-
- clear ag bg cg dg A B1 B2 C1 C2 D11 D12 D21 D22
- who
-
-
- pause % Press any key to continue
- clc
- % To recover the matrices D11 and C2 from the SYSTEM vector TSS_
- % we can type:
-
- [D11,C2] = branch(TSS_,'d11,c2')
-
-
- pause % Press any key to continue
- echo off
- clc
- help branch
- echo on
-
-
-
- pause % Press any key to continue
- clc
-
-
-
-
- % To get the matrix ag from the state space system ss_g, we can type
-
- ag=branch(ss_g,'a')
-
-
-
- pause % Press any key to continue
- clc
- % To recover all the matrices from ss_g at once one may type
-
- [ag,bg,cg,dg]=branch(ss_g);
-
- who
-
- pause % Press any key to continue
- clc
- echo on
-
- % H2LGQ, HINF and SIGMA examples %
-
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %% Now we will illustrate how the use of SYSTEM vectors saves typing %%
- %% when using system related functions like H2LGQ, HINF and SIGMA. %%
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- % Let's do an H2LQG control design for the two-port system TSS_
- % and compute the resultant controller's singular value bode plot.
-
- % One could do this by typing
- % [af,bf,cf,df,acl,bcl,ccl,dcl]=h2lqg(A,B1,B2,C1,C2,D11,D12,D21,D22);
- % sv=sigma(af,bf,cf,df,1,w)
- %
- % but the following is much simpler to type
-
- % ( .... be patient, this computation may take awhile .... )
-
- w = logspace(-3,3,10);
- sv=sigma(h2lqg(TSS_),1,w);
-
- pause % Press any key to continue
-
- echo off
- loglog(w,sv)
- title('loglog(sigma(sv,1,w))')
- pause % Press any key to continue
- clc
- echo on
-
- % H-infinity control design is easy too using the SYSTEM data
- % structure TSS_. To compute the HINF controller SYSTEM ss_f
- % and the closed-loop transfer function SYSTEM ss_cl, we type:
-
- [ss_f,ss_cl]=hinf(TSS_);
-
- pause % Press any key to continue
- clc
- % To recover the closed-loop state-space matrices [af,bf,cf,df]
- % from the SYSTEM vector ss_f, one may type
-
- [af,bf,cf,df] = branch(ss_f);
-
-
- who
-
-
- pause % Press any key to continue
- clc
- % TREE %
-
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %% The TREE function provides a general purpose tool for creating %%
- %% hierarchical data structures containing matrices, strings and %%
- %% even other TREEs. %%
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- % For example, suppose one wishes to keep track of the plant
- % [A,B1,B2,C1,C2,D11,D12,D21,D22], along with the control law
- % [af,bf,cf,df], the frequency response [w,sv] along with the
- % name 'Aircraft Design Data'. No problem!
-
- % First put the frequency response data in a TREE:
- fr=tree('w,sv',w,sv);
-
- % Now pack TSS_, ss_f, fr, along with the string 'Aircraft Design Data'
- % into the TREE vector DesignData:
- DesignData=...
- tree('plant,controller,freqresp,name',TSS_,ss_f,fr,'Aircraft Design Data');
-
- pause % Press any key to continue
- clc
-
- % The TREE DesignData has the following hierarchical structure:
-
- % plant
- % [a,b1,b2,c1,c2,d11,d12,d21,d22,ty]
- % controller
- % [a,b,c,d,ty]
- % freqresp
- % [w,sv]
- % [name]
-
- % This TREE vector has two levels, as indicated by the indentation.
- % However there is in general no limit to the number of levels a TREE
- % vector can have.
-
- % To recover the variable called 'name' from the TREE vector DesignData,
- % we type:
- name=branch(DesignData,'name')
- pause % Press any key to continue
- clc
- % To see the names of all the "root branches" of the TREE DesignData, type
- % the following (root branch names are always in branch no. 0 of a TREE):
-
- branch(DesignData,0)
-
- % The names of the root branches of the sub-tree 'plant' are returned by
-
- branch(DesignData,'plant/0')
-
- pause % Press any key to continue
- clc
-
- % To recover the value of the matrix named 'c1' in the branch 'plant'
- % of the tree DesignData, we could define the "path" to the variable
- % 'c1' in the tree as 'plant/c1'. Namely, we can descend two levels
- % into the TREE DesignData to recover the C1 matrix of the plant TSS_
- % with the command:
-
- C1 = branch(DesignData,'plant/c1')
-
- pause % Press any key to continue
- clc
- % SUMMARY %
-
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %% The function MKSYS and the function TREE upon which it is based %%
- %% endow matlab with a new data structure consisting of a collection %%
- %% of one or more matrices, strings and even sub-TREE's. %%
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
- % The power to represent systems by a single symbol considerably
- % simplifies user interaction with the functions in the Robust-Control
- % Toolbox. However, those who don't mind typing a lot still have the
- % option to type in the entire list of variables describing a system
- % if they prefer!
-
- echo off
-
- % ------------ End of SYSDEMO.M -------- RYC/MGS 11/11/90 %
-