我是hankel的作者。虽然我不建议在这种情况下使用我的代码(因为正如您所提到的,它需要一个可调用的输入函数,其目的是准确计算积分,而不是执行 DHT),但我会说这是可能的。
您需要做的就是对输入的一维数组进行插值。如何做到这一点取决于您,但通常类似以下内容的方法效果很好:
from scipy.interpolate import InterpolatedUnivariateSpline as Spline
import numpy as np
x, y = # Import/create data vectors
# Do this if y is both negative and positive
fnc = Spline(x,y, k=1) #I usually choose k=1 in case anything gets extrapolated.
# Otherwise do this
spl = Spline(np.log(x), np.log(y), k=1)
fnc = lambda x : np.exp(spl(np.log(x)))
# Continue as normal with hankel.transform(fnc, kvec)
Run Code Online (Sandbox Code Playgroud)
这样做的一个大问题是选择参数N,h并且对于kin 的所有值都可以很好地近似变换kvec。如果kvec跨越很宽的动态范围,则hankel效率非常低,因为它在转换中N为每个数组使用相同的底层数组(长度为)k,这意味着最困难的k设置性能级别。
再说一次,简而言之,我不推荐hankel,但如果您找不到其他任何东西,它仍然可以工作;-)
我的一个朋友正在寻找 Python 中的 Hankel 变换,在确定没有任何可用的东西后(部分是基于这个问题的答案)找到我分享我的。
这个包按照原始问题的要求执行准离散汉克尔变换(如果晚了几年!),但希望这个答案能够将找到这个问题的未来用户(比如我的朋友)引导到正确的地方。
| 归档时间: |
|
| 查看次数: |
2650 次 |
| 最近记录: |