非線形最小化 SciPy

非線形最小化

非線形最小化問題を示し、結果をグラフ化します。

問題: 非線形最小化

最小化する関数: $ (f(x) = (x-3)^2 \cdot \sin(x)) $

この非線形関数の最小値を見つけ、最小値に対応する $ (x) $ の値を見つけ、結果をグラフで表示します。

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

# 最小化する関数
def objective_function(x):
return (x - 3)**2 * np.sin(x)

# 初期推定値
initial_guess = [0]

# 非線形最小化を実行
result = minimize(objective_function, initial_guess, method='BFGS')

if result.success:
print("Minimum found:")
print(f"x = {result.x[0]}, f(x) = {result.fun}")
else:
print("Minimum not found.")

# 関数をグラフ化
x = np.linspace(-3, 6, 400)
y = objective_function(x)

plt.plot(x, y, label='$f(x) = (x-3)^2 \cdot \sin(x)$')
plt.scatter(result.x[0], result.fun, c='red', label='Minimum')
plt.xlabel('x')
plt.ylabel('f(x)')
plt.title('Nonlinear Minimization')
plt.legend()
plt.grid()
plt.show()

このコードは、非線形関数 $ (f(x) = (x-3)^2 \cdot \sin(x)) $ の最小値を見つけ、最小値に対応する$ (x) $の値を見つけて、関数と最小値をグラフで表示します。

ソースコード解説

このソースコードは、SciPyを使用して非線形最小化問題を解決し、結果をグラフで視覚化するプログラムです。

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

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

  • numpymatplotlib は数値計算とグラフ作成のために使用されます。
  • scipy.optimize ライブラリから minimize 関数をインポートしています。
    この関数は最適化問題を解決するために使用されます。

2. 最小化する関数:

  • objective_function(x) という関数が定義されています。
    これは非線形最小化の対象となる関数で、(f(x) = (x - 3)^2 \cdot \sin(x)) です。
    この関数の最小値を見つけることが目的です。

3. 初期推定値:

  • initial_guess は初期推定値を表すリストで、この場合は ([0]) です。
    最適化アルゴリズムはこの初期値から最小値を見つけ始めます。

4. 非線形最小化の実行:

  • minimize 関数が呼び出されています。
    この関数は、最小化すべき関数 objective_function と初期推定値 initial_guess を引数として受け取り、最小化を実行します。
    method='BFGS' は最適化アルゴリズムとして BFGS アルゴリズムを指定しています。

5. 結果の表示:

  • result.successTrue の場合、最適化アルゴリズムが収束し、最小値が見つかったことを示します。
    この場合、result.x[0] は (x) の最小値に対応する値で、result.fun は関数の最小値です。
    これらの値が表示されます。

  • result.successFalse の場合、最適化アルゴリズムが収束しなかったことを示します。

6. 関数のグラフ化:

  • (x) の範囲を指定して、関数 (f(x)) の値を計算し、xy に格納します。

  • plt.plot を使用して、関数 (f(x)) のグラフを描画します。
    また、最小値に対応する点を plt.scatter を使用して赤い点で示します。

  • グラフに x-軸と y-軸のラベルを追加し、タイトルを設定します。

  • レジェンドを表示して、グリッド線を追加し、グラフを表示します。

このソースコードは、非線形最小化問題を解決し、その結果を視覚化する完全なプロセスを実行します。

結果解説

最小化の結果は次のようになりました:

  • $ (x) $ の値: -1.954467706695251
  • 関数の値: -22.762117807069014

この結果は、最小化された非線形関数$ (f(x) = (x-3)^2 \cdot \sin(x)) $において、最小値が求められたことを示しています。
$ (x) $の値$ -1.954467706695251$ において、関数の値は$ -22.762117807069014 $です。

これは、最適化アルゴリズムが与えられた関数に対して最小値を見つけたことを意味します。
最小値は非線形関数が最も小さな値を取る点で、この場合は$ (x \approx -1.954467706695251) $のときに$ (f(x) \approx -22.762117807069014) $になります。

最小値の位置と関数の値は、問題において最適な$ (x) $の値とそのときの目的関数の最小値を示しています。

この結果により、与えられた非線形関数の最小値が特定されました。

グラフ解説

  • 関数$ (f(x) = (x-3)^2 \cdot \sin(x)) $は$、(x) $の値に対して変動する曲線です。
  • グラフにはこの関数がプロットされ、最小値に対応する点が赤い点で示されています。
  • グラフは x-軸と y-軸にラベルが付けられており、タイトルが付いています。
  • グリッド線が表示され、関数の挙動が視覚的に確認できます。

結果とグラフは、与えられた非線形関数の最小値とその位置を示し、最適化プロセスの成功を示しています。