Given particular instance of decision variables, evaluate all variable terms in system of LMIs
evalsys = evallmi(lmisys,decvars)
evallmi evaluates all LMI constraints for a particular instance decvars of the vector of decision variables. Recall that decvars fully determines the values of the matrix variables X1, . . ., XK. The "evaluation" consists of replacing all terms involving X1, . . ., XK by their matrix value. The output evalsys is an LMI system containing only constant terms.
The function evallmi is useful for validation of the LMI solvers' output. The vector returned by these solvers can be fed directly to evallmi to evaluate all variable terms. The matrix values of the left and right sides of each LMI are then returned by showlmi.
evallmi is meant to operate on the output of the LMI solvers. To evaluate all LMIs for particular instances of the matrix variables X1, . . ., XK, first form the corresponding decision vector x with mat2dec and then call evallmi with x as input.
Consider the feasibility problem of finding X > 0 such that
ATXA – X + I < 0
This LMI system is defined by:
setlmis() X = lmivar(1,[2 1]) % full symmetric X lmiterm([1 1 1 X],A',A) % LMI #1: A'*X*A lmiterm([1 1 1 X],-1,1) % LMI #1: -X lmiterm([1 1 1 0],1) % LMI #1: I lmiterm([-2 1 1 X],1,1) % LMI #2: X lmis = getlmis
To compute a solution xfeas, call feasp by
[tmin,xfeas] = feasp(lmis)
The result is
tmin = -4.7117e+00 xfeas' = 1.1029e+02 -1.1519e+01 1.1942e+02
The LMI constraints are therefore feasible since tmin < 0. The solution X corresponding to the feasible decision vector xfeas would be given by X = dec2mat(lmis,xfeas,X).
To check that xfeas is indeed feasible, evaluate all LMI constraints by typing
evals = evallmi(lmis,xfeas)
The left and right sides of the first and second LMIs are then given by
[lhs1,rhs1] = showlmi(evals,1) [lhs2,rhs2] = showlmi(evals,2)
and the test
eig(lhs1-rhs1) ans = -8.2229e+01 -5.8163e+01
confirms that the first LMI constraint is satisfied by xfeas.