function pcut = addEvalVariableCuts(p) pcut = p; if ~isempty(p.evalMap) pcut = emptyNumericalModel; for i = 1:length(p.evalMap) y = p.evalVariables(i); x = p.evalMap{i}.variableIndex; xL = p.lb(x); xU = p.ub(x); % Generate a convex hull polytope if xL1 Ax = []; Ay = []; b = []; K = []; return end % sample function z = linspace(xL,xU,100); if isequal(p.evalMap{i}.fcn,'power_internal2') % Special code for automatically converting sigmonial % terms to be solvable with bmibnb fz = feval(p.evalMap{i}.fcn,z,p.evalMap{i}.arg{2}); else arg = p.evalMap{i}.arg; arg{1} = z; fz = real(feval(p.evalMap{i}.fcn,arg{1:end-1})); % end [minval,minpos] = min(fz); [maxval,maxpos] = max(fz); xtestmin = linspace(z(max([1 minpos-5])),z(min([100 minpos+5])),100); xtestmax = linspace(z(max([1 maxpos-5])),z(min([100 maxpos+5])),100); arg{1} = xtestmin; fz1 = real(feval(p.evalMap{i}.fcn,arg{1:end-1})); arg{1} = xtestmax; fz2 = real(feval(p.evalMap{i}.fcn,arg{1:end-1})); z = [z(:);xtestmin(:);xtestmax(:)]; fz = [fz(:);fz1(:);fz2(:)]; [z,sorter] = sort(z); fz = fz(sorter); [z,ii,jj]=unique(z); fz = fz(ii); end [Ax,Ay,b] = convexhullFromSampled(z,fz,xL,xU); K = []; p = saveOldHull(xL,xU,Ax,Ay,b,K,p,i);