Tominaga 方程式

Tominaga 方程式

Tominaga 方程式は次のように定義される非線形微分方程式です:

$$
\frac{d^2 y}{dt^2} + \frac{dy}{dt} + y^3 = \cos(t)
$$

この方程式を数値的に解くために、Python を使用してグラフ化する方法を示します。

まずは、必要なライブラリをインポートします。

1
2
3
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp

次に、Tominaga 方程式の微分方程式を定義します。

1
2
3
4
def tominaga_equation(t, y):
dydt = y[1] # y' = dy/dt
d2ydt2 = np.cos(t) - y[1] - y[0]**3 # y'' = d^2y/dt^2
return [dydt, d2ydt2]

ここで tominaga_equation 関数は、Tominaga 方程式を表しています。

この関数は、現在の時刻$ ( t ) $と状態$ ( y ) $を引数として受け取り、微分方程式の右辺の値を計算して返します。

具体的には、$ ( y[0] ) $は$ ( y ) $の値を表し、$ ( y[1] ) $は$ ( \frac{dy}{dt} ) $の値を表します。

次に、微分方程式を数値的に解きます。

ここでは solve_ivp 関数を使用して、初期条件から微分方程式を解きます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 初期条件
y0 = [0.0, 0.0] # 初期位置と初速度

# 解く時間の範囲
t_span = [0, 20] # 0から20までの時間範囲

# 数値的に微分方程式を解く
sol = solve_ivp(tominaga_equation, t_span, y0, t_eval=np.linspace(t_span[0], t_span[1], 1000))

# 結果をプロット
plt.figure(figsize=(8, 6))
plt.plot(sol.t, sol.y[0], label='y(t)')
plt.plot(sol.t, sol.y[1], label="y'(t)")
plt.xlabel('t')
plt.ylabel('y(t), y\'(t)')
plt.title('Solution of Tominaga Equation')
plt.legend()
plt.grid(True)
plt.show()

このコードでは、solve_ivp 関数を使用して** Tominaga 方程式を数値的に解きます。
初期条件 y0[0.0, 0.0] と設定されており、
初期位置初速度を表します。
t_span は解く
時間の範囲**を表しています。

解が得られた後は、解の時間変化に対する y(t)y'(t)(速度)の値をプロットしています。
これにより、Tominaga 方程式の解の振る舞いや特性をグラフ上で視覚化することができます。

このコードを実行すると、Tominaga 方程式の解の時間変化が示されたグラフが表示されます。
解の振動周期性などの特性を観察することができます。

[実行結果]

ソースコード解説

ソースコードの各部分を詳しく説明します。

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

1
2
3
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp
  • numpy ライブラリは数値計算用の基本的な機能を提供します。
  • matplotlib.pyplot ライブラリはグラフ描画用の機能を提供します。
  • scipy.integrate.solve_ivp 関数は微分方程式を数値的に解くための機能を提供します。

2. Tominaga 方程式の定義

1
2
3
4
def tominaga_equation(t, y):
dydt = y[1] # y' = dy/dt
d2ydt2 = np.cos(t) - y[1] - y[0]**3 # y'' = d^2y/dt^2
return [dydt, d2ydt2]
  • tominaga_equation 関数は、Tominaga 方程式を定義します。
  • 引数 t は現在の時間を表し、y は状態ベクトル [y, dy/dt] を表します。
  • 関数内では、y[1]dy/dt として定義し、np.cos(t) - y[1] - y[0]**3d^2y/dt^2 として定義しています。
  • 関数は、[dy/dt, d^2y/dt^2] をリストとして返します。

3. 初期条件の設定

1
y0 = [0.0, 0.0]  # 初期位置と初速度
  • y0Tominaga 方程式の初期条件を設定します。
    ここでは初期位置を 0.0、初速度を 0.0 としています。

4. 解く時間の範囲の設定

1
t_span = [0, 20]  # 0から20までの時間範囲
  • t_span は解く時間の範囲を指定します。
    ここでは 0 から 20 までの時間範囲を指定しています。

5. 数値的に微分方程式を解く

