我有以下卷积作为数值模拟的一部分。
我的问题是和的解析表达式确实存在,但是,我只有在傅里叶域中的 alpha(k) 形式。我计划通过以下方式进行评估:
- 使用numpy中的meshgrid和linspace使用的网格网格构造网格
ran = linspace(-1,1,N_r)
x,y,z = meshgrid(ran,ran,ran) #position space
- 从 x, y, z 构造傅里叶域中的分量 xf, yf, zf
xf = fftn(x)
yf = fftn(y)
zf = fftn(z)
- 在 numpy 中使用fftn 求的傅里叶变换
- 乘以
- 在 numpy 中使用ifftn进行傅里叶逆变换。
我不太确定上述方法是否有效,实际上我未能正确验证它。我尝试使用 scipy.ndimage.convolve 将结果与傅里叶域中产品的傅里叶逆变换进行比较。我对代码所做的事情是否正确?有没有一种方法可以验证一种方法是否适用于更简单的示例?
试图验证:
我尝试了以下方法来测试该理论。似乎它不起作用。我希望结果res_1和res_2相同。我还使用函数real截断由fftn和ifftn函数产生的微小虚部。
x = linspace(-1,1,10)
xf = fftn(x)
def f(x):
return x**2+x**3*sin(x)
def g(k):
return k**2+k**3/(3-k**2)
g_k = g(xf)
g_x = real(ifftn(g_k))
res_1 = img_con(g_x,f(x))
res_2 = real(ifftn(g(xf)*fftn(f(x))))
print(res_1)
print(res_2)
我在做错事吗?