LoginSignup
2
1

More than 3 years have passed since last update.

【気体分子運動論】マクスウェルの速度分布を描画してみた!

Posted at

概要

気体分子運動論から導かれる分布にマクスウェルの速度分布があります.

今回はその温度依存性および,質量依存性を確かめるグラフを描画してみました.

動作環境

  • Windows10(64bit)
  • Python 3.7.2

マクスウェルの速度分布

マクスウェルの速度分布は以下の式で表されます.

P(v) = 4\pi v^2(\frac{m}{2\pi kT})^\frac{3}{2}\exp{-\frac{mv^2}{2kT}}

これより以下の様々な量が計算できます.

  • 最確速さ
v_{mp} = \sqrt{\frac{2kT}{m}}
  • 平均速度
<v> = \sqrt{\frac{8kT}{\pi m}} = \frac{2}{\sqrt{\pi}}v_{mp}
  • 根二乗平均速度
v_{rms} = \sqrt{<v^2>} = \sqrt{\frac{3kT}{m}} = \sqrt{\frac{3}{2}}v_{mp}

温度依存性

MVF_temperature.py
"""マクスウェルの速度分布の温度依存性を描画するプログラム"""
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm

m = 1.67 * 10**-27  # 中性子の質量 [kg]
k = 1.38 * 10**-23  # ボルツマン定数 [J/K]

def Maxwell(a):
    return (2/np.pi)**(1/2) * (v**2*np.exp(-v**2/(2*a**2))/a**3)

fig, ax = plt.subplots()

T = np.array([100*i for i in range(0,11)]) #温度Tの設定
T = T.reshape(1, T.size) #一次元配列はreshape()してから
T = T.T                 #転置する
v = np.linspace(0, 10000, 10000)
a_ = (k*T/m)**(1/2)
p = Maxwell(a_)

ax.set_xlabel(r'$v$')
ax.set_ylabel(r'$p(v)$')
ax.set_title('Maxwell velocity distribution')
ax.grid()
for i in range(0,T.size):
    l = str(T[i])       #T[i]はnumpy.ndarray型なので文字列型に変換
    l = l[1:-1] + "K"   #T[i]は[hoge]となっているのでhogeだけ取り出す
    ax.plot(v, p[i], color=cm.jet(i/T.size), label=l) #jet()の引数は0から1の実数
ax.legend(loc=0)
fig.tight_layout()
plt.show()

実行結果は以下のようになります.温度が高い方が,分子はエネルギーをたくさん持っており,元気に飛び回っているので,速度分布も速度方向に広がりが大きくなることがわかりますね.

temperature_dependency.png

質量依存性

MVF_mass.py
"""マクスウェルの速度分布の温度依存性を描画するプログラム"""
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm

m_p = 1.67 * 10**-27      # 中性子の質量 [kg]
k = 1.38 * 10**-23        # ボルツマン定数 [J/K]
T = 300                   # 温度[K]

def Maxwell(a):
    return (2/np.pi)**(1/2) * (v**2*np.exp(-v**2/(2*a**2))/a**3)

fig, ax = plt.subplots()

m = np.array([i*m_p for i in range(1,11)]) #温度Tの設定
m = m.reshape(1, m.size) #一次元配列はreshape()してから
m = m.T                 #転置する
v = np.linspace(0, 5000, 10000)
a_ = (k*T/m)**(1/2)
p = Maxwell(a_)

ax.set_xlabel(r'$v$')
ax.set_ylabel(r'$p(v)$')
ax.set_title('Maxwell velocity distribution')
ax.grid()
for i in range(0,m.size):
    l = str(int(m[i]/m_p))
    l = l + r'$m_p$' +'kg'
    ax.plot(v, p[i], color=cm.jet(i/m.size), label=l) #jet()の引数は0から1の実数
ax.legend(loc=0)
fig.tight_layout()
plt.show()

実行結果は以下のようになります.質量が小さい方が,分子は身軽なので運動しやすく,速度分布も速度方向に広がりが大きくなることがわかりますね.

mass_dependency.png

まとめ

いかがだったでしょうか?今回は,マクスウェルの速度分布の温度依存性と質量依存性を描画して確認してみました.
式を追うだけでなく,実際にグラフを書いてみることで発見することや理解が深まることもありますよね.
コードに関して何か建設的なフィードバックなどあればコメントいただけると助かります.

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1