我已经使用前向 FFT 和 IFFT(标准化结果)测试了我的代码的一些实际功能,这工作正常。
但是,我想对实函数求二阶导数。为简单起见,我将sin(2*pi*t)
其作为测试用例。这是我使用的相关代码(库中的 FFT 函数):
int main(void)
{
int i;
int nyh = (N/2) + 1;
double result_array[nyh][2];
double x_k[nyh][2];
double x_r[N];
FILE* psit;
psit=fopen("psitest.txt","w");
init();
fft(x, result_array); //function in a library, this has been tested
psi(result_array, x_k);
ifft(x_k, x_r); //function in a library, this has been tested
for(i=0;i<N;i++)
{
fprintf(psit, "%f\n", x_r[i]);
}
fclose(psit);
return 0;
}
void psi(double array[nyh][2], double out[nyh][2])
{
int i;
for ( i = 0; i < N/2; i++ )
{
out[i][0] = -4.0*pi*pi*i*i*array[i][0];
out[i][1] = -4.0*pi*pi*i*i*array[i][1];
}
out[N/2][0]=0.0;
out[N/2][1]=0.0;
}
void init()
{
int i;
for(i=0;i<N;i++)
{
x[i] = sin(2.0*pi*i/N);
}
}
现在问题来了:该算法适用于任何形式的函数sin( 2*pi*t*K)
,其中 K 是整数,但如果我将其作为测试函数sin(3*pi*t)
,则算法会失败。我无法在我的编码中看到错误。
请注意,因为函数是真实的,所以我只需要取一半的k
值。这不是问题。