■続・マーデルング定数(プログラムの改良と創意工夫)

 食塩(NaCl)は,Na+イオンとCl-イオンが交互に並んだジャングルジム状のイオン結晶であり,また,マーデルング定数とは,結晶中にある多数のイオン間の相互作用をすべて加算したものであって,結晶構造が決まれば決定される物性量である.食塩のマーデルング定数は,
  α=1.747565
と計算されている.
 
 前回のコラムに掲げた食塩のマーデルング定数の計算プログラムでは,パリティ(奇偶性)をチェックすることによって,引力・斥力の別を判定しているが,そのような方法は,Na+とCl-が交互に立方格子を組むという食塩の特殊性に依存していて,一般性に乏しいプログラムであるといわざるを得ない.
 
 そこで,マーデルング定数の計算プログラムを技法的に凝らずにわかりやすく,かつ,食塩以外の結晶にも用いることが可能な発展性のあるプログラムに改良して,最終的にはいろいろな結晶構造のマーデルング定数を求めてみたい.
 
===================================
 
(1)食塩の結晶
 食塩の場合,正負のイオンが交互に並んでいるため,単純立方格子(□の字の3次元版)を平行移動(並進)しても隣接する単純立方格子に重ねることができない.そのため,単純立方格子を8個合わせた複合格子を単位格子として考えることにする.この単位構造は田の字の3次元版であって,繰り返し並べていくことによって,周期性をもった食塩の結晶が形成される.
 
 この単位構造は,Na+イオンに着目すればわかるように,立方体の頂点と各面の中心にNa+イオンがある面心立方格子である.辺の中心と立方体に中心にはCl-イオンがあるが,Cl-イオンに着目しても面心立方格子からなっていて,食塩の結晶は,Na+イオンよりできている面心立方格子とCl-イオンよりなる面心立方格子が互いに貫入している相貫体である.
 
 また,単位格子のカドの格子点は8つの単位格子にまたがって存在していて,実質的にはe/8の電荷が有効に効くとして計算する.したがって,カドの格子点1/8が8個,同様にして,面心の格子点は1/2が6個,辺心の格子点は1/4が12個,体心の格子点は1個と数えるので,この単位格子の中には4個のNaCl分子が入っていることになる.
 
 このような単位格子となる多面体を繋いで空間を埋めていく手順を,プログラムに翻訳すると以下のようになる.(x,y,z)は単位格子の中心の座標である.
 
