Please report any problems to Clément Roos (croos@onera.fr) or JeanMarc Biannic (biannic@onera.fr). We will try to fix them as quickly as possible!
The GSS library (Generalized State Space) of the SMAC toolbox implements a new Matlab class, which allows to model uncertain and nonlinear systems as Linear Fractional Representations. It replaces and extends the LFR toolbox, with a more intuitive way to describe LFR and a more userfriendly interface, including a Simulink library. Several tools are proposed to manipulate GSS objects (addition, multiplication, inversion, concatenation, feedback...), obtain GSS objects from symbolic models, convert GSS/LFR/USS objects, manipulate the uncertainties and the nonlinearities (normalization, reordering, random sampling), and perform order reduction or approximation. A large class of continuous and discretetime systems can be handled, with real or complex uncertain or varying parameters, polytopictype uncertain or varying elements, linear timeinvariant uncertainties, sector nonlinearities, saturations, deadzones, or more general nonlinear operators. Full compatibility is also ensured with other modeling, analysis and control libraries of the SMAC toolbox (APRICOT, SMART, IQC, SAW...).
Linear Fractional Representations are a straightforward extension of statespace models with uncertain elements, parametric variations, and isolated nonlinearities. They consist of a continuous or discretetime LTI model $M(s)$ or $M(z)$ in feedback loop with a block diagonal operator $\Delta=\textrm{diag}(\Delta_1,\dots,\Delta_N)$ which collects uncertain, varying and nonlinear elements:
Figure 1: Linear Fractional Representation
Each $\Delta_i$ block can be a real or complex uncertain or varying parameter (PAR
), a polytopictype uncertain or varying element (POL
), a linear timeinvariant system (LTI
), a sector nonlinearity (SEC
), a saturation (SAT
), a deadzone (DZN
) or any other nonlinear operator (NLB
).
The GSS library of the SMAC toolbox implements a new Matlab class. It allows to describe a Linear Fractional Representation as a GSS object, which is a structured variable with two fields:
M
: SS/TF/ZPK object representing the LTI model $M(s)$ or $M(z)$.
D
: $1\times N$ structured array describing each $\Delta_i$ block with fields: Name 
Name of the block  String with no trailing underscore 
Type 
Type of the block (see above)  String 'PAR' , 'POL' , 'LTI' , 'SEC' , 'SAT' , 'DZN' or 'NLB' 
Size 
Size of the block  Number of rows and columns $[n_{row}\ n_{col}]$ 
NomValue 
Nominal value 

Bounds 
Bounds information 

RateBounds 
Bounds on the rate of variation 

Measured 
Indicates whether a block can be measured or not  String 'yes' or 'no' 
Normalization 
Stores bounds information in case of normalization 

Misc 
Can be used to store any additional data  No predefined format 
The fields Name
, Type
and Size
must be specified for each block, whereas the other fields can be left empty.
There are several ways to create a GSS object.
sys=gss(sys1)
sys1
can be a GSS object, a LFR object obtained with the LFR toolbox, a USS object obtained with the Robust Control toolbox, a SS/TF/ZPK object or a standard matrix. Note that the call sys=gss
can be used to create an empty GSS object.
M
and D
sys=gss(M,D)
M
is a SS/TF/ZPK object or a numeric array. D
is a $1\times N$ structured array with fields Name
, Type
, Size
, NomValue
, Bounds
, RateBounds
, Measured
, Normalization
and Misc
. Name
must be defined for each $\Delta_i$ block, whereas the other fields can be empty or omitted. Note that Type
and Size
are set to 'PAR'
and [1 1]
respectively if empty or omitted.
sys=gss('Property1',Value1,'Property2',Value2,...)
Name
, Type
, Size
, NomValue
, Bounds
, RateBounds
, Measured
, Normalization
and Misc
. Only Name
has to be defined. If undefined, Type
and Size
are set to 'PAR'
and [1 1]
respectively, whereas the other properties are left empty. Example: a=gss('Name','a','Type','PAR','Size',[1 1],'Bounds',[2 4])
sys=gss(Name,Type,Size,NomValue,Bounds,RateBounds,Measured,Normalization,Misc)
Name
has to be defined. If undefined, Type
and Size
are set to 'PAR'
and [1 1]
respectively, whereas the other properties are left empty. Example: a=gss('a','PAR',[1 1],[],[2 4])
sys=gss(Name,NomValue,Bounds,RateBounds)
Name
has to be defined. Type
, Size
, Measured
, Normalization
and Misc
are set to 'PAR'
, [1 1]
, 'no'
, []
and []
respectively. RateBounds
is set to [0 0]
if undefined. NomValue
and Bounds
are set to 0
and [1 1]
if none are defined, whereas NomValue
is set to mean(Bounds)
if only Bounds
is defined and Bounds
is set to [NomValue1 NomValue+1]
if only NomValue
is defined. Example: a=gss('a',[],[2 4])
Starting from R2014b, the output argument can be omitted when an elementary GSS object is created. In other words, gss('a',[],[2 4])
is a shortcut for a=gss('a',[],[2 4])
.
Int
and Delay
Int
and Delay
can be used to create elementary GSS objects such that $M(s)=1/s$ and $M(z)=1/z$ respectively, and $\Delta$ is empty. Example: Int=gss('Int')
plus
, minus
, uminus
, mtimes
, inv
, mrdivide
, mldivide
, mpower
, horzcat
, vertcat
, append
, ctranspose
, transpose
, ss
, tf
and feedback
can be applied to GSS objects. Type 'help gss/rname'
to get detailed information about the routine rname
.
'help sym2gss'
to get detailed information.
'help data2gss'
to get detailed information. See also the APRICOT library.Warning: A systematic order reduction is performed by default with the routine mingss
each time a GSS object is created or an elementary operation is applied to an existing GSS object (addition, multiplication, division, concatenation...). This setting can be changed using the routine setred
.
Warning: No systematic normalization is performed by default, but PAR
and LTI
blocks are normalized in case of inversion or inconsistency problem with the routine dbnorm
. This setting can be changed using the routine setnorm
.
Warning: In case of an unexpected error, use the routine checkgss
to check whether the considered GSS objects are consistent.