Dynamic-Calibration/utils/SDPT3-4.0/Solver/linsysolvefun_old.m

42 lines
1.5 KiB
Matlab
Executable File

%%*************************************************************************
%% linsysolvefun: Solve H*x = b
%%
%% x = linsysolvefun(L,b)
%% where L contains the triangular factors of H.
%%
%% SDPT3: version 3.1
%% Copyright (c) 1997 by
%% K.C. Toh, M.J. Todd, R.H. Tutuncu
%% Last Modified: 16 Sep 2004
%%*************************************************************************
function x = linsysolvefun(L,b)
x = zeros(size(b));
for k=1:size(b,2)
if strcmp(L.matfct_options,'chol')
x(L.perm,k) = mextriang(L.R, mextriang(L.R,b(L.perm,k),2) ,1);
%% x(L.perm,k) = L.R \ (b(L.perm,k)' / L.R)';
elseif strcmp(L.matfct_options,'spchol')
x(L.perm,k) = mextriangsp(L.Rt,mextriangsp(L.R,b(L.perm,k),2),1);
elseif strcmp(L.matfct_options,'ldl')
x(L.perm,k) = ((L.D\ (L.L \ b(L.perm,k)))' / L.L)';
elseif strcmp(L.matfct_options,'spldl')
x(L.perm,k) = L.Lt\ (L.D\ (L.L \ b(L.perm,k)));
elseif strcmp(L.matfct_options,'lu')
x(:,k) = L.u \ (L.l \ b(L.perm,k));
elseif strcmp(L.matfct_options,'splu')
if (L.symmatrix)
%% coefficient matrix is symmetric
%% A = P'*L*U*Q' --> A = Q*U'*L'*P
btmp = b(L.perm,k);
xtmp = mextriangsp(L.l,mextriangsp(L.u,btmp(L.q),2),1);
x(L.perm,k) = xtmp(L.p);
else
btmp = b(L.perm,k);
x(L.perm,k) = L.q*( L.u \ (L.l \ (L.p*btmp)));
end
end
end
%%*************************************************************************