■続々・マーデルング定数(CsClの場合)

 CsCl型構造では,1個のCsイオンに最も接近しているのは8個のClイオンである.この最近接距離をrとすると,第2近接は(2/√3)rの距離にある6個のCsイオン,第3近接は(2√2/√3)rの距離にある12個のCsイオン,第4近接は(√11/√3)rの距離にある24個のClイオン,さらに8個のCsイオンが2rの距離(第5近接)に存在する.
 
 したがって,CsClのマーデルング級数は,
  8−6/(2/√3)−12/(2√2/√3)+24/(√11/√3)−8/4−・・・
になる.同様に,NaClのマーデルング級数は,
  6−12/√2+8/√3−6/2+24/√5−・・・
であり,NaClとCsClではイオンの並び方が異なっている.
 
 CsClのマーデルング級数を,実際に計算すると
 M=8−5.196−7.348+12.534−4−・・・
しかし,この方法では収束はよくない.マーデルング級数の困難な点は,級数のなかの陽イオンの項と陰イオンの項が別々に発散することである.すなわち,∞−∞の不定形であり,条件つき収束のため,マーデルング級数の収束はきわめて遅く,プログラム的には収束しないという結論になってしまう.→【補】
 
 上記の求め方はいわば極座標的な級数和であって,座標軸を変えることによって,マーデルング級数の足し上げの順序が変わってくる.マーデルング級数の面白い点は,順番を替えて足し合わせると収束させることができることである.しかも,プログラムの組み方によってはノロノロ這い回るカメをピョンピョン跳ね回るウサギに転化させることさえ可能なのである.
 
 実のところ,この一連のコラムを書くまでは,順番を入れ替えると収束する級数というのは数学上の病理学的な級数であって,応用分野では存在しないであろうと思っていた.小生にとってマーデルング級数の出現は意外な,青天の霹靂というべき事態であった.
 
 さて,前回掲げたプログラムで,CsClのマーデルング定数が正しい値に収束しなかった原因と対策について,東北大学・工学部・材料化学の遠藤忠教授よりご教示いただいたところ,NaClではアニオンとカチオンが交互に並び,格子面が電気的に中性になるが,CsClでは電気的中性条件を満たさないことが原因とのことであった. その対応策は如何に・・・・・?
 
===================================
 
 面心立方格子や対心立方格子では,直交座標を基本としている.直交座標軸は空間中の点の位置を表すのに最も取り扱いが簡単である.しかし,3つベクトルa↑,b↑,c↑の選び方は一義的には決まらず,いろいろな選び方がある.そこで,3つのベクトルをそれぞれの構造の単純並進ベクトルと呼ばれるものに採ってみた.そうすると,対心立方格子ではa=b=c,α=β=γ=109.49°,面心立方格子ではa=b=c,α=β=γ=60°の菱形体格子に変換されることになる.
 
 これによって,CsClでは,格子点に交互にカチオンとアニオンが並ぶ菱形体格子が基本単位になり,これを各軸方向に2倍して8個の集まりを考えると,NaCl型の単位格子と同様のイオン配置をした大きな菱形体格子ができあがる.非直交座標軸に変換されるのだが,この菱形体格子ではa=b=c,α=β=γ=109.49°であることに注意して計算してみると,実際にマーデルング定数は収束値(1.76267)に向かった.以下に,そのプログラムと計算結果を示す.
 
===================================
 
(プログラム)
 
