我正在尝试在C 上实现FFT 算法。我根据《C 中的数字食谱》一书中的函数“four1”编写了一段代码。我知道使用 FFTW 等外部库会更有效,但我只是想尝试将此作为第一种方法。但我在运行时遇到错误。
\n经过一段时间的尝试调试后,我决定复制书中提供的完全相同的功能,但我仍然遇到同样的问题。问题似乎出在以下命令中:
\ntempr = wr * data[j] - wi * data[j + 1];\ntempi = wr * data[j + 1] + wi * data[j];\nRun Code Online (Sandbox Code Playgroud)\n和
\ndata[j + 1] = data[i + 1] - tempi;\n\nRun Code Online (Sandbox Code Playgroud)\nj 有时与数组的最后一个索引一样高,因此在索引时不能加 1。
\n正如我所说,我没有对代码进行任何更改,所以我很惊讶它对我不起作用;这是一本著名的 C 数值方法参考书,我怀疑其中是否有错误。另外,我发现了一些关于相同代码示例的问题,但它们似乎都没有相同的问题(例如,请参见C: Numerical Recipies (FFT) )。我究竟做错了什么?
\n这是代码:
\n#include <iostream>\n#include <stdio.h>\nusing namespace std;\n\n#define SWAP(a,b) tempr=(a);(a)=(b);(b)=tempr\nvoid four1(double* data, unsigned long nn, int isign)\n{\n unsigned long n, mmax, m, j, istep, …Run Code Online (Sandbox Code Playgroud)