Fourier Transforms and Integers
- To: mathgroup at smc.vnet.net
- Subject: [mg6507] Fourier Transforms and Integers
- From: Sean Ross <SEAN at mail.creol.ucf.edu>
- Date: Thu, 27 Mar 1997 02:43:02 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
I am posting this for general interest, not necessarily as a question, but for general interest. Recently, the question came up about the mathematica function Fourier not giving the expected results when given integers as arguments. I recently ran in to a more advanced example of the same phenomena. I am currently preparing to solve a system of coupled non-linear differential equations. Terms in the equations include first partial derivatives and Laplacians. I thought that the most convenient way to take the derivatives of a 2-D array of data would be to take advantage of the fourier transform theorem which says that Fourier[(2 Pi nu j)^n F[nu]]=nth partial of f(t). The code for the first partial of a square 2-D array "profile" is: NN=Length[profile]; k=-I 2. N[Pi](1/NN/deltax Outer[Plus, RotateRight[Table[0,{i,1,NN}],NN/2+1], RotateRight[Table[i,{i,1,NN}]-NN/2.,NN/2+1]]; newprofile=InverseFourier[k Fourier[profile]]; This code works OK, but introduces an extraneous imaginary component proportional to the array "profile" so that for real input, I can separate the real part out and have a first partial derivative. After much pencil and paper work to explain the imaginary part and some playing around with parameters in the code, I found that the problem was in the integer input to the two Table statements. The following code only replaces a 0 with a 0.0, but this invokes the real addition and mathematica interprets everything in the symbol k as real. The extraneous imaginary components go away, the sun comes out and the world is right again. NN=Length[profile]; k=-I 2. N[Pi](1/NN/deltax Outer[Plus, RotateRight[Table[0.0,{i,1,NN}],NN/2+1], RotateRight[Table[i,{i,1,NN}]-NN/2.,NN/2+1]]; newprofile=InverseFourier[k Fourier[profile]]; This just goes to show you that in a computer language that doesn't have type declaration statements, you have to be careful.