1000 '
1010 ' *** Madelung constant ***
1020 '
1030 DIMENSION=3
1040 PRINT "dimension=";DIMENSION
1050 INPUT "distance =";D
1060 '
1070 'GOSUB *NACL
1080 'GOSUB *NACL2
1090 GOSUB *CSCL
1100 '
1110 PRINT "Madelung=";SUM
1120 END
1130 '
1140 *NACL:
1150 AA=2:BB=2:CC=2
1160 AB=0:BC=0:CA=0
1170 GOSUB *FCC
1180 RETURN
1190 '
1200 *NACL2:
1210 AA=SQR(2)
1220 BB=AA:CC=AA
1230 AB=1/2
1240 BC=AB:CA=AB
1250 GOSUB *FCC
1260 RETURN
1270 '
1280 *CSCL:
1290 AA=2:BB=2:CC=2
1300 AB=-1/3
1310 BC=AB:CA=AB
1320 GOSUB *FCC
1330 RETURN
1340 '
1350 *FCC:
1360 SUM=0
1370  FOR X=-D TO D-1
1380   FOR Y=-D TO D-1
1390    FOR Z=-D TO D-1
1400     PRINT "*";
1410     GOSUB *VERTEX:UV=U/8
1420     GOSUB *EDGE:UE=U/4
1430     GOSUB *FACE:UF=U/2
1440     GOSUB *CELL:UC=U
1450     SUM=SUM-UV+UE-UF+UC
1460    NEXT Z
1470   NEXT Y
1480   PRINT X,SUM
1490  NEXT X
1500 PRINT
1510 RETURN
1520 '
1530 *SUM3:
1540 S1=XP*XP*AA*AA+YP*YP*BB*BB+ZP*ZP*CC*CC
1550 S2=2*(XP*YP*AA*BB*AB+YP*ZP*BB*CC*BC+ZP*XP*CC*AA*CA)
1560 R2=ABS(S1+S2):R=SQR(R2)
1570 IF R<=0 THEN 1610
1580 '
1590 M=1
1600 U=U+M/R
1610 RETURN
1620 '
1630 *VERTEX:
1640 U=0
1650 XP=X:YP=Y:ZP=Z
1660 GOSUB *SUM3
1670 '
1680 XP=X+1:YP=Y:ZP=Z
1690 GOSUB *SUM3
1700 '
1710 XP=X:YP=Y+1:ZP=Z
1720 GOSUB *SUM3
1730 '
1740 XP=X+1:YP=Y+1:ZP=Z
1750 GOSUB *SUM3
1760 '
1770 XP=X:YP=Y:ZP=Z+1
1780 GOSUB *SUM3
1790 '
1800 XP=X+1:YP=Y:ZP=Z+1
1810 GOSUB *SUM3
1820 '
1830 XP=X:YP=Y+1:ZP=Z+1
1840 GOSUB *SUM3
1850 '
1860 XP=X+1:YP=Y+1:ZP=Z+1
1870 GOSUB *SUM3
1880 RETURN
1890 '
1900 *EDGE:
1910 U=0
1920 XP=X+.5:YP=Y:ZP=Z
1930 GOSUB *SUM3
1940 '
1950 XP=X:YP=Y+.5:ZP=Z
1960 GOSUB *SUM3
1970 '
1980 XP=X+1:YP=Y+.5:ZP=Z
1990 GOSUB *SUM3
2000 '
2010 XP=X+.5:YP=Y+1:ZP=Z
2020 GOSUB *SUM3
2030 '
2040 XP=X:YP=Y:ZP=Z+.5
2050 GOSUB *SUM3
2060 '
2070 XP=X+1:YP=Y:ZP=Z+.5
2080 GOSUB *SUM3
2090 '
2100 XP=X:YP=Y+1:ZP=Z+.5
2110 GOSUB *SUM3
2120 '
2130 XP=X+1:YP=Y+1:ZP=Z+.5
2140 GOSUB *SUM3
2150 '
2160 XP=X+.5:YP=Y:ZP=Z+1
2170 GOSUB *SUM3
2180 '
2190 XP=X:YP=Y+.5:ZP=Z+1
2200 GOSUB *SUM3
2210 '
2220 XP=X+1:YP=Y+.5:ZP=Z+1
2230 GOSUB *SUM3
2240 '
2250 XP=X+.5:YP=Y+1:ZP=Z+1
2260 GOSUB *SUM3
2270 RETURN
2280 '
2290 *FACE:
2300 U=0
2310 XP=X+.5:YP=Y+.5:ZP=Z
2320 GOSUB *SUM3
2330 '
2340 XP=X+.5:YP=Y:ZP=Z+.5
2350 GOSUB *SUM3
2360 '
2370 XP=X:YP=Y+.5:ZP=Z+.5
2380 GOSUB *SUM3
2390 '
2400 XP=X+1:YP=Y+.5:ZP=Z+.5
2410 GOSUB *SUM3
2420 '
2430 XP=X+.5:YP=Y+1:ZP=Z+.5
2440 GOSUB *SUM3
2450 '
2460 XP=X+.5:YP=Y+.5:ZP=Z+1
2470 GOSUB *SUM3
2480 RETURN
2490 '
2500 *CELL:
2510 U=0
2520 XP=X+.5:YP=Y+.5:ZP=Z+.5
2530 GOSUB *SUM3
2540 RETURN
 
 前回のプログラムと異なっている点は,
