62 lines
1.8 KiB
Matlab
Executable File
62 lines
1.8 KiB
Matlab
Executable File
%%***********************************************************
|
|
%% 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)];
|
|
%%**********************************************************
|
|
|