ミクロカノニカル分布による計算
等間隔エネルギー準位の理想気体の温度τ(U,N)は ミクロカノニカル分布で計算すると MB統計:
BE統計とFD統計は閉じた式では表せないが、 漸化式で計算できる。
|
ミクロカノニカル分布では、与えられた全粒子数Nと全エネルギーUでとりうる状態数g(U,N)をかぞえて、エントロピー σ(U,N)=log g(U,N)から温度τ=1/σ'(U)を計算する。なお、ここでは簡単のため、エネルギーの単位を間隔Δεとし、Uを自然数として扱う。
◇
MB統計では「全エネルギーUをN個の区別できる粒子に分ける方法の数」をかぞえる。
例えばU=4、N=2のときは次の3とおり。
これは、一列に並べたU個の球をN個に仕切る(U-1箇所からN-1箇所を選ぶ)方法の数だから
エントロピーσは
温度τの逆数はエントロピーをUで微分したものだが、差分で計算すると
ここでUが最小値Nより少し大きければ1<τになるから、温度は大体粒子1個あたりのエネルギーになる。
(∵ U>(N-1)/(1-e-1)=1.58(N-1)ならば1<τ)
◇◇
BE統計では粒子が区別できないので「全エネルギーUをN個の自然数に分ける方法の数」をかぞえる。
例えばU=4、N=2のときは次の2とおり。
これは、いわゆる分割数P(U,N)である。
分割数は閉じた式で表せないが、漸化式で計算することはできる。(→2項係数,スターリング数,分割数)
int main() { unsigned long long p[N+1][M+1]; /* P(n,m)の計算と表示 */ for (int n=1; n<=N; n++) { printf("n=%0d",n); for (int m=1; m<=M; m++) { if(m==1) { p[n][m] = 1; } else if(m<=n-1) { p[n][m] = p[n-1][m-1] + p[n-m][m]; } else if(m==n) { p[n][m] = 1; } else { p[n][m] = 0; } printf(" %0llu",p[n][m]); } printf("\n"); } return 0; } |
◇◇◇
FD統計ではBE統計と同じく粒子は区別できず、さらに1つのエネルギー準位に1個しか入れないので「全エネルギーUをN個の相異なる自然数に分ける方法の数」をかぞえる。
例えばU=4、N=2のときは次の1とおり。
これは、相異なる自然数にわける分割数Q(U,N)である。
これも閉じた式で表せないが、漸化式で計算することはできる。
int main() { unsigned long long q[N+1][M+1]; unsigned long long r[N+1][M+1]; /* 初期化 */ for(int n=0; n<=N; n++) { for(int m=0; m<=M; m++) { if(m==0 && n==0) q[0][0] = 1; else q[n][m] = 0; } } /* 和因子の最大がkのとき */ for(int k=1; k<=N; k++) { /* QをバッファRへコピー */ for(int n=0; n<=N; n++) { for(int m=0; m<=M; m++) { r[n][m] = q[n][m]; } } /* バッファRを使ってQを更新 */ for(int n=0; n<=N-k; n++) { for(int m=1; m<=M; m++) { q[n+k][m] += r[n][m-1]; } } } (右へ続く) |
/* Q(n,m)の表示 */ for(int n=0; n<=N; n++) { printf("n=%0d",n); for(int m=1; m<=M; m++) { printf(" %0llu",q[n][m]); } printf("\n"); } return 0; } |
◇◇◇◇
結局、エントロピーσ(U,N)=log(g(U,N))を計算すると次のグラフのようになる。ただし点線は、高温のときにMBがBE,FDと一致するようにg(U,N)を「N個の区別できる粒子の並び方N!」で割ったものである。
これをUについて差分をとれば温度τ対Uの正確なグラフが描ける。