离散傅里叶变换
int main(){
const double pi=acos(-1.0);
const int N=40; //设定N的大小
double FKR[N], FKI[N]; //FK数组,注意有实部和虚部
double L=20; //设定x的范围[-L/2, L/2]
double kappa = 2*pi/L; //动量间隔单元
FILE *fp = fopen("dft_N40_L20.txt","w"); //打开文件
for(int k=-N/2; k<N/2; k++){ //外层计算FK的循环
FKR[..] =0 ; //注意:数组指标从0开始,正确设定其与k的关系
FKI[..] =0 ;
for(int l=-N/2; l<N/2; l++){
double theta = (2*pi*l)/N; //设定指数上的相位
double xl= .... ; //设定xl的值
FKR[...] += ....; //计算变换的实部
FKI[...] -= ....; //计算变换的虚部
}
FKR[...] /= kappa*N;
FKI[...] /= kappa*N;
//注意:输出数据时,输出实际的p_k,方便与解析结果的比较。
fprintf(fp,"%+.4f %+e %+e \n", ..., FKR[k+N/2], FKI[k+N/2]);
}
fclose(fp);
return 0;
}