For more details and examples, see LMITOOL user's guide.
If you have questions, comments, send mail to
lmitool@ensta.fr .
For more references and information on LMI problems and engineering
applications, see the quick reference guide
Semidefinite Programming and Applications.
minimize f(X1,...,XM,D1,...,DN) subject to Gi(X1,...,XM,D1,...,DN) = 0, i=1,...,p Hj(X1,...,XM,D1,...,DN) >= 0, j=1,...,q where:
The fields above are specified using the standard Matlab syntax.
A help zone : show a few lines of informations about the field where is the mouse cursor.
A state bar : show a line of general information about the state of the application.
The user is then ready to use the matlab function created by TKLMITOOL, with the syntax
[X1,...,XM,infostr] = foo(D1,...,DN)
where infostr is a string containing convergence information. The returned matrices X1,...XM are empty if the problem is infeasible.
Consider the linear, time-invariant, continuous-time system in state-space form :
dx/dt = Ax + Bu,
where x is the state, and A is n x n and B is n x nu; both matrices are constant.
We seek a constant, state-feedback control law u = Kx such that the closed-loop system is asymptotically stable, that is, all eigenvalues of A+BK have negative real part. In addition, we require that for every initial condition x(0) with ||x(0)|| <= 1, the resulting command input satisfies ||u(t)|| < umax for every t >= 0, where umax is a given number.
As shown in Boyd & al (1994), the above problem has a solution if and only if the following conditions hold for some matrix unknowns X, U :
[X U'; U umax^2*I] < 0, A*X+X*A+B*U+U'*B' < 0, X = X'
The above is a simple feasibility LMI problem in variables X, U. If it has a solution, then an appropriate control law is u = Kx, where K = U*X^{-1}.
TKLMITOOL helps writing a matlab function, which we choose to call sf_sat, with syntax
[X,U,infostr] = sf_sat(A,B,umax)where infostr is a string containing convergence information. We can solve this problem as follows :
These inputs will ask lmitool to write a Matlab function with syntax
[X,U,infostr] = sf_sat(A,B,umax)that solves the problem specified by the user in the bottom part of the window (in the above, infostr is a string containing convergence information).
Xinit = eye(n,n); Uinit = zeros(n,nu);specifies correct sizes for Xinit and Uinit.
LME = X-X';
lmi_lyap = - (A*Q+Q*A'+B*Y+Y'*B');
lmi_sat = [Q Y' ; Y (umax^2)*eye(nu)] ;
lmi_x0 = Q - eye(n) ;
LMI = stack (lmi_lyap, lmi_sat, lmi_x0) ;
says that the variables X and U satisfy three inequality constraints.
The function sf_sat is ready to use : within Matlab, assuming that A,B,umax of appropriate size exist in the workspace, the command
[X,U,infostr] = sf_sat(A,B,umax)
returns X = [], U = [] if the problem is infeasible, and
a solution to the problem otherwise (infostr is a string
containing convergence information, such as 'optimal').
lmisolver calls a matlab function, lmiformat, which puts the optimization problem into the standard optimization problem. Then, lmisolver calls the optimization code SP.
lmiformat works in three main steps.
The user should first obtain the SP package. This package can be obtained via anonymous ftp to isl.stanford.edu, under /pub/boyd/semidef_prog.