gpt4 book ai didi

python - 实际pyFFTW中拉普拉斯算子的计算

转载 作者:行者123 更新时间:2023-11-28 17:58:50 25 4
gpt4 key购买 nike

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

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

计算拉普拉斯算子
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"

在截断的情况下如何完成?我考虑过使用:

kx, ky = np.meshgrid(np.fft.fftfreq(N//2+1, dx), np.fft.fftfreq(N, dx))  # The axes conven-
# tions are different

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

最佳答案

我不熟悉 pyfftw , 但带有 numpy.fft模块它会工作得很好(假设您使用评论中提到的 rfftfreq)。

回顾一下:对于一个真正的数组,a , 傅里叶变换, b ,具有类似 Hermtian 的属性:b(-kx,-ky)b(kx,ky) 的复共轭.前向 fft 的真实版本通过省略否定 ky 来丢弃(大部分)冗余信息秒。反向 fft 的真实版本假设缺失频率处的值可以通过复共轭适当的元素找到。

如果您使用复数 fft 并保留所有频率,-k2 * b仍将具有类似 Hermitian 的性质。所以真实后向 fft 所做的假设仍然成立,并会给出正确的答案。

我猜 pyfftw如果您指定 float64,它会工作得很好direction=FFT_BACKWARD 的输出大小正确的数组案例。

关于python - 实际pyFFTW中拉普拉斯算子的计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56810488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com