Matlab Robust Control Toolbox
Matlab Robust Control Toolbox
April 2006
Purpose
Increase Enthusiasm for Robust Controls Learn how to simulate control algorithms with uncertainty Increase your knowledge in Robust Controls
April 2006
Outline
What is the Robust Control Toolbox Uncertainty
Uncertain Elements Uncertain Matricies and Systems Manipulation of Uncertain Models Interconnection of Uncertain Models Model Order Reduction Robustness and Worst Case Analysis Parameter-Dependent Systems Controller Synthesis -synthesis
Robustness
MIMO Control Sampled Data Systems Gain Scheduling Supporting Utilities LMI
Specification of Systems of LMIs LMI Characteristics LMI Slovers Validation of Results Modification of Systems of LMIs Nathan Sorensen Kedrick Black 3
April 2006
April 2006
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
Sources of Uncertainty
Uncertainty in an system can occur in various forms and from various sources.
Feedback Uncertainty
April 2006
Uncertain Elements
1) UComplex() is a function to define complex uncertain parameters
2)
3)
4)
Ultidyn() is a function to create an uncertain linear time inveriant object where only bounds on the frequency response are known.
Ureal() is a function to define real uncertain parameters used in various analysis and design functions in the robust control toolbox.
5)
April 2006
UComplex(Name,nominal value)
UComplex() is a function to define complex uncertain parameters
Sampled Complex Uncertain Parameter A 4.5 4
Name Variable name for the uncertain parameter Nominal Value center nominal value for the parameter radius paramter name to specify a radius of uncertainty around the nominal. Radius value should follow the parameter specification.
2.5 3 3.5 4 4.5 5 5.5
3.5
2.5
1.5
EX:
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
8
0.05
0.1
0.15
0.2
0.25
Name Variable name for the 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.
9
0.05
0.1
0.15
0.2
0.25
April 2006
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] 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'
April 2006
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
Name variable name Iosize the size of [input, output] GainBounded upper bound on the magnitude of the response.
20
10
Imaginary Axis
-10
-20
-30
-40 -10
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)
Bound Specifies the actual bound for the frequency response. SampleStateDim Specifies the state dimension to be used by usample(). AutoSimplify specifies the amount of result simplification.
11
April 2006
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' Name variable name Nominal Value Mode Choose uncertainty type amongst: Percentage percentage area around the nominal. Range a given interval with the nominal inside.
4. 5. 6.
April 2006
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);
Note: if only one matrix is include, the function assumes that it represents D and a static gain matrix.
April 2006 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 0
Magnitude (dB)
-10
-20
-30
-40 45 0
Phase (deg)
10
10
10
Frequency (rad/sec)
Frequency Range of frequencies for ufrd model. Units specify units: rad/s default
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+')
hz
April 2006
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
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
18
usys = randuss(n,p,m)
Generate stable, random uss objects generates an nth order uncertain continuous-time system with p outputs and m inputs
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
19
2.
3.
4.
5. 6.
7.
isuncertain() Checks whether argument is an uncertain class type simplify() performs model-reduction-like techniques to detect and eliminate redundant copies of uncertain elements usample() substitutes N random samples of the uncertain objects in A, returning a certain array of size [size(A) N] usubs() used to substitute a specific value for an uncertain element of an uncertain object. gridureal() Grid ureal parameters uniformly over their range lftdata() Decompose uncertain objects into fixed normalized and fixed uncertain parts Ssbal() yields a system whose input/output and uncertain properties are the same as usys, a uss object.
April 2006
20
B = isuncertain(A)
Checks whether argument is an uncertain class type (checks the class) does not actually verify that the input argument is truly uncertain Returns true if input argument is uncertain, false otherwise Uncertain classes are umat, ufrd, uss, ureal, ultidyn, ucomplex, ucomplexm, and udyn
Example
isuncertain(rand(3,4)) ans = 0 isuncertain(ureal('p',4)) ans = 1 isuncertain(rss(4,3,2)) ans = 0 isuncertain(rss(4,3,2)*[ureal('p1',4) 6;0 1]) ans = 1
April 2006
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
22
B = usample(A,N)
substitutes N random samples of the uncertain objects in A, returning a certain array of size [size(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
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
24
B = gridreal(A,N)
Grid ureal parameters uniformly over their range substitutes N uniformly spaced samples of the uncertain real parameters in A The N samples are generated by uniformly gridding each ureal in A across its range
Example
gamma = ureal('gamma',4); tau = ureal('tau',.5,'Percentage',30); p = tf(gamma,[tau 1]); KI = 1/(2*tau.Nominal*gamma.Nominal); c = tf(KI,[1 0]); clp = feedback(p*c,1); subplot(2,1,1); step(gridureal(p,20),6) title('Open-loop plant step responses') subplot(2,1,2); step(gridureal(clp,20),6)
April 2006
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
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 Wc - the critical frequency for the bilinear prewarp transformation from continuous time to discrete time. (Default is 1)
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)) USS: 2 States, 2 Outputs, 2 Inputs, Continuous System p1: real, nominal = 3.2, variability = [-0.43 0.43]%, 1 occurrence p2: real, nominal = -17, range = [-19 -11], 1 occurrence usysout = ssbal(usys) USS: 2 States, 2 Outputs, 2 Inputs, Continuous System p1: real, nominal = 3.2, variability = [-0.43 0.43]%, 1 occurrence p2: real, nominal = -17, range = [-19 -11], 1 occurrence
Output:
Usysout - a system whose input/output and uncertain properties are the same as usys, a uss object. (The numerical conditioning of usysout is usually better than that of usys.)
April 2006
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
28
avalue = normalizedactual2(A,NV)
Convert the value for an atom in normalized coordinates to the corresponding actual value converts the value for atom in normalized coordinates, NV, to the corresponding actual value
Example
a = ureal('a',3,'range',[1 5]); actual2normalized(a,[1 3 5]) ans = -1.0000 -0.0000 1.0000 normalized2actual(a,[-1 1]) ans = 1.0000 5.0000 normalized2actual(a,[-1.5 1.5]) ans = 0.0000 6.0000
April 2006
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
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
April 2006
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
33
sysout = sysic
Build interconnections of certain and uncertain matrices and systems requires that 3 variables with fixed names be present in the calling workspace: systemnames, inputvar and outputvar systemnames is a char containing the names of the subsystems that make up the interconnection nputvar is a char, defining the names of the external inputs to the interconnection outputvar is a char, describing the outputs of the interconnection Also requires that for every subsystem name listed in systemnames, a corresponding variable, input_to_ListedSubSystemName must exist in the calling workspace This variable is similar to outputvar - it defines the input signals to this particular subsystem as linear combinations of individual subsystem's outputs and external inputs
April 2006
34
H = iconnect
Create empty iconnect (interconnection) objects Interconnection objects (class iconnect) are an alternative to sysic, and are used to build complex interconnections of uncertain matrices and systems An iconnect object has 3 fields to be set by the user, Input, Output and Equation Input and Output are icsignal objects, while Equation is a cell-array of equality constraints (using equate) on icsignal objects the System property is the input/output model, implied by the constraints in Equation relating the variables defined in Input and Output
April 2006
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
36
April 2006
38
April 2006
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
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
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
43
hankelsv(G)
Compute Hankel singular values for stable/unstable or continuous/discrete system draws a bar graph of the Hankel singular values such as the following:
April 2006
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
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
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: Gs Gs Gs
s f
,B ,D ,C ) Gs f : ( A 22 2 2 2
,B ,D ,C ) Gs s : ( A 11 1 1 1
April 2006
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
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 nuinput, ny-output 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
51
Performance Analysis
The hyperbola is used to define the performance margin. Systems whose performance degradation curve intersects high on the hyperbola curve represent "non-robustly-performing systems" in that very small deviations of the uncertain elements from their nominal values can result in very large system gains. Conversely, an intersection low on the hyperbola represent "robustly-performing systems."
April 2006
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
6. Mussvextract() is used to extract the compressed information within muinfo into a readable form.
April 2006
54
April 2006
55
14. wcgopt() creates a wcgain, wcsens and wcmargin options object called options in which specified properties have specific values.
15. wcmargin() calculates the combined worst-case input and output loop-at-a-time gain/phase margins of the feedback loop 16. wcsens() Calculate the worst-case sensitivity and complementary sensitivity functions of a plant-controller feedback loop
April 2006
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: P LTI plant C only feedback controller Tol - specifies a relative accuracy for calculating the normalized coprime factor/gap metric robust stability margin
Output Parameters:
Marg - contains upperand lower bound for the normalized coprime factor/gap metric robust stability margin
Freq - the frequency associated with the upper bound
April 2006
57
[gap,nugap] = gapmetric(p0,p1,tol)
Gapmetric() calculates upper bounds on the gap and nugap metric between systems p0 and p1.
Bode Diagram Bode Diagram
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,'--');
g = 0.0029 ng = 0.0020
10
10
10
10
10
10
Frequency (rad/sec)
Frequency (rad/sec)
Input: P0,P1 plants of the same size Tol tolerance for the gap metric (default is .001)
April 2006
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.)
58
loopmargin(L)
[SM, DM, MM] = Loopmargin() is a tool to determine the closed loop margins for an uncertain system. Outputs include: SM A structure containing the nominal system margins. DM also called disk margin. Describes the disk of deviations from the nominal system. MM establishes guaranteed bounds on the system with variations from all input channels.
April 2006 Nathan Sorensen Kedrick Black 59
loopsens(P,C)
Loopsens() creates a structure which contains the multivariable sensitivity, complementary and open-loop transfer functions.
Structure Output Fields:
Poles - Closed-loop poles. NaN for frd/ufrd objects. Stable - 1 if nominal closed loop is stable, 0 otherwise. NaN for frd/ufrd objects. Si - Input-to-plant sensitivity function Ti - Input-to-plant complementary sensitivity function Li - Input-to-plant loop transfer function So - Output-to-plant sensitivity function To - Output-to-plant complementary sensitivity function Lo - Output-to-plant loop transfer function PSi - Plant times input-to-plant sensitivity function CSo - Compensator times output-toplant sensitivity function 60
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
[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.
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
April 2006
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:
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);
[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:
Output:
Marg - the normalized coprime factor/gap metric robust stability margin b(P, C) Freq destabilizing frequency
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
63
April 2006
[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.
P = tf(1,[1 0]) + ultidyn('delta',[1 1],'bound',0.4); BW = 0.8; K = tf(BW,[1/(25*BW) 1]); S = feedback(1,P*K); [perfmargin,punc] = robustperf(S); perfmargin = UpperBound: 7.4305e-001 LowerBound: 7.4305e-001 CriticalFrequency: 5.3096e+000
Note: Output may not contain true critical frequency because of the assigned frequency range over which the function operates. For limitations, see the function definition in the matlab help.
April 2006
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.
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. EX: 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.
April 2006
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
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.
Input: M - a umat or a uss Output:
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); [maxnormM] = wcnorm(M) maxnormM = LowerBound: 14.7199 UpperBound: 14.7327 [maxnormMi] = wcnorm(Mi) maxnormMi = LowerBound: 2.5963 UpperBound: 2.5979
Wcu - a structure that includes values of uncertain elements and maximizes the matrix norm
April 2006
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.
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 .
April 2006
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
70
[wcmargi,wcmargo] = wcmargin(L)
Wcmargin() describes a disk within with the nominal gain margin and phase margin are stable for an uncertain system.
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]
Output Structure Fields: Wcmargi contains gain margin bound, phase margin in degrees, frequency associate with worst case, and a structure containing the sensitivity to all uncertain elements.
Wcmargo same structure as wcmargi but gives single loop values for each.
April 2006
71
wcst = wcsens(L)
Wcsens() determines the worst case sensitivity of a system to various input and disturbance parameters in an uncertain system L.
Bode Diagram
-5
-10
-15
-20
-25
-30
-35 -1 10
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')
April 2006
72
4.
5. 6.
April 2006
73
9.
10. 11.
April 2006
74
a polytopic model with vertex systems S1, . . ., S4 is created by pols = psys([s1,s2,s3,s4]) while an affine parameter-dependent model with 4 real parameters is defined by affs = psys(pv,[s0,s1,s2,s3,s4]) The output is a structured matrix storing all the relevant information
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
77
pv = pvec('box',range,rates) pv = pvec('pol',vertices)
Specify a vector of uncertain or time-varying parameters used in conjunction with psys to specify parameter-dependent systems The type 'box' corresponds to independent parameters ranging in intervals (extremal values) The parameter vector p then takes values in a hyperrectangle of Rn called the parameter box range is an n-by-2 matrix that stacks up the extremal values type 'pol' corresponds to parameter vectors p ranging in a polytope of the parameter space Rn efined by a set of vertices V1, . . ., Vn corresponding to "extremal" values of the vector p second argument is the concatenation of the vectors v1,...,vn
April 2006
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
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
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 time- varying real parameters taking values in a box or a polytope. The description affsys of this system should be specified with psys
April 2006
81
[tau,P] = quadstab(ps,options)
Assess quadratic stability of parameter-dependent system Quadratic stability of polytopic or affine parameter-dependent systems
April 2006
82
[perf,P] = quadperf(ps,g,options)
Assess quadratic Hinf performance of P-systems
April 2006
83
[tau,Q0,Q1,...] = pdlstab(pds,options)
Assess the robust stability of a polytopic or parameter-dependent system uses parameter-dependent Lyapunov functions to establish the stability of uncertain state-space models over some parameter range or polytope of systems
April 2006
84
[drate,P] = decay(ps,options)
Compute quadratic decay rate
April 2006
85
pdsimul(pds,'traj',tf,'ut',xi,options)
Time response of a parameter-dependent system along a given parameter trajectory along a parameter trajectory p(t) and for an input signal u(t) 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
86
April 2006
87
April 2006
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) GAM/W1 40 T=L/(1+L) GAM*G/W2 20
-20
-40
-60
Input:
10
-2
-80 -4 10
10
10
10
10
Frequency (rad/sec)
G Nominal Plant Model W1 weight for the error signal W2 weight for the control signal W3 weight for the output signal
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 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:
Gopt - guaranteed Hinf performance H2opt guaranteed H2 performance K Controller K(s) coefficients R,S optimal values of the LMI objects.
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 CL Closed loop system matrix Plant Partitioning (if done by mktito(), nmeas and ncon can be omitted): B1 Inputs are disturbances
[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
Plant Partitioning (if done by mktito(), nmeas and ncon can be omitted): B1 Inputs are disturbances B2 Inputs are control signals C1 Outputs are errors to be minimized C2 Outputs are inputs to control K
92
[K,GAM]=sdhinfsyn(P,NMEAS,NCON)
Sdhinfsyn() synthesizes a sampled data H-infinity controller.
Input Parameters: P partitioned system matrix Nmeas row size of C2 NCon column size of B2 Output parameters: K H infinity controller coefficients Gam H infinity norm cost for the system
April 2006
Where:
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
93
[K,CL,GAM,INFO]= loopsyn(G,Gd,RANGE)
Loopsyn() is an H infinity optimal way for loopshaping controller synthisis.
Singular Values 50 40 30 20
Input Parameters:
G LTI plant
Gd desired loop shape Range [Wmin,Wmax] desired loop shaping frequency range. (10*Wmin <= Wmax) Output Parameters:
10
0
10 Frequency (rad/sec)
10
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
[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 EX:
s=tf('s');G=ss(1e4/((s+1)*(s+10)*(s+100)));[A,B,C, D]=ssdata(G); Output Parameters: F=lqr(A,B,C'*C,eye(size(B,2))); K controller coefficient vector L=ss(A,B,F,0*F*B); XI=100*C'*C; THETA=eye(size(C,1)); Svl sigma plot data for recovered system RHO=[1e3,1e6,1e9,1e12];W=logspace(-2,2); nyquist(L,'k-.');hold; W1 - frequencies for SVL plots [K,SVL,W1]=ltrsyn(G,F,XI,THETA,RHO,W); April 2006 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)
Mixsyn() creates the h-infinity controller based on the sensitivity function S(s) and the complimentatry sensitivitiy T(s) function according to the weighting matricies W1, W2, W3.;
April 2006
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.
Singular Values 60
Input Parameters:
G LTI plant model W1,W2 Pre and Post compensator to give Gd = W1GW2 a good high frequency and low frequency response Output Parameters: K controller coefficient vector
40
20
-20
-40
-60
-80
-100 -2 10
10
-1
10
10
10
EX:
Frequency (rad/sec)
sys = mkfilter(fc,ord,type,psbndr)
Mkfilter() returns a single-input, single-output analog low pass filter sys as an ss object.
Bode Diagram Bode Diagram
50 0 -50 0 -45
0 2
Input:
Fc cutoff frequency of the filter Ord order of the filter Type type of the filter. 'butterw- Butterworth filter cheby - Chebyshev filter 'bessel - Bessel filter 'rc - Series of resistor/ capacitor filters Psbndr - the magnitude of the passband
10
10
10
10
10
10
10
Frequency (rad/sec)
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,'-.') 98
Output:
Sys Designed filter April 2006
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, minimum-phase 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. Input: R,U,V Constant matrices of appropriate structure BlockStructure a matrix specifying the perturbation blockstructure as defined for mussv. and . This
Output: Qopt - the optimum value of Q Bnd - the upper bound of mussv(R+U*Q*V,BLK)
April 2006
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
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 Nathan Sorensen Kedrick Black bnd2 =0.6768 101
options = dkitopt('name1',value1,'name2',value2,...)
Dkitopt() creates a dkitopt object called options with specific values assigned to certain properties.
April 2006
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 Clicking the mouse
Typing r Typing integers 0 9
See help file for more info
Typing w
Typing p Typing k April 2006 Nathan Sorensen Kedrick Black 103
B = fitfrd(A,N)
Fit D-scaling frequency response data with state-space model state-space object with state dimension N, where A is an frd object and N is a nonnegative integer The frequency response of B closely matches the D-scale frequency response data in A A must have either 1 row or 1 column, although it need not be 1-by-1
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
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
105
April 2006
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: Sdsys a strictly proper partitioned plant model, such that the constant feedback gain is be zero K feedback controller gain matrix
2006 Nathan delay Sorensen April Delay controller computational time
Output: Gamu - upper bound on the induced L2 norm of the sampleddata closed-loop system Gaml - lower bound on the induced L2 norm of the sampledKedrick Black data closed-loop system 107
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)
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;
0.1
0.2
0.3
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
April 2006
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
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
2. Mktito() adds TITO (two-input-two-output) partitioning to LTI system SYS, assigning OutputGroup and InputGroup properties.
3. Sectf() gives the state-space sector bilinear transformation. 4. Skewdec() forms an m-by-m skew-symmetric matrix.
April 2006
113
GT = bilin(G,VERS,METHOD,AUG)
Multivariable bilinear transform of frequency (s or z) bilin computes the effect on a system of the frequency-variable substitution The variable VERS denotes the transformation direction: VERS= 1, forward transform or VERS=-1, reverse transform computes several state-space bilinear transformations such as backward rectangular, etc., based on the METHOD you select
April 2006
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)
State-space sector bilinear transformation computes a linear fractional transform T such that the system lft(F,K) is in sector SECF if and only if the system lft(G,K) is in sector SECG where G=lft(T,F,NU,NY) where NU and NY are the dimensions of uT2 and yT2, respectively
April 2006
116
x = skewdec(m,n)
Skewdec() forms the m-by-m skew-symmetric matrix:
NOTE: This function is useful to define skew-symmetric matrix variables. In this case, set n to the number of decision variables already used.
April 2006
117
x = symdec(m,n)
Symdec() forms an m-by-m symmetric matrix of the form:
NOTE: This function is useful to define symmetric matrix variables. n is the number of decision variables.
April 2006
118
where x = (x1, . . . , xN) is a vector of unknown scalars (the decision or optimization variables) A0, . . . , AN are given symmetric matrices < 0 stands for "negative definite," i.e., the largest eigenvalue of A(x) is negative Note that the constraints A(x) > 0 and A(x) < B(x) are special cases of (1-1) since they can be rewritten as -A(x) < 0 and A(x) - B(x) < 0, respectively.
April 2006
120
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
122
lmiedit
Lmiedit is a graphical user interface for the symbolic specification of LMI problems.
Instructions:
1. 2. Give it a name (top of the window). Declare each matrix variable (name and structure) in the upper half of the window. The structure is characterized by its type (S for symmetric block diagonal, R for unstructured, and G for other structures) and by an additional structure matrix similar to the second input argument of lmivar. Please use one line per matrix variable in the text editing areas. Specify the LMIs as MATLAB expressions in the lower half of the window. An LMI can stretch over several lines. However, do not specify more than one LMI per line. 123
3.
April 2006
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
Type - selects among available types of variables and the second argument Options: 1- Symmetric matrices with a blockdiagonal structure 2 - Full m-by-n rectangular matrix 3 - Other structures Struct - gives further information on the structure of X depending on its type Ouput: X Matrix variable in LMI system
April 2006
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
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
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
129
April 2006
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
132
k = lminbr(lmisys)
Lminbr returns the number k of linear matrix inequalities in the LMI problem described in lmisys.
April 2006
133
K = matnbr(lmisys)
Matnbr() returns the number K of matrix variables in the LMI problem described by lmisys.
April 2006
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 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: Lmisys System of LMIs Decvars - the vector of decision variables X - the matrix variable identifier with which the function computes valX Output:
April 2006
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: Lmisys System of LMIs X1,..,Xn system matrix variables evaluated at x1,,xn EX: Given
Output:
Decvec - vector of decision variables
3
137
April 2006
decX = decinfo(lmisys,X)
DecX() expresses the entries of a matrix variable X in terms of the decision variables x1, . . ., xN.
EX:
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
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: Lmisys LMI system to solve Options zeros set to default parameters
1 not used
2 - sets the maximum number of iterations (100 by default) 3 - resets the feasibility radius 4 - helps speed up termination 5 a 1 turns off the trace of execution of the optimization procedure. 0 is on. Target - sets a target value for tmin
April 2006
Output: Tmin Constraints are feasible if tmin<=0 and strictly feasible if tmin<0 Xfeas - a solution in terms of the decision variables
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
141
[copt,xopt] = mincx(lmisys,c,options,xinit,target)
Mincx() solves the convex program
April 2006
[lopt,xopt] = gevp(lmisys,nlfc)
Gevp() solves a generalized eigenvalue minimization problem described by: Minimize LMIs. EX:
setlmis([]); p = lmivar(1,[2 1]) lemiterm([1 1 1 0],1) % P > I : I lemiterm([-1 1 1 p],1,1) % P > I : P lemiterm([2 1 1 p],1,a1,'s') % LFC # 1 (lhs) lemiterm([-2 1 1 p],1,1) % LFC # 1 (rhs) lemiterm([3 1 1 p],1,a2,'s') % LFC # 2 (lhs) lemiterm([-3 1 1 p],1,1) % LFC # 2 (rhs) lemiterm([4 1 1 p],1,a3,'s') % LFC # 3 (lhs) lemiterm([-4 1 1 p],1,1) % LFC # 3 (rhs) lmis = getlmis [alpha,popt]=gevp(lmis,3) alpha = -0.122 April 2006
B(x) > 0 denote systems of Output: Lopt - the global minimum Xopt - the minimizing value of the vector of decision variables x.
Input:
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 Output: V1,,Vk value of these variables when the n-th decision variable is set to one and all others to zero.
April 2006
144
1. Evallmi() evaluates all LMI constraints for a particular instance determined by decvars of the vector of decision variables. 2. Showlmi() evaluates all variable terms in a system of LMIs for given values of the decision variables.
April 2006
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:
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.
Output: Lhs, Rhs - The left- and right-hand sides of the n-th LMI constant matrices
April 2006
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
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 N the number of the deletion LMI System:
Output: Newsys new LMI system after the nth LMI is deleted.
newsys = delmvar(lmisys,X)
Delmvar() removes the matrix variable X with identifier X from the list of variables defined in lmisys.
EX: Consider the LMI: Input: Lmisys system of LMIs X name of LMI to be deleted
Ouput: lmisys = delmvar(lmisys,X) Gives the system: Newsys system of LMIs after the LMI X has been deleted
April 2006
150
newsys = setmvar(lmisys,X,Xval)
Setmvar() sets the matrix variable X with identifier X to the value Xval. EX:
Consider the system: and the problem of finding a stabilizing statefeedback law u = Kx where K is an unknown matrix. This LMI is entered by the commands: n = size(A,1) % number of states ncon = size(B,2) % number of inputs setlmis([]) P = lmivar(1,[n 1]) % P full symmetric Y = lmivar(2,[ncon n]) % Y rectangular lmiterm([1 1 1 P],A,1,'s') % AP+PA' lmiterm([1 1 1 Y],B,1,'s') % BY+Y'B' lmiterm([1 1 1 0],1) % I lmis = getlmis news = setmvar(lmis,P,1) [tmin,xfeas] = feasp(news) Y = dec2mat(news,xfeas,Y)
April 2006
The computed Y is feasible whenever tmin < 0. Nathan Sorensen Kedrick Black 151
1. Matnbr() matnbr returns the number K of matrix variables in the LMI problem described by lmisys.
2. Lmireg() is an interactive facility to specify the LMI regions involved in multi-objective H infinity synthesis with pole placement constraints.
April 2006
152
K = matnbr(lmisys)
Matnbr() matnbr returns the number K of matrix variables in the LMI problem described by lmisys
April 2006
153
region = lmireg
Lmireg() is an interactive facility to specify the LMI regions involved in multi-objective H infinity synthesis with pole placement constraints.
Recall that an LMI region is any convex subset D of the complex plane that can be characterized by an LMI in z and , i.e.,
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
154
Plotting Functions
Various Plotting functions are useful with the Robust Control Toolbox. Some of particular interest are shown here.
1. Loglog() is same as plot(...), except a logarithmic (base 10) scale is used for the x-axis and y-axis. 2. Semilog() is same as plot(...), except a logarithmic (base 10) scale is used for the x-axis. 3. Uplot() allows one to plot multiple frequency response objects and doubles on the same graph.
4. Dmplot() plots the maximum allowable phase variation as a function of the actual gain variation for a given disk gain margin diskgm.
April 2006
155
loglog(sys)
log-log scale plot of frd objects same as plot, except a logarithmic (base 10) scale is used for both the X- and Yaxis 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
156
April 2006
157
uplot(type,G1,linetype,Xdata,Ydata, linetype)
Plot multiple frequency response objects and doubles on the same graph
April 2006
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
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
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
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
163
v = diag(x)
If x is a vector of uncertain system models or matrices, diag(x) puts x on the main diagonal If x is a matrix of uncertain system models or matrices, diag(x) is the main diagonal of v diag(diag(x)) is a diagonal matrix of uncertain system models or matrices Example
x = rss(3,4,1); xg = frd(x,logspace(-2,2,80)); size(xg) FRD model with 4 output(s) and 1 input(s), at 80 frequency point(s). mxg = diag(xg); size(mxg) FRD model with 4 output(s) and 4 input(s), at 80 frequency point(s). xxg = [xg(1:2,1) xg(3:4,1)]; m = diag(xxg); size(m) FRD model with 2 output(s) and 1 input(s), at 80 frequency point(s).
April 2006
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)
Replicate and tile an array creates a large matrix B consisting of an M-by-N tiling of copies of A
Example
repmat(randumat(2,2),2,3) repmat(ureal(`A',6),[4 2])
UMAT: 4 Rows, 6 Columns BJVAD: real, nominal = 5.95, variability = [-3.97443 15.0948]%, 3 occurrences FRHOD: complex, nominal = 3.34+5.95i, radius = 0.757, 3 occurrences LAVLQ: complex, nominal = -2.16-8.33i, radius = 1.84, 2 occurrences WNFRV: complex, nominal = 0, radius = 1.36, 2 occurrences UMAT: 4 Rows, 2 Columns A: real, nominal = 6, variability = [-1 1], 1 occurrence
April 2006
167
References
www.mathworks.com/ Robust Control Toolbox Tutorial
April 2006
168