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

44 lines
1.4 KiB
Mathematica
Raw Normal View History

2019-12-18 11:25:45 +00:00
%%******************************************************************
%% 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
%%******************************************************************