a=.01*ones(ns,1); b=(1+r)*s(:,1)+exp(s(:,2))-amin; % can't drive assets below 0 tol=1e-5; fa=euler(a,c,fspace,s,e,w); fb=euler(b,c,fspace,s,e,w); x=zeros(ns,1); %initialize dx = 0.5*(b - a); x = a + dx; % start midpoint sb=sign(fb); dx = sb.*dx; i=0; while any(abs(dx)>tol) i=i+1; % fprintf('%4i %6.2e\n',[i,max(dx)]); dx = 0.5*dx; x = x - sign(euler(x,c,fspace,s,e,w)).*dx; end x(fb>=0)=b(fb>=0);