固定间隔的Filon积分法
警告
谨慎使用固定间隔的Filon积分法,除非你很清楚原理以及误差来源。推荐使用 自适应Filon积分法 以减少固定积分间隔的影响。
以下介绍程序中使用的 基于两点线性插值的Filon积分 (纪晨, 姚振兴, 1995) (初稿) ,主要介绍思路,具体公式推导详见对应论文。
对于以下积分,
分成两个部分,
其中积分第一部分仍然使用离散波数积分求解 (见 控制波数积分 部分),积分第二部分将Bessel函数取渐近表达式,可将其转为以下形式
其中高亮部分的积分是Filon积分的关键。在每一个区间 \([k_i, k_{i+1}], k_i=(i-1) \Delta k\) 内,使用两点线性插值公式,\(\bar{F}\) 可表示为
将此式代回积分公式中,可得到 该区间内的积分解析解,而最终的解即为多个区间内解析解的和。可进一步推导,将相邻区间的解析解中的部分式子两两相消,得到更简化的整个区间的解析解。由于相比于Bessel函数, \(\bar{F}\) 往往变化比较缓慢,故Filon积分可使用相对较大的步长 \(\Delta k\) 也可以有很好的精度。
备注
从以上推导可看出,该方法的精度取决于以下两个方面:
Bessel函数渐近表达式与真实值的误差: 通过将积分分为两个部分计算,可大幅减少该误差。
区间内核函数线性拟合与真实值的误差: 该误差受人为设定的Filon积分间隔控制。当 区间过大 时,线性拟合效果很差,计算结果偏差较大。
通过以下可选参数,可使用Filon积分。
详见 greenfn 和 static_greenfn 模块的 -L 选项。
compute_grn() 函数和 compute_static_grn() 函数支持以下可选参数来使用Filon积分,具体说明详见API。
Length:float定义离散波数积分的积分间隔 (见 控制波数积分 部分)filonLength:float定义Filon积分间隔,公式和离散波数积分使用的一致。filonCut:float定义了两个积分的分割点, \(k^*=\)<filonCut>\(/r_{\text{max}}\)
备注
在程序中,固定间隔的Filon积分不计算近场项,即 计算动态格林函数 中介绍的 \(p=1\) 对应的积分项。