findinterval.m (743B)
1 function [alo,ahi]=findinterval(fnname,alo,ahi); 2 3 % function [alo ahi]=findinterval(fnname,alo,ahi); 4 % 5 % Returns an interval (alow,ahi) that contains a zero of the function fnname 6 % Assumes a decreasing function. If not, rewrite fnname to return negative. 7 8 9 % First, a simple grid search 10 stepsize=(ahi-alo)/100; 11 atry=alo:stepsize:ahi; 12 ytry=eval([fnname '(atry)']); 13 indx=find(ytry<0); 14 if isempty(indx) | indx(1)==1; 15 %% disp 'findinterval.m didnt work...Returning NaNs...'; 16 alo=NaN; ahi=NaN; 17 else; 18 alo=atry(indx(1)-1); 19 ahi=atry(indx(1)); 20 ylo=eval([fnname '(alo)']); 21 yhi=eval([fnname '(ahi)']); 22 23 found=(ylo>0 & yhi<0) & isreal(ylo) & isreal(yhi); 24 if ~found; 25 [alo ahi]=findinterval(fnname,alo,ahi); 26 end; 27 end; 28 29 30