lmisolver - Linear matrix inequation solver (original) (raw)
Arguments
XLIST0
a list of containing initial guess (e.g.XLIST0=list(X1,X2,..,Xn))
evalfunc
a Scilab function ("external" function with specific syntax)
The syntax the function evalfunc must be as follows:
[LME,LMI,OBJ]=evalfunct(X) whereX is a list of matrices, LME, LMI are lists and OBJ a real scalar.
XLISTF
a list of matrices (e.g.XLIST0=list(X1,X2,..,Xn))
options
optional parameter. If given, options is a real row vector with 5 components[Mbound,abstol,nu,maxiters,reltol]
Description
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 functionevalfunc and the set of matrices Xi's in the list X (i.e. X=list(X1,...,Xn)).
The function evalfun must return in the listLME 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 definiteZ1>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.
Examples
n = 2; A1 = rand(n,n); A2 = rand(n,n); Xs = diag(1:n); Q1 = -(A1'Xs+XsA1+0.1*eye()); Q2 = -(A2'Xs+XsA2+0.2*eye());
deff('[LME,LMI,OBJ]=evalf(Xlist)','X = Xlist(1); ... LME = X-diag(diag(X));... LMI = list(-(A1''X+XA1+Q1),-(A2''X+XA2+Q2)); ... OBJ = -sum(diag(X)) ');
X=lmisolver(list(zeros(A1)),evalf);
X=X(1) [Y,Z,c]=evalf(X)