ベッセルの微分方程式

ベッセルの微分方程式

ベッセルの微分方程式は、円筒対称な問題振動問題などさまざまな分野で現れる微分方程式です。

主に、円筒座標系球面座標系における偏微分方程式の解析解を求める際に用いられます。

ベッセルの微分方程式は以下の形式で表されます:

$$
x^2 y’’(x) + x y’(x) + (x^2 - \nu^2) y(x) = 0
$$

ここで、$ ( y(x) ) $は未知関数、$ ( \nu ) $は定数です。
この方程式は通常、変数分離法フロベニウス法などの手法を用いて解かれます。

ベッセルの微分方程式の解は、第1種ベッセル関数 $ ( J_\nu(x) ) $および第2種ベッセル関数 $ ( Y_\nu(x) ) $と呼ばれる関数で表されます。

これらの関数は、数学的な性質物理的な問題における様々な問題に利用されます。

Pythonコード

ベッセルの微分方程式を解くためには、SciPyのscipy.specialモジュールに含まれるjv関数を使用します。
この関数は、第1種ベッセル関数を計算するために使われます。

以下は、ベッセルの微分方程式を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
import numpy as np
import matplotlib.pyplot as plt
from scipy.special import jv

# 解析的解を計算する関数
def solve_bessel_equation(x_values, order):
return jv(order, x_values)

# x軸の値を定義
x_values = np.linspace(0, 20, 400) # 0から20までの範囲を400点で分割

# ベッセルの微分方程式の解を計算
order = 0 # ベッセル関数の次数
bessel_solution = solve_bessel_equation(x_values, order)

# グラフをプロット
plt.figure(figsize=(8, 6))
plt.plot(x_values, bessel_solution, label=f'Order {order}')
plt.title('Solution of Bessel Equation')
plt.xlabel('x')
plt.ylabel('Solution')
plt.legend()
plt.grid(True)
plt.show()

このコードでは、scipy.special.jv関数を使用してベッセルの微分方程式の解を計算し、それをグラフ化しています。

x_valuesx軸の値を指定し、orderベッセル関数の次数を示します。

[実行結果]

ソースコード解説

このプログラムは、ベッセルの微分方程式の解析的解を計算し、グラフ化するものです。

1. NumPyおよびMatplotlibのインポート:

  • import numpy as npNumPyライブラリnpとしてインポートします。
  • import matplotlib.pyplot as pltMatplotlibpyplotモジュールpltとしてインポートします。

2. Scipyの特殊関数モジュールからベッセル関数をインポート:

  • from scipy.special import jvScipyライブラリspecialモジュールからベッセル関数をインポートします。

3. ベッセルの微分方程式の解析的解を計算する関数:

  • solve_bessel_equation(x_values, order):与えられた次数(order)のベッセル関数の値を、与えられた$x$の値に対して計算します。

4. x軸の値を定義:

  • x_values = np.linspace(0, 20, 400):$0$から$20$の範囲を等間隔で$400$点に分割した値をx_valuesに格納します。

5. ベッセルの微分方程式の解を計算:

  • order = 0:計算するベッセル関数の次数を設定します(ここでは$0次$のベッセル関数を計算しています)。
  • bessel_solution = solve_bessel_equation(x_values, order):定義した関数を用いて、ベッセルの微分方程式の解析的解を計算します。

6. グラフのプロット:

  • plt.figure(figsize=(8, 6)):新しい図を作成し、図のサイズを指定します。
  • plt.plot(x_values, bessel_solution, label=f'Order {order}')x_valuesに対応するベッセル関数の値をプロットします。
    ラベルには計算したベッセル関数の次数が表示されます。
  • plt.title('Solution of Bessel Equation'):図のタイトルを設定します。
  • plt.xlabel('x')x軸のラベルを設定します。
  • plt.ylabel('Solution')y軸のラベルを設定します。
  • plt.legend():凡例を表示します。
  • plt.grid(True):グリッド線を表示します。
  • plt.show():グラフを表示します。

結果解説

[実行結果]

上記のグラフは、ベッセルの微分方程式の解である第1種ベッセル関数 $ ( J_0(x) ) $を示しています。

横軸は$ ( x ) $を表し、縦軸は対応するベッセル関数の値を表します。
このグラフは、$0$から$20$の範囲でベッセル関数を計算し、それをプロットしています。

ベッセル関数は、振動する性質を持ち、$ ( x ) $の増加に伴い周期的に振動します。
また、$ ( x ) $の値が小さいときには振動の幅が大きく、$ ( x ) $の値が大きいときには振動の幅が小さくなる傾向があります。

このグラフは、ベッセルの微分方程式の解である$ ( J_0(x) ) $の振る舞いを視覚的に示しています。