⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 randdinf.m

📁 半定规划
💻 M
字号:
%%*******************************************************************%% randdinfsdp.m : creates random dual infeasible SDP problems with %%                 various block diagonal structures. %%%% [X,y] = randdinfsdp(blocksize,m);%%%% E.g.%%      randdinfsdp([[10 5],10);%%%%  blocksize : for generating dense blocks, where%%              blocksize(i) is the dimension of the ith block%%%% DSDP Version 5.6 %% Copyright (c) 2005 by%% S.J. Benson and Y. Ye%% Last modified: 4 Feb 05%%******************************************************************   function  [X,y] = randinf(blocksize,m);   if nargin < 2; error(' insufficient number of inputs '); end;      P=length(blocksize);   AC=cell(P,3);   for k = 1:P       n=blocksize(k);       AC{k,1}='SDP';       AC{k,2}=n;       AC{k,3}=sparse(n*(n+1)/2,m+1);   end;%% dual infeasible%%%% generate infeasibility certificate Xi, positive definite X0, and C%%   Xi = [];   X0 = [];   trXX=0;   for k = 1:P;              n = blocksize(k);              tmp = randn(n);               tmp = tmp*tmp';               tmp = 0.5*(tmp + tmp');              %mineig = min(real(eig(tmp)));              %if (mineig < 0); tmp = tmp - 1.1*mineig*eye(n); end;              Xi{k} = tmp;              trXX=trXX+sum(sum(tmp.*tmp));              tmp = randn(n);               tmp = tmp*tmp';               tmp = 0.5*(tmp + tmp');              %mineig = min(real(eig(tmp)));              %if (mineig < 0); tmp = tmp - 1.1*mineig*eye(n); end;              X0{k} = tmp;              tmp = randn(n); tmp = 0.5*(tmp + tmp');              AC{k,3}(:,m+1)=dvec(tmp);   end;%%%% set up the matrices A and b%%   A  = cell(1,m);   b = ones(m,1);   for k = 1:m;       trAx=0;bb=0;       for j = 1:P;              n = blocksize(j);              Aj  = randn(n);              Ak = (Aj + Aj')/2;              trAx = trAx + sum(sum(Ak .* Xi{j}));               Ak=Ak - trAx/trXX*Xi{j};              Ak=(Ak+Ak')/2;              AC{j,3}(:,k)=dvec(Ak);              bb=bb+ sum(sum(Ak .* X0{j}));        end;       b(k) = bb;   end;%   if (trCX>0) for j=1,P, A{j,3}(:,m+1)=-A{j,3}(:,m+1);  end;%%%% Xi is a dual infeasibility certificate%%%%  OPTIONS=doptions;  OPTIONS.print=1;  [STAT,y,Xv] = dsdp(b,AC,OPTIONS);  [pobj,dobj,err] = derror(STAT,y,Xv,b,AC);%%=================================================

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -