在FFTW3中取二阶导数
|
我已经使用前向FFT和IFFT(对结果进行了归一化)对代码的一些实际功能进行了测试,效果很好。
但是,我想对实函数取二阶导数。为简单起见,我将“ 0”作为测试用例。这是我使用的相关代码(库中的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
值的一半。这不是问题。
没有找到相关结果
已邀请:
2 个回复
镰茧钩
伞腹