/* 
 * sdpsol source which finds bound on L2 gain of a given Lur'e system.
 * min gamma_sqr
 * sjt [A^TP+PA+Cz^TCz,       PBp+A^TCq^TLambda+Cq^TTau,      PBw;
 *      Bp^T+LambdaCqA+TauCq, LambdaCqBp+Bp^TCq^TLambda-2Tau, LambdaCqBw;
 *      Bw^TP,                Bw^TCq^TLambda,                 -gamma_sqrI]<0
 *     P > 0
 *     Lambda > 0
 *     Tau > 0
 *     gamma_sqr > 0
 *
 * the bound on L2 gain will be sqrt(gamma_sqr), if it exists.
 *
 * See: S. Boyd, "Control System Analysis and Design via Linear Matrix 
 *      Inequalities -- Tutorial Workshop Notes", 2nd MOVIC, Yokohama 1994
 */

include("systemdata.mat");   /* load A,Bw,Cz,Bp,Cq */
n = rows(A);                 /* number of states */
np = rows(Cq);               /* number of nonlinearities */

variable P(n,n) symmetric;
variable Lambda(np,np), Tau(np,np) diagonal;
variable gamma_sqr;

constraint LYAP1 P > 0;
constraint LYAP2 Lambda > 0;
constraint Sproc Tau > 0;
constraint POPOV [P*A+.5*Cz'*Cz, P*Bp+(Lambda*Cq*A)'+Cq'*Tau, P*Bw;
                  zeros(np,n),   Lambda*Cq*Bp-Tau,    Lambda*Cq*Bw;
                  zeros(1,n),    zeros(1,np),        -.5*gamma_sqr] < 0;

minimize gain_bnd_sqr = gamma_sqr;
