✍️ 朱邓达  •  📅 2025-04-24  •  ⚡ 2025-09-22

固定间隔的Filon积分法

警告

谨慎使用固定间隔的Filon积分法,除非你很清楚原理以及误差来源。推荐使用 自适应Filon积分法 以减少固定积分间隔的影响。

以下介绍程序中使用的 基于两点线性插值的Filon积分 (纪晨, 姚振兴, 1995) (初稿) ,主要介绍思路,具体公式推导详见对应论文。

对于以下积分,

\[P_m(\omega,r) = \int_0^{k_{\text{max}}} F_m(k, \omega)J_m(kr)kdk\]

分成两个部分,

\[P_m(\omega,r) = \int_0^{k^*} F_m(k, \omega)J_m(kr)kdk + \int_{k^*}^{k_{\text{max}}} F_m(k, \omega)J_m(kr)kdk\]

其中积分第一部分仍然使用离散波数积分求解 (见 控制波数积分 部分),积分第二部分将Bessel函数取渐近表达式,可将其转为以下形式

\[\begin{split}\begin{align} P_m(\omega,r) &= \sqrt{\dfrac{2}{\pi r}} \bbox[yellow] {\int_{k^*}^{k_{\text{max}}} \bar{F}_m(k, \omega) \text{cos} \left( kr - (2m+1)\pi/4 \right) dk } \\ \bar{F}_m(k, \omega) &= \sqrt{k} F_m(k, \omega) \end{align}\end{split}\]

其中高亮部分的积分是Filon积分的关键。在每一个区间 \([k_i, k_{i+1}], k_i=(i-1) \Delta k\) 内,使用两点线性插值公式,\(\bar{F}\) 可表示为

\[\bar{F} = \bar{F}_i + \dfrac{\bar{F}_{i+1} - \bar{F}_i}{\Delta k} (k - k_i)\]

将此式代回积分公式中,可得到 该区间内的积分解析解,而最终的解即为多个区间内解析解的和。可进一步推导,将相邻区间的解析解中的部分式子两两相消,得到更简化的整个区间的解析解。由于相比于Bessel函数, \(\bar{F}\) 往往变化比较缓慢,故Filon积分可使用相对较大的步长 \(\Delta k\) 也可以有很好的精度。


备注

从以上推导可看出,该方法的精度取决于以下两个方面:

  1. Bessel函数渐近表达式与真实值的误差: 通过将积分分为两个部分计算,可大幅减少该误差。

  2. 区间内核函数线性拟合与真实值的误差: 该误差受人为设定的Filon积分间隔控制。当 区间过大 时,线性拟合效果很差,计算结果偏差较大。

通过以下可选参数,可使用Filon积分。

详见 greenfnstatic_greenfn 模块的 -L 选项。

备注

在程序中,固定间隔的Filon积分不计算近场项,即 计算动态格林函数 中介绍的 \(p=1\) 对应的积分项。