1. 相关概念
1.1 快速多极算法简介
快速多极展开算法(FMM)最初是用来处理大量粒子之间相互影响的问题,也可以用来计算基于 位势理论 的拉普拉斯方程的数值解,同时也可用来处理泊松方程。
同理,我们也可以用相关场的求解过程来辅助理解 FMM 求解泊松方程的这一过程,该处以多体系统的静电场为例。
1.2 静电场
1.2.1 公式的离散形式
对于空间 N 个带电粒子构成的系统,第 i 个粒子所在位置的静电势 Φ ( x i ) \Phi(x_i) Φ(xi) :
Φ ( x i ) = ∑ j = 1 , j ≠ i N m j r i j \Phi(x_i) = \sum^N_{j=1, j\neq i} \cfrac{m_j}{r_{ij}} Φ(xi)=j=1,j=i∑Nrijmj
所受到的静电力 E ( x i ) E(x_i) E(xi) :
E ( x i ) = ∑ j = 1 , j ≠ i N m j x i − x j r i j 3 = ∑ j = 1 , j ≠ i N m j x i − x j ∥ x i − x j ∥ 3 E(x_i) = \sum^N_{j=1, j\neq i} m_j \cfrac{\bold{x}_i - \bold{x}_j}{r_{ij}^3} = \sum^N_{j=1, j\neq i} m_j \cfrac{\bold{x}_i - \bold{x}_j}{\Vert \bold{x}_i - \bold{x}_j \Vert^3} E(xi)=j=1,j=i∑Nmjrij3xi−xj=j=1,j=i∑Nmj∥xi−xj∥3xi−xj
Note :
- x i \bold{x}_i xi :表示第 i 个粒子所在位置;
- m j m_j mj :表示第 j 个粒子所占权重,与带电量 q j q_j qj 成正比;
- r i j r_{ij} rij :表示第 i 个粒子和第 j 个粒子之间的距离;
- ∥ ⋅ ∥ \Vert \cdot \Vert ∥⋅∥ :表示两点间的距离;
- 求解 E ( x i ) E(x_i) E(xi) 相当于对 i 粒子与 i 粒子以外的所有粒子的相互力做一个累和,复杂度为 O ( N ) O(N) O(N) ,同理,如果对全部 N 个粒子都使用该方式进行求解,复杂度高达 O ( N 2 ) O(N^2) O(N2) 。
1.2.2 公式的积分形式
对于空间连续介质问题,假设粒子是连续分布在空间曲面 S S S 上,则离散的多粒子系统可以过渡到连续介质系统。在点 x \bold{x} x 处受到整个曲面的势为:
Φ ( x ) = ∫ S m ( y ) ∣ x − y ∣ d S ( y ) , y ∈ S \Phi(\bold{x}) = \int_S \cfrac{m(\bold{y})}{\vert \bold{x} - \bold{y} \vert} \mathrm{d}S(\bold{y}),\bold{y} \in S Φ(x)=∫S∣x−y∣m(y)dS(y),y∈S
点 x \bold{x} x 处受到整个曲面的力为:
E ( x ) = ∫ S m ( y ) x − y ∣ x − y ∣ 3 d S ( y ) , y ∈ S E(\bold{x}) = \int_S m(\bold{y}) \cfrac{\bold{x} - \bold{y}}{\vert \bold{x} - \bold{y} \vert^3} \mathrm{d}S(\bold{y}),\bold{y} \in S E(x)=∫Sm(y)∣x−y∣3x−ydS(y),y∈S
Note :
- ∣ ⋅ ∣ \vert \cdot \vert ∣⋅∣ :表示两点间的距离。
1.2.3 公式的复势形式
课程中为了式子尽可能的直观,主要是以该表达方式为例。
对于单个粒子产生的场
位于复平面上的点 z j \bold{z}_j zj 的平面点电荷 q j q_j qj 在点 z \bold{z} z 的复势:
f j ( z ) = − q j 2 π ϵ 0 ln ( z − z j ) f_j(\bold{z}) = \cfrac{-q_j}{2\pi \epsilon_0} \ln(\bold{z} - \bold{z}_j) fj(z)=2πϵ0−qjln(z−zj)
其中的实部为势函数:
ϕ j ( z ) = R e f j ( z ) = q j 2 π ϵ 0 R e ( ln ( z − z j ) ) \phi_j(\bold{z}) = \mathrm{Re}f_j(\bold{z}) = \cfrac{q_j}{2\pi \epsilon_0} \mathrm{Re}(\ln(\bold{z} - \bold{z}_j)) ϕj(z)=Refj(z)=2πϵ0qjRe(ln(z−zj))
Note :
- 虚部为通量函数,由于该处我们仅讨论势函数,故忽略。
对于 j 个粒子组成的系统产生的场
点 c \bold{c} c 附近的 m m m 个电荷对点 z \bold{z} z 的势(直接累和):
ϕ ( z ) = 1 2 π ϵ 0 R e ∑ j = 1 m q j ( ln ( z − z j ) ) \phi(\bold{z}) = \cfrac{1}{2\pi \epsilon_0} \mathrm{Re} \sum^m_{j = 1} q_j(\ln(\bold{z} - \bold{z}_j)) ϕ(z)=2πϵ01Rej=1∑mqj(ln(z−zj))
该处简化为:
ϕ ( z ) = ∑ j = 1 m q j ln ( z − z j ) (1) \phi(\bold{z}) = \sum^m_{j = 1} q_j\ln(\bold{z} - \bold{z}_j) \tag{1} ϕ(z)=j=1∑mqjln(z−zj)(1)
将 ln ( z − z j ) \ln(\bold{z} - \bold{z}_j) ln(z−zj) 在点 z \bold{z} z 处做泰勒级数展开,即:
ln ( z − z j ) = ln z − ∑ k = 1 ∞ z j k k z k (2) \ln(\bold{z} - \bold{z}_j) = \ln \bold{z} - \sum^{\infin}_{k=1} \cfrac{\bold{z}^k_j}{k \bold{z}^k} \tag{2} ln(z−zj)=lnz−k=1∑∞kzkzjk(2)
将公式(2)代入公式(1),得到:
ϕ ( z ) = ∑ j = 1 m q j ln z − ∑ j = 1 m ∑ k = 1 ∞ q j