導入
親や嫁に「なんで部屋が散らかっているの!」と言われ、「エントロピーは増大するから仕方ないね」なんて言っている人のなんと多いことか...
本記事ではわかりにくい概念であるエントロピーをシミュレーションをして、理解してもらおうと思う。
目次
- 熱力学における状態
- エントロピーと状態数
- 実装と結果
1章 熱力学における状態
熱力学には様々な物理量が存在し、圧力$P$,体積$V$,化学ポテンシャル$\mu$,そしてエントロピー$S$等無数にある。しかし最も基礎的な量は三つだけである。
それはエネルギー$E$,体積$V$,粒子数$N$である。これらによってそれぞれの熱力学的な量を計算することができる。
2章 エントロピーと状態数
あるエネルギー$E$,体積$V$,粒子数$N$の系が何通りあるかを$\Omega$で表し、それを状態数という。
ここで一つモデル化を行う。

箱が4つ(V=4)、球体が二つ(N=2),シールが6つ(E=6)であり、すべての粒子がある箱の中に重複を許さずにいれ、シールは重複を許してボールに張り付けることにする。これはエネルギーをある場所にある粒子に対して割り振ることと対応している。
この時の状態数はコンビネーション$\ _nC_r$を用いて以下のように計算される。
\ _4C_2\times \ _{7}C_6 = 42 通り
より一般化すると
\Omega = \ _vC_n\times \ _{N+E-1}C_E \tag{1}
この時エントロピー$S$は対数を用いて以下のように計算する
S = k_b\log\Omega\tag{2}
このエントロピーはあるうれしい性質を持つ。
系二つが($E_1$,$V_1$,$N_1$)、($E_2$,$V_2$,$N_2$)であるとき、これらの全体の系のエントロピーはもともとの系のエントロピーの足し合わせ$S_1+S_2$になる。(ここでは粒子とエネルギーの交換がないものとする)
これはそれぞれの状態数に着目することによって理解できる。
系1の状態数が$\Omega_1$,系2の状態数が$\Omega_2$のとき全体の系の状態数は場合の数の性質より$\Omega_1\times\Omega_2$になる。これに対してエントロピーは対数を取る。
S_{sum} = k_b\log\Omega_1\Omega_2 = k_b(\log\Omega_1+\log\Omega_2) = S_1+S_2\tag{3}
つまり独立な系の足し合わせであれば、単純なエントロピーの足し合わせで済む。
ここに粒子とエネルギーの移動を考えると系1の粒子が系2の箱に入ったり、系1のエネルギーシールが系2の粒子に貼られるパターンを考えなければならないため、状態数はさらに増え、($S_{sum}\ge S_1+S_2$)になる。
3章 実装と結果
前章のエントロピーをpythonでシミュレーションすることを考える。
各粒子に対してidとエネルギーと入っている系のidを定義する。
class Partcle():
def __init__(self,E):
self.E = E
self.v = math.sqrt(E)
self.systemId = (SYSTEM_SIZE)//2*SYSTEM_SIZE + (SYSTEM_SIZE)//2
また系のクラスを以下のように定義する。
idと(E,N,V)とエントロピーを式(1)(2)のように計算する。
class System():
def __init__(self,id,V):
self.id = id
self.V = V
self.sumE = None
self.N = None
self.S = None
x = id % SYSTEM_SIZE
y = id // SYSTEM_SIZE
self.edges = [posToId(x+1,y),posToId(x-1,y),posToId(x,y+1),posToId(x,y-1)]
def setE(self,particles):
self.N = 0
self.sumE = 0
for i in range(len(particles)):
if(particles[i].systemId == self.id):
self.sumE += particles[i].E
self.N += 1
def culcS(self):
spatial = log_comb(self.V, self.N)
energy = log_comb
self.sumE + self.N - 1,
self.sumE
)
return spatial+energy
この系を5x5の正方形に並べ、その中に1万粒子を配置する。要件は以下のようになる。
Particle(P)
$$
P.id \in {1,2,3...10000},P.E \in {1,2,3...100}
$$
System(S)
$$
S.id \in {1,2,3...25},S.V \in {10^6...10^7}
$$
ある粒子はそれが所属している系の体積と自身のエネルギーによって上下左右の系に移動する。確率は以下のように定義する。
parcent = 1000*math.sqrt(p.E)/s.V
これをすべての粒子で3000ステップ繰り返し、エントロピーを計算する
結果
シミュレーションをした結果は以下のようになる。
左が各系の粒子数のエネルギーをテキストで、色はそれぞれのエントロピーの高さを表す。
右は全系の合計エントロピーを表す。
https://youtu.be/fEL3xx5g0YE
中央に置いた粒子が上下左右に遷移していく様子が見て取られ、それぞれの中心のもともとエントロピーが高かった系に関してはエントロピーが減少し、周りのエントロピーは増大する。
総体として全エントロピーはある値に収束していく。
異なる初期状態で行った結果のエントロピーの増加は以下のようになった

ほぼ同一のエントロピーに収束することが明らかになった。
終わりに
本記事の種本は「数理科学2026の5月号」である。あともう1本これを種本にかけると思う(体力次第ではあるが)
結局部屋は外部から粒子かエネルギーを持ってこないことにはエントロピーは増大していかないので、部屋に余計なものは持ち込まないのが最適ですね