function [f,err] = fmincon_funn(cbData,nRow,x,njdiff,dXjbase,reserved,inParam) persistent prob Af A bf b if nargin == 7 prob = inParam; ind = find(prob.map==0); Af = prob.A(ind,:); bf = prob.b(ind); A = spalloc(max(prob.map),size(prob.A,1),0); for i = 1:max(prob.map) ind = find(prob.map==i); A(i,ind) = prob.b(ind)'; end return end x = x(1:size(prob.A,2)); if nRow == -1 z = Af*x; f = full(log(bf'*exp(z))); else g = A*exp(prob.A*x); ind = find(g<1e-2); if ~isempty(ind) g(ind) = exp(log(1e-2)+(g(ind)-1e-2)/1e-2); end g = log(g); if length(prob.h) > 0 g = [log(prob.h) + prob.G*x;g]; end f = g(nRow+1); end err = 0;