1000 '
1010 ' *** Madelung constant ***
1020 '
1030 DIMENSION=3
1040 PRINT "dimension=";DIMENSION
1050 INPUT "distance =";D
1060 '
1070 GOSUB *NACL
1080 '
1090 PRINT "Madelung=";SUM
1100 END
1110 '
1120 *NACL:
1130 SUM=0
1140  FOR X=0 TO D-1
1150   FOR Y=0 TO D-1
1160    FOR Z=0 TO D-1
1170     W=.5:GOSUB *VERTEX:UV=U/8
1180     W=.5:GOSUB *EDGE:UE=U/4
1190     W=.5:GOSUB *FACE:UF=U/2
1200     W=.5:GOSUB *CELL:UC=U
1210     SUM=SUM+UV-UE+UF-UC
1220    NEXT Z
1230   NEXT Y
1240  NEXT X
1250 SUM=SUM/2
1260 RETURN
1270 '
1280 *SUM3:
1290 IF XP<0 OR YP<0 OR ZP<0 THEN 1420
1300 R2=XP*XP+YP*YP+ZP*ZP:R=SQR(R2)
1310 IF R<=0 THEN 1420
1320 '
1330 M=8
1340 IF XP=0 AND YP<>0 AND ZP<>0 THEN M=4
1350 IF XP<>0 AND YP=0 AND ZP<>0 THEN M=4
1360 IF XP<>0 AND YP<>0 AND ZP=0 THEN M=4
1370 IF XP=0 AND YP=0 AND ZP<>0 THEN M=2
1380 IF XP=0 AND YP<>0 AND ZP=0 THEN M=2
1390 IF XP<>0 AND YP=0 AND ZP=0 THEN M=2
1400 '
1410 U=U+M/R
1420 RETURN
1430 '
1440 *VERTEX:
1450 U=0
1460 XP=X-W:YP=Y-W:ZP=Z-W
1470 GOSUB *SUM3
1480 '
1490 XP=X+W:YP=Y-W:ZP=Z-W
1500 GOSUB *SUM3
1510 '
1520 XP=X-W:YP=Y+W:ZP=Z-W
1530 GOSUB *SUM3
1540 '
1550 XP=X+W:YP=Y+W:ZP=Z-W
1560 GOSUB *SUM3
1570 '
1580 XP=X-W:YP=Y-W:ZP=Z+W
1590 GOSUB *SUM3
1600 '
1610 XP=X+W:YP=Y-W:ZP=Z+W
1620 GOSUB *SUM3
1630 '
1640 XP=X-W:YP=Y+W:ZP=Z+W
1650 GOSUB *SUM3
1660 '
1670 XP=X+W:YP=Y+W:ZP=Z+W
1680 GOSUB *SUM3
1690 RETURN
1700 '
1710 *EDGE:
1720 U=0
1730 XP=X:YP=Y-W:ZP=Z-W
1740 GOSUB *SUM3
1750 '
1760 XP=X-W:YP=Y:ZP=Z-W
1770 GOSUB *SUM3
1780 '
1790 XP=X+W:YP=Y:ZP=Z-W
1800 GOSUB *SUM3
1810 '
1820 XP=X:YP=Y+W:ZP=Z-W
1830 GOSUB *SUM3
1840 '
1850 XP=X-W:YP=Y-W:ZP=Z
1860 GOSUB *SUM3
1870 '
1880 XP=X+W:YP=Y-W:ZP=Z
1890 GOSUB *SUM3
1900 '
1910 XP=X-W:YP=Y+W:ZP=Z
1920 GOSUB *SUM3
1930 '
1940 XP=X+W:YP=Y+W:ZP=Z
1950 GOSUB *SUM3
1960 '
1970 XP=X:YP=Y-W:ZP=Z+W
1980 GOSUB *SUM3
1990 '
2000 XP=X-W:YP=Y:ZP=Z+W
2010 GOSUB *SUM3
2020 '
2030 XP=X+W:YP=Y:ZP=Z+W
2040 GOSUB *SUM3
2050 '
2060 XP=X:YP=Y+W:ZP=Z+W
2070 GOSUB *SUM3
2080 RETURN
2090 '
2100 *FACE:
2110 U=0
2120 XP=X:YP=Y:ZP=Z-W
2130 GOSUB *SUM3
2140 '
2150 XP=X:YP=Y-W:ZP=Z
2160 GOSUB *SUM3
2170 '
2180 XP=X-W:YP=Y:ZP=Z
2190 GOSUB *SUM3
2200 '
2210 XP=X+W:YP=Y:ZP=Z
2220 GOSUB *SUM3
2230 '
2240 XP=X:YP=Y+W:ZP=Z
2250 GOSUB *SUM3
2260 '
2270 XP=X:YP=Y:ZP=Z+W
2280 GOSUB *SUM3
2290 RETURN
2300 '
2310 *CELL:
2320 U=0
2330 XP=X:YP=Y:ZP=Z
2340 GOSUB *SUM3
2350 RETURN
 
 サブルーチン*NaClの1210行では,最近接イオンからの寄与を正とするように加え合わせている.Rは最近接イオン間距離である.その際,-e^2/R(クーロンエネルギー)を単位にする必要があるが,単位格子の1辺の長さは2Rであるから,1250行ではその補正計算をおこなっている.
 
 また,前述したように,頂点,辺の中心,面の中心に位置するイオンからの寄与は,それぞれ,e/8,e/4,e/2と考えられるので,1170行〜1190行で補正した.
 
 サブルーチン*SUM3の1330行〜1390行の因子Mは,第1象限だけを数え上げてその結果を全空間に外挿するための補正係数であって,あとでMを掛けてマーデルング定数を求めている.その際,軸上の点は2倍,面上の点は4倍,その他の点は8倍する必要がある.
 
 このプログラムの計算結果を示す.
  d=1 → α=1.4560 (細胞数:1)
  d=2 → α=1.7470 (細胞数:8)
  d=3 → α=1.7475 (細胞数:27)
  d=4 → α=1.7476 (細胞数:64)
  d=5 → α=1.7476 (細胞数:125)
  d=6 → α=1.7476 (細胞数:216)
  d=7 → α=1.7476 (細胞数:343)
  d=8 → α=1.7476 (細胞数:512)
  d=9 → α=1.7477 (細胞数:729)
  d=10 → α=1.7477 (細胞数:1000)
 
 以下,細胞(面心立方格子)の数を順次増して,同様の計算を行っていくが,正しいマーデルング定数:α=1.747565に比べて,幾分 over-estimate しているようである.
 
 次に,数え上げ方法を変更してみる.サブルーチン*NaClの計算方法だと立方体状の数え上げをおこなっていて,dの数を順次増やすと,細胞数は
  1個→8個→27個→d^3個→・・・
と増えていくが,FOR〜NEXTループをそれぞれ,
 
