関数$ ( f(x) = e^{-x} \cdot \sin(x) ) $の極大値を求め、その結果をグラフ化します。
極大値は、関数の微分がゼロになる点で求められます。
1 | import matplotlib.pyplot as plt |
このコードでは、SciPyライブラリのminimize_scalar
関数を使用して極大値を求め、Matplotlibを使用して関数のグラフと極大値を描画しています。
[実行結果]
ソースコード解説
以下にソースコードの各部分を詳しく説明します。
1. ライブラリのインポート
1 | import matplotlib.pyplot as plt |
matplotlib.pyplot
: グラフ描画のためのライブラリ。numpy
: 数値計算のためのライブラリ。scipy.optimize.minimize_scalar
: 関数の最小化を行うためのSciPyの関数。
極大値を求める際に利用される。
2. 関数の定義
1 | def f(x): |
- 関数
f(x)
は$ (e^{-x} \cdot \sin(x)) $を返すように定義されています。
3. 関数の微分の定義
1 | def f_prime(x): |
- 関数
f_prime(x)
は関数f(x)
の導関数を表しています。
4. 極大値の計算
1 | result = minimize_scalar(lambda x: -f(x), bounds=(0, 4), method='bounded') |
minimize_scalar
関数を使用して関数f(x)
を最小化し、その結果をresult
に保存します。
ここで、lambda x: -f(x)
は最大値を求めるために関数を反転させています。bounds=(0, 4)
は x の範囲を指定しており、極大値を求める際の探索範囲を$0$から$4$に制限しています。- 最適化の結果から求めた極大値の x 座標を
max_x
、それに対応する y 座標をmax_y
に保存します。
5. グラフの描画
1 | x_values = np.linspace(0, 4, 100) |
np.linspace(0, 4, 100)
は$0$から$4$までの範囲を$100$点で等分した x の値を生成します。- 関数の値を計算し、その結果を
plt.plot
でグラフに描画します。 plt.scatter
を使用して極大値を赤い点で示します。- グラフのタイトルや軸のラベル、凡例、グリッドなどを追加しています。
6. 求めた極大値の座標の表示
1 | print("極大値の x 値:", max_x) |
- 最後に、求めた極大値の座標を表示しています。
このコードは、数学的な関数の極大値を効果的に求め、その結果をグラフで視覚化するために役立つものです。
結果解説
[実行結果]
求めた極大値の結果は以下の通りです。
- 極大値の x 値: 0.785398102208326
- 極大値の y 値: 0.32239694194483326
これらの値は、関数$ ( f(x) = e^{-x} \cdot \sin(x) ) $の極大値に対応します。
グラフ上では、赤い点が極大値の位置を示しています。
関数の形状と極大値についての説明:
- 関数$ ( f(x) = e^{-x} \cdot \sin(x) ) $は指数関数$ ( e^{-x} ) $と正弦関数$ ( \sin(x) ) $の積です。
- この関数は x 軸に対して周期的であり、指数関数によって急速に減少します。
- 極大値は、正弦関数の振動が指数関数の急激な減少に打ち消される地点で発生します。
この場合、$ ( x \approx 0.785 ) $で極大値が現れ、その値は$ ( y \approx 0.322 ) $です。 - グラフ上では、関数が x 軸に沿って減少する一方で、局所的な極大値が確認できます。
このようにして、数理解析を用いて関数の極大値を見つけ、それをグラフで視覚化しました。