Python numpy快速傅里叶变换阵列的正确排序

Python numpy快速傅里叶变换阵列的正确排序,python,numpy,fft,Python,Numpy,Fft,我正试图实现一个简单的浸没边界法,使用快速傅里叶变换在周期域中处理流体-结构相互作用。首先在流体上施加一个力,对其进行FFT,求解一系列矩阵方程,然后进行逆FFT,以在实域中恢复矩阵系统的解。我现在得到了非常奇怪的结果,我想这可能是因为对于numpy ifft2函数,Fourier空间中的解(u_hat,v_hat,p_hat)没有正确排序,但我不知道如何解决这个问题。我将感谢任何帮助 编辑:这个想法是,给定f,g,我们想要找到u,v,p。该算法是对f和g的二维fft进行计算,用它来计算u、v和

我正试图实现一个简单的浸没边界法,使用快速傅里叶变换在周期域中处理流体-结构相互作用。首先在流体上施加一个力,对其进行FFT,求解一系列矩阵方程,然后进行逆FFT,以在实域中恢复矩阵系统的解。我现在得到了非常奇怪的结果,我想这可能是因为对于numpy ifft2函数,Fourier空间中的解(u_hat,v_hat,p_hat)没有正确排序,但我不知道如何解决这个问题。我将感谢任何帮助

编辑:这个想法是,给定f,g,我们想要找到u,v,p。该算法是对f和g的二维fft进行计算,用它来计算u、v和p的fft,然后进行逆fft来恢复真实的u、v、p。我添加了与f_hat、g_hat和u_hat、v_hat、p_hat相关的特定函数

Edit2:我真正想知道的是如何对任意数组进行排序,以便将其传递给numpy ifft2函数,该函数需要以下内容:输入应在两个轴的低阶角具有零频率项,在这些轴的前半部分具有正频率项,在轴的中间的奈奎斯特频率和两个轴的后半部分中的负频率项的术语,以负负频率的顺序。< /P>
   N = 20   # Number of cartesian grid points
   l = 1.0     # Length of domain
   dx = l / N     # Grid step size
   mu = 8.9 * 10**(-4) 

   f_hat = np.fft.fft2(f)    # Fourier transform of x component of the force
   g_hat = np.fft.fft2(g)    # Fourier transform of y component of the force 

   u_hat = np.zeros((N, N), dtype=np.complex)
   v_hat = np.zeros((N, N), dtype=np.complex)
   p_hat = np.zeros((N, N), dtype=np.complex)
   
   for k in range(0, N):
       for m in range(0, N):
           if k == 0 and m == 0:
               u_hat[k,m] = 0.0
               v_hat[k,m] = 0.0 
               p_hat[k,m] = 0.0
           else:
               u_hat[k,m], v_hat[k,m], p_hat[k,m] = fluid_system(k, m, N, dx, mu, f_hat[k,m], g_hat[k,m])
   
   # Take inverse Fourier transform to get u and p  
   u = np.real((np.fft.ifft2(u_hat))).reshape((len(x),1))
   v = np.real((np.fft.ifft2(v_hat))).reshape((len(x),1))
   p = np.real(np.fft.ifft2(p_hat))

def fluid_system(l, m, N, h, mu, fft_f, fft_g):
   L = - 4.0 / (h**2) * ((np.sin(np.pi * l / N))**2 + (np.sin(np.pi * m / N))**2)
   D_l = - 1j / h * np.sin(2.0 * np.pi * l / N)
   D_m = - 1j / h * np.sin(2.0 * np.pi * m / N)
   A = np.zeros((3,3), dtype=np.complex)
   A[0,0] = mu * L
   A[0,2] = - D_l
   A[1,1] = mu * L
   A[1,2] = - D_m
   A[2,0] = D_l
   A[2,1] = D_m
   b = np.zeros((3,1), dtype=np.complex)
   b[0] = fft_f
   b[1] = fft_g
   res = (np.linalg.solve(A, b)).ravel()
   return res 




我们不知道您正在尝试做什么,您的预期输出是什么,也不知道您的输入数据是什么。这里没有人能帮助你。请仔细阅读。对不起,我认为我已经提供了足够的信息,我希望编辑能让它更清楚。