%%***********************************************************
%% lmiexamp2: generate SDP data for the following LMI problem
%%
%%  max  -Tr(P)
%%  s.t. A1*P + P*A1' + B*diag(d)*B' <= 0
%%       A2*P + P*A2' + B*diag(d)*B' <= 0
%%                                -d <= 0 
%%                            sum(d)  = 1
%%***********************************************************
%% Here is an example on how to use this function to 
%% find an optimal P. 
%%
%% A1 = [-1  0  0; 0 -2  0; 1  1 -1];
%% A2 = A1 + 0.1*A1'; 
%% B  = [1 2; 3 4; 5 6]; 
%%
%% [blk,Avec,C,b] = lmiexamp2(A1,A2,B);
%% [obj,X,y,Z] = sqlp(blk,Avec,C,b);
%% n = size(A1,2); N = n*(n+1)/2; dlen = size(B,2); 
%% P = smat(blk(1,:),y(1:N)); 
%% d = y(N+[1:dlen]); 
%%*****************************************************************
%% SDPT3: version 4.0
%% Copyright (c) 1997 by
%% Kim-Chuan Toh, Michael J. Todd, Reha H. Tutuncu
%% Last Modified: 16 Sep 2004
%%*****************************************************************

   function [blk,Avec,C,b] = lmiexamp2(A1,A2,B); 

%%
   n1 = size(A1,2);  n2 = size(A2,2);  
   if (n1 ~= n2); error('lmiexamp2: A1, A2 not compatible'); end; 
%%   
   n = n1; 
   I = speye(n); 
   blk{1,1}  = 's'; blk{1,2} = n;
   Avec{1,1} = lmifun(A1,I,B);
   C{1,1} = sparse(n,n); 
%%
   blk{2,1}  = 's'; blk{2,2} = n;
   Avec{2,1} = lmifun(A2,I,B);
   C{2,1} = sparse(n,n); 
%%
%% and constraints:  -d <= 0
%%
   N = n*(n+1)/2; dlen = size(B,2); 
   blk{3,1}  = 'l'; blk{3,2} = dlen;
   Avec{3,1} = [sparse(dlen,N)    -speye(dlen,dlen)]; 
   C{3,1} = zeros(dlen,1);  
%%
%% add in the constraint:  sum(d) = 1
%%
   blk{4,1}  = 'u'; blk{4,2} = 1;
   Avec{4,1} = sparse([zeros(1,N) ones(1,dlen)]); 
   C{4,1} = 1; 
%%
   blktmp{1,1} = 's'; blktmp{1,2} = n;   
   b = [-svec(blktmp,I); zeros(dlen,1)]; 
%%**********************************************************

