如何对奇异函数进行快速傅里叶变换(FFT)?

计算科学 傅立叶分析 傅里叶变换
2021-12-26 00:55:10

我想对这个函数做一个3维FFT因为它看起来很难通过解析傅里叶展开。让我们将每个维度中的数字采样点数表示为这是Mathematica代码。cos(x)cos(y)cos(z)sin(x)sin(y)sin(z)((1.0001+sin(y)+cos(z))2+(0.0001+cos(x)+sin(z))2+(0.0001+sin(x)+cos(y))2)3/2N

nn = 10; step = (2 \[Pi])/nn; mx0 = 1.0001; my0 = 0.0001; mz0 = 0.0001; 
data = Table[ ( Cos[x] Cos[y] Cos[z] - Sin[x] Sin[y] Sin[z])/((mz0 + Cos[y] + Sin[x])^2 + (mx0 + Cos[z] + Sin[y])^2 + (my0 + Cos[x] + Sin[z])^2)^(3/2), {x, 0, 2 \[Pi] - step, step}, {y, 0, 2 \[Pi] - step, step}, {z, 0, 2 \[Pi] - step, step}];
s = Fourier[data, FourierParameters -> {-1, -1}]; s[[1, 1, 1]]

据我尝试,使用 C++ MKL 库或Mathematica时变换结果也不会收敛,实际上相对于我检查了具有许多其他非奇异功能的程序,结果证明它们很好。所以我猜这个问题可能是由奇异函数的特殊形式引起的(分母在某些时候可以为零)。我试过它不会振荡那么多,但仍然相当大。N=500N10.9sin(x+y+z)

任何人都可以阐明这个问题吗?提前致谢!

1个回答

这是功能空间的问题。如果您的函数在中,那么您知道可以使用傅立叶级数来逼近该函数,因为傅立叶基(即正弦和余弦)在中是密集的。换句话说,你知道如果你对级数取越来越多的项,那么你会越来越逼近这个函数。L2L2

另一方面,如果您的函数是如此奇异以至于它不属于,那么所有希望都将落空:您不能指望傅立叶级数收敛。L2