ローゼンブロック関数
ローゼンブロック関数は、最適化アルゴリズムの性能テストやベンチマークによく使用される非線形関数です。
ローゼンブロック関数の式は次の通りです:
$$
f(x, y) = (a - x)^2 + b \cdot (y - x^2)^2
$$
ここで、$( a ) と ( b ) $は任意の定数ですが、一般的には$ ( a = 1 ) $および$ ( b = 100 ) $の値が使用されます。
それでは、この関数をPythonで定義し、3Dプロットを行ってみましょう。
1 | import numpy as np |
このコードでは、ローゼンブロック関数を定義し、その関数を使用して3Dプロットを行っています。
[実行結果]
ソースコード解説
このソースコードは、Pythonを使用してローゼンブロック関数を3Dプロットするものです。
以下は、コードの章立て詳細な説明です:
1. モジュールのインポート:
import numpy as np
:
NumPyライブラリをnp
としてインポートします。
NumPyは数値計算を行うための重要なライブラリであり、このコードでは行列操作や数学的関数を使用します。import matplotlib.pyplot as plt
:
Matplotlibライブラリからplt
としてサブモジュールをインポートします。
Matplotlibはグラフを描画するためのライブラリであり、このコードではプロットの作成に使用されます。from mpl_toolkits.mplot3d import Axes3D
:
Matplotlibの3Dプロット機能を使用するために、Axes3D
サブモジュールをインポートします。
2. ローゼンブロック関数の定義:
def rosenbrock(x, y)
:
ローゼンブロック関数を定義します。
この関数は2つの変数x
とy
を取り、それらの値に基づいて関数値を計算します。
ローゼンブロック関数は、$ ( f(x, y) = (a - x)^2 + b \cdot (y - x^2)^2 ) $の形をしています。
この関数は、最小値が$ ( x = a ) $および$ ( y = x^2 ) $のときに$ ( 0 ) $になります。
3. データの生成:
x = np.linspace(-2, 2, 100)
:
区間 ([-2, 2]) を100等分したx
の値を生成します。y = np.linspace(-1, 3, 100)
:
区間 ([-1, 3]) を100等分したy
の値を生成します。X, Y = np.meshgrid(x, y)
:x
とy
の値からメッシュグリッドを生成します。
メッシュグリッドは、x
とy
の組み合わせに対する関数の値を計算するために使用されます。Z = rosenbrock(X, Y)
:
ローゼンブロック関数をX
とY
のメッシュグリッドに適用し、対応する関数の値を計算します。
4. 3Dグラフのプロット:
fig = plt.figure()
:
新しい図を作成します。ax = fig.add_subplot(111, projection='3d')
:
3Dサブプロットを図に追加します。ax.plot_surface(X, Y, Z, cmap='viridis')
:
3D曲面をプロットします。
X
、Y
、Z
はそれぞれx
座標、y
座標、関数の値であり、cmap
パラメータはカラーマップを指定します。
5. 軸ラベルの設定:
ax.set_xlabel('X')
,ax.set_ylabel('Y')
,ax.set_zlabel('Z')
:
X軸、Y軸、Z軸のラベルを設定します。
6. グラフの表示:
plt.show()
:
プロットを表示します。
これにより、ローゼンブロック関数の3Dプロットが生成され、その形状や特性を視覚的に理解することができます。
結果解説
[実行結果]
このグラフは、ローゼンブロック関数$ ( f(x, y) = (a - x)^2 + b \cdot (y - x^2)^2 ) $の3Dプロットです。
この関数は、2つの変数$ ( x ) $と$ ( y ) $の値に依存しています。
- $X軸$と$Y軸$は、それぞれ変数$ ( x ) $と$ ( y ) $の値域を示しています。
これらの値は、指定した範囲内で等間隔に設定されています。 - $Z軸$は、関数$ ( f(x, y) ) $の値を表しています。
つまり、Z軸の値は、各$ ( x ) $と$ ( y ) $の組み合わせに対する関数の値です。 - 3Dプロット上の曲面は、関数$ ( f(x, y) ) $の値に対応しています。
曲面の高さや形状は、$( x ) $と$ ( y ) $の値によって異なります。
より高い曲面はより大きな関数の値を示し、より低い曲面はより小さな関数の値を示します。 - 曲面の色は、Z値の大きさに基づいて変化します。
一般的には、Z値が大きいほど明るい色、Z値が小さいほど暗い色になります。
このグラフを通じて、ローゼンブロック関数の形状や極小値を視覚的に理解することができます。