Python中scipy的快速汉克尔变换的使用

67up9zun  于 12个月前  发布在  Python
关注(0)|答案(1)|浏览(184)

尽管做了一些努力,我还是不明白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?非常感谢。

iswrvxsc

iswrvxsc1#

这是一个常见的问题:SciPy中的数值FHT使用k dr的积分定义,而数学汉克尔变换的定义使用r dr(参见scipy/scipy#19573)。要计算预期的汉克尔变换,您需要将输入乘以r(以添加缺失因子),并将输出除以k(以移除额外因子)。

...
f_fht = fft.fht(f*r, dln, offset=offset, mu=mu)/k

plt.loglog(k,fk,k,f_fht,'--')
plt.show()

字符串


的数据
正如你所看到的,这让你更接近了,但是结果有明显的混叠。我们可以偏置变换以获得更好的结果:

...
offset = fft.fhtoffset(dln, initial=-6.*np.log(10), mu=mu, bias=-1.5)
...
f_fht = fft.fht(f*r, dln, offset=offset, mu=mu, bias=-1.5)/k
...



你可能仍然想研究为什么这里的协议不完美,但我希望这能演示SciPy的FHT是如何工作的。

相关问题