| Note: This page hasn't been updated for a long time, and is most likely outdated. |
If you need it to be updated, please submit a ticket to firstname.lastname@example.org with the link to the page.
Complete FFTW Examples in C, F90, OCTAVE and PETSc
If you untar file FFTW Examples in C, F90, OCTAVE and PETSc
the main directory should have the following four subdirectories:
C F90 OCTAVE PETSC
In each of the above subdirectories you will find complete examples of FORWARD and BACKWARD FFT's. All the programs use 3 vectors: "in", "out" and "new_in" of dimension N > 0.
The programs start by defining the vector "in" and then a FORWARD FFT is done on "in" and the results are stored in vector "out".
Then a BACKWARD FFT is done on vector "out" and the results are stored in vector "new_in". In F90, C and PETSC "new_in" must be normalized before it can be compared with the initial vector "in".
The error is measured using the NORM-1 procedure, and if all worked correctly the NORM-1 should be very small (say ~ 1.0e-12). Of course the value of NORM-1 will depend on N. The larger the size of the vectors the larger the error.
Above procedure can be done interactively in OCTAVE with following five commands:
N=10; in=[1:N]' out=fft(in) new_in=ifft(out) NORM_1=norm(in-new_in,1)
Here are the details:
[nickc@hnd50:/work/nickc/hound/P14/OCTAVE] octave GNU Octave, version 3.2.4
octave:2> in=[1:N]' in = 1 2 3 4 5 6 7 8 9 10
octave:3> out=fft(in) out = 55.0000 + 0.0000i -5.0000 + 15.3884i -5.0000 + 6.8819i -5.0000 + 3.6327i -5.0000 + 1.6246i -5.0000 + 0.0000i -5.0000 - 1.6246i -5.0000 - 3.6327i -5.0000 - 6.8819i -5.0000 - 15.3884i
octave:4> new_in=ifft(out) new_in = 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000 10.0000
octave:5> NORM_1=norm(in-new_in,1) NORM_1 = 8.8818e-16
Last update: 12 Sept 2013