尽管做了一些努力,我还是不明白SciPy. fft.fht的用法,这是Python中的快速汉克尔变换。例如,当我尝试变换exp(-ar)时,它给了我一些奇怪的结果。我也不明白如何选择合适的偏移量。下面是我的简单代码。
from scipy import fft
import numpy as np
import matplotlib.pyplot as plt
mu = 1.0 # Order of Bessel function
r = np.logspace(-7, 1, 128) # Input evaluation points
dln = np.log(r[1]/r[0]) # Step size
offset = fft.fhtoffset(dln, initial=-6.*log(10), mu=mu)
k = np.exp(offset)/r[::-1] # Output evaluation points
a = 0.5
f = np.exp(-a*r) # This is what I want to transform
fk = k/np.sqrt((k**2+a**2)**3) # This is what I expect analytically (I looked it up from a table)
f_fht = fft.fht(f, dln, offset=offset, mu=mu) # This is the numerical result
plt.plot(k,fk,k,f_fht,'--')
plt.show()
字符串
看起来f_fht和fk不一致。我不明白哪里出错了。谁能用一些例子解释一下我应该如何使用fht?非常感谢。
1条答案
按热度按时间iswrvxsc1#
这是一个常见的问题:SciPy中的数值FHT使用
k dr
的积分定义,而数学汉克尔变换的定义使用r dr
(参见scipy/scipy#19573)。要计算预期的汉克尔变换,您需要将输入乘以r
(以添加缺失因子),并将输出除以k
(以移除额外因子)。字符串
的数据
正如你所看到的,这让你更接近了,但是结果有明显的混叠。我们可以偏置变换以获得更好的结果:
型
的
你可能仍然想研究为什么这里的协议不完美,但我希望这能演示SciPy的FHT是如何工作的。