[SciPy-user] Second order differencing, periodic functions

Pearu Peterson pearu at scipy.org
Tue Mar 21 06:15:12 CST 2006



On Tue, 21 Mar 2006, "Johannes Löhnert" wrote:

> Hi,
>
> I want to calculate the 2nd derivative of a periodic function. If I have the
>
> values given as array f_arr, I would like to do this with 2nd order
> differencing. For a non-periodic function I could use
>
> d2f = convolve(f_arr, array([-.25, .5, -.25]), mode=2),
>
> but with this approach f_arr is zero-padded. Is there a similar function for
>
> periodic boundary conditions for f_arr? I know about fftpack.diff, but I
> would rather use SOD, since diff yields "strange" results for non-contiguous
> functions.

scipy.sandbox.fdfpack[*] contains a function

   periodic_finite_difference(x, h=2*pi/len(x), k=1, m=1)

that returns k-th derivative of len(x)*h periodic sequence x using
m-th order finite difference formulae [**]. The error of derivative is
O(h^(2*(m-1))) within numerical accuracy. This function is faster than 
fftpack.diff, returns less numerical noise for very long periodic 
sequences (ffpack.diff is almost unusable for calculating higher order 
of derivatives of long periodic sequences).

[*] To build fdfpack, you must add the following line

       config.add_subpackage('fdfpack')

     to scipy/Lib/sandbox/setup.py file.

[**] http://epubs.siam.org/sam-bin/dbq/article/32250

HTH,
Pearu


More information about the SciPy-user mailing list