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'.
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 :-)
There are two obvious ways to get non-uniform tabulation in XAS data. One is that it's taken on a varying grid, either
constant-k-step or varying E step. The
other is that pieces have been chopped out due to glitches, Bragg peaks or some other problem. Also, the 2-column Editor program
was designed to be general,
not restricted to XAS-like data.
mam
----- Original Message -----
From: "Matt Newville"
On Tuesday, February 22, 2011 06:19:16 pm Matthew Marcus wrote:
The numerical derivative is computed as the numerical differential of the mu(E) spectrum divided by the numerical differential of the energy array. Ã, Smoothing happens as explained above. Ã, Justw atch the lines that get printed to the buffer when you click the plot buttons. - B. Ravel
I wonder if that's the right way to go for data that, for instance, might have gaps or changes in step size. Ã, What I do in my code is run a cubic spline through the data, with the abscissa as is, then take the derivative of that spline. Ã, Thus, if the data is smooth enough to be locally approximated by a cubic, the derivative will come out smooth regardless of how it's tabulated. Ã, I'm not sure that's the case with Bruce's algorithm. Ã, Is the 'numerical differential' the difference E(i+1)-E(i) or (1/2)*(E(i+1)-E(i-1)) or some form that's intended to approximate dE(i)/di (i= point index)?
It's not clear to me whether it's any more correct to do smoothing before or after differentiating. Ã, You can take the red pill or the blue pill :-) Ã, Ã, mam
Well ... red pill or purple pill. Ã, They both have side effects that 4 out of 5 doctors advise against :)
So, I do what's easy using Ifeffit as Ifeffit is implemented. Ã, I would have to code dive (or ask Matt) what the deriv() function actually does.
A big gap in the data might result in a weird derivative spectrum, but changes in step size isn't so much of a problem because I ask Ifeffit to compute d(mu)/d(E).
I agree that "smooth then differentiate" is not obviously better than "differentiate then smooth". Ã, What is certainly wrong is to do this inconsistently.
B
--
Ã, Bruce Ravel Ã, ------------------------------------ bravel@bnl.gov
Ã, National Institute of Standards and Technology Ã, Synchrotron Methods Group at NSLS --- Beamlines U7A, X24A, X23A2 Ã, Building 535A Ã, Upton NY, 11973
Ã, My homepage: Ã, Ã, http://xafs.org/BruceRavel Ã, EXAFS software: http://cars9.uchicago.edu/~ravel/software/exafs/ _______________________________________________ Ifeffit mailing list Ifeffit@millenia.cars.aps.anl.gov http://millenia.cars.aps.anl.gov/mailman/listinfo/ifeffit
_______________________________________________ Ifeffit mailing list Ifeffit@millenia.cars.aps.anl.gov http://millenia.cars.aps.anl.gov/mailman/listinfo/ifeffit