私が尋ねたthis questionの拡張です。実際のガウス分布のフーリエ変換は実際のガウス分布である。もちろん、Gaussianに似ている点集合のDFTは必ずしも完全なGaussianではありませんが、確かに近いはずです。下のコードでは、GSLを使ってこの[離散]フーリエ変換を行っています。返された/変換された実際のコンポーネント(リンクされた質問で概説されている)の問題とは別に、私は虚数コンポーネント(これは全く同じでなければならない)に対して奇妙な結果を得ています。確かに、それは規模は非常に小さいですが、それはまだ変です。 この非対称の原因は何ですか?&ファンキーな出力?GSL高速フーリエ変換 - 変換されたガウスの非ゼロ虚数?
#include <gsl/gsl_fft_complex.h>
#include <gsl/gsl_errno.h>
#include <fstream>
#include <iostream>
#include <iomanip>
#define REAL(z,i) ((z)[2*(i)]) //complex arrays stored as [Re(z0),Im(z0),Re(z1),Im(z1),...]
#define IMAG(z,i) ((z)[2*(i)+1])
#define MODU(z,i) ((z)[2*(i)])*((z)[2*(i)])+((z)[2*(i)+1])*((z)[2*(i)+1])
#define PI 3.14159265359
using namespace std;
int main(){
int n = pow(2,9);
double data[2*n];
double N = (double) n;
ofstream file_out("out.txt");
double xmin=-10.;
double xmax=10.;
double dx=(xmax-xmin)/N;
double x=xmin;
for (int i=0; i<n; ++i){
REAL(data,i)=exp(-100.*x*x);
IMAG(data,i)=0.;
x+=dx;
}
gsl_fft_complex_radix2_forward(data, 1, n);
for (int i=0; i<n; ++i){
file_out<<(i-n/2)<<" "<<IMAG(data,((i+n/2)%n))<<'\n';
}
file_out.close();
}