Home > solver > DSA_BD_AXfun_aux.m

DSA_BD_AXfun_aux

PURPOSE ^

AXfun: compute AX(k) = <Ak,X>, k = 1:m

SYNOPSIS ^

function [AX,AX_ORIG] = DSA_BD_AXfun_aux(blk,At,X,AL)

DESCRIPTION ^

 AXfun: compute AX(k) = <Ak,X>, k = 1:m
%
% AX = AXfun(blk,At,X,AL);
%
% SDPNAL:
% Copyright (c) 2008 by
% Xinyuan Zhao, Defeng Sun, and Kim-Chuan Toh
%**********************************************************
% DSA_BD:
% Modified by C.Ortiz
% Last Modified: 3/31/2011

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SOURCE CODE ^

0001 % AXfun: compute AX(k) = <Ak,X>, k = 1:m
0002 %%
0003 %% AX = AXfun(blk,At,X,AL);
0004 %%
0005 %% SDPNAL:
0006 %% Copyright (c) 2008 by
0007 %% Xinyuan Zhao, Defeng Sun, and Kim-Chuan Toh
0008 %%**********************************************************
0009 %% DSA_BD:
0010 %% Modified by C.Ortiz
0011 %% Last Modified: 3/31/2011
0012 
0013 function [AX,AX_ORIG] = DSA_BD_AXfun_aux(blk,At,X,AL)
0014 
0015 
0016 if (nargin < 4); AL = []; end
0017 if isempty(AL); existAL = 0; else existAL = 1; end
0018 %%
0019 if iscell(At)
0020     m = size(At{1},2);
0021     AX = zeros(m,1);
0022     for p = 1:size(blk,1);
0023         pblk = blk(p,:);
0024         if strcmp(pblk{1},'s')
0025             if (length(pblk{2}) == 1)
0026                 AXtmp = (mexsvec(pblk,X{p})'*At{p,1})';
0027             else
0028                 AXtmp = (mexsvec(pblk,sparse(X{p}))'*At{p,1})';
0029             end
0030         elseif strcmp(pblk{1},'l') || strcmp(pblk{1},'u')
0031             AXtmp = (X{p}'*At{p,1})';
0032         end
0033         AX = AX + AXtmp;
0034     end
0035 else
0036     if strcmp(blk{1,1},'s')
0037         if (length(blk{1,2})==1)
0038             AX = (mexsvec(blk,X)'*At)';
0039         else
0040             AX = (mexsvec(blk,sparse(X))'*At)';
0041         end
0042     elseif strcmp(blk{1,1},'l') || strcmp(blk{1,1},'u')
0043         AX = (X'*At)';
0044     end
0045 end
0046 AX_ORIG = [];
0047 if (existAL)
0048     AX_ORIG = AX;
0049     if strcmp(AL.matfct_options,'chol')
0050         AX = AL.Rt \ AX;
0051     elseif strcmp(AL.matfct_options,'spcholmatlab')
0052         AX = AL.Rt\(AL.St*AX);%mexfwsolve(AL.R,AL.St*AX);
0053     end
0054 end
0055 %%*********************************************************

Generated on Mon 19-Sep-2011 21:41:33 by m2html © 2005