1150   FOR Y=0 TO D-1-X
1160    FOR Z=0 TO D-1-X-Y
 
のように変更すると,加算範囲を正八面体状に直すことができる.この場合,加算される細胞数は
  1個→4個→10個→d(d+1)(d+2)/6個→・・・
となる.dの値が大きくなると,立方体状の加算方式に比べて,加算細胞数は約1/6になり,当然のことながら,計算時間もかなり短縮される.
 
  d=1 → α=1.4560 (細胞数:1)
  d=2 → α=1.8697 (細胞数:4)
  d=3 → α=1.7233 (細胞数:10)
  d=4 → α=1.7463 (細胞数:20)
  d=5 → α=1.7472 (細胞数:35)
  d=6 → α=1.7474 (細胞数:56)
  d=7 → α=1.7475 (細胞数:84)
  d=8 → α=1.7475 (細胞数:120)
  d=9 → α=1.7476 (細胞数:165)
  d=10 → α=1.7476 (細胞数:220)
 
 立方体状の数え上げの場合と同程度の細胞数で比較すると,マーデルング定数の精度はほぼ等しいといえるだろう.
 
===================================
 
(2)塩化セシウムの結晶
 イオン結晶には,NaCl型構造以外に,塩化セシウム型(CsCl型)やせん亜鉛鉱型(ZnS型)などがある.CsClでは立方体の頂点にCs+イオンがあり,立方体の中心にCl-イオンがある単純立方格子をつくっている.体心立方格子のカドと中心に異種の原子を置くことによって得られると考えてもよいが,いずれにせよ,この立方体中には1分子のCsClが存在することになる.CsClのマーデルング定数は,
  α=1.762675
となることがわかっている.一方,ZnSのマーデルング定数は,
  α=1.63806
である.
 
 ところで,辺の長さが3の正方形に,その頂点を中心とする4つの単位円板を置くと,4つの円板で囲まれた部分に,第5の小さな円を入れることができる.ピタゴラスの定理によって第5の円の半径は√2−1だとわかる.これと同じことを3次元空間で行ってみる.辺の長さが2の立方体の8つのカドに単位球を8個置くと,中にできる隙間に第9の小さな球を入れることができ,第9の球の半径は√3−1となる.(n次元では半径√n−1のn次元超球が詰められる)→【補】
 また,辺の長さが2の正三角形に,その頂点を中心とする3つの単位円板を置くと,中にできる隙間には半径√3×2/3−1の円,同様に辺の長さが2の正四面体に単位球を4個置くと,半径√6/2−1の球を入れることができる.(n次元単体では半径(√n+1C2)×2/(n+1)−1=√{2/(1+1/n)}−1のn次元超球が詰められる)→【問】
 
 結晶中でも,原子(イオン)を球とみなした近似モデルが成立するが,陽イオンの半径(r+)と陰イオンの半径(r-)のイオン半径比r+/r-が,r+/r->√3−1=0.732を満たすものは,CsCl型となり,これより小さいとNaCl型(r+/r->√2−1=0.414),さらにこの比が小さくなるとZnS型(r+/r->√6/2−1=0.225)になる.
 
 食塩の例に倣って,単位格子を繋いで空間を埋めていくサブルーチンと計算結果を掲げる.
 
1120 *CSCL:
1130 SUM=0
1140  FOR X=0 TO D-1
1150   FOR Y=0 TO D-1
1160    FOR Z=0 TO D-1
1170   FOR Y=0 TO D-1-X
1180    FOR Z=0 TO D-1-X-Y
1190     W=.5:GOSUB *VERTEX:UV=U/8
1200     W=.5:GOSUB *CELL:UC=U
1210     SUM=SUM+UV-UC
1220    NEXT Z
1230   NEXT Y
1240  NEXT X
1250 SUM=SUM*SQR(3)/2
1260 RETURN
 
a)立方体状の数え上げ
  d=1 → α=1      (細胞数:1)
  d=2 → α=0.4397 (細胞数:8)
  d=3 → α=0.4156 (細胞数:27)
  d=4 → α=0.4091 (細胞数:64)
  d=5 → α=0.4064 (細胞数:125)
  d=6 → α=0.4051 (細胞数:216)
  d=7 → α=0.4043 (細胞数:343)
  d=8 → α=0.4038 (細胞数:512)
  d=9 → α=0.4035 (細胞数:729)
  d=10 → α=0.4033 (細胞数:1000)
 
