?? posttransfo.asv
字號:
function [xp,yp,K] = posttransfo(x,y,prep,K,pars)
% [xp,yp] = posttransfo(x,y,prep,K)
% POSTTRANSFO Transforms (x,y) from internal SeDuMi format into original
% user format.
%
% ********** INTERNAL FUNCTION OF SEDUMI **********
%
% See also sedumi
%
% This file is part of SeDuMi 1.1 by Imre Polik and Oleksandr Romanko
% Copyright (C) 2005 McMaster University, Hamilton, CANADA (since 1.1)
%
% Copyright (C) 2001 Jos F. Sturm (up to 1.05R5)
% Dept. Econometrics & O.R., Tilburg University, the Netherlands.
% Supported by the Netherlands Organization for Scientific Research (NWO).
%
% Affiliation SeDuMi 1.03 and 1.04Beta (2000):
% Dept. Quantitative Economics, Maastricht University, the Netherlands.
%
% Affiliations up to SeDuMi 1.02 (AUG1998):
% CRL, McMaster University, Canada.
% Supported by the Netherlands Organization for Scientific Research (NWO).
%
% This program is free software; you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation; either version 2 of the License, or
% (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this program; if not, write to the Free Software
% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
% 02110-1301, USA
%
K.l = K.l - 1; % remove artificial var of self-dual embedding
xp=x(2:end);
% ------------------------------------------------------------
% If there are Lorentz cones then reorder the variables
% ------------------------------------------------------------
if ~isempty(K.q)
xp = qreshape(xp,1,K);
end
% ------------------------------------------------------------
% Transform LQ-vars into F-vars (free)
% ------------------------------------------------------------
K.f = prep.Kf;
if K.f>0
switch pars.free
case 0
K.l = K.l - 2 * K.f;
xp = [xp(K.f+1 : 2*K.f) - xp(1:K.f); xp(2*K.f+1:end)];
otherwise
K.q=K.q(2:end);
xp=[xp(K.l+2:K.l+K.f+1);xp(1:K.l);xp(K.l+K.f+2:end)];
end
end
% -----------------------------------------------------
% Reenter the split free variables (if any)
% -----------------------------------------------------
if isfield(prep,'freeblock1')
numvars=length(prep.freeblock1);
block1=false(1,K.l+2*numvars);
block2=block1;
block1(prep.freeblock1)=true;
block2(prep.freeblock2)=true;
xkl=zeros(K.l+2*numvars,1);
xkl(~(block1+block2))=xp(K.f+1:K.f+K.l);
xkl(prep.freeblock1)=max(xp(1:numvars),0);
xkl(prep.freeblock2)=-min(xp(1:numvars),0);
xp=[xp(numvars+1:K.f);xkl;xp(K.f+K.l+1:end)];
K.f=K.f-numvars;
K.l=K.l+2*numvars;
end
% ----------------------------------------
% Postprocess the SDP part
% ----------------------------------------
if pars.sdp==1 & isfield(prep,'sdp')
xpf(1:K.f)=xp(1:K.f);
xp=xp(K.f+1:end);
Kf=K.f;
K.f=0;
[xp,yp,K]=postprocessSDP(xp,y,prep.sdp,K);
xp=[xpf;
end
% ----------------------------------------
% transform q-variables into r-variables (Lorentz) (if any)
% ----------------------------------------
if prep.rq==1
K.r = K.q(prep.lenKq + 1 : end);
K.q = K.q(1:prep.lenKq);
xp(K.f+1:end) = rotlorentz(xp(K.f+1:end),K);
else
K.r=[];
end
% ----------------------------------------
% Bring x into the complex format of original (At,c),
% ----------------------------------------
xp = veccomplex(xp,prep.cpx,K);
% ----------------------------------------
% bring y into complex format, indicated by K.ycomplex.
% ----------------------------------------
ylen = length(y) - length(K.ycomplex);
yp = y(1:ylen) ...
+ sqrt(-1) * sparse(K.ycomplex,1,y(ylen+1:length(y)),ylen,1);
% ---------------------------
% Make x sparse if necessary
% ---------------------------
if nnz(xp)/length(xp)<2/3
xp=sparse(xp);
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -