Dynamic-Calibration/utils/SDPT3-4.0/Examples/sdphankel.m

42 lines
1.1 KiB
Mathematica
Raw Normal View History

2019-12-18 11:25:45 +00:00
%%*****************************************************************
%% min sum_k bk*yk
%% s.t. sum yk*Hk <= 0
%% y1 = 1
%% Hk = -hankel(ek) if 1 <= k <= n
%% = -hankel(0,e(k-n+1)) if n+1 <= k <=2*n-1
%%
%% [blk,At,C,b] = sdphankel(n);
%%*****************************************************************
%% SDPT3: version 4.0
%% Copyright (c) 1997 by
%% Kim-Chuan Toh, Michael J. Todd, Reha H. Tutuncu
%% Last Modified: 16 Sep 2004
%%*****************************************************************
function [blk,At,C,b] = sdphankel(n);
randn('seed',0);
tmp = randn(n,n);
tmp = tmp+tmp';
X{1} = tmp + norm(tmp,'fro')*speye(n,n);
%%
for k = 1:n
ek = zeros(n,1); ek(k) = -1;
AA{k} = sparse(hankel(ek));
end
zz = zeros(n,1);
for k = n+1:2*n-1
ek = zeros(n,1); ek(k-n+1) = -1;
AA{k} = sparse(hankel(zz,ek));
end
blk{1,1} = 's'; blk{1,2} = n;
At = svec(blk,AA,1);
C{1} = spconvert([n n 0]);
b = AXfun(blk,At,[],X);
%%
blk{2,1} = 'u'; blk{2,2} = 1;
ee = zeros(1,2*n-1); ee(1) = 1;
At{2,1} = ee;
C{2,1} = 1;
%%***************************************************