Mathematics Stack Exchange is a question and answer site for people studying math at any level and professionals in related fields. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have an integral which I need to calculate numerically along the lines of

$$ I(k)=\int_0^{L} \exp(i k x)f(x) dx $$

where $x$ and $L$ are real. $f(x)$ is not necessarily periodic and differentiable but not easy to differentiate.

It looks remarkably like the Fourier transform of $f(x)$, but with finite bounds, so I'd like to be able to calculate this using a Fast Fourier Transform (FFT), though I suspect that FFT [$f(x)$] will give me $\int^{\infty}_{-\infty} \neq \int^L_0$ . Is there a way around this?

I'd also like to be able to calculate $dI/dk$. $f(x)$ is not easy to differentiate. Were $I(k)$ a simple FT, I would say that $dI/dk =$ FT[$i x f(x)$]. Is this still valid?

share|cite|improve this question
The FFT works on a finite array of equally spaced samples, so it cannot possibly give you $\int_{-\infty}^\infty$. – Rahul Jan 27 '13 at 16:07

Let $\chi_L(x)$ be the characteristic function of the interval $[0,L]$. Then $I(k)$ is the Fourier transform of $\chi_L\,f$.

share|cite|improve this answer

In principle, you can certainly use the FFT to compute your integral. We may replace $f(x)$ with $\chi_L(x)f(x)$ over any interval $[0,\hat L]$ with $\hat L\ge L$, as in @Julián's answer, and then approximate the integral as $$\int_0^{\hat L}\exp(ikx)\chi_L(x)f(x)\,\mathrm dx\approx\sum_{n=0}^{N-1}\exp(ikx_n)\chi_L(x_n)f(x_n)\frac{\hat L}N$$ where $N$ is sufficiently large and $x_n=\hat Ln/N$. Let's choose $\hat L=2\pi m/k$ as the smallest multiple of $2\pi/k$ greater than $L$. Then the sum becomes $$\sum_{n=0}^N\exp(i2\pi m\cdot n/N)\chi_L(x_n)f(x_n)\frac{\hat L}N,\tag{$\ast$}$$ which is equal to $\hat L/N$ times the $m$th entry of the discrete Fourier transform of the discrete signal $\big[\chi_L(x_n)f(x_n)\big]_{n=0}^{N-1}$.

However! There's no point doing this. You can compute the sum $(\ast)$ directly in $O(N)$ time, while the FFT takes $O(N\log N)$ time. This is because the FFT simultaneously computes the other $N-1$ cofficients of the discrete Fourier transform for all other values of $m$ in $0,\ldots,N-1$, while you only care about the value of $m$ for which $\hat L=2\pi m/k$.

share|cite|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.