SlideShare a Scribd company logo
1 of 18
Download to read offline
2013/10/16

FMM(高速多重極法)における
諸公式の導出及び実装

似鳥啓吾 (神戸)
1 概要/動機
• FMM を実装するのはなかなか困難
– 難しいのは多重極法の概念や八分木を用いたアルゴリズムの
方ではない

– むしろ「算数」の方、球面調和関数の展開中心をシフトする
部分

∗ ブラックボックスとして打ち込むだけで大層な労力、必ず
どこかで間違いそう

∗ (出版物の符号が間違えているなんてよくあるし)
∗ 導出から理解とか無理

「読めば実装できる」ぐらいのノートは必要
直感的な導出があった方がいろいろ安心
続き
• Solid Harmonics(体球調和関数)での表記はわりと単純
• 紹介するもの
– 実装に必要な数式一式(読みながら実装できる程度に)
– 符号の定義は対称性がよくなるように
– (多分)世界一簡単な導出

今回の話が簡単で当たり前すぎて何が有難いのか
さっぱりわからなかったという人向けの参考文献
• Grengard & Rokhlin(1988), “The rapid evaluation of potential
fields in three dimensions”
• Epton & Dembart(1995) “Multipole translation theory for the
three-dimensional laplace and helmholtz equations”
• van Gelderen(1998) “The shift operators and translations of
spherical harmonics”
2 Solid Harmonics
いきなり「定義はこう」で申し訳ないが、‘Regular’ と ‘Singular’ のものを
m

(|m|−m)/2

R (r, θ, φ) = (−1)
S

m

(r, θ, φ) = (−1)

r
|m|
imφ
P
(cos θ)e
,
( + |m|)!

+(|m|+m)/2

( − |m|)! |m|
imφ
P
(cos θ)e
,
+1
r

(1)
(2)

とする。P m は Legendre の陪多項式。ちなみに普通の球面調和関数は

Y

m

(r, θ, φ) = (−1)

(|m|−m)/2

s

2 + 1 ( − |m|)! |m|
imφ
P
(cos θ)e
. (3)
4π ( + |m|)!

m の符号反転に対しては単なる複素共役にならず、R−m = (−1)m [Rm ]∗ ,
S −m = (−1)m [S m ]∗ となっている。
後々のため、S m の定義には (−1) +m の因数を含ませた。
!
+m 2 +1
(−1)
r
m
Sm
R =
( + m)!( − m)!
3 多重極能率と局所展開
球座標での Laplace 方程式 ∇2 Φ(r, θ, φ) = 0 の一般解はさっきのを用いて、

Φ(r, θ, φ) =

∞
X X h

m

m

L R (r, θ, φ) + M

m

S

−m

i
(r, θ, φ) ,

(4)

=0 m=−

と書ける。係数の Lm を local expansions(局所展開) M m を multipole moments
、
(多重極能率)と呼ぶことにする。それぞれ展開中心を rL 、rM として、

P2M:

M

m

=

X

m

qi · R (rM − ri )

(5)

i

M2P:

Φ(r) =

p
λ
X X

µ

−µ

Mλ Sλ (r − rM )

(6)

λ=0 µ=−λ

L2P:

Φ(r) =

p
λ
X X
λ=0 µ=−λ

µ

µ

Lλ Rλ (r − rL )

(7)
4 全然「特殊」関数じゃないです
デカルト座標で低次のものを書き下してみた。

(l, m)
(0, 0)
(1, 0)
(1, 1)
(2, 0)
(2, 1)
(2, 2)

Rm
1
z
−(x + iy)/2
(3z 2 − r2 )/4
−z(x + iy)/2
(x + iy)2 /8

Sm
1/r
−z/r3
−(x + iy)/r3
(3z 2 − r2 )/r5
3z(x + iy)/r5
3(x + iy)2 /r5

特に Rm は 次の斉次多項式。因数に (x + iy)m 。
5 計算方法
˜
P m (r, z) = r · (r sin θ)−m · P m (cos θ) ∈ R としておくと
˜
P m (r, z) · (x + iy)m = r · P m (cos θ) · eimφ 。あとは漸化式
˜
P m (r, z) =

