レナード-ジョーンズポテンシャル

レナード-ジョーンズポテンシャル

レナード-ジョーンズポテンシャルは、原子間または分子間の相互作用を表現するための一般的なポテンシャルエネルギーモデルです。

このポテンシャルは、2つの粒子(原子や分子)間の距離に依存しており、分子動力学シミュレーション物理化学で広く使用されています。

レナード-ジョーンズポテンシャル $ ( V(r) ) $は次の式で表されます:

$$
V(r) = 4 \epsilon \left[ \left( \frac{\sigma}{r} \right)^{12} - \left( \frac{\sigma}{r} \right)^6 \right]
$$

ここで、各パラメータの意味は以下の通りです:

  • $( r ) $: 分子間の距離(原子核間の最短距離からの距離)
  • $( \sigma ) $: レナード-ジョーンズポテンシャルがゼロになる距離であり、分子間の最小距離を表す
  • $( \epsilon ) $: ポテンシャルエネルギーの深さを決定する定数(吸引力または斥力の強さを示す)
  • $( V(r) ) $: $( r ) $の関数として定義されるポテンシャルエネルギー

このポテンシャルエネルギー関数は、$( r ) $に対して典型的な二重極を持ちます。
距離$ ( r ) $が$ ( \sigma ) $以下の範囲では、ポテンシャルエネルギーは正の値を持ち、原子や分子が斥力を受けます。
一方、距離$ ( r ) $が$ ( \sigma ) $を超えると、ポテンシャルエネルギーは負の値を取り、原子や分子は引力を感じます。


レナード-ジョーンズポテンシャルは、分子間の相互作用を表す一般的な近似式であり、原子や分子の結合エネルギー結合距離相互作用の性質を理解するために広く用いられます。

物理学化学の分野で、分子の構造性質を研究する際に重要な役割を果たします。

ソースコード

以下は、レナード-ジョーンズポテンシャルを解いてグラフ化するPythonコードの例です。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import numpy as np
import matplotlib.pyplot as plt

def lennard_jones_potential(r, epsilon, sigma):
"""
Calculate the Lennard-Jones potential energy for a given distance r.

Parameters:
r (float or numpy.ndarray): Distance between particles.
epsilon (float): Depth of the potential energy well.
sigma (float): Distance at which the potential energy is zero.

Returns:
float or numpy.ndarray: Potential energy at distance r.
"""
# Calculate the terms in the LJ potential
term1 = (sigma / r)**12
term2 = (sigma / r)**6

# LJ potential energy
potential_energy = 4 * epsilon * (term1 - term2)

return potential_energy

# Define parameters
epsilon = 1.0 # Depth of the potential energy well
sigma = 1.0 # Distance at which potential energy is zero

# Generate distance values
r_values = np.linspace(0.9, 3.0, 100) # Range of distances to evaluate

# Calculate LJ potential energies
lj_potentials = lennard_jones_potential(r_values, epsilon, sigma)

# Plot the LJ potential
plt.figure(figsize=(8, 6))
plt.plot(r_values, lj_potentials, label='Lennard-Jones Potential')
plt.xlabel('Distance (r)')
plt.ylabel('Potential Energy (V)')
plt.title('Lennard-Jones Potential Energy')
plt.axhline(0, color='black', linestyle='--', linewidth=0.5) # Horizontal line at V=0
plt.axvline(sigma, color='red', linestyle='--', label='Sigma (σ)') # Vertical line at sigma
plt.legend()
plt.grid(True)
plt.show()

このコードでは、lennard_jones_potential 関数で与えられた距離$ ( r ) $に対するレナード-ジョーンズポテンシャルを計算し、numpy.linspace を使用して一定の範囲内で距離$ ( r ) $を生成します。
その後、計算されたポテンシャルエネルギーをグラフ化しています。

グラフでは、距離$ ( r ) $がレナード-ジョーンズポテンシャルの影響を受ける範囲を示すために、ポテンシャルがゼロになる距離$ ( \sigma ) $が赤色の破線で示されています。

[実行結果]

ソースコード解説

ソースコードを詳しく説明します。

1. ライブラリのインポート

1
2
import numpy as np
import matplotlib.pyplot as plt
  • numpyは数値計算のためのライブラリであり、配列や数学関数を効率的に扱うことができます。
  • matplotlib.pyplotはグラフ描画ライブラリであり、このプログラムではレナード-ジョーンズポテンシャルのグラフ化に使用されます。

2. レナード-ジョーンズポテンシャル関数の定義

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def lennard_jones_potential(r, epsilon, sigma):
"""
Calculate the Lennard-Jones potential energy for a given distance r.

Parameters:
r (float or numpy.ndarray): Distance between particles.
epsilon (float): Depth of the potential energy well.
sigma (float): Distance at which the potential energy is zero.

Returns:
float or numpy.ndarray: Potential energy at distance r.
"""
# Calculate the terms in the LJ potential
term1 = (sigma / r)**12
term2 = (sigma / r)**6

