自由落下 SciPy

自由落下

物体の自由落下を考えたシミュレーションを考えます。

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
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint

# 物体の自由落下を表す微分方程式
def free_fall(y, t):
g = 9.8 # 重力加速度 (m/s^2)
dydt = [y[1], -g] # [速度, 加速度]
return dydt

# 初期条件
y0 = [0, 0] # 初期位置と初速度

# 時間の範囲
t = np.linspace(0, 5, 100)

# 微分方程式を解く
sol = odeint(free_fall, y0, t)

# 結果をグラフ化
plt.plot(t, sol[:, 0], label='Position (m)')
plt.plot(t, sol[:, 1], label='Velocity (m/s)')
plt.xlabel('Time (s)')
plt.legend()
plt.title('Free Fall Simulation')
plt.show()

この例では、物体の自由落下を表す微分方程式をSciPyのodeint関数を使用して数値的に解き、その結果をグラフ化しています。

[実行結果]

ソースコード解説

このソースコードは、SciPyを使用して物体の自由落下をシミュレーションし、結果をグラフで視覚化するプログラムです。

以下に、ソースコードの詳細な説明を示します。

ライブラリのインポート:

1
2
3
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
  • numpy: 数値計算を行うためのライブラリ。
    数学的な演算や配列操作などに使用されます。
  • matplotlib.pyplot: グラフの描画に使用されるライブラリ。
  • scipy.integrate.odeint: 常微分方程式を数値的に解くためのSciPyライブラリの関数。

自由落下の微分方程式:

1
2
3
4
def free_fall(y, t):
g = 9.8 # 重力加速度 (m/s^2)
dydt = [y[1], -g] # [速度, 加速度]
return dydt
  • free_fall関数: 物体の自由落下を表す微分方程式を定義します。
    • y: 状態ベクトル(位置と速度の組み合わせ)
    • t: 時間
    • g: 重力加速度
    • dydt: 速度と加速度の変化を表すベクトル

初期条件:

1
y0 = [0, 0]  # 初期位置と初速度
  • y0: 物体の初期位置と初速度を示す状態ベクトル。

時間の範囲:

1
t = np.linspace(0, 5, 100)
  • t: シミュレーションの時間範囲を示す配列。
    $0$から$5$までの時間を$100$等分した配列。

微分方程式の解法:

1
sol = odeint(free_fall, y0, t)
  • odeint: SciPyの関数で、常微分方程式を数値的に解く。
    free_fall関数に対して初期条件y0と時間範囲tを与えて解を計算し、solに格納。

結果のグラフ化:

1
2
3
4
5
6
plt.plot(t, sol[:, 0], label='Position (m)')
plt.plot(t, sol[:, 1], label='Velocity (m/s)')
plt.xlabel('Time (s)')
plt.legend()
plt.title('Free Fall Simulation')
plt.show()
  • グラフ描画: 解かれた結果をグラフとして描画。
    • sol[:, 0]: 位置の時間変化を表す曲線。
    • sol[:, 1]: 速度の時間変化を表す曲線。
    • xlabel: x軸のラベル(時間)。
    • legend: 曲線の説明を表示。
    • title: グラフのタイトル。
    • show: グラフの表示。

このプログラムは、物体の自由落下を数値的にシミュレーションし、その結果を位置速度のグラフで視覚化します。

結果解説

[実行結果]

上記のグラフは、物体の自由落下を表すシミュレーションの結果を示しています。

以下はグラフの詳細な説明です。

1. Position vs. Time (位置と時間の関係)

  • x軸(横軸): 時間(秒)
  • y軸(縦軸): 物体の位置(メートル)
  • : 時間に対する物体の位置の変化を表現しています。

グラフは時間の経過に伴って物体がどれだけ下方向に移動するかを示しています。
最初はゼロから始まり、時間が進むにつれて増加します。
自由落下の影響で、物体は加速して地面に向かっています。

2. Velocity vs. Time (速度と時間の関係)

  • x軸: 時間(秒)
  • y軸: 物体の速度(メートル/秒)
  • : 時間に対する物体の速度の変化を表現しています。

グラフは時間が経つにつれて速度が増加し、これもまた自由落下の影響を反映しています。
最初はゼロから始まり、時間が進むにつれて減速せずに増加していきます。
物体が地面に向かって自由落下するためです。

このシミュレーションでは、物体が重力に従って自由落下する様子を可視化しています。
物体の位置は時間とともに変化し、速度も時間に応じて変動します。

この例は物理学的な現象を数値的にモデリングし、SciPyを使用して微分方程式を解くことで、結果をグラフとして視覚化しています。