8
(−1)m (2m − 1)!!
<
m

˜
(2 − 1)z P −1 (r, z)
: 2 − 1 z P m (r, z) −
˜
−1
−m

+ m − 1 2 ˜m
r P −2 (r, z)
−m

( = m)
( = m + 1)
( ≥ m + 2)

(8)
•
•
•
•

!! は二重階乗、n!! = n · (n − 2)!!, 1!! = 0!! = 1
m
m ループを外側に、対角成分 Pm から を育てる
Rm は division/square-root free
1.0/(int), 1.0/factrl(i) はテーブルで覚えておく
6 八象限対称
Rm (−x, −y, −z) = (−1) Rm (x, y, z),
Rm (x, −y, z) = (−1)m R−m (x, y, z),
Rm (−x, y, z) = R−m (x, y, z),
Rm (−x, −y, z) = (−1)m Rm (x, y, z),
等々。コードの再利用にも有効。
S −m をよく使うが、これは ∝ (−1) +m R−m なので
引数に (−x, y, −z) を入れればいい。

(9)
7 昇降演算子 (Ladder Operators)
ここが一番重要!(ただし証明略)
デカルト座標の偏微分で添字を変化させる。

(

∂x + i∂y
∂z
−∂x + i∂y

(

)
(Rm (r)

S m (r))

=

Rm+1 (r)
−1
m
R −1 (r)
Rm−1 (r)
−1

S m+1 (r)
+1
m
S +1 (r)
S m−1 (r)
+1

)
.
(10)

±|m|

= (±∂x + i∂y )|m| (∂z ) −|m| を定義しておくことで、
µ
µ+m
µ
µ+m
Dm Rλ = Rλ− 、Dm Sλ = Sλ+ 。
0
0
R0 = 1、S0 = 1/r も思い出して D−m Rm = 1、S m = Dm (1/r)。
+1 −1
0
2
2
2
Laplace 方程式:D1 D1 [ ] = D2 [ ] ⇔ (∂x + ∂y + ∂z )[ ] = 0
演算子 D
8 局所展開
[D

−m

µ

Rλ (r)]r=0 = δ

λ δmµ ,

(11)

を考えれば、真空ポテンシャル場から Lm を抽出できる:

Φ(r) =

∞
λ
X X

µ

µ

m

Lλ Rλ (r − rL ) ⇒ L

= [D

−m

Φ(r)]r=rL .

(12)

λ=0 µ=−λ

つまり任意の場所で局所展開の係数が手に入る。よって Taylar 展開は、

Φ(r + ∆r) =

∞
λ
X X

µ

−µ

Rλ (∆r)[Dλ Φ(r)].

(13)

λ=0 µ=−λ

