【GAMES201学习笔记】快速多极展开

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=iNrijmj

所受到的静电力 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=iNmjrij3xixj=j=1,j=iNmjxixj3xixj

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)=Sxym(y)dS(y),yS

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)xy3xydS(y),yS

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πϵ0qjln(zzj)

其中的实部为势函数:

ϕ 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(zzj))

Note

  • 虚部为通量函数,由于该处我们仅讨论势函数,故忽略。
对于 j 个粒子组成的系统产生的场

screenShot.png

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=1mqj(ln(zzj))

该处简化为:

ϕ ( 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=1mqjln(zzj)(1)

ln ⁡ ( z − z j ) \ln(\bold{z} - \bold{z}_j) ln(zzj) 在点 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(zzj)=lnzk=1kzkzjk(2)

将公式(2)代入公式(1),得到:

ϕ ( z ) = ∑ j = 1 m q j ln ⁡ z − ∑ j = 1 m ∑ k = 1 ∞ q j

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值