function output = callnage04naf(varargin) % Author Johan Löfberg % $Id: callnage04naf.m,v 1.12 2006/04/10 09:34:47 joloef Exp $ % Hack for NAG persistent Q if nargin>1 output = Q*varargin{6}; return end % Retrieve needed data interfacedata = varargin{1}; options = interfacedata.options; F_struc = interfacedata.F_struc; c = interfacedata.c; K = interfacedata.K; x0 = interfacedata.x0; Q = 2*interfacedata.Q; ub = interfacedata.ub; lb = interfacedata.lb; bigbnd = options.nag.bigbnd; if isempty(ub) ub = bigbnd*ones(length(c),1); lb = -bigbnd*ones(length(c),1); end % NAG fails on semidefinite if nnz(Q)>0 ii = find(diag(Q)==0); if ~isempty(ii) d = zeros(length(Q),1); d(ii) = sqrt(eps); Q = Q + diag(d); end end showprogress('Calling NAG',options.showprogress); if ~isempty(F_struc) A =-F_struc(1:end,2:end); beq = F_struc(1:1:K.f,1); b = F_struc(K.f+1:end,1); ub = full([ub;beq;b]); lb = full([lb;beq;-bigbnd*ones(length(b),1)]); elseif ~isempty(lb)% NAG stinks on problems with no A