これは任意の Laplace 方程式の解 Φ(r) に適用できる。 ∆r の半径内が真空なら有効)
(
9 加法定理
Rm (r) も S m (r) も Laplace 方程式の解であった。よって先程の展
開を適用すると以下の加法定理を得る:

Rm (r + ∆r) =

λ
∞
X X

µ
Rλ (∆r)Rm−µ (r),
−λ

(14)

−(m+µ)
µ
Rλ (∆r)S +λ
(r).

(15)

λ=0 µ=−λ

S

−m

(r + ∆r) =

∞
λ
X X
λ=0 µ=−λ

余白にもう一度、

Φ(r + ∆r) =

∞
λ
X X
λ=0 µ=−λ

µ
−µ
Rλ (∆r)[Dλ Φ(r)].
10 1/r ポテンシャルの展開
0
S0 (r) の加法定理として、

1
rS − rR

0

= S0 (rS − rR )
=

∞
X X

S

−m

m

(rS )R (−rR )

=0 m=−

3

2

∞
X rR
X ˆ m
˜∗ m
4π
4
=
Y (θS , φS ) Y (θR , φR )5
r +1 2 + 1 m=−
=0 S
∞
X rR
=
P (cos θSR ),
+1
r
=0 S

with

for

rS

cos θSR = (rS · rR )/( rS

後ろ2行とかは教科書にも載っているかも。

> rR ,
rR ).

(16)
11 M2P, M2L
1
r − ri

=

∞
X X

S

−m

m

(r − rM )R (rM − ri ),

=0 m=−

よりただちに M2P が確認できる:
M

m

=

X

m

qi · R (rM − ri ) ⇒ Φ(r) =

i

p
λ
X X

µ

−µ

Mλ Sλ (r − rM ).

λ=0 µ=−λ

Φ(r) に D−m をあてて局所展開を作ると、
M2L:

m

L

=

p
λ
X X
λ=0 µ=−λ

µ −(m+µ)
Mλ S +λ
(rL

− rM ).

(17)
12 M2M
展開中心を rM から rM にシフトすることを考える。

Rm の加法定理から、
Rm (rM − ri ) =

λ
∞
X X

µ
Rλ (rM − rM )Rm−µ (rM − ri ).
−λ

λ=0 µ=−λ

P

i

qi を適用することで、
M2M:

M

m

=

λ
X X

µ
M m−µ Rλ (rM − rM ).
−λ

λ=0 µ=−λ

オーバーフローを避けるために、µ のループ範囲は、

max(−λ, m − ( − λ)) ≤ µ ≤ min(λ, m + ( − λ)).

(18)
13 L2L
Φ(r) =

∞
λ
X X

µ
Lµ Rλ (r − rL ) ⇒ Lm = [D−m Φ(r)]r=r L ,
λ

λ=0 µ=−λ

を新しい展開中心 rL でもう一度展開するだけ:

L2L:

L

m

=

p
λ
X X

µ−m
Lµ Rλ− (rL − rL ).
λ

(19)

λ= µ=−λ

ついでに、ポテンシャルの勾配は

Φ(rL + dr) = L0 + (− L1 )dx + ( L1 )dy + L0 dz, (20)
0
1
1
1
で得られるので、L2P のかわりに p = 1 の L2L を使うと実装が楽。
14 配列への格納
0 ≤ ≤ p, |m| ≤ のとき Rm や M m は
1 + 3 + 5 + . . . + (2p + 1) = (p + 1)2 個の複素数からなる。
R−m = (−1)m [Rm ]∗ を考えると実効的に (p + 1)2 個の実数
でよい。1例として一次元配列 Xi (0 ≤ i < (p + 1)2 ) に、
{
|m|
R
(m ≥ 0)
X ( +1)+m =
,
(21)
|m|
R
(m < 0)
のように格納できる。
15 実行列化
複素数での線形変換
L

m

=

p
X

λ
X

G

m,µ µ
M
,λ
λ

λ=0 µ=−λ
2
3
p
λ
X
X
m,µ µ
m,−µ −µ 5
4Gm,0 M 0 +
=
(G
M +G
M
) ,
λ
,λ
,λ
λ
,λ
λ
µ=1
λ=0

(22)

を頑張って実数の変換で書くと、
L

m

=

p
X
λ=0
p
X

2

4Am,0 M 0 +
λ
,λ

λ
X n
µ=1

m,µ
m,µ
(A
+C
)
,λ
,λ

µ
m,µ
m,µ
M + (−B
+D
)
λ
,λ
,λ

2

λ
X n
m,µ
m,µ
m,0 0
m
4B
(B
+D
)
Mλ +
=
L
,λ
,λ
,λ
µ=1
λ=0

ここで、Am,µ + iBm,µ
,λ
,λ

= G

m,µ
,
,λ

C

M

µ
m,µ
m,µ
+ (A
−C
)
λ
,λ
,λ

m,µ
m,µ
m,−µ
+ iD
= (−1)µ G
.
,λ
,λ
,λ

M

M

o

3

µ 5
,
λ
o

3

µ 5
,
λ
16 まとめ
• 書いてみるとそれなりに式が沢山になった
• とはいえ「FMM の算数」の最短コースだったと思います
• §8, §9 あたりは画期的かもしれないです
(普通は §10 から始まる)

More Related Content

What's hot

数式を綺麗にプログラミングするコツ #spro2013
数式を綺麗にプログラミングするコツ #spro2013数式を綺麗にプログラミングするコツ #spro2013
数式を綺麗にプログラミングするコツ #spro2013
Shuyo Nakatani
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
MITSUNARI Shigeo
 

What's hot (20)

El text.tokuron a(2019).yoshii190704
El text.tokuron a(2019).yoshii190704El text.tokuron a(2019).yoshii190704
El text.tokuron a(2019).yoshii190704
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
 
TVM の紹介
TVM の紹介TVM の紹介
TVM の紹介
 
SSII2021 [TS2] 深層強化学習 〜 強化学習の基礎から応用まで 〜
SSII2021 [TS2] 深層強化学習 〜 強化学習の基礎から応用まで 〜SSII2021 [TS2] 深層強化学習 〜 強化学習の基礎から応用まで 〜
SSII2021 [TS2] 深層強化学習 〜 強化学習の基礎から応用まで 〜
 
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learningゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
 
数式を綺麗にプログラミングするコツ #spro2013
数式を綺麗にプログラミングするコツ #spro2013数式を綺麗にプログラミングするコツ #spro2013
数式を綺麗にプログラミングするコツ #spro2013
 
全体セミナー20170629
全体セミナー20170629全体セミナー20170629
全体セミナー20170629
 
【解説】 一般逆行列
【解説】 一般逆行列【解説】 一般逆行列
【解説】 一般逆行列
 
【DL輪読会】GPT-4Technical Report
【DL輪読会】GPT-4Technical Report【DL輪読会】GPT-4Technical Report
【DL輪読会】GPT-4Technical Report
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
 
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
 
20090924 姿勢推定と回転行列
20090924 姿勢推定と回転行列20090924 姿勢推定と回転行列
20090924 姿勢推定と回転行列
 
SLAM開発における課題と対策の一例の紹介
SLAM開発における課題と対策の一例の紹介SLAM開発における課題と対策の一例の紹介
SLAM開発における課題と対策の一例の紹介
 
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learninglispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learning
 
三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介
三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介
三次元点群処理ライブラリPCLと 統合ロボットシステム研究での 利用例の紹介
 
Introduction to A3C model
Introduction to A3C modelIntroduction to A3C model
Introduction to A3C model
 
Intel TSX について x86opti
Intel TSX について x86optiIntel TSX について x86opti
Intel TSX について x86opti
 
【DL輪読会】HexPlaneとK-Planes
【DL輪読会】HexPlaneとK-Planes【DL輪読会】HexPlaneとK-Planes
【DL輪読会】HexPlaneとK-Planes
 
ドロネー三角形分割
ドロネー三角形分割ドロネー三角形分割
ドロネー三角形分割
 

Similar to FMMの実装と導出

Similar to FMMの実装と導出 (8)

JOIss2020 発表資料
JOIss2020 発表資料JOIss2020 発表資料
JOIss2020 発表資料
 
PRML 第14章
PRML 第14章PRML 第14章
PRML 第14章
 
数式をnumpyに落としこむコツ
数式をnumpyに落としこむコツ数式をnumpyに落としこむコツ
数式をnumpyに落としこむコツ
 
会津合宿2015Day3:D問題
会津合宿2015Day3:D問題会津合宿2015Day3:D問題
会津合宿2015Day3:D問題
 
20180728 halide-study
20180728 halide-study20180728 halide-study
20180728 halide-study
 
ndwave3.pdf
ndwave3.pdfndwave3.pdf
ndwave3.pdf
 
R_note_01_ver1.1
R_note_01_ver1.1 R_note_01_ver1.1
R_note_01_ver1.1
 
Finite field
Finite fieldFinite field
Finite field
 

More from Keigo Nitadori

More from Keigo Nitadori (8)

Hermite integrators and 2-parameter subgroup of Riordan group
Hermite integrators and 2-parameter subgroup of Riordan groupHermite integrators and 2-parameter subgroup of Riordan group
Hermite integrators and 2-parameter subgroup of Riordan group
 
Hermite integrators and Riordan arrays
Hermite integrators and Riordan arraysHermite integrators and Riordan arrays
Hermite integrators and Riordan arrays
 
上三角 Pascal 行列による多項式のシフト
上三角 Pascal 行列による多項式のシフト上三角 Pascal 行列による多項式のシフト
上三角 Pascal 行列による多項式のシフト
 
A block-step version of KS regularization
A block-step version of KS regularizationA block-step version of KS regularization
A block-step version of KS regularization
 
Higher order derivatives for N -body simulations
Higher order derivatives for N -body simulationsHigher order derivatives for N -body simulations
Higher order derivatives for N -body simulations
 
Convergence methods for approximated reciprocal and reciprocal-square-root
Convergence methods for approximated reciprocal and reciprocal-square-rootConvergence methods for approximated reciprocal and reciprocal-square-root
Convergence methods for approximated reciprocal and reciprocal-square-root
 
Snake eats leapfrog (in Japanese)
Snake eats leapfrog (in Japanese)Snake eats leapfrog (in Japanese)
Snake eats leapfrog (in Japanese)
 
Rh typing
Rh typingRh typing
Rh typing
 

FMMの実装と導出

  • 2. 1 概要/動機 • FMM を実装するのはなかなか困難 – 難しいのは多重極法の概念や八分木を用いたアルゴリズムの 方ではない – むしろ「算数」の方、球面調和関数の展開中心をシフトする 部分 ∗ ブラックボックスとして打ち込むだけで大層な労力、必ず どこかで間違いそう ∗ (出版物の符号が間違えているなんてよくあるし) ∗ 導出から理解とか無理 「読めば実装できる」ぐらいのノートは必要 直感的な導出があった方がいろいろ安心
  • 3. 続き • Solid Harmonics(体球調和関数)での表記はわりと単純 • 紹介するもの – 実装に必要な数式一式(読みながら実装できる程度に) – 符号の定義は対称性がよくなるように – (多分)世界一簡単な導出 今回の話が簡単で当たり前すぎて何が有難いのか さっぱりわからなかったという人向けの参考文献 • Grengard & Rokhlin(1988), “The rapid evaluation of potential fields in three dimensions” • Epton & Dembart(1995) “Multipole translation theory for the three-dimensional laplace and helmholtz equations” • van Gelderen(1998) “The shift operators and translations of spherical harmonics”
  • 4. 2 Solid Harmonics いきなり「定義はこう」で申し訳ないが、‘Regular’ と ‘Singular’ のものを m (|m|−m)/2 R (r, θ, φ) = (−1) S m (r, θ, φ) = (−1) r |m| imφ P (cos θ)e , ( + |m|)! +(|m|+m)/2 ( − |m|)! |m| imφ P (cos θ)e , +1 r (1) (2) とする。P m は Legendre の陪多項式。ちなみに普通の球面調和関数は Y m (r, θ, φ) = (−1) (|m|−m)/2 s 2 + 1 ( − |m|)! |m| imφ P (cos θ)e . (3) 4π ( + |m|)! m の符号反転に対しては単なる複素共役にならず、R−m = (−1)m [Rm ]∗ , S −m = (−1)m [S m ]∗ となっている。 後々のため、S m の定義には (−1) +m の因数を含ませた。 ! +m 2 +1 (−1) r m Sm R = ( + m)!( − m)!
  • 5. 3 多重極能率と局所展開 球座標での Laplace 方程式 ∇2 Φ(r, θ, φ) = 0 の一般解はさっきのを用いて、 Φ(r, θ, φ) = ∞ X X h m m L R (r, θ, φ) + M m S −m i (r, θ, φ) , (4) =0 m=− と書ける。係数の Lm を local expansions(局所展開) M m を multipole moments 、 (多重極能率)と呼ぶことにする。それぞれ展開中心を rL 、rM として、 P2M: M m = X m qi · R (rM − ri ) (5) i M2P: Φ(r) = p λ X X µ −µ Mλ Sλ (r − rM ) (6) λ=0 µ=−λ L2P: Φ(r) = p λ X X λ=0 µ=−λ µ µ Lλ Rλ (r − rL ) (7)
  • 6. 4 全然「特殊」関数じゃないです デカルト座標で低次のものを書き下してみた。 (l, m) (0, 0) (1, 0) (1, 1) (2, 0) (2, 1) (2, 2) Rm 1 z −(x + iy)/2 (3z 2 − r2 )/4 −z(x + iy)/2 (x + iy)2 /8 Sm 1/r −z/r3 −(x + iy)/r3 (3z 2 − r2 )/r5 3z(x + iy)/r5 3(x + iy)2 /r5 特に Rm は 次の斉次多項式。因数に (x + iy)m 。
  • 7. 5 計算方法 ˜ P m (r, z) = r · (r sin θ)−m · P m (cos θ) ∈ R としておくと ˜ P m (r, z) · (x + iy)m = r · P m (cos θ) · eimφ 。あとは漸化式 ˜ P m (r, z) = 8 (−1)m (2m − 1)!! < m ˜ (2 − 1)z P −1 (r, z) : 2 − 1 z P m (r, z) − ˜ −1 −m + m − 1 2 ˜m r P −2 (r, z) −m ( = m) ( = m + 1) ( ≥ m + 2) (8) • • • • !! は二重階乗、n!! = n · (n − 2)!!, 1!! = 0!! = 1 m m ループを外側に、対角成分 Pm から を育てる Rm は division/square-root free 1.0/(int), 1.0/factrl(i) はテーブルで覚えておく
  • 8. 6 八象限対称 Rm (−x, −y, −z) = (−1) Rm (x, y, z), Rm (x, −y, z) = (−1)m R−m (x, y, z), Rm (−x, y, z) = R−m (x, y, z), Rm (−x, −y, z) = (−1)m Rm (x, y, z), 等々。コードの再利用にも有効。 S −m をよく使うが、これは ∝ (−1) +m R−m なので 引数に (−x, y, −z) を入れればいい。 (9)
  • 9. 7 昇降演算子 (Ladder Operators) ここが一番重要!(ただし証明略) デカルト座標の偏微分で添字を変化させる。 ( ∂x + i∂y ∂z −∂x + i∂y ( ) (Rm (r) S m (r)) = Rm+1 (r) −1 m R −1 (r) Rm−1 (r) −1 S m+1 (r) +1 m S +1 (r) S m−1 (r) +1 ) . (10) ±|m| = (±∂x + i∂y )|m| (∂z ) −|m| を定義しておくことで、 µ µ+m µ µ+m Dm Rλ = Rλ− 、Dm Sλ = Sλ+ 。 0 0 R0 = 1、S0 = 1/r も思い出して D−m Rm = 1、S m = Dm (1/r)。 +1 −1 0 2 2 2 Laplace 方程式:D1 D1 [ ] = D2 [ ] ⇔ (∂x + ∂y + ∂z )[ ] = 0 演算子 D
  • 10. 8 局所展開 [D −m µ Rλ (r)]r=0 = δ λ δmµ , (11) を考えれば、真空ポテンシャル場から Lm を抽出できる: Φ(r) = ∞ λ X X µ µ m Lλ Rλ (r − rL ) ⇒ L = [D −m Φ(r)]r=rL . (12) λ=0 µ=−λ つまり任意の場所で局所展開の係数が手に入る。よって Taylar 展開は、 Φ(r + ∆r) = ∞ λ X X µ −µ Rλ (∆r)[Dλ Φ(r)]. (13) λ=0 µ=−λ これは任意の Laplace 方程式の解 Φ(r) に適用できる。 ∆r の半径内が真空なら有効) (
  • 11. 9 加法定理 Rm (r) も S m (r) も Laplace 方程式の解であった。よって先程の展 開を適用すると以下の加法定理を得る: Rm (r + ∆r) = λ ∞ X X µ Rλ (∆r)Rm−µ (r), −λ (14) −(m+µ) µ Rλ (∆r)S +λ (r). (15) λ=0 µ=−λ S −m (r + ∆r) = ∞ λ X X λ=0 µ=−λ 余白にもう一度、 Φ(r + ∆r) = ∞ λ X X λ=0 µ=−λ µ −µ Rλ (∆r)[Dλ Φ(r)].
  • 12. 10 1/r ポテンシャルの展開 0 S0 (r) の加法定理として、 1 rS − rR 0 = S0 (rS − rR ) = ∞ X X S −m m (rS )R (−rR ) =0 m=− 3 2 ∞ X rR X ˆ m ˜∗ m 4π 4 = Y (θS , φS ) Y (θR , φR )5 r +1 2 + 1 m=− =0 S ∞ X rR = P (cos θSR ), +1 r =0 S with for rS cos θSR = (rS · rR )/( rS 後ろ2行とかは教科書にも載っているかも。 > rR , rR ). (16)
  • 13. 11 M2P, M2L 1 r − ri = ∞ X X S −m m (r − rM )R (rM − ri ), =0 m=− よりただちに M2P が確認できる: M m = X m qi · R (rM − ri ) ⇒ Φ(r) = i p λ X X µ −µ Mλ Sλ (r − rM ). λ=0 µ=−λ Φ(r) に D−m をあてて局所展開を作ると、 M2L: m L = p λ X X λ=0 µ=−λ µ −(m+µ) Mλ S +λ (rL − rM ). (17)
  • 14. 12 M2M 展開中心を rM から rM にシフトすることを考える。 Rm の加法定理から、 Rm (rM − ri ) = λ ∞ X X µ Rλ (rM − rM )Rm−µ (rM − ri ). −λ λ=0 µ=−λ P i qi を適用することで、 M2M: M m = λ X X µ M m−µ Rλ (rM − rM ). −λ λ=0 µ=−λ オーバーフローを避けるために、µ のループ範囲は、 max(−λ, m − ( − λ)) ≤ µ ≤ min(λ, m + ( − λ)). (18)
  • 15. 13 L2L Φ(r) = ∞ λ X X µ Lµ Rλ (r − rL ) ⇒ Lm = [D−m Φ(r)]r=r L , λ λ=0 µ=−λ を新しい展開中心 rL でもう一度展開するだけ: L2L: L m = p λ X X µ−m Lµ Rλ− (rL − rL ). λ (19) λ= µ=−λ ついでに、ポテンシャルの勾配は Φ(rL + dr) = L0 + (− L1 )dx + ( L1 )dy + L0 dz, (20) 0 1 1 1 で得られるので、L2P のかわりに p = 1 の L2L を使うと実装が楽。
  • 16. 14 配列への格納 0 ≤ ≤ p, |m| ≤ のとき Rm や M m は 1 + 3 + 5 + . . . + (2p + 1) = (p + 1)2 個の複素数からなる。 R−m = (−1)m [Rm ]∗ を考えると実効的に (p + 1)2 個の実数 でよい。1例として一次元配列 Xi (0 ≤ i < (p + 1)2 ) に、 { |m| R (m ≥ 0) X ( +1)+m = , (21) |m| R (m < 0) のように格納できる。
  • 17. 15 実行列化 複素数での線形変換 L m = p X λ X G m,µ µ M ,λ λ λ=0 µ=−λ 2 3 p λ X X m,µ µ m,−µ −µ 5 4Gm,0 M 0 + = (G M +G M ) , λ ,λ ,λ λ ,λ λ µ=1 λ=0 (22) を頑張って実数の変換で書くと、 L m = p X λ=0 p X 2 4Am,0 M 0 + λ ,λ λ X n µ=1 m,µ m,µ (A +C ) ,λ ,λ µ m,µ m,µ M + (−B +D ) λ ,λ ,λ 2 λ X n m,µ m,µ m,0 0 m 4B (B +D ) Mλ + = L ,λ ,λ ,λ µ=1 λ=0 ここで、Am,µ + iBm,µ ,λ ,λ = G m,µ , ,λ C M µ m,µ m,µ + (A −C ) λ ,λ ,λ m,µ m,µ m,−µ + iD = (−1)µ G . ,λ ,λ ,λ M M o 3 µ 5 , λ o 3 µ 5 , λ
  • 18. 16 まとめ • 書いてみるとそれなりに式が沢山になった • とはいえ「FMM の算数」の最短コースだったと思います • §8, §9 あたりは画期的かもしれないです (普通は §10 から始まる)