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

67 lines
1.7 KiB
Matlab
Executable File

%%*****************************************************************
%% Doptdesign: D-optimal experiment design.
%%
%% max log(det(sum_{i=1}^p lambda_i v_i v_i^T)) + const
%%
%% s.t. lambda_i >= 0, sum_{i=1}^p lambda_i = 1.
%%
%% Note: const = n.
%% V: nxp matrix with n <= p.
%% lambda: lambda_i is the fraction of the experiments
%% allocated to test vector v_i.
%% S: = V*diag(lambda)*V'.
%%*****************************************************************
%% 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,OPTIONS,lambda,bblk,AAt] = Doptdesign(V,solve);
if (nargin == 1); solve = 0; end
[n,p] = size(V);
if (n > p);
error(' size(V,1) > size(V,2)');
end
%%
%% form blk, At, C, b
%%
b = zeros(p,1);
blk{1,1} = 's'; blk{1,2} = n;
F = cell(1,p);
for k = 1:p
F{1,k} = -V(:,k)*V(:,k)';
end
At(1) = svec(blk(1,:),F,1);
C{1,1} = sparse(n,n);
blk{2,1} = 'l'; blk{2,2} = p;
At{2,1} = -speye(p,p);
C{2,1} = zeros(p,1);
blk{3,1} = 'u'; blk{3,2} = 1;
At{3,1} = ones(1,p);
C{3,1} = 1;
OPTIONS.parbarrier{1,1} = 1;
OPTIONS.parbarrier{2,1} = 0;
OPTIONS.parbarrier{3,1} = 0;
%%
%% form bblk, AAt to take into account of
%% low-rank constraint matrices of the form: -vk*vk'.
%%
bblk = blk; AAt = At;
bblk{1,1} = 's'; bblk{1,2} = n; bblk{1,3} = ones(1,p);
AAt{1,1} = []; AAt{1,2} = V; AAt{1,3} = -ones(p,1);
%%
if (solve)
[obj,X,y,Z] = sqlp(blk,At,C,b,OPTIONS);
lambda = -y;
else
lambda = [];
end
%%*******************************************************