b)正八面体状の数え上げ
  d=1 → α=1      (細胞数:1)
  d=2 → α=0.3705 (細胞数:4)
  d=3 → α=0.3162 (細胞数:10)
  d=4 → α=0.3829 (細胞数:20)
  d=5 → α=0.3906 (細胞数:35)
  d=6 → α=0.3947 (細胞数:56)
  d=7 → α=0.3970 (細胞数:84)
  d=8 → α=0.3984 (細胞数:120)
  d=9 → α=0.3993 (細胞数:165)
  d=10 → α=0.3999 (細胞数:220)
 
 収束速度は遅いものの,立方体状の数え上げでは上から,正八面体状の数え上げでは下からの挟み撃ちが起こり,最終収束値は0.4程度となるであろう.正確なマーデルング定数:α=1.762675とは大きくかけ離れてしまったが,今のところその原因はわかっていない.今回は,いろいろな結晶構造のマーデルング定数を求めるという所期の目的は達成できなかったが,原因が究明され次第,続編にて正しい計算方法について報告したいと考えている.
 
===================================
 
【問】n次元単体では,半径
  (√n+1C2)×2/(n+1)−1=√{2/(1+1/n)}−1
のn次元超球が詰められることを示せ.
 
===================================
 
【補】高次元のパラドックス
 人間の直観や勘は3次元までの世界では働きますが,4次元以上の高次元についてはあまり働かないのが普通です.次のような逆説をあげておきます.
 
 n次元ユークリッド空間において,1辺の長さが1の立方体をn次元単位立方体といいます.その体積は1ですが,もっとも離れた2頂点を結ぶ対角線の長さはn次元ユークリッド空間の距離の定義から
  √12+12+・・・+12=√n
となります.したがって,次元nが大きくなると対角線の長さはどんどん大きくなり,ついには地球でさえ含むことができるようになります.
 
 それに対して,n次元単位球はどんなに次元が高くても,長さが2より大きな線分を含むことはできません.また,n次元単位球の体積をVnとすると,V1=2(直径),V2=π(面積),V3=4π/3(体積)はご存知でしょう.
 vnは
  vn=π^(n/2)/Γ(n/2+1)=π^(n/2)/(n/2)!
であって,漸化式:
  vn/vn-2=2π/n
によって求めることができます.そして,任意のnに対して,
  vn=2(2π)^((n-1)/2)/n!!   nが奇数の場合
  vn=(2π)^(n/2)/n!!      nが偶数の場合
であり,1次元から6次元までを具体的に書けば,
  vn=2,π,4π/3,π2/2,8π2/15,π3/6
という具合に,πのべき乗は偶数次元になるたびに1つあがります.
 
 nが整数のとき,実際にVnの値を計算してみると,超球の体積はn=5のとき最大8π2/15=5.2637・・・となり,以後は減少します.そして,不思議なことに,単位球の体積はn→∞のとき0に収束するのです.
 
  n    Vn
  1   2
  2   3.14
  3   4.19
  4   4.93
  5   5.263
  6   5.167
  7   4.72
  8   4.06
  9   3.30
  10   2.55
 
 また,このことから,n次元超立方体[-1,1]n(体積2^n)において,単位超球が占める比率は,n=2であればπ/4(79%)であるが,n=5のときは16%に下落し,n=10となると0.25%になることも理解されます.ここで重要なのは,単位超球を超立方体中に置くと,次元が大きくなるにつれて隙間がより大きくなる点です.
 
 辺の長さが4の正方形に4つの単位円板を詰めると,4つの円板で囲まれた部分に,第5の小さな円を入れることができます.また,辺の長さが4の立方体の8つのカドに単位球を8個詰めると,中にできる隙間に第9の小さな球を入れることができます.ピタゴラスの定理によって第5の円,第9の球の半径はそれぞれ√2−1,√3−1だとわかります.
 
 これと同じことを4次元以上の空間で行うことができます.もはやイメージすることは不可能ですが,1辺の長さが4の4次元超立方体の16個のカドに16個の単位球を詰めると,中の隙間には半径√4−1=1の4次元超球(すなわち単位球)が入ります.同様に,1辺の長さが4のn次元超立方体の2n個のカドに単位球を詰めると,中の隙間に半径√n−1のn次元超球が詰められるのです.
 
 しかし,ここの驚きが潜んでいます.たとえば,n=9の場合,中に詰められるn次元超球の半径は√9−1=2であり,この球は外側の立方体の表面に接してしまい,n>9だとはみ出してしまうのです.この驚くべき結論は,日常生活ではありえないだけに面食らってしまいます.
 
 球の詰め込みに関するこのはみ出し現象は,モーザーのパラドックスとして知られているものですが,このように,高次元はいくつかのパラドックスの源泉になっていて,しばしばたちの悪い現象が起こるのです.
===================================