首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实pyFFTW中Laplacian的计算

实pyFFTW中Laplacian的计算
EN

Stack Overflow用户
提问于 2019-06-28 16:40:51
回答 1查看 243关注 0票数 3

对于前向(多维) FFTW算法,您可以指定输入numpy.ndarray是真实的,并且输出应该是复杂的。这是在创建fft_object参数中的字节对齐数组时完成的。

代码语言:javascript
复制
import numpy as np
import pyfftw

N = 256  # Input array size (preferrably 2^{a}*3^{b}*5^{c}*7^{d}*11^{e}*13^{f}, (e+f = 0,1))
dx = 0.1  # Spacing between mesh points
a = pyfftw.empty_aligned((N, N), dtype='float64')
b = pyfftw.empty_aligned((N, N//2+1), dtype='complex128')
fft_object = pyfftw.FFTW(a, b, axes=(0, 1), direction='FFTW_FORWARD')

输出阵列不对称,第二轴被截断到正频率。对于复FFT,可以使用以下np.ndarray计算laplacian

代码语言:javascript
复制
kx, ky = np.meshgrid(np.fft.fftfreq(N, dx), np.fft.fftfreq(N, dx))  # Wave vector components
k2 = -4*np.pi**2*(kx*kx+ky*ky)  # np.ndarray for the Laplacian operator in "frequency space"

在截断的情况下该如何做呢?我想用:

代码语言:javascript
复制
kx, ky = np.meshgrid(np.fft.fftfreq(N//2+1, dx), np.fft.fftfreq(N, dx))  # The axes conven-
#                                                                        tions are different

但是,这真的有用吗?似乎忽略了"y“方向上的负频率。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-28 19:05:11

我不太熟悉pyfftw,但是对于numpy.fft模块,它可以正常工作(假设您使用的是注释中提到的rfftfreq )。

概括地说:对于一个真正的数组,a,傅里叶变换,b,有一个类似Hermtian的性质:b(-kx,-ky)b(kx,ky)的复共轭。前向fft的真实版本通过省略负kys来丢弃(大部分)冗余信息,而反向fft的真实版本则假设在缺失频率处的值可以通过复数共轭适当的元素来找到。

如果你使用复快速傅立叶变换并保持所有频率,-k2 * b将仍然具有类似Hermitian的特性。因此,真正的反向fft所作的假设仍然成立,并将给出正确的答案。

我想,对于pyfftw,只要为direction=FFT_BACKWARD大小写的输出指定一个大小正确的float64数组,它就会工作得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56810488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档