lmisolver — linear matrix inequation solver
[XLISTF[,OPT]] = lmisolver(XLIST0,evalfunc [,options])
a list of containing initial guess (e.g. XLIST0=list(X1,X2,..,Xn)
)
a Scilab function ("external" function with specific syntax)
The syntax the function evalfunc
must be as follows:
[LME,LMI,OBJ]=evalfunct(X)
where X
is a list of matrices, LME, LMI
are lists and OBJ
a real scalar.
a list of matrices (e.g. XLIST0=list(X1,X2,..,Xn)
)
optional parameter. If given, options
is a real row vector with 5 components [Mbound,abstol,nu,maxiters,reltol]
lmisolver
solves the following problem:
minimize f(X1,X2,...,Xn)
a linear function of Xi's
under the linear constraints:
Gi(X1,X2,...,Xn)=0
for i=1,...,p and LMI (linear matrix
inequalities) constraints:
Hj(X1,X2,...,Xn) > 0
for j=1,...,q
The functions f, G, H are coded in the Scilab function evalfunc
and the set of matrices Xi's in the list X (i.e.
X=list(X1,...,Xn)
).
The function evalfun
must return in the list LME
the matrices
G1(X),...,Gp(X)
(i.e. LME(i)=Gi(X1,...,Xn),
i=1,...,p).
evalfun
must return in the list LMI
the matrices
H1(X0),...,Hq(X)
(i.e. LMI(j)=Hj(X1,...,Xn)
, j=1,...,q).
evalfun
must return in OBJ
the value of f(X)
(i.e. OBJ=f(X1,...,Xn)
).
lmisolver
returns in XLISTF
, a list of real matrices,
i. e. XLIST=list(X1,X2,..,Xn)
where the Xi's solve the LMI
problem:
Defining Y,Z
and cost
by:
[Y,Z,cost]=evalfunc(XLIST)
, Y
is a list of zero matrices,
Y=list(Y1,...,Yp)
, Y1=0, Y2=0, ..., Yp=0
.
Z
is a list of square symmetric matrices,
Z=list(Z1,...,Zq)
, which are semi positive definite
Z1>0, Z2>0, ..., Zq>0
(i.e. spec(Z(j))
> 0),
cost
is minimized.
lmisolver
can also solve LMI problems in which the Xi's
are not matrices but lists of matrices. More details are given in the
documentation of LMITOOL.
//Find diagonal matrix X (i.e. X=diag(diag(X), p=1) such that //A1'*X+X*A1+Q1 < 0, A2'*X+X*A2+Q2 < 0 (q=2) and trace(X) is maximized n=2;A1=rand(n,n);A2=rand(n,n); Xs=diag(1:n);Q1=-(A1'*Xs+Xs*A1+0.1*eye()); Q2=-(A2'*Xs+Xs*A2+0.2*eye()); deff('[LME,LMI,OBJ]=evalf(Xlist)','X=Xlist(1),LME=X-diag(diag(X));... LMI=list(-(A1''*X+X*A1+Q1),-(A2''*X+X*A2+Q2)),OBJ= -sum(diag(X)) '); X=lmisolver(list(zeros(A1)),evalf);X=X(1) [Y,Z,c]=evalf(X)