1)サブルーチン*CsClで,塩化セシウムの格子定数を与えている.変数AA,BB,CCはそれぞれ格子定数a,b,cに,変数AB,BC,CAは格子定数γ,α,βに対応している.塩化セシウムの場合,等長・等角の格子に設定してあるが,もちろん,これらの制限を緩めることも可能で,任意の平行六面体であってよい.
2)非直交座標における原点からの距離の計算(1540行〜1560行)
3)直交座標ではあれば,対称性が高いので,第1象限だけを数え上げてその結果を全空間に外挿することができる.その場合は約8倍の時間節約効果が期待できるが,任意の座標軸を取り扱う場合,2)の距離計算は原点に対する対称性しか成り立たたないから,その節約効果は高々2倍にすぎない.そのため,サブルーチン*SUM3の因子MをM=1とし特別な加速操作を行っていないこと(1590行)
だけであり,プログラムの書き換えもたった数行で済んでいる.
 
 また,1630行〜2540行で原点の位置を対心から頂点に変更しているが,中性(もしくはそれに近い)領域を1つの細胞とみなし,原点から外に向かって順々に各細胞ごとに加えてゆくやり方や細胞境界に存在するイオンに対しては分割して分数の電荷を与えるやり方など,基本的な骨格に変更はない.
 
===================================
 
(結果)単精度で計算した結果を示す.なお,加算される細胞数は
  8個→64個→216個→8d^3→・・・となる.
 
a)CsCl結晶の場合
 
  d=1 → α=1.7910 (細胞数:8)
  d=2 → α=1.7630 (細胞数:64)
  d=3 → α=1.7627 (細胞数:216)
  d=4 → α=1.7627 (細胞数:512)
  d=5 → α=1.7627 (細胞数:1000)
  d=6 → α=1.7627 (細胞数:1728)
  d=7 → α=1.7627 (細胞数:2744)
  d=8 → α=1.7628 (細胞数:4096)
 
 このように,非直交座標に変換して空間を切り直すとあっという間に正しい値:α=1.76276に収束した.CsClの場合,細胞全体としては中性であっても,格子面が中性条件を満たさないことは小生も気づいていたのであるが,直交座標を用いる限り,この点は解消されないし正しい値も求まらない.
 
 直交ベクトルはわかりやすいし,便利なものであるから慣用的に用いられているのであろうが,CsClの場合は確かに直交座標があだとなってしまう.ベクトルの選び方・格子変換が収束に対してこれほど有用だとは思いもよらず,驚異的でさえあった.
 
b)NaCl結晶の場合(菱形面格子)
 1200行〜1260行で格子定数を設定
 
  d=1 → α=1.7159 (細胞数:8)
  d=2 → α=1.7478 (細胞数:64)
  d=3 → α=1.7476 (細胞数:216)
  d=4 → α=1.7476 (細胞数:512)
  d=5 → α=1.7476 (細胞数:1000)
  d=6 → α=1.7476 (細胞数:1728)
  d=7 → α=1.7476 (細胞数:2744)
  d=8 → α=1.7476 (細胞数:4096)
 
