如果使用傅立叶技术没有帮助,我会感到非常惊讶。此外,有人已经使用 FFT编写了用于 3D 快速卷积的 Matlab 代码;该作者对其进行了测试,发现:
Good usage recommendation:
In 1D, this function is faster than CONV for nA, nB > 1000.
In 2D, this function is faster than CONV2 for nA, nB > 20.
In 3D, this function is faster than CONVN for nA, nB > 5
其中 nA, nB 是输入向量 A,B 的长度。至少,您可以针对您的程序测试该输出以比较两者,而不必担心浪费时间自己编写基于傅里叶的方法并使其运行不佳。
也就是说,您可能对使用函数的傅里叶变换保持谨慎是正确的。这些功能是如何赋予你的?如果它们是从一组离散的点开始定义的,您不必担心;离散傅里叶变换毕竟是可逆的。
但是,如果给你一些分析表达式,在所有 3 空间中定义它们——例如,X是布朗表——那么你可能有麻烦了。在这种情况下,在有限数量的点对它们进行采样并使用离散傅里叶变换可能会丢弃场的高频分量或将它们混叠为低频。缺乏平滑是阻碍傅立叶分析的原因。
最后,如果这些问题确实妨碍您使用 FFT,您可以尝试使用 Matlab 的并行编程工具箱来加速您的嵌套循环。还值得考虑执行这些循环的顺序。A(:,i)Matlab 以列优先顺序存储数组,因此访问比访问快得多A(i,:)。以一种方式而不是另一种方式嵌套循环可能会显着减慢程序的速度,因为它必须在内存中进行大量跳过而不是连续读取条目。