46 lines
1.5 KiB
Matlab
Executable File
46 lines
1.5 KiB
Matlab
Executable File
%%********************************************************
|
|
%% qops: Fu = qops(pblk,w,f,options,u);
|
|
%%
|
|
%% options = 1, Fu(i) = <wi,fi>
|
|
%% = 2, Fu(i) = 2*wi(1)*fi(1)-<wi,fi>
|
|
%% = 3, Fui = w(i)*fi
|
|
%% = 4, Fui = w(i)*fi, Fui(1) = -Fui(1).
|
|
%% options = 5, Fu = w [ f'*u ; ub + fb*alp ], where
|
|
%% alp = (f'*u + u0)/(1+f0);
|
|
%% options = 6, compute Finv*u.
|
|
%%
|
|
%% Note F = w [f0 fb'; fb I+ fb*fb'/(1+f0) ], where
|
|
%% f0*f0 - fb*fb' = 1.
|
|
%% Finv = (1/w) [f0 -fb'; -fb I+ fb*fb'/(1+f0) ].
|
|
%%*****************************************************************
|
|
%% SDPT3: version 4.0
|
|
%% Copyright (c) 1997 by
|
|
%% Kim-Chuan Toh, Michael J. Todd, Reha H. Tutuncu
|
|
%% Last Modified: 16 Sep 2004
|
|
%%*****************************************************************
|
|
|
|
function Fu = qops(pblk,w,f,options,u);
|
|
|
|
if (options >= 1 & options <= 4)
|
|
Fu = mexqops(pblk{2},w,f,options);
|
|
elseif (options == 5)
|
|
s = 1 + [0 cumsum(pblk{2})];
|
|
idx1 = s(1:length(pblk{2}));
|
|
inprod = mexqops(pblk{2},f,u,1);
|
|
tmp = (u(idx1)+inprod)./(1+f(idx1));
|
|
Fu = u + mexqops(pblk{2},tmp,f,3);
|
|
Fu(idx1) = inprod;
|
|
Fu = mexqops(pblk{2},w,Fu,3);
|
|
elseif (options == 6)
|
|
s = 1 + [0 cumsum(pblk{2})];
|
|
idx1 = s(1:length(pblk{2}));
|
|
gamprod = mexqops(pblk{2},f,u,2);
|
|
tmp = (u(idx1)+gamprod)./(1+f(idx1));
|
|
Fu = u - mexqops(pblk{2},tmp,f,3);
|
|
Fu(idx1) = gamprod;
|
|
Fu = mexqops(pblk{2},1./w,Fu,3);
|
|
end
|
|
%%********************************************************
|
|
|
|
|