c)NaCl結晶の場合(面心立方格子)
 1140行〜1180行で格子定数を設定
 
  d=1 → α=1.7518 (細胞数:8)
  d=2 → α=1.7477 (細胞数:64)
  d=3 → α=1.7476 (細胞数:216)
  d=4 → α=1.7476 (細胞数:512)
  d=5 → α=1.7476 (細胞数:1000)
  d=6 → α=1.7476 (細胞数:1728)
  d=7 → α=1.7476 (細胞数:2744)
  d=8 → α=1.7476 (細胞数:4096)
 
 また,NaClについてはc)のように,直交座標上でもマーデルング定数が求まっていたのだが,b)のように互いに60°で交わる菱面体格子(α=β=γ=60°)で表してもα=1.74756に収束し,直交軸・非直交軸のいずれからも同じ結果が得られたことになる.
 
===================================
 
【補】絶対収束・条件収束
 Σanの絶対値級数Σ|an|が収束するとき,Σanは絶対収束するという.また,Σanは収束するが,Σ|an|は収束しない級数は,条件収束するという.
 
 マーデルングの交代級数では,1種のディリクレ級数→【補】
  Σ±an/n^s  (s=1/2)
の計算をしていることになる.数学に堪能な方であれば,この級数が絶対収束するかどうか調べるべきところであるが,小生,巧い判定法を思いつかない.しかし,結晶の周期的構造の物理的意味を考えると絶対収束しないことは明らかであろう.
 
 さて,級数
  1/1−1/2+1/3−1/4+・・・
は調和級数
  1/1+1/2+1/3+1/4+・・・→ +∞
の交代級数である.この値は対数関数のマクローリン展開
  log(1+x)=x−1/2x2 +1/3x3 −1/4x4 +・・・
においてx=1とおくとlog2に収束することがわかる.この値はメルカトールの定数とかグレゴリーの定数と呼ばれている定数である.
 
 ところで,交代級数では,元の級数の項の順番を変えると収束値が変動してしまう.たとえば,負項を正項に変えて,あとでその2倍を引くと,
 1/1−1/2+1/3−1/4+・・・
=(1/1+1/2+1/3+1/4+・・・)−2(1/2+1/4+1/6+1/8+・・・)
=(1/1+1/2+1/3+1/4+・・・)−(1/1+1/2+1/3+1/4+・・・)
=0
 
 また,この交代級数は奇数の逆数と偶数の逆数に−1をかけたものからできているが,足し合わせる順序が違う級数,たとえば,負の項が2つの連続する正の項をはさんで現れる級数:
  {1/1+1/3−1/2}+{1/5+1/7−1/4}+・・・
では3/2log2に収束する.また,正の項に引き続いて負の項が2つの連続する級数:
  {1/1−1/2−1/4}+{1/3−1/6−1/8}+・・・
は1/2log2に収束することがわかっている.
 
(証明)
  {1/1−1/2−1/4}+{1/3−1/6−1/8}+・・・
  =1/2log2を示す.
 
 与えられた級数は
 Σ{1/(2n−1)−1/2(2n−1)−1/(2(2n−1)+2)}
=Σ{1/(4n−2)−1/4n}
 
 一方,1/1−1/2+1/3−1/4+・・・=log2より
1/2log2=1/2−1/4+1/6−1/8+・・・
       =(1/2−1/4)+(1/6−1/8)+・・・
       =Σ{1/(4n−2)−1/4n}
 
 これらは無限のパラドックスの一つの例である.有限級数ならば,足し算の順序に入れ替えは自由にできるが,無限級数となると話はまったく違ってくる.正の項と負の項がいずれも絶対収束するとき,級数の和の順番は勝手に変えてもよいのであるが,そうでない場合は,足す順序によっては級数の和が異なってくる.実は,条件収束級数の場合,級数の項の順番を適当に変えるとどんな値にでも収束させることができることが知られている.
 
