pro iterfit,x,y,alow,ahigh,a,rmse=rmse,prec=prec
;
; Fits y = exp(-ax) to some data, by iterative methods
; until a is known to within +-0.5prec
;
if keyword_set(prec) eq 0 then prec=0.000002    ; i.e. 0.2 km if 1/a=300 km
maxits=40                                       ; or 20 km if 1/a=3000 km
;
yest=exp(-alow*x)
rmslow=sqrt(total((y-yest)^2)/float(n_elements(x)))
;
yest=exp(-ahigh*x)
rmshigh=sqrt(total((y-yest)^2)/float(n_elements(x)))
;
i=0
while (ahigh-alow gt prec) and (i lt maxits) do begin
  ;
  i=i+1
  da=(ahigh-alow)/3.
  ;
  a1=alow+da
  yest=exp(-a1*x)
  rms1=sqrt(total((y-yest)^2)/float(n_elements(x)))
  ;
  a2=alow+2.*da
  yest=exp(-a2*x)
  rms2=sqrt(total((y-yest)^2)/float(n_elements(x)))
;print,i
;print,alow,rmslow
;print,a1,rms1
;print,a2,rms2
;print,ahigh,rmshigh
  ;
  if rms1 lt rms2 then begin
    ahigh=a2
    rmshigh=rms2
  endif else begin
    alow=a1
    rmslow=rms1
  endelse
  ;
endwhile
;
print,i,maxits
;print,alow,rmslow
;print,a1,rms1
;print,a2,rms2
;print,ahigh,rmshigh
a=0.5*(a1+a2)
rmse=0.5*(rms1+rms2)
;
end
