function phi = extremizfr(phi,m,n) global nstate nstate = m; y = zeros(1,n); dims = repmat([m],[1 n]); xx = list_all_ind(repmat([m],[1 n-1])); global FN FN{n} = phi; ambinds = []; ambvals = []; tol = 1e-3; %tolerance for i=1:n for xind = 1:size(xx,1) xl = xx(xind,1:i-1); xr = xx(xind,i:n-1); fv = []; for xj = 1:m x = [xl xj xr]; fv(end+1) = F(x); end [a,mind] = min(fv); [A,Mind] = max(fv); if A-a > tol for xj = 1:m x = [xl xj xr]; fv = F(x); if (fv - a > tol) & (A - fv > tol) xind = coord2ind(x,dims); ambinds = [ambinds; [xind i]]; ambvals = [ambvals; [a A]]; end end end end end global Ainf phi0 = phi; del = 1e-2; %tol = 1e-12; tol = 1e-10; d0 = abs(max(abs(Ainf*phi0'))-1)+realmin; while 1 gg = []; phir = round(phi0); ii=find(abs(phi-phir)>tol); phih = phi0; phih(ii) = phih(ii) + del; gg(end+1) = max(abs(Ainf*phih')); phil = phi0; phil(ii) = phil(ii) - del; gg(end+1) = max(abs(Ainf*phih')); if 0 for i=1:size(ambinds,1) xind = ambinds(i,1); phi = phi0; fv = phi(xind); phi(xind) = fv - del; gg(end+1,1) = max(abs(Ainf*phi')); phi(xind) = fv + del; gg(end,2) = max(abs(Ainf*phi')); %phi(xind) = ambvals(i,1); %gg(end+1) = max(Ainf*phi'); %phi = phi0; %phi(xind) = ambvals(i,2); %gg(end+1) = max(Ainf*phi'); end end mg = max(max(gg)); d1 = abs(mg-1)+realmin;; %if mg < 1+1e-12 if (d1/d0) < 200 'good' break else del = del/2; if del < tol/10 %'bad' phi0 = phi; keyboard %save BADDAT phi end end end return function r = F(x) global nstate lenseq = length(x); global FN FF = FN{lenseq}; ind = coord2ind(x,(repmat(nstate,1,lenseq))); r = FF(ind); return