[Ifeffit] Purple & Red E Derivatives

Matt Newville newville at cars.uchicago.edu
Fri Feb 25 11:55:12 CST 2011


Hi Matthew,

On Tue, Feb 22, 2011 at 9:42 PM, Matthew Marcus <mamarcus at lbl.gov> wrote:
> Should the line
>       out[i] = (x[i+1] - x[i])/2.0
> be
>       out[i] = (x[i+1] - x[i-1])/2.0  ?
>
> That would account for the 2.0.  That is, in fact, exactly what I proposed
> was meant by 'numerical differential'.

Yes, sorry for the typo, it should b

def deriv(x):
   npts = len(x)
   out  = array(npts)
   out[0] = x[1] - x[0]
   out[npts-1] = x[npts-1] - x[npts-2]
   for i in range(1, npts-2):  # (1, 2, 3, ... npts-2)
       out[i] = (x[i+1] - x[i-1])/2.0
   return out

> I don't actually resample.  I do a cubic spline interpolation onto the given
> grid and pull the derivatives out that way.  Of course, you have to test for
> grids that aren't strictly monotonic.  The smooth() function as given would
> definitely cause problems with non-uniform tabulation unless resampled.
> My program (2-column Editor on the ALS Beamline 10.3.2 website) offers
> resampling and tensioned spline fitting but does not smooth the derivative
> before or after - the user has to take control of that using the tensioned
> spline fit. I thought about smoothing but never got around to figuring out
> what makes
> a decent smooth algorithm for general data.  A possibility would be a slow
> version of Savitzky-Golay in which you do the polynomial fits explicitly
> instead of
> being able to use pre-computed coefficients as in the actual S-G method.
> Similarly, a VSFT (Very Slow Fourier Transform) in which you fit the data
> to
> a sum of sines and cosines (linear fit - the frequencies are fixed), filter
> using your favorite low-pass filter, then inverse-transform, might be good.
> Or, there's
> always reading the literature to see what actual numerical mathematicians
> have done :-)

Smooth() is definitely over-simplistic and will work poorly for
non-uniform grids.  Using a Savitzky-Golay smoothing function is
probably a good idea.  Having the abilty to use more sophisticated
numerical algorithms on demand would be very nice....

--Matt




More information about the Ifeffit mailing list