lmisolver ========= Solve linear matrix inequations. Calling Sequence ~~~~~~~~~~~~~~~~ :: [XLISTF[,OPT]] = lmisolver(XLIST0,evalfunc [,options]) 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)` where `X` 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 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. Examples ~~~~~~~~ :: //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`_()); function [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)) endfunction X=lmisolver(`list`_(`zeros`_(A1)),evalf); X=X(1) [Y,Z,c]=evalf(X) See Also ~~~~~~~~ + `lmitool`_ Graphical tool for solving linear matrix inequations. .. _lmitool: lmitool.html