# LJ potential energy
potential_energy = 4 * epsilon * (term1 - term2)

return potential_energy
  • lennard_jones_potential関数は、与えられた距離 r に対するレナード-ジョーンズポテンシャルエネルギーを計算します。
  • r粒子間の距離で、epsilonポテンシャルエネルギーの深さを表し、sigmaポテンシャルエネルギーがゼロになる距離を表します。
  • term1term2レナード-ジョーンズポテンシャルの計算に使用される項です。
  • potential_energyレナード-ジョーンズポテンシャルの値を計算し、その値を返します。

3. パラメータの定義

1
2
epsilon = 1.0  # Depth of the potential energy well
sigma = 1.0 # Distance at which potential energy is zero
  • epsilonsigmaレナード-ジョーンズポテンシャルのパラメータであり、それぞれポテンシャルエネルギーの深さゼロになる距離を表します。

4. 距離の範囲の生成

1
r_values = np.linspace(0.9, 3.0, 100)  # Range of distances to evaluate
  • np.linspace関数を使用して、$0.9$から$3.0$までの範囲を等間隔で$100$点に分割した距離の配列 r_values を生成します。

5. レナード-ジョーンズポテンシャルの計算

1
lj_potentials = lennard_jones_potential(r_values, epsilon, sigma)
  • 先ほど定義したlennard_jones_potential関数を使用して、各距離 r_values に対するレナード-ジョーンズポテンシャルエネルギーを計算し、lj_potentialsに格納します。

6. プロットの作成と表示

1
2
3
4
5
6
7
8
9
10
plt.figure(figsize=(8, 6))
plt.plot(r_values, lj_potentials, label='Lennard-Jones Potential')
plt.xlabel('Distance (r)')
plt.ylabel('Potential Energy (V)')
plt.title('Lennard-Jones Potential Energy')
plt.axhline(0, color='black', linestyle='--', linewidth=0.5) # Horizontal line at V=0
plt.axvline(sigma, color='red', linestyle='--', label='Sigma (σ)') # Vertical line at sigma
plt.legend()
plt.grid(True)
plt.show()
  • matplotlib.pyplotを使用してグラフを描画します。
  • plt.plotで距離 r_values に対するレナード-ジョーンズポテンシャルエネルギーをプロットします。
  • 軸ラベルやタイトルを設定し、水平線と垂直線を追加しています。
  • plt.show()でグラフを表示します。

このプログラムは、レナード-ジョーンズポテンシャルを計算し、距離に対するポテンシャルエネルギーの振る舞いを視覚化するためのものです。

グラフ解説

[実行結果]

このグラフは、レナード-ジョーンズポテンシャル(Lennard-Jones potential)を示しています。
レナード-ジョーンズポテンシャルは、原子間または分子間のポテンシャルエネルギーを表す一般的なモデルであり、分子動力学シミュレーション物理化学で広く使用されています。

以下は、グラフの詳細説明です:

X軸(Distance (r)):

分子間の距離 $( r ) $を表します。
この距離は、原子間の最小距離から離れるにつれて増加します。
単位は任意の長さの単位(例えば、アングストロームなど)です。

Y軸(Potential Energy (V)):

レナード-ジョーンズポテンシャル $( V(r) ) $を表します。
このポテンシャルエネルギーは、分子間の距離 $( r )$ に対して計算され、分子間相互作用のエネルギーを示します。
単位はエネルギーの単位(例えば、エレクトロンボルトなど)です。

Lennard-Jones Potential Curve:

グラフ上の曲線は、レナード-ジョーンズポテンシャル $( V(r) ) $の値を$ ( r ) $の範囲で表します。
曲線は$ ( r ) $が大きくなるにつれてゼロに収束し、$( r ) $が小さいと急激に増加します。

Sigma (σ)の破線:

赤色の破線は、レナード-ジョーンズポテンシャルゼロになる分子間の最小距離 $( \sigma ) $を示します。
この距離において、ポテンシャルエネルギーは最小値を持ちます。

グラフの特徴:

レナード-ジョーンズポテンシャル曲線は、分子間の距離に応じてポテンシャルエネルギーがどのように変化するかを示します。
$( r ) $が$ ( \sigma ) $以下の範囲では斥力が支配的で$、( r ) $が大きくなると引力が支配的になります。
曲線の形状は、分子間の相互作用に関する基本的な特性を示しています。

このグラフは、物理化学分子動力学シミュレーションなどで、原子や分子間の相互作用を理解するための重要なツールとして使用されます。