1
sol = solve_ivp(tominaga_equation, t_span, y0, t_eval=np.linspace(t_span[0], t_span[1], 1000))
  • solve_ivp 関数を使用して、tominaga_equation 関数で定義された微分方程式を数値的に解きます。
  • tominaga_equation微分方程式を表す関数です。
  • t_span は解く時間の範囲を指定します。
  • y0初期条件を指定します。
  • t_eval=np.linspace(t_span[0], t_span[1], 1000) は、解を評価する時間点を指定します。
    ここでは時間範囲を$1000$個の等間隔で分割して解を評価します。

6. 結果のプロット

1
2
3
4
5
6
7
8
9
plt.figure(figsize=(8, 6))
plt.plot(sol.t, sol.y[0], label='y(t)')
plt.plot(sol.t, sol.y[1], label="y'(t)")
plt.xlabel('t')
plt.ylabel('y(t), y\'(t)')
plt.title('Solution of Tominaga Equation')
plt.legend()
plt.grid(True)
plt.show()
  • plt.figure(figsize=(8, 6)) は図のサイズを指定します。
  • plt.plot(sol.t, sol.y[0], label='y(t)')plt.plot(sol.t, sol.y[1], label="y'(t)") で、解 sol の時間変化をグラフ化します。
    sol.t は時間、sol.y[0] は位置 y(t)sol.y[1] は速度 y'(t) を表します。
  • plt.xlabel('t')plt.ylabel('y(t), y\'(t)') で軸ラベルを設定します。
  • plt.title('Solution of Tominaga Equation') でグラフのタイトルを設定します。
  • plt.legend() で凡例を表示します。
  • plt.grid(True) でグリッドを表示します。
  • plt.show() でグラフを表示します。

これにより、Tominaga 方程式の解 y(t) とその導関数 y'(t) の時間変化がグラフで可視化されます。

グラフから、解の振動特性を観察することができます。

結果解説

[実行結果]

グラフを説明します。

1. 横軸 (t):

  • 時間$ ( t ) $を表します。
    この例では、$0$から$20$までの時間範囲を等間隔で分割した点が横軸上に表示されます。

2. 縦軸 (y(t), y’(t)):

  • $ ( y(t) ) $と$ ( y’(t) ) $の値を表します。
  • $ ( y(t) ) $は Tominaga 方程式の解であり、時間 $ ( t ) $に対する位置変位を表します。
  • $ ( y’(t) ) $は$ ( \frac{dy}{dt} ) $の値であり、時間 $ ( t ) $に対する速度を表します。

3. グラフの表示:

  • グラフには、時間$ ( t ) $に対する$ ( y(t) ) $と$ ( y’(t) ) $の変化がプロットされます。
  • $ ( y(t) ) $の曲線は Tominaga 方程式の解の時間変化を示し、振動や非線形な特性が視覚化されます。
  • $ ( y’(t) ) $の曲線は$ ( y(t) ) $の時間変化に対する速度を示し、解の変化率や速度の振る舞いを表します。

4. タイトル:

  • グラフの上部には「Solution of Tominaga Equation」というタイトルが表示されます。
    これは、表示されている曲線が Tominaga 方程式の数値解を表していることを示します。

5. 凡例 (Legend):

  • グラフには「y(t)」と「y’(t)」という凡例が表示されています。
  • 「y(t)」は Tominaga 方程式の解$ ( y(t) ) $を表し、位置や変位の時間変化を示します。
  • 「y’(t)」は Tominaga 方程式の解の導関数$ ( y’(t) ) $を表し、速度や変化率の時間変化を示します。

グラフを通じて、Tominaga 方程式の解の時間変化や振る舞いが視覚的に理解できます。
特に非線形な微分方程式の場合、解の振動や周期性、またはがどのように非線形項$ ( \cos(t) ) $によって影響を受けるかがグラフから読み取れます。

数値的な解法を用いた場合は、計算の精度初期条件の影響を考慮する必要があります。
また、解の振動安定性を観察するために、時間範囲時間刻みの選択によって解の挙動が異なることもあります。