定理(1):絶対収束級数は項の順序をどのように変えても絶対収束し,和も変わらない.(ディリクレ)
 
定理(2):条件収束級数は項の順序を適当に変えれば,指定された値(±∞でもよい)を和にもつようにも,振動するようにもできる.(リーマン)
 
===================================
 
【補】ディリクレ級数とメリン変換
 
 与えられた数列{an}の性質を知ろうとしたとき,数列{an}を直接調べるのではなく,たとえば,xを変数とする級数関数
  φ(x)=a0 +a1 x+a2 x2 +・・・+an xn+・・・
をつくり,この関数を観察します.数列の性質は何らかの形で関数の振る舞いに反映していると考えられます.こうして数列{an }の数論的性質(離散的)を,関数φ(x)の解析的性質(連続的)によって解明していこうとする発想が母関数のアイディアです.
 
 母関数
  φ(x)=Σank(n,x)
において,関数k(n,x)をカーネル(核関数)と呼びます.通常型母関数はカーネルとしてk(n,x)=x^nを,指数型母関数ではk(n,x)=x^n/n!を利用しています.k(n,x)=1/n^xを利用した場合,その母関数をディリクレ母関数と呼びます.{1,1,1,・・・}のディリクレ母関数はゼータ関数ζ(x)=Σ1/n^xです.
 
 また,関数f(x)に対して,積分
  h(s)=integral(0-∞)x^(s-1)f(x)dx
が存在するとき,これを関数f(x)のメリン変換といいます.exp(-x)のメリン変換はガンマ関数Γ(s)であることより,ガンマ関数の定義も1種のメリン変換です.
  Γ(s)=integral(0-∞)x^(s-1)exp(-x)dx
 
 ガンマ関数の定義式より
  integral(0-∞)x^(s-1)exp(-nx)dx=Γ(s)n^(-s)
ですから,ディリクレ級数Σann^-sについて
  Σann^-s=1/Γ(s)integral(0,∞)(Σanexp(-nt))t^(s-1)dt
が得られます.この式はディリクレ級数f(s)=Σann-sと同じ係数をもつベキ級数F(z)=Σanz^nはメリン変換
  f(s)=1/Γ(s)integral(0,∞)F(exp(-t))t^(s-1)dt
によって互いに結ばれていることを意味します.
 
(例)
ζ(s)=Σ1/n^sにおいて,F(exp(-t))=Σexp(-nt)=1/(exp(t)-1)
φ(s)=Σ(-1)^(n-1)/n^s=(1-2^(1-s))ζ(s)において,
F(exp(-t))=Σ(-1)^(n-1)exp(-nt)=1/(exp(t)+1)
L(s)= 1/1s −1/3s +1/5s −1/7s +・・・
において,F(exp(-t))=1/(exp(t)+exp(-t))
 以上より,
Γ(s)ζ(s)=integral(0-∞)x^(s-1)/(e^x-1)dx
Γ(s)ζ(s)(1-2^(1-x))=integral(0-∞)x^(s-1)/(e^x+1)dx
L(s)=1/Γ(s)integral(0,∞)t^(s-1)/(exp(t)+exp(-t))dt
 
 関数論において,ベキ級数は基本的な役割を演じますが,メリン変換によって,ベキ級数の性質からディリクレ級数の性質を導いたり,その逆も可能になります.ゼータ関数は最も簡単かつ最も重要なディリクレ級数f(s)=Σann-sですが,メリン変換は(解析的数論における)ゼータ関数と(関数論における)保型関数(ある種の2重周期的挙動をする複素変数関数)を結ぶ装置として,数論の世界では決定的に重要な意味をもっています.
 
===================================