44 lines
1.4 KiB
Mathematica
44 lines
1.4 KiB
Mathematica
|
|
%%******************************************************************
|
||
|
|
%% geometric_mean: an example with rotated cone variables
|
||
|
|
%%
|
||
|
|
%% max {prod(d+B*x) : d+B*x > 0, x <= 10}
|
||
|
|
%%
|
||
|
|
%% where B = 4xn matrix,
|
||
|
|
%% d = 4x1 vector
|
||
|
|
%%
|
||
|
|
%% [blk,At,C,b,xx] = geometric_mean(B,d,solve);
|
||
|
|
%%
|
||
|
|
%% E.g. p = 6; m = 4; B = [rand(2,p); -rand(2,p)]; d = rand(m,1);
|
||
|
|
%%
|
||
|
|
%%*****************************************************************
|
||
|
|
%% 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,xx] = geometric_mean(B,d,solve);
|
||
|
|
|
||
|
|
if (nargin == 2); solve = 0; end
|
||
|
|
|
||
|
|
n = size(B,2);
|
||
|
|
zz = zeros(1,n);
|
||
|
|
r2 = sqrt(2);
|
||
|
|
blk{1,1} = 'r'; blk{1,2} = [3,3,3];
|
||
|
|
blk{2,1} = 'l'; blk{2,2} = [2];
|
||
|
|
At{1,1} = -[B(1,:),0,0,0; B(2,:),0,0,0; zz,r2,0,0; ...
|
||
|
|
B(3,:),0,0,0; B(4,:),0,0,0; zz,0,r2,0; ...
|
||
|
|
zz, 1,0,0; zz, 0,1,0; zz, 0,0,r2];
|
||
|
|
At{2,1} = -[B(1,:),0,0,0; B(3,:),0,0,0];
|
||
|
|
C{1,1} = [d(1:2); 0; d(3:4); 0; 0;0;0];
|
||
|
|
C{2,1} = [d(1); d(3)];
|
||
|
|
b = [zeros(n,1); 0;0;1];
|
||
|
|
blk{3,1} = 'l'; blk{3,2} = n;
|
||
|
|
At{3,1} = [eye(n), zeros(n,3)]; C{3,1} = 10*ones(n,1);
|
||
|
|
if (solve)
|
||
|
|
[bblk,AAt,CC,bb,T] = convertRcone(blk,At,C,b);
|
||
|
|
[obj,X,y,Z] = sqlp(bblk,AAt,CC,bb);
|
||
|
|
xx = y(1:n);
|
||
|
|
end
|
||
|
|
%%******************************************************************
|