Matlab Robust Control Toolbox
Matlab Robust Control Toolbox
Toolbox
April 2006
Nathan Sorensen
Kedrick Black
Purpose
Increase Enthusiasm for Robust Controls
Learn how to simulate control algorithms
with uncertainty
Increase your knowledge in Robust
Controls
April 2006
Nathan Sorensen
Kedrick Black
Outline
Robustness
MIMO Control
Uncertain Elements
Uncertain Matricies and Systems
Manipulation of Uncertain Models
Interconnection of Uncertain Models
Model Order Reduction
Controller Synthesis
-synthesis
April 2006
Nathan Sorensen
Kedrick Black
A collection of functions and tools that help you to analyze and design MIMO
control systems with uncertain elements
Ability to build uncertain LTI system models containing uncertain parameters
and uncertain dynamics
You get tools to analyze MIMO system stability margins and worst case
performance
Ability to simplify and reduce the order of complex models with model
reduction tools that minimize additive and multiplicative error bounds
It provides tools for implementing advanced robust control methods like H ,
H2, linear matrix inequalities (LMI), and -synthesis robust control
You can shape MIMO system frequency responses and design uncertainty
tolerant controllers
April 2006
Nathan Sorensen
Kedrick Black
Modeling Uncertainty
Arises when system gains or other parameters are not precisely
known, or can vary over a given range
Examples of real parameter uncertainties include uncertain pole and
zero locations and uncertain gains
With the Robust Control Toolbox you can create uncertain LTI
models as objects specifically designed for robust control
applications
April 2006
Nathan Sorensen
Kedrick Black
Sources of Uncertainty
Uncertainty in an system can occur in various forms and from
various sources.
April 2006
Nathan Sorensen
Kedrick Black
Feedback Uncertainty
Uncertain Elements
1)
2)
3)
4)
5)
April 2006
Nathan Sorensen
Kedrick Black
UComplex(Name,nominal value)
UComplex() is a function to define complex uncertain parameters
Sampled Complex Uncertain Parameter A
4.5
3.5
2.5
1.5
EX:
2.5
3.5
4.5
5.5
A = ucomplex('A',4+3*j)
Uncertain Complex Parameter: Name
A,
Nominal Value 4+3i,
Radius 1
April 2006
percentage parameter
specifying an uncertainty percentage
of the nominal for the radius. Value
should follow the parameter
specificaiton
Nathan Sorensen
Kedrick Black
EX:
F = ucomplexm('F',[1 2 3;4 5 6],'WL',diag([.1 .3]),...
'WR',diag([.4 .8 1.2]))
Uncertain Complex Matrix: Name F, 2x3
Sampled F(1,1) - F(1,1).NominalValue
8
6
4
2
0
0.05
0.1
0.15
0.2
0.25
0.2
0.25
10
0.05
0.1
April 2006
0.15
uncertain parameter
Nominal Value center nominal value
for the parameter
WL,WR WL and WR are square,
invertible, and weighting matrices that
quantify the size and shape of the ball of
matrices represented by this object.
Each parameter name is to be followed
by the respective matrix. (Assumed to
be the identity if left out.)
AutoSimplify parameter to set the
type of simplification to be done on
outputs from the uncertain matrix.
Setting values are off, basic, and full.
Nathan Sorensen
Kedrick Black
n = udyn('name',iosize)
Udyn() creates an unstructured uncertain dynamic system class,
with input/output dimension specified by iosize.
Input:
Name Variable name for output
Iosize - input/output dimension
specification. [Input,Output]
Output:
N - an unstructured uncertain
dynamic system class
April 2006
EX:
N = udyn('N',[2 3])
Uncertain Dynamic System:
Name N, size 2x3
size(N)
ans =
2 3
get(N)
Name: 'N'
NominalValue: [2x3 double]
AutoSimplify: 'basic'
Nathan Sorensen
Kedrick Black
10
ultidyn('Name',iosize)
Ultidyn() is a function to create an uncertain linear time inveriant
object where only bounds on the frequency response are known.
Parameters Include:
Nyquist Diagram
40
30
Imaginary Axis
20
10
0
-10
-20
-30
-40
-10
10
20
30
40
50
60
70
80
Real Axis
EX:
B = ultidyn('B',[1 1],'Type','PositiveReal','Bound',2.5)
B.SampleStateDim = 3;
nyquist(usample(B,30))
Uncertain PositiveReal LTI Dynamics: Name B, 1x1, M+M' >=
2*(2.5)
April 2006
Nathan Sorensen
Kedrick Black
11
Ureal(Name,Nominal Value)
Ureal() is a function to define real uncertain parameters used in various
analysis and design functions in the robust control toolbox.
Parameters Include:
EX:
c = ureal('c',4,'Mode','Range','Percentage',25);
Name: 'c'
NominalValue: 4
Mode: 'Range'
Range: [3 5]
PlusMinus: [-1 1]
Percentage: [-25 25]
AutoSimplify: 'basic'
April 2006
Nathan Sorensen
Kedrick Black
12
4.
5.
6.
April 2006
Nathan Sorensen
Kedrick Black
13
h = umat(m)
Uncertain matrices are usually created by
manipulation of uncertain atoms (ureal,
ucomplex, ultidyn, etc.), double matrices, and
other uncertain matrices
The command umat is rarely used
There are two situations where it may be useful
If M is a double, then H = umat(M) recasts M as
an uncertain matrix (umat object) without any
uncertainties
In both cases, simplify(H,'class') is the same as
M
April 2006
Nathan Sorensen
Kedrick Black
14
uss(a,b,c,d)
Uss() creates uncertain state space objects given the uncertain state
space system matricies a,b,c,d.
Parameters Include:
A,B,C,D umat or other uncertain state
space parameters to describe the
system.
Ts sample time for a discrete time
state space object.
RefSys if a refrence uss is given, the
parameters of that object are included.
EX:
p1 = ureal('p1',5,'Range',[2 6]);
p2 =
ureal('p2',3,'Plusminus',0.4);
A = [-p1 0;p2 -p1];
B = [0;p2];
C = [1 1];
usys = uss(A,B,C,0);
Nathan Sorensen
Kedrick Black
15
ufrd(usys,frequency)
Ufrd() is a function to create an uncertain frequency response
model which often arises when converting uncertain state space
objects to frequency response objects.
Bode Diagram
Magnitude (dB)
0
-10
Parameters Include:
-20
-30
-40
45
Phase (deg)
0
-45
-90
-135
-180
-2
10
-1
10
10
10
10
Frequency (rad/sec)
EX:
p1 = ureal('p1',5,'Range',[2 6]);
p2 = ureal('p2',3,'Plusminus',0.4);
p3 = ultidyn('p3',[1 1]);
Wt = makeweight(.15,30,10);
A = [-p1 0;p2 -p1];
B = [0;p2];
C = [1 1];
usys = uss(A,B,C,0)*(1+Wt*p3);
usysfrd = ufrd(usys,logspace(-2,2,60));
bode(usysfrd,'r',usysfrd.NominalValue,'b+')
April 2006
Nathan Sorensen
Kedrick Black
16
A = randatom(Type)
Generate random uncertain atom objects
generates a 1-by-1 type uncertain object
Valid values for Type include 'ureal',
'ultidyn', 'ucomplex', and 'ucomplexm'
Example
xr = randatom('ureal')
Uncertain Real Parameter: Name BMSJA, NominalValue -6.75,
Range [-7.70893 -1.89278]
April 2006
Nathan Sorensen
Kedrick Black
17
um = randumat(ny,nu)
Generate random uncertain umat objects
generates an uncertain matrix of size ny-by-nu
andumat randomly selects from uncertain atoms of type 'ureal',
'ultidyn', and 'ucomplex
Example
The following statement creates the umat uncertain object x1 of size 2by-3. Note that your result can differ because a random seed is used
x1 = randumat(2,3)
UMAT: 2 Rows, 3 Columns
ROQAW: complex, nominal = 9.92+4.84i, radius = 0.568, 1
occurrence
UEPDY: real, nominal = -5.81, variability = [-1.98681
0.133993], 3 occurrences
VVNHL: complex, nominal = 5.64-6.13i, radius = 1.99, 2
occurrences
April 2006
Nathan Sorensen
Kedrick Black
18
usys = randuss(n,p,m)
Example
The statement creates a fifth order, continuous-time uncertain system s1 of
size 2-by-3. Note your display can differ because a random seed is used.
s1 = randuss(5,2,3)
USS: 5 States, 2 Outputs, 3 Inputs, Continuous System
CTPQV: 1x1 LTI, max. gain = 2.2, 1 occurrence
IGDHN: real, nominal = -4.03, variability = [-3.74667 22.7816]%, 1 occurrence
MLGCD: complex, nominal = 8.36+3.09i, +/- 7.07%, 1 occurrence
OEDJK: complex, nominal = -0.346-0.296i, radius = 0.895, 1 occurrence
April 2006
Nathan Sorensen
Kedrick Black
19
Nathan Sorensen
Kedrick Black
20
B = isuncertain(A)
April 2006
Nathan Sorensen
Kedrick Black
21
B = simplify(A)
Simplify representations of uncertain objects
performs model-reduction-like techniques to detect and eliminate
redundant copies of uncertain elements
After reduction, any uncertain element which does not actually affect
the result is deleted from the representation
Example
Create a simple umat with a single uncertain real parameter. Select specific elements, note that result remains
in class umat. Simplify those same elements, and note that class changes.
p1 = ureal('p1',3,'Range',[2 5]);
L = [2 p1];
L(1)
UMAT: 1 Rows, 1 Columns
L(2)
UMAT: 1 Rows, 1 Columns
p1: real, nominal = 3, range = [2 5], 1 occurrence
simplify(L(1))
ans =
2
simplify(L(2))
Uncertain Real Parameter: Name p1, NominalValue 3, Range [2 5]
April 2006
Nathan Sorensen
Kedrick Black
22
B = usample(A,N)
Example
A = ureal('A',5);
Asample = usample(A,500);
size(A)
ans =
1 1
size(Asample)
ans =
1 1 500
class(Asample)
ans =
double
hist(Asample(:))
April 2006
Nathan Sorensen
Kedrick Black
23
B = usubs(M,StrucArray)
Substitute given values for uncertain
elements of uncertain objects
Example
p = ureal('p',5);
m = [1 p;p^2 4];
size(m)
ans =
2 2
m1 = usubs(m,'p',5)
m1 =
1 5
25 4
NamesValues.p = 5;
m2 = usubs(m,NamesValues)
m2 =
1 5
25 4
m1 - m2
ans =
0 0
0 0
April 2006
Nathan Sorensen
Kedrick Black
24
B = gridreal(A,N)
April 2006
Nathan Sorensen
Kedrick Black
25
[M,Delta] = lftdata(A)
Decompose uncertain objects into fixed normalized and fixed uncertain parts
partially decompose an uncertain object into an uncertain part and a normalized
uncertain part
Uncertain objects (umat, ufrd, uss) are represented as certain objects in feedback
with block-diagonal concatenations of uncertain elements
separates the uncertain object A into a certain object M and a normalized uncertain
matrix Delta such that A is equal to lft(Delta,M), as shown below
Example
p1 = ureal('p1',-3,'perc',40);
p2 = ucomplex('p2',2);
A = [p1 p1+p2;1 p2];
[M,Delta] = lftdata(A);
simplify(A-lft(Delta,M))
ans =
0 0
0 0
M
M=
0
0 1.0954 1.0954
0
0
0 1.0000
1.0954 1.0000 -3.0000 -1.0000
0 1.0000 1.0000 2.0000
April 2006
Nathan Sorensen
Kedrick Black
26
usysout = ssbal(usys,Wc)
Ssbal() yields a system whose input/output and uncertain
properties are the same as usys, a uss object.
Input:
Usys - a continuous-time
uncertain system
EX:
p2=ureal('p2',-17,'Range',[-19 -11]);
p1=ureal('p1',3.2,'Percentage',0.43);
A = [-12 p1;.001 p2];
B = [120 -809;503 24];
C = [.034 .0076; .00019 2];
usys = ss(A,B,C,zeros(2,2))
Output:
usysout = ssbal(usys)
April 2006
Nathan Sorensen
Kedrick Black
27
ndist = actual2normalized(A,V)
the normalized distance between the
nominal value of the uncertain atom A and
the given value V
If V is an array of values, then ndist is an
array of normalized distances
April 2006
Nathan Sorensen
Kedrick Black
28
avalue = normalizedactual2(A,NV)
April 2006
Nathan Sorensen
Kedrick Black
29
umatout =
stack(arraydim,umat1,umat2,...)
Construct an array by stacking uncertain matrices, models, or arrays
along array dimensions of an uncertain array
All models must have the same number of columns and rows
Example
Consider usys1 and usys2, two single-input/single-output uss
models:
zeta = ureal('zeta',1,'Range',[0.4 4]);
wn = ureal('wn',0.5,'Range',[0.3 0.7]);
P1 = tf(1,[1 2*zeta*wn wn^2]);
P2 = tf(zeta,[1 10]);
You can stack along the first dimension to produce a 2-by-1 uss array.
stack(1,P1,P1)
USS: 2 States, 1 Output, 1 Input, Continuous System [array, 2 x 1]
wn: real, nominal = 0.5, range = [0.3 0.7], 3 occurrences
zeta: real, nominal = 1, range = [0.4 4], 1 occurrence
April 2006
Nathan Sorensen
Kedrick Black
30
B = squeeze(A)
Remove singleton dimensions for umat
objects
returns an array B with the same elements
as A but with all the singleton dimensions
removed
A singleton is a dimension such that
size(A,dim)==1
2-D arrays are unaffected by squeeze so
that row vectors remain rows
April 2006
Nathan Sorensen
Kedrick Black
31
Interconnection of Uncertain
Models
1.
2.
3.
4.
April 2006
Nathan Sorensen
Kedrick Black
32
B = imp2exp(A,yidx,uidx)
transforms a linear constraint between variables Y and U
of the form A(:,[yidx;uidx])*[Y;U] = 0 into an explicit
input/output relationship Y = B*U
The vectors yidx and uidx refer to the columns (inputs) of
A as referenced by the explicit relationship for B
The constraint matrix A can be a double, ss, tf, zpk and
frd object as well as an uncertain object, including umat,
uss and ufrd
The result B will be of the same class
April 2006
Nathan Sorensen
Kedrick Black
33
sysout = sysic
Nathan Sorensen
Kedrick Black
34
H = iconnect
April 2006
Nathan Sorensen
Kedrick Black
35
v = icsignal(n,'name')
Create an icsignal object
creates an icsignal object of length n, which is a
symbolic column vector
used with iconnect objects to specify signal constraints
described by the interconnection of components
internal name identifiers given by the character string
argument name
April 2006
Nathan Sorensen
Kedrick Black
36
Nathan Sorensen
Kedrick Black
37
April 2006
Nathan Sorensen
Kedrick Black
38
April 2006
Nathan Sorensen
Kedrick Black
39
GRED = reduce(G,order)
Returns a reduced order model of G
Groups all the Hankel SV based model reduction
routines
Hankel singular values of a stable system indicate the
respective state energy of the system.
In many cases, the additive error method
GRED=reduce(G,ORDER) is adequate to provide a
good reduced order model.
for systems with lightly damped poles and/or zeros, a
multiplicative error method (namely,
GRED=reduce(G,ORDER,'ErrorType','mult')) that
minimizes the relative error between G and GRED tends
to produce a better fit.
April 2006
Nathan Sorensen
Kedrick Black
40
GRED = balancmr(G,order)
balanced truncation model reduction for
continuous/discrete & stable/unstable plant.
With only one input argument G, the function will show a
Hankel singular value plot of the original model and
prompt for model order number to reduce.
April 2006
Nathan Sorensen
Kedrick Black
41
GRED = bstmr(G,order)
Balanced stochastic truncation (BST) model reduction
for continuous/discrete & stable/unstable plant.
bstmr returns a reduced order model GRED of G
With only one input argument G, the function will show a
Hankel singular value plot of the phase matrix of G and
prompt for model order number to reduce
This method guarantees an error bound on the infinity
norm of the multiplicative || GRED-1(G-GRED) || or
relative error || G-1(G-GRED) || for well-conditioned
model reduction problems
April 2006
Nathan Sorensen
Kedrick Black
42
GRED = hankelmr(G,order)
Optimal Hankel norm approximation for
continuous/discrete & stable/unstable plant
hankelmr returns a reduced order model GRED of G
With only one input argument G, the function will show a
Hankel singular value plot of the original model and
prompt for model order number to reduce
This method guarantees an error bound on the infinity
norm of the additive error || G-GRED || for wellconditioned model reduced problems
April 2006
Nathan Sorensen
Kedrick Black
43
hankelsv(G)
April 2006
Nathan Sorensen
Kedrick Black
44
[G1,G2] = modreal(G,cut)
State-space modal truncation/realization
returns a set of state-space LTI objects G1 and G2 in
modal form given a state-space G and the model size of
G1, cut
The modal form realization has its A matrix in block
diagonal form with either 1x1 or 2x2 blocks. The real
eigenvalues will be put in 1x1 blocks and complex
eigenvalues will be put in 2x2 blocks. These diagonal
blocks are ordered in ascending order based on
eigenvalue magnitudes
G can be stable or unstable
April 2006
Nathan Sorensen
Kedrick Black
45
GRED = ncfmr(G,order)
balanced truncation model reduction for normalized
coprime factors of continuous/discrete & stable/unstable
G
ncfmr returns a reduced order model GRED formed by a
set of balanced normalized coprime factors
With only one input argument G, the function will show a
Hankel singular value plot of the original model and
prompt for model order number to reduce
The left and right normalized coprime factors are defined
as:
April 2006
Nathan Sorensen
Kedrick Black
46
GRED = schurmr(G,order)
Schur balanced truncation model reduction for
continuous/discrete & stable/unstable plant
schurmr returns a reduced order model GRED of
G
With only one input argument G, the function will
show a Hankel singular value plot of the original
model and prompt for model order number to
reduce
This method guarantees an error bound on the
infinity norm of the additive error || G-GRED || for
well-conditioned model reduced problems
April 2006
Nathan Sorensen
Kedrick Black
47
G1,G2] = slowfast(G,cut)
State-space slow-fast decomposition
computes the slow and fast modes decompositions
of a system G(s) such that: G s G s G s
s
G s f : ( A 22 , B 2 , C 2 , D 2 )
April 2006
G s s : ( A11 , B1 , C1 , D 1 )
Nathan Sorensen
Kedrick Black
48
[G1,G2,m] = stabproj(G)
State-space stable/anti-stable decomposition
stabproj computes the stable and antistable projections
of a minimal realization G(s) such that:
April 2006
Nathan Sorensen
Kedrick Black
49
[a,b,c,d,totbnd,hsv] =
imp2ss(y,ts,nu,ny,tol)
System identification via impulse response
The function imp2ss produces an approximate state-space realization
of a given impulse response imp=mksys(y,t,nu,ny,'imp');
A continuous-time realization is computed via the inverse Tustin
transform if t is positive; otherwise a discrete-time realization is
returned
In the SISO case the variable y is the impulse response vector; in the
MIMO case y is an N+1-column matrix containing N + 1 time samples
of the matrix-valued impulse response H0, ..., HN of an nu-input, nyoutput system stored row-wise.
The variable tol bounds the H norm of the error between the
approximate realization (a, b, c, d) and an exact realization of y
The inputs ts, nu, ny, tol are optional; if not present they default to the
values ts = 0, nu = 1, ny = (number of rows of y)/nu, tol =
1.01sigmabar1
April 2006
Nathan Sorensen
Kedrick Black
50
To be robust, your control system should meet your stability and performance
requirements for all possible values of uncertain parameters
Monte Carlo parameter sampling via usample can be used for this purpose, but
Monte Carlo methods are inherently hit or miss
The Robust Control Toolbox gives you a powerful assortment of robustness analysis
commands that let you directly calculate upper and lower bounds on worst-case
performance without random sampling:
April 2006
Nathan Sorensen
Kedrick Black
51
Performance Analysis
April 2006
Nathan Sorensen
Kedrick Black
52
When the plant modeling uncertainty is not too big, you can design high-gain,
high-performance feedback controllers. High loop gains significantly larger than 1
in magnitude can attenuate the effects of plant model uncertainty and reduce the
overall sensitivity of the system to plant noise.
But if your plant model uncertainty is so large that you do not even know the sign
of your plant gain, then you cannot use large feedback gains without the risk that
the system will become unstable. Thus, plant model uncertainty can be a
fundamental limiting factor in determining what can be achieved with feedback.
The Small Gain Theorem asserts that the overall system gain must therefore be
kept below 1 to assure stability.
April 2006
Nathan Sorensen
Kedrick Black
53
April 2006
Nathan Sorensen
Kedrick Black
54
April 2006
Nathan Sorensen
Kedrick Black
55
April 2006
Nathan Sorensen
Kedrick Black
56
[MARG,FREQ] =
cpmargin(P,C,TOL)
Cpmargin() calculates the normalized coprime factor/gap metric robust stability of the
multivariable feedback loop consisting of C in negative feedback with P.
Input Parameters:
Output Parameters:
P LTI plant
April 2006
Nathan Sorensen
Kedrick Black
57
[gap,nugap] = gapmetric(p0,p1,tol)
EX:
p1 = tf(1,[1 -0.001]);
p2 = tf(1,[1 0.001]);
[g,ng] = gapmetric(p1,p2)
K = 1;
H1 = loopsens(p1,K);
H2 = loopsens(p2,K);
subplot(2,2,1); bode(H1.Si,'-',H2.Si,'--');
subplot(2,2,2); bode(H1.Ti,'-',H2.Ti,'--');
subplot(2,2,3); bode(H1.PSi,'-',H2.PSi,'--');
subplot(2,2,4); bode(H1.CSo,'-',H2.CSo,'--');
Bode Diagram
-50
-100
180
90
0
-5
10
10
50
0
-45
-90
-2
10
Bode Diagram
0
-50
0
-45
-90
-2
10
10
g = 0.0029
ng = 0.0020
Input:
P0,P1 plants of the same size
Tol tolerance for the gap metric (default
is .001)
10
10
Frequency (rad/sec)
10
50
Bode Diagram
-50
0
Frequency (rad/sec)
Frequency (rad/sec)
April 2006
Bode Diagram
-50
-100
180
90
0
-5
10
10
Frequency (rad/sec)
Output:
Gap gap metric value
Nugap nugap metric value
(For gap or nugap, a value close to 0 means
the plants are far apart and a value close to 1
means they are close together.)
Nathan Sorensen
Kedrick Black
58
loopmargin(L)
59
loopsens(P,C)
Loopsens() creates a structure which contains the multivariable
sensitivity, complementary and open-loop transfer functions.
Structure Output Fields:
EX:
int = tf(1,[1 0]);
addunc = ultidyn('addunc',[1 1],'Bound',0.2);
uncint = int + addunc;
int3 = blkdiag(int,uncint,int);
p = [1 .2 .5;-.5 0 1;1 0 0;0 1 0]*int3;
gain = ureal('gain',0.9, 'Range',[-3 1.5]);
c = [.02 .3 0 0;1 -.3 .32 gain; 0 1 -.2 .1];
loops = loopsens(p,c)
April 2006
Nathan Sorensen
Kedrick Black
60
[bounds,muinfo] =
mussv(M,BlockStructure)
Mussv() calculates upper and lower bounds on the structured singular value, or ,
for a given block structure.
Input:
M - is a double or a frd object
BlockStructure - a matrix specifying the
perturbation block structure consisting
of 2 rows and as many columns as
uncertainty blocks.
Output:
Bounds upper and lower bounds on
the mu value of the system.
Muinfo a structure containing
additional information
April 2006
EX:
M = randn(5,5) + sqrt(-1)*randn(5,5);
F = randn(2,5) + sqrt(-1)*randn(2,5);
BlockStructure = [-1 0;-1 0;1 1;2 0];
[ubound,Q] =
mussv(M,F,BlockStructure);
points completed (of 1) ... 1
bounds = mussv(M,BlockStructure);
optbounds =
mussv(M+Q*F,BlockStructure,'C5');
[optbounds(1) ubound]
1.5917 1.5925
[bounds(1) bounds(2)]
3.8184 3.7135
Nathan Sorensen
Kedrick Black
61
[VDelta,VSigma,VLmi] =
mussvextract(muinfo)
Mussvextract() is used to extract the compressed information within
muinfo into a readable form.
Input:
Muinfo a variable returned by
mussv() with information
Ouput:
VDelta used to verify the lower
bound
VSigma a structure of
information used to verify the
Newlin/Young upper bound
EX:
M = randn(4,4) + sqrt(-1)*randn(4,4);
BlockStructure = [1 1;1 1;2 2];
[bounds,muinfo] = mussv(M,BlockStructure);
[VDelta,VSigma,VLmi] = mussvextract(muinfo);
April 2006
Nathan Sorensen
Kedrick Black
62
[marg,freq] = ncfmargin(P,C,tol)
Ncfmargin() calculates the normalized coprime factor/gap metric
robust stability margin b(P, C), marg, of the multivariable
feedback loop consisting of C in negative feedback with P.
Input:
P LTI plant model
C Compensator in the feedback path
Tol tolerance for the ncfmargin must
be between .00001 and .01
Output:
Marg - the normalized coprime
factor/gap metric robust stability margin
b(P, C)
Freq destabilizing frequency
April 2006
EX:
x = tf(4,[1 0.001]);
clp1 = feedback(x,1);
clp2 = feedback(x,10);
[marg1,freq1] = ncfmargin(x,1);
[marg2,freq2] = ncfmargin(x,10);
marg1 = 0.7071
freq1 = Inf
marg2 = 0.0995
freq2 = Inf
Nathan Sorensen
Kedrick Black
63
[t,P,S,N] = popov(sys,delta,flag)
Perform the Popov robust stability test
uses the Popov criterion to test the robust
stability of dynamical systems with
possibly nonlinear and/or time-varying
uncertainty
The uncertain system must be described
as the interconnection of a nominal LTI
system sys and some uncertainty delta
April 2006
Nathan Sorensen
Kedrick Black
64
[perfmarg,perfmargunc,Report] =
robustperf(sys)
Robustperf() is a tool to determine the robust performance margin
which sets bounds on the robustness of a nominally stable system
to given uncertainty.
EX:
Structure Output Fields:
Perfmarg performance margin: lower
bound, upper bound, and critical
frequency.
Perfmargunc structure of values of
critical uncertain elements of the
system.
Report A text description of the
robustness analysis.
April 2006
Nathan Sorensen
Kedrick Black
65
[stabmarg,destabunc,Report] =
robuststab(sys)
Robuststab() is used to determine the robust stability margin for a
nominally stable uncertain system up to the closest instability from the
stable nominal.
EX:
Structure Output Fields:
Stabmarg robust stability margin: lower
bound, upper bound, destabilizing frequency.
Destabunc structure of uncertain values
closest to the nominal that cause instability.
Report text description of the stability
analysis
Note: Output may not contain all unstable
frequencies because of the assigned frequency
range over which the function operates. For
limitations, see the function definition in the
matlab help.
April 2006
P = tf(4,[1 .8 4]);
delta = ultidyn('delta',[1 1],'SampleStateDim',5);
Pu = P + 0.25*tf([1],[.15 1])*delta;
C = tf([1 1],[.1 1]) + tf(2,[1 0]);
S = feedback(1,Pu*C);
[stabmarg,destabunc,report,info] = robuststab(S);
report =
Uncertain System is NOT robustly stable to modeled uncertainty.
-- It can tolerate up to 81.8% of modeled uncertainty.
-- A destabilizing combination of 81.8% the modeled uncertainty
exists, causing an instability at 9.13 rad/s.
-- Sensitivity with respect to uncertain element ...
'delta' is 100%. Increasing 'delta' by 25% leads to a 25% decrease
in the margin.
Nathan Sorensen
Kedrick Black
66
opts =
robopt('name1',value1,'name2',value2,...)
Robopt() creates an options object for use with robuststab and
robustperf.
EX:
opt = robopt
Property Object Values:
Display: 'off'
Sensitivity: 'on'
VaryUncertainty: 25
Mussv: 'sm9'
Default: [1x1 struct]
Meaning: [1x1 struct]
April 2006
Nathan Sorensen
Kedrick Black
67
[maxnorm,wcu] = wcnorm(m)
Wcnorm() determines the maximum norm over all allowable values of
the uncertain elements and is referred to as a worst-case norm
analysis.
EX:
a=ureal('a',5,'Range',[4 6]);
b=ureal('b',2,'Range',[1 3]);
b=ureal('b',3,'Range',[2 10]);
c=ureal('c',9,'Range',[8 11]);
d=ureal('d',1,'Range',[0 2]);
M = [a b;c d];
Mi = inv(M);
Input:
M - a umat or a uss
Output:
Maxnorm a structure with fields:
[maxnormM] = wcnorm(M)
maxnormM =
LowerBound: 14.7199
UpperBound: 14.7327
April 2006
[maxnormMi] = wcnorm(Mi)
maxnormMi =
LowerBound: 2.5963
UpperBound: 2.5979
Nathan Sorensen
Kedrick Black
68
[maxgain,maxgainunc] =
wcgain(sys)
Wcgain() calculates the worst case gain frequency response of a
given system due to uncertain elements. Pointwise-in-frequency
analysis creates a response curve for the system.
Structure Output Fields:
Maxgain maximum gain: lower
bound, upper bound, critical frequency.
Maxgainunc structure containing
uncertain elements that maximize the
gain.
Options set in wcopt():
Pointwise-in-frequency- creates a
response curve for the system.
Peak-over-frequency computes the
largest gain over all freqencies.
April 2006
EX:
P = tf(1,[1 0]) + ultidyn('delta',[1 1],'bound',0.4);
BW1 = 0.8;
K1 = tf(BW1,[1/(25*BW1) 1]);
S1 = feedback(1,P*K1);
BW2 = 2.0;
K2 = tf(BW2,[1/(25*BW2) 1]);
S2 = feedback(1,P*K2);
[maxgain1,wcunc1] = wcgain(S1);
maxgain1 =
LowerBound: 1.5070e+000
UpperBound: 1.5080e+000
CriticalFrequency: 5.3096e+000
Note: Output may not contain all unstable frequencies because of the
assigned frequency range over which the function operates. For
limitations, see the function definition in the matlab help .
Nathan Sorensen
Kedrick Black
69
options =
wcgopt('name1',value1,'name2',value2,...)
Wcgopt() creates a wcgain, wcsens and wcmargin options object
called options in which specified properties have specific values.
EX:
opt = wcgopt('MaxTime',10000,'Sensitivity','off')
Property Object Values:
Sensitivity: 'off'
LowerBoundOnly: 'off'
FreqPtWise: 0
ArrayDimPtWise: []
VaryUncertainty: 25
Default: [1x1 struct]
Meaning: [1x1 struct]
AbsTol: 0.0200
RelTol: 0.0500
MGoodThreshold: 1.0400
AGoodThreshold: 0.0500
MBadThreshold: 20
ABadThreshold: 5
NTimes: 2
MaxCnt: 3
MaxTime: 10000
April 2006
Nathan Sorensen
Kedrick Black
70
[wcmargi,wcmargo] = wcmargin(L)
Wcmargin() describes a disk within with the nominal gain margin and phase
margin are stable for an uncertain system.
April 2006
EX:
a = [0 10;-10 0];
b = eye(2);
c = [1 8;-10 1];
d = zeros(2,2);
G = ss(a,b,c,d);
K = [1 -2;0 1]; ingain1 = ureal('ingain1',1,'Range',[0.97 1.06]);
b = [ingain1 0;0 1];
Gunc = ss(a,b,c,d);
unmod = ultidyn('unmod',[2 2],'Bound',0.08);
Gmod = (eye(2)+unmod)*Gunc;
Gmodg = ufrd(Gmod,logspace(-1,3,60));
[wcmi,wcmo] = wcmargin(Gmodg,K);
wcmi(1) =
GainMargin: [0.3613 2.7681]
PhaseMargin: [-50.2745 50.2745]
Frequency: 0.1000
Sensitivity: [1x1 struct]
Nathan Sorensen
Kedrick Black
71
wcst = wcsens(L)
Wcsens() determines the worst case sensitivity of a system to
various input and disturbance parameters in an uncertain system L.
5
Bode Diagram
Magnitude (dB)
-5
-10
-15
-20
-25
-30
-35
-1
10
Nominal Sensitivity
Worst-Case Sensitivity
0
10
10
Frequency (rad/sec)
EX:
delta = ultidyn('delta',[1 1]);
tau = ureal('tau',5,'range',[4 6]);
P = tf(1,[tau 1])*(1+0.25*delta);
PSi - Worst-case plant times input-to-plant
C=tf([4 4],[1 0]);
sensitivity function
looptransfer = loopsens(P,C);
CSo - Worst-case compensator times output- Snom = looptransfer.Si.NominalValue;
wcst = wcsens(P,C) ;
to-plant sensitivity function
Swc = wcst.Si.BadSystem;
Stable - 1 if nominal closed loop is stable, 0 omega = logspace(-1,1,50);
bodemag(Snom,'-',Swc,'-.',omega);
otherwise. NaN for frd/ufrd objects.
legend('Nominal Sensitivity','Worst-Case Sensitivity',...
'Location','SouthEast')
To - Worst-case output-to-plant
complementary sensitivity function
April 2006
Nathan Sorensen
Kedrick Black
72
April 2006
Nathan Sorensen
Kedrick Black
73
April 2006
Nathan Sorensen
Kedrick Black
74
pols = psys(syslist)
affs = psys(pv,syslist)
April 2006
Nathan Sorensen
Kedrick Black
75
[type,k,ns,ni,no] = psinfo(ps)
Query characteristics of a P-system
displays the type of system (affine or
polytopic)
the number k of SYSTEM matrices
involved in its definition
the numbers of ns, ni, no of states, inputs,
and outputs of the system
April 2006
Nathan Sorensen
Kedrick Black
76
bool = ispsys(sys)
True for parameter-dependent systems
returns 1 if sys is a polytopic or parameterdependent system
April 2006
Nathan Sorensen
Kedrick Black
77
pv = pvec('box',range,rates)
pv = pvec('pol',vertices)
Nathan Sorensen
Kedrick Black
78
[typ,k,nv] = pvinfo(pv)
pvinfo(pv) displays the type of parameter
vector ('box' or 'pol'), the number n of
scalar parameters, and for the type 'pol',
the number of vertices used to specify the
parameter range
April 2006
Nathan Sorensen
Kedrick Black
79
vertx = polydec(PV)
Compute polytopic coordinates wrt. box
corners
takes an uncertain parameter vector PV
taking values ranging in a box, and returns
the corners or vertices of the box as
columns of the matrix vertx
April 2006
Nathan Sorensen
Kedrick Black
80
polsys = aff2pol(affsys)
Convert affine P-systems to polytopic representation
derives a polytopic representation polsys of the affine
parameter- dependent system
Where p = (p1, . . ., pn) is a vector of uncertain or
timevarying real parameters taking values in a box or a polytope. The
description affsys of this system should be specified with psys
April 2006
Nathan Sorensen
Kedrick Black
81
[tau,P] = quadstab(ps,options)
April 2006
Nathan Sorensen
Kedrick Black
82
[perf,P] = quadperf(ps,g,options)
April 2006
Nathan Sorensen
Kedrick Black
83
[tau,Q0,Q1,...] = pdlstab(pds,options)
April 2006
Nathan Sorensen
Kedrick Black
84
[drate,P] = decay(ps,options)
Compute quadratic decay rate
April 2006
Nathan Sorensen
Kedrick Black
85
pdsimul(pds,'traj',tf,'ut',xi,options)
The parameter trajectory and input signals are specified by two time
functions p=traj(t) and u=ut(t)
The affine system pds is specified with psys but can also use the
polytopic representation of such systems as returned by aff2pol(pds) or
hinfgs
The final time and initial state vector can be reset through tf and xi
options gives access to the parameters controlling the ODE integration
April 2006
Nathan Sorensen
Kedrick Black
86
April 2006
Nathan Sorensen
Kedrick Black
87
April 2006
Nathan Sorensen
Kedrick Black
88
P = AUGW(G,W1,W2,W3)
Augw() computes a state-space model of an augmented LTI plant P(s)
with weighting functions W1(s), W2(s), and W3(s) penalizing the error
signal, control signal and output signal respectively.
Singular Values
60
S = 1/(1+L)
40
GAM/W1
T=L/(1+L)
GAM*G/W2
20
-20
-40
-60
-80
-4
10
Input:
-2
10
10
10
10
10
Frequency (rad/sec)
EX:
s=zpk('s'); G=(s-1)/(s+1);
W1=0.1*(s+100)/(100*s+1); W2=0.1; W3=[];
P=augw(G,W1,W2,W3);
[K,CL,GAM]=hinfsyn(P); [K2,CL2,GAM2]=h2syn(P);
L=G*K; S=inv(1+L); T=1-S;
sigma(S,'k',GAM/W1,'k-.',T,'r',GAM*G/W2,'r-.')
April 2006
Output:
P augmented plant model
Nathan Sorensen
Kedrick Black
89
[gopt,h2opt,K,R,S] =
hinfmix(P,r,obj,region,dkbnd,tol)
Hinfmix() creates a suboptimal controller K(s) based on the
optimization of a mixed H2/ H criterion that optimizes the
following function:
subject to ||T || < gamma, ||
T2||2 < v. The closed-loop poles lie in some prescribed LMI region D.
Input Parameters:
P lmi object such as ss or tf.
R [z2, y, u]
Obj [gamma, v, alpha, beta]
Region identifies the pole placement
region. Default is the open LHP.
Output Parameters:
Dkbnd set bound on norm of controller feed Gopt - guaranteed Hinf performance
through matrix DK.
H2opt guaranteed H2 performance
K Controller K(s) coefficients
Tol tolerance for the trade-off parameter
R,S optimal values of the LMI objects.
April 2006
Nathan Sorensen
Kedrick Black
90
[K,CL,GAM,INFO]=
H2SYN(P,NMEAS,NCON)
H2syn() computes a stabilizing LTI/SS controller K for a partitioned
plant P(s).
Input Parameters:
P LTI/SS plant model
Nmeas B2 column size
Ncon C2 row size
Output Parameters:
K vector of Feedback Controller
Coefficients
April 2006
Nathan Sorensen
Kedrick Black
91
[K,CL,GAM,INFO] =
hinfsyn(P,NMEAS,NCON)
Hinfsyn() creates an optimal h-inifinity controller for a partitioned plant
matrix P.
Input Parameters:
P Partitioned plant matrix
Nmeas row size of the C2 matrix
Ncon column size of the B2 matrix
Output Parameters:
K controller coefficient vector
CL closed loop system matrix
Gam H-inifinity norm for the closed
loop system
Info - structure containing additional
information
April 2006
Nathan Sorensen
Kedrick Black
92
[K,GAM]=sdhinfsyn(P,NMEAS,NCON)
Sdhinfsyn() synthesizes a sampled data H-infinity controller.
Input Parameters:
P partitioned system matrix
Where:
April 2006
Plant Partitioning:
B1 Inputs are disturbances
B2 Inputs are control signals
C1 Outputs are errors to be minimized
C2 Outputs are inputs to control K
Nathan Sorensen
Kedrick Black
93
[K,CL,GAM,INFO]=
loopsyn(G,Gd,RANGE)
Loopsyn() is an H infinity optimal way for loopshaping controller
synthisis.
Input Parameters:
Singular Values
50
G LTI plant
40
30
20
10
0
-10
-20
Output Parameters:
-30
-40
-1
10
10
10
10
Frequency (rad/sec)
EX:
rand('seed',0);randn('seed',0);
s=tf('s'); w0=5; Gd=5/s;
G=((s-10)/(s+100))*rss(3,4,5);
[K,CL,GAM,INFO]=loopsyn(G,Gd);
sigma(G*K,'r',Gd*GAM,'k-.',Gd/GAM,'k-.',{.1,100})
April 2006
Nathan Sorensen
Kedrick Black
94
[K,SVL,W1] =
ltrsyn(G,F,XI,THETA,RHO)
Ltrsyn() computes a reconstructed-state output-feedback controller K for LTI
plant G using Kalman filtering to asymptotically recover the lost states.
Input Parameters:
G LTI System matrix
F - LQ full-state-feedback gain matrix
XI plant noise intensity
Theta sensor noise intensity
Rho vector containing a set of recovery
gains
Output Parameters:
K controller coefficient vector
Svl sigma plot data for recovered system
W1 - frequencies for SVL plots
April 2006
EX:
s=tf('s');G=ss(1e4/((s+1)*(s+10)*(s+100)));
[A,B,C,D]=ssdata(G);
F=lqr(A,B,C'*C,eye(size(B,2)));
L=ss(A,B,F,0*F*B);
XI=100*C'*C; THETA=eye(size(C,1));
RHO=[1e3,1e6,1e9,1e12];W=logspace(-2,2);
nyquist(L,'k-.');hold;
[K,SVL,W1]=ltrsyn(G,F,XI,THETA,RHO,W);
Nathan Sorensen
Kedrick Black
95
[K,CL,GAM,INFO]=
mixsyn(G,W1,W2,W3)
Mixsyn() is H-infinity mixed-sensitivity synthesis method for robust
control loopshaping design.
Input Parameters:
G LTI system
W1,W2,W3 Weighting matricies
associated with S(s), R(s) and T(s)
Output Parameters:
K Controller Coefficient vector
CL Closed Loop System Matrix
Gam H infinity norm for the closed
loop system
Info structure containing additional
information.
Nathan Sorensen
Kedrick Black
96
[K,CL,GAM,INFO]=
ncfsyn(G,W1,W2)
Ncfsyn() is a normalized coprime factorization based parameterized
controller synthisis using the Glover-McFarlane method for loopshaping.
Input Parameters:
Singular Values
60
40
20
0
-20
-40
-60
Output Parameters:
-80
EX:
-100
-2
10
-1
10
10
10
Frequency (rad/sec)
s=zpk('s');
G=(s-1)/(s+1)^2;
W1=0.5/s;
[K,CL,GAM]=ncfsyn(G,W1);
sigma(G*K,'r',G*W1,'r-.',G*W1*GAM,'k-.',G*
W1/GAM,'k-.')
April 2006
10
97
sys = mkfilter(fc,ord,type,psbndr)
-50
-100
180
90
0
-5
10
April 2006
50
-50
0
-45
0
Frequency (rad/sec)
-50
0
-45
0
10
10
10
Frequency (rad/sec)
RC filter
10
Chebyshev
Bode Diagram
-90
-2
10
Bode Diagram
50
-90
-2
10
Butterw orth
10
Frequency (rad/sec)
Output:
Bode Diagram
Input:
Bode Diagram
0
-100
-200
0
-180
-360
10
10
Frequency (rad/sec)
EX:
butw = mkfilter(2,4,'butterw');
cheb = mkfilter(4,4,'cheby',0.5);
rc = mkfilter(1,4,'rc');
bode(butw,'-',cheb,'--',rc,'-.')
Nathan Sorensen
Kedrick Black
98
Mu-synthesis
Mu-synthesis functions enable the synthesis of robust optimal
controllers. Approximation tools for this type of design are shown
below:
1. Cmsclsyn() approximately solves the constant-matrix, upper bound synthesis problem.
2. Dksyn() synthesizes a robust controller via D-K iteration which is an
approximation to -synthesis control design.
3. Dkitopt() creates a dkitopt object called options with specific values
assigned to certain properties.
4. Drawmag() interactively uses the mouse in the plot window to create pts
and sysout, which approximately fits the frequency response (magnitude) in
pts.
5. Fitfrd() fits D-scaling frequency response data with state-space model.
6. Fitmagfrd() fits frequency response magnitude data with a stable, minimumphase state-space model.
April 2006
Nathan Sorensen
Kedrick Black
99
[qopt,bnd] =
cmsclsyn(R,U,V,BlockStructure);
Cmsclsyn() approximately solves the constant-matrix, upper bound -synthesis
problem by minimization,
for given matrices
applies to constant matrix data in R, U, and V.
and
. This
Input:
Output:
BlockStructure a matrix
specifying the perturbation
blockstructure as defined for
mussv.
April 2006
Nathan Sorensen
Kedrick Black
100
[k,clp,bnd] = dksyn(p,nmeas,ncont)
Dksyn() synthesizes a robust controller via D-K iteration which is
an approximation to -synthesis control design.
Input:
P Partitioned plant matrix
Nmeas row size of the C2 matrix
Ncon column size of the B2 matrix
Output:
K synthesized controller coefficients
Clp Closed loop system
Bnd robust performance bounds on
the closed loop system
April 2006
Nathan Sorensen
Kedrick Black
EX:
G = tf(1,[1 -1]);
Wu = 0.25*tf([1/2 1],[1/32 1]);
InputUnc = ultidyn('InputUnc',[1 1]);
Gpert = G*(1+InputUnc*Wu);
Wp = tf([1/4 0.6],[1 0.006]);
P = [Wp; 1 ]*[1 Gpert];
[K,clp,bnd1] = dksyn(P,1,1);
P = [Wp; 1 ]*[1 Gpert];
[K,clp,bnd2] = dksyn(P,1,1);
bnd1 =0.6768
101
bnd2 =0.6768
options =
dkitopt('name1',value1,'name2',value2,...)
Dkitopt() creates a dkitopt object called options with specific values
assigned to certain properties.
April 2006
Nathan Sorensen
Kedrick Black
102
[sysout,pts] = drawmag(data)
interactively uses the mouse in the plot window to create pts and sysout, which
approximately fits the frequency response (magnitude) in pts
data: Either a frequency response object that is plotted as a reference, or a
constant matrix of the form [xmin xmax ymin ymax] specifying the plot window on
the data.
sysoutStable: minimum-phase ss object that approximately fits, in magnitude, the
pts data
ptsFrequency: response of points
While drawmag is running, all interaction with the program is through the mouse
and/or the keyboard
Examples of commands
April 2006
Nathan Sorensen
Kedrick Black
103
B = fitfrd(A,N)
Example
sys = tf([1 2 2],[1 2.5 1.5])*tf(1,[1 0.1]);
sys = sys*tf([1 3.75 3.5],[1 2.5 13]);
omeg = logspace(-1,1);
sysg = frd(sys,omeg);
bode(sysg,'r-');
b1 = fitfrd(sysg,1);
b3 = fitfrd(sysg,3);
b1g = frd(b1,omeg);
b3g = frd(b3,omeg);
bode(sysg,'r-',b1g,'k:',b3g,'b-.')
April 2006
Nathan Sorensen
Kedrick Black
104
B = fitmagfrd(A,N)
Fit frequency response magnitude data with a stable, minimum-phase
state-space model
a stable, minimum-phase ss object, with state-dimension N, whose
frequency response magnitude closely matches the magnitude data in A
A is a 1-by-1 frd object, and N is a nonnegative integer
Example
sys = tf([1 2 2],[1 2.5 1.5])*tf(1,[1 0.1]);
sys = sys*tf([1 3.75 3.5],[1 2.5 13]);
omeg = logspace(-1,1);
sysg = abs(frd(sys,omeg));
bodemag(sysg,'r');
ord = 3;
b1 = fitmagfrd(sysg,ord);
b1g = frd(b1,omeg);
bodemag(sysg,'r',b1g,'k:');
April 2006
Nathan Sorensen
Kedrick Black
105
April 2006
Nathan Sorensen
Kedrick Black
106
[gaml,gamu] =
sdhinfnorm(sdsys,k,delay)
Sdhinfnorm() computes the L2 induced norm of a continuous-time
LTI plant, sdsys, in feedback with a discrete-time controller, k,
connected through an ideal sampler and a zero-order hold.
Input:
Output:
Sdhinfnorm() Example
p = ss(tf(30,[1 30])*tf([1],[1 0]));
k = ss(tf(4,[1 4]));
cl = feedback(p,k);
norm(cl,'inf')
ans = 1
kd = c2d(k,0.75,'zoh');
[gu,gl] = sdhinfnorm([1; 1]*p*[1 1],-kd);
[gu gl]
ans = 3.7908 3.7929
kd = c2d(k,0.2,'zoh');
[gu,gl] = sdhinfnorm([1; 1]*p*[1 1],-kd);
[gu gl]
ans = 1.0044 1.0049
April 2006
Nathan Sorensen
Kedrick Black
108
sdlsim(p,k,w,t,tf,x0,z0,int)
Sdlsim() plots the time response of the hybrid feedback system.
lft(p,k), is forced by the continuous input signal described by w and t.
Input:
P - a continuous-time LTI system
K a discrete-time LTI system with a
specified sampling time
W,T input forcing functions
Tf simulation end time
X0 - initial state vector of p, at time t(1)
Z0 - initial state vector of k, at time t(1)
Int - the continuous-time integration
step size
April 2006
Nathan Sorensen
Kedrick Black
109
1.4
1.2
1
0.8
EX:
P = tf(1,[1, 1e-5,0]);
T = 1.0/20;
C = ss([-1.5 T/4; -2/T -.5],[ .5 2;1/T
1/T],...
[-1/T^2 -1.5/T], [1/T^2 0],T);
Pd = c2d(P,T,'zoh');
systemnames = 'Pd C';
inputvar = '[ref]';
outputvar = '[Pd]';
input_to_Pd = '[C]';
input_to_C = '[ref ; Pd]';
sysoutname = 'dclp';
cleanupsysic = 'yes';
sysic;
April 2006
0.6
0.4
0.2
0
-0.2
0.1
0.2
0.3
0.4
0.5
0.6
Time: seconds
0.7
0.8
0.9
EX cont:
M2 = [0,1,1;1,0,0;0,1,1]*blkdiag(1,1,P);
t = [0:.001:1]';
dist = 0.1*sin(41*t);
u = ones(size(t));
[y3,meas,act] = sdlsim(M2,C,[u dist],t,1);
plot(y3{:},'-',t,dist,'b--',t,u,'g-.')
xlabel('Time: seconds')
title('Step response: disturbance (dashed) & output
(solid)')
Nathan Sorensen
Kedrick Black
110
Gain Scheduling
Gain scheduling is a useful tool for controller design. The Robust
Control Toolbox offers one function to optimally achieve this.
1. Hinfigs() synthesizes gain-scheduled H controllers.
April 2006
Nathan Sorensen
Kedrick Black
111
[gopt,pdK,R,S] =
hinfgs(pdP,r,gmin,tol,tolred)
Synthesis of gain-scheduled H controllers
returns the optimal closed-loop quadratic
performance gopt and a polytopic description of
the gain-scheduled controller pdK
To test if a closed-loop quadratic performance
is achievable, set the third input gmin to
The arguments tol and tolred control the
required relative accuracy on gopt and the
threshold for order reduction
also returns solutions R, S of the characteristic
LMI system
April 2006
Nathan Sorensen
Kedrick Black
112
April 2006
Nathan Sorensen
Kedrick Black
113
GT = bilin(G,VERS,METHOD,AUG)
April 2006
Nathan Sorensen
Kedrick Black
114
SYS=mktito(SYS,NMEAS,NCONT)
Mktito() adds TITO (two-input-two-output) partitioning to LTI system SYS,
assigning OutputGroup and InputGroup properties.
EX:
P=rss(2,4,5); P=mktito(P,2,2);
disp(P.OutputGroup);
disp(P.InputGroup);
Y1: [1 2]
Y2: [3 4]
U1: [1 2 3]
U2: [4 5]
April 2006
Plant Partitioning:
B1 Inputs are disturbances
B2 Inputs are control signals
C1 Outputs are errors to be minimized
C2 Outputs are inputs to control K
Nathan Sorensen
Kedrick Black
115
[G,T] = sectf(F,SECF,SECG)
April 2006
Nathan Sorensen
Kedrick Black
116
x = skewdec(m,n)
Skewdec() forms the m-by-m skew-symmetric matrix:
April 2006
Nathan Sorensen
Kedrick Black
117
x = symdec(m,n)
Symdec() forms an m-by-m symmetric matrix of the form:
April 2006
Nathan Sorensen
Kedrick Black
118
Nathan Sorensen
Kedrick Black
119
Nathan Sorensen
Kedrick Black
120
Nathan Sorensen
Kedrick Black
121
Specification Functions
The following functions are used for the LMI Specificiation:
1. Lmiedit is a graphical user interface for the symbolic specification of
LMI problems.
2. Setlmis() is a command to be used to initialize or add to an internal
representation for an lmi.
3. Lmivar() defines a new matrix variable X in the LMI system currently
described.
4. Lmiterm() specifies the term content of an LMI one term at a time.
5. Newlmi adds a new LMI to the LMI system currently described and
returns an identifier tag for this LMI.
6. Getlmis returns the internal representation of a lmi system declared
using lmivars() and lmiterm().
April 2006
Nathan Sorensen
Kedrick Black
122
lmiedit
Lmiedit is a graphical user interface for the symbolic specification
of LMI problems.
Instructions:
April 2006
1.
2.
3.
Nathan Sorensen
Kedrick Black
123
setlmis(lmi)
Setlmis() is a command to be used to initialize or add to an
internal representation for an lmi.
Two Uses:
1. setlmis([ ]) - used to initialize an internal representation for an lmi
to be followed by lmivar and lmiterm.
2. setlmis(lmi0) adds to an existing lmi where lmi0 is the internal
representation of a lmi. (Subsequent lmivar and lmiterm
commands will then add new variables and terms to the initial
LMI system lmi0.)
April 2006
Nathan Sorensen
Kedrick Black
124
X = lmivar(type,struct)
Lmivar() defines a new matrix variable X in the LMI system
currently described.
Input:
EX:
setlmis([])
X1 = lmivar(1,[3 1]) % Type 1
X2 = lmivar(2,[2 4]) % Type 2 of dim. 2x4
X3 = lmivar(1,[5 1;1 0;2 0]) % Type 1
April 2006
Nathan Sorensen
Kedrick Black
125
lmiterm(termID,A,B,flag)
Lmiterm() specifies the term content of an LMI one term at a time.
EX:
lmiterm([1 1 1 X2],2*A,A') % 2*A*X2*A'
lmiterm([1 1 1 x3],-1,E) % -x3*E
lmiterm([1 1 1 0],D*D') % D*D'
lmiterm([1 2 1 -X1],1,B) % X1'*B
lmiterm([1 2 2 0],-1) % -I
lmiterm([-1 0 0 0],M) % outer factor M
lmiterm([-1 1 1 X1],C,C','s') %
C*X1*C'+C*X1'*C'
lmiterm([-1 2 2 X2],-f,1) % -f*X2
April 2006
Nathan Sorensen
Kedrick Black
126
tag = newlmi
Newlmi adds a new LMI to the LMI system currently described and
returns an identifier tag for this LMI. (Tagging LMIs is optional and
only meant to facilitate code development and readability.)
Purpose:
To give individual names to lmis so that they
can be easily distinguished in code.
Use:
When parts of LMIs are deleted from a LMI,
identifiers help to identify the remaining parts
of the system.
April 2006
Nathan Sorensen
Kedrick Black
127
lmisys = getlmis
Getlmis returns the internal representation of a lmi system
declared using lmivars() and lmiterm(). This can then be used in
any LMI solver or processing function.
April 2006
Nathan Sorensen
Kedrick Black
128
LMI Characteristics
LMI System characteristics can be determined using the following
functions:
1. Lmiinfo() provides qualitative information about the system of LMIs lmisys.
2. Lminbr returns the number k of linear matrix inequalities in the LMI problem
described in lmisys.
3. Matnbr() returns the number K of matrix variables in the LMI problem described by
lmisys.
4. Decnbr() returns the number ndec of decision variables (free scalar variables) in
the LMI problem described in lmisys.
5. Dec2mat() is a function that, given values of the decision variables, derives the
corresponding values of the matrix variables.
April 2006
Nathan Sorensen
Kedrick Black
129
April 2006
Nathan Sorensen
Kedrick Black
130
lmiinfo(lmisys)
Lmiinfo() provides qualitative information about the system of LMIs
lmisys. This includes the type and structure of the matrix variables,
the number of diagonal blocks in the inner factors, and the term
content of each block.
EX:
lmiinfo(lmis)
LMI ORACLE
------This is a system of 1 LMI with 3 variable matrices
Do you want information on
(v) matrix variables (l) LMIs (q) quit?> v
Which variable matrix (enter its index k between 1 and 3) ? 1
X1 is a 2x2 symmetric block diagonal matrix
its (1,1)-block is a full block of size 2
-------
April 2006
Nathan Sorensen
Kedrick Black
131
April 2006
Nathan Sorensen
Kedrick Black
132
k = lminbr(lmisys)
Lminbr returns the number k of linear matrix inequalities in the LMI
problem described in lmisys.
April 2006
Nathan Sorensen
Kedrick Black
133
K = matnbr(lmisys)
Matnbr() returns the number K of matrix variables in the LMI
problem described by lmisys.
April 2006
Nathan Sorensen
Kedrick Black
134
ndec = decnbr(lmisys)
Decnbr() returns the number ndec of decision variables (free scalar
variables) in the LMI problem described in lmisys.
Input:
Lmisys System of LMIs
Output:
Ndec - the length of the vector
of decision variables.
EX:
For an LMI system LMIs with
two matrix variables X and Y
such that X is symmetric
block diagonal with one 2by-2 full block, and one 2-by2 scalar block Y is 2-by-3
rectangular,
the number of decision
variables is:
ndec = decnbr(LMIs)
ndec = 10
April 2006
Nathan Sorensen
Kedrick Black
135
valX = dec2mat(lmisys,decvars,X)
Dec2mat() is a function that, given values of the decision variables,
derives the corresponding values of the matrix variables.
Input:
Output:
April 2006
Nathan Sorensen
Kedrick Black
136
decvec =
mat2dec(lmisys,X1,X2,X3,...)
Mat2dec() returns the corresponding value decvec of the vector of
decision variables if given an LMI system with variables X1, . . ., XK
given values of x1,...,xk.
Input:
EX:
Given
Output:
Decvec - vector of decision variables
April 2006
decv = mat2dec(lmisys,X0,Y0)
decv = [ 1 3 -1 5 1 2 3
4 5 6]
Nathan Sorensen
Kedrick Black
137
decX = decinfo(lmisys,X)
DecX() expresses the entries of a matrix variable X in terms of the
decision variables x1, . . ., xN.
EX:
setlmis([])
X = lmivar(1,[3 0])
Y = lmivar(2,[2 1])
:
:
lmis = getlmis
dX = decinfo(lmis,X)
dX =
1 0 0
0 1 0
0 0 1
dY = decinfo(lmis,Y)
dY =
2
3
April 2006
Input:
Lmisys System of LMIs
X - each entry of X is either a hard
zero, some decision variable xn, or its
opposite xn
Output:
DecX - clarifies the structure of X as
well as its entry-wise dependence on
x1, . . ., xN
Nathan Sorensen
Kedrick Black
138
LMI Solvers
LMI solvers are provided for the following three generic optimization
problems
Feasibility problem
Find x RN (or equivalently matrices X1, . . . , XK with prescribed structure) that
satisfies the LMI system
A(x) < B(x)
The corresponding solver is called feasp. Minimization of a linear objective under
LMI constraints
Minimize cTx over x RN subject to A(x) < B(x)
The corresponding solver is called mincx. Generalized eigenvalue minimization
problem
Minimize over x RN subject to
C(x) < D(x)
0 < B(x)
A(x) < B(x).
The corresponding solver is called gevp.
April 2006
Nathan Sorensen
Kedrick Black
139
[tmin,xfeas] =
feasp(lmisys,options,target)
Feasp() computes a solution xfeas (if any) of the system of LMIs
described by lmisys.
Input:
Output:
April 2006
Nathan Sorensen
Kedrick Black
140
Feasp() Example
EX:
setlmis([])
p = lmivar(1,[2 1])
lmiterm([1 1 1 p],1,a1,'s') % LMI #1
lmiterm([2 1 1 p],1,a2,'s') % LMI #2
lmiterm([3 1 1 p],1,a3,'s') % LMI #3
lmiterm([-4 1 1 p],1,1) % LMI #4: P
lmiterm([4 1 1 0],1) % LMI #4: I
lmis = getlmis
[tmin,xfeas] = feasp(lmis)
tmin = -3.1363
P = dec2mat(lmis,xfeas,p)
April 2006
Nathan Sorensen
Kedrick Black
141
[copt,xopt] =
mincx(lmisys,c,options,xinit,target)
Mincx() solves the convex program
where x represents a vector of scalar
decision variables.
Input:
Lmisys System of LMIs
Output:
Copt the global minimum for the
objective cTx
Xopt - the minimizing value of the
vector of decision variables
April 2006
Nathan Sorensen
Kedrick Black
142
[lopt,xopt] = gevp(lmisys,nlfc)
Gevp() solves a generalized eigenvalue minimization problem described by:
Minimize
LMIs.
EX:
Output:
setlmis([]);
p = lmivar(1,[2 1])
[alpha,popt]=gevp(lmis,3)
alpha = -0.122
April 2006
Input:
Lmisys LMI System
Nathan Sorensen
Kedrick Black
143
[V1,...,Vk] =
defcx(lmisys,n,X1,...,Xk)
Defcx() is useful to derive the c vector needed by mincx when the objective
is expressed in terms of the matrix variables.
Input:
Lmisys system of LMIs
N the number of the nth decision
variable
Output:
V1,,Vk value of these variables
when the n-th decision variable is set to
one and all others to zero.
April 2006
Nathan Sorensen
Kedrick Black
144
April 2006
Nathan Sorensen
Kedrick Black
145
evalsys = evallmi(lmisys,decvars)
Evallmi() evaluates all LMI constraints for a particular instance
determined by decvars of the vector of decision variables.
EX: Find X s.t. ATXA - X + I < 0
setlmis([])
X = lmivar(1,[2 1]) % full symmetric X
lmiterm([1 1 1 X],A',A) % LMI #1: A'*X*A
lmiterm([1 1 1 X],-1,1) % LMI #1: -X
lmiterm([1 1 1 0],1) % LMI #1: I
lmiterm([-2 1 1 X],1,1) % LMI #2: X
lmis = getlmis
[tmin,xfeas] = feasp(lmis)
tmin = -4.7117e+00
xfeas' = [1.1029e+02 -1.1519e+01
1.1942e+02]
evals = evallmi(lmis,xfeas)
[lhs1,rhs1] = showlmi(evals,1)
[lhs2,rhs2] = showlmi(evals,2)
eig(lhs1-rhs1)
ans = -8.2229e+01, -5.8163e+01
April 2006
Input:
Lmisys System of LMIs
Decvars particular instance of
the decision variables
Output:
Evalsys - LMI system containing
only constant terms
Nathan Sorensen
Kedrick Black
146
[lhs,rhs] = showlmi(evalsys,n)
Showlmi() evaluates all variable terms in a system of LMIs for
given values of the decision variables.
Input:
Evalsys - the output of evallmi
N the number of lmis
April 2006
Output:
Lhs, Rhs - The left- and right-hand
sides of the n-th LMI constant
matrices
Nathan Sorensen
Kedrick Black
147
LMI Modification
Once an LMI is formally declared, the following functions allow for
the modification of LMI objects.
1. Dellmi() deletes the nth LMI from the system of LMIs described in
lmisys. The updated system is returned in newsys.
2. Delmvar() removes the matrix variable X with identifier X from the list of
variables defined in lmisys.
3. Setmvar() sets the matrix variable X with identifier X to the value Xval.
April 2006
Nathan Sorensen
Kedrick Black
148
newsys = dellmi(lmisys,n)
Dellmi() deletes the nth LMI from the system of LMIs described in lmisys. The
updated system is returned in newsys.
EX:
Input:
Suppose that the following is an LMI
Lmisys system of LMIs
System:
Output:
lmis = dellmi(lmisys,LMI2)
Nathan Sorensen
Kedrick Black
149
newsys = delmvar(lmisys,X)
Delmvar() removes the matrix variable X with identifier X from the list
of variables defined in lmisys.
EX:
Input:
Ouput:
lmisys = delmvar(lmisys,X)
Gives the system:
April 2006
Nathan Sorensen
Kedrick Black
150
newsys = setmvar(lmisys,X,Xval)
Setmvar() sets the matrix variable X with identifier X to the value
Xval.
EX:
Input:
Lmisys system of LMIs
X name of an LMI in Lmisys
Xval value to evaluate X at
Output
Newsys LMI system after X is
evaluated at Xval.
April 2006
Nathan
Kedrick Black
April 2006
Nathan Sorensen
Kedrick Black
152
K = matnbr(lmisys)
Matnbr() matnbr returns the number K of matrix variables in the
LMI problem described by lmisys
April 2006
Nathan Sorensen
Kedrick Black
153
region = lmireg
Lmireg() is an interactive facility to specify the LMI regions involved in
multi-objective H infinity synthesis with pole placement constraints.
for some fixed real matrices M and L = LT. This class of regions
encompasses half planes, strips, conic sectors, disks, ellipses, and
any intersection of the above.
April 2006
Nathan Sorensen
Kedrick Black
154
Plotting Functions
Various Plotting functions are useful with the Robust Control
Toolbox. Some of particular interest are shown here.
April 2006
Nathan Sorensen
Kedrick Black
155
loglog(sys)
Example
omega = logspace(-2,2,40);
sys1 = tf(0.9,[.1 1])
sys1g = frd(sys1,omega);
sys2 = tf(0.9,[1 1])
sys2g = frd(sys2,omega);
sys3 = tf(0.9,[10 1])
sys3g = frd(sys3,omega);
loglog(abs(sys1g),abs(sys2g),'r+',sys3g.Freq,...
abs(sys3g.Resp(:)),'--');
Sys1:
0.9
--------0.1 s + 1
Sys2:
0.9
----s+1
Sys3:
0.9
-------10 s + 1
April 2006
Nathan Sorensen
Kedrick Black
156
April 2006
Nathan Sorensen
Kedrick Black
157
uplot(type,G1,linetype,Xdata,Ydata,
linetype)
Plot multiple frequency response objects and doubles on the same graph
April 2006
Nathan Sorensen
Kedrick Black
158
Uplot example
Example
a1 = [-1,1;-1,-0.5];
b1 = [0;2]; c1 = [1,0]; d1 = 0;
sys1 = ss(a1,b1,c1,d1);
a2 = [-.1,1;-1,-0.05];
b2 = [1;1]; c2 = [-0.5,0]; d2 = 0.1;
sys2 = ss(a2,b2,c2,d2);
omega = logspace(-2,2,100);
sys1g = frd(sys1,omega);
omega2 = [ [0.05:0.1:1.5] [1.6:.5:20]
[0.9:0.01:1.1] ];
omega2 = sort(omega2);
sys2g = frd(sys2,omega2);
sys3 = rss(1,1,1);
rspot = frd(sys3,2);
uplot('liv,lm',sys1g,'b-.',rspot,'r-*',sys2g);
xlabel('log independent variable')
ylabel('log magnitude')
title('axis specification: liv,lm')
April 2006
Nathan Sorensen
Kedrick Black
159
dmplot(diskgm)
Dmplot() plots the maximum allowable phase variation as a function
of the actual gain variation for a given disk gain margin diskgm.
EX:
dmplot(1.414)
April 2006
Nathan Sorensen
Kedrick Black
160
Miscellaneous
This is a group of functions employed throughout the Robust Control
Toolbox that do not fit into any general category.
1. Rcond() creates an estimate for the reciprocal of the condition of the frd object
x in the 1-norm .
2. Schur() applies the schur command to frd objects.
3. Diag(x) puts x on the main diagonal of a matrix.
4. Genphase() fit SISO magnitude data with a real, rational, minimum-phase
transfer function.
5. Ssv() computes the singular value decomposition of an frd object.
6. Repmat() creates a large matrix B consisting of an M-by-N tiling of copies of
some matrix A.
April 2006
Nathan Sorensen
Kedrick Black
161
r = rcond(x)
is an estimate for the reciprocal of the
condition of the frd object x in the 1-norm
obtained by the LAPACK condition
estimator
operates on x.ReponseData of the x frd at
each frequency to construct r
If x is well conditioned, rcond(x) is near 1.0
If x is badly conditioned, rcond(x) is near
EPS
April 2006
Nathan Sorensen
Kedrick Black
162
[u,t] = schur(x)
applies the schur command to frd objects
operates on the x.ReponseData of the frd
object at each frequency point to construct
u and t
u and t are frd objects. x must be square
April 2006
Nathan Sorensen
Kedrick Black
163
v = diag(x)
April 2006
Nathan Sorensen
Kedrick Black
164
resp = genphase(d)
Fit single-input/single-output magnitude
data with a real, rational, minimum-phase
transfer function
uses the complex-cepstrum algorithm to
generate a complex frequency response
resp whose magnitude is equal to the real,
positive response d, but whose phase
corresponds to a stable, minimum-phase
function
April 2006
Nathan Sorensen
Kedrick Black
165
[U,S,V] = svd(X)
Singular value decomposition of an frd
object
produces a diagonal frd S that has the
same dimensions as X and includes
positive diagonal elements in decreasing
order
U and V are unitary matrices and frd
objects, such that X = U*S*V'
April 2006
Nathan Sorensen
Kedrick Black
166
B = repmat(A,M,N)
April 2006
Nathan Sorensen
Kedrick Black
167
References
www.mathworks.com/
Robust Control Toolbox Tutorial
April 2006
Nathan Sorensen
Kedrick Black
168