単峰関数の最小点
\(a<b\)を満たす実数\(a,b\in \mathbb{R} \)を端点とする有界閉区間上に定義された1変数関数\begin{equation*}f:\mathbb{R} \supset \left[ a,b\right] \rightarrow \mathbb{R} \end{equation*}が与えられているものとします。さらに、\(f\)の定義域上にある点\(c\in \left[ a,b\right] \)が存在して、\begin{eqnarray*}&&\left( a\right) \ f\text{は}\left[ a,c\right] \text{上において狭義単調減少である} \\
&&\left( b\right) \ f\text{は}\left[ c,b\right] \text{上において狭義単調増加である}
\end{eqnarray*}がともに成り立つものとします。このような性質を満たす関数を単峰関数(unimodal function)と呼びます。この場合、点\(c\)は\(f\)の唯一の最小点であり、\(f\left( c\right) \)は\(f\)の最小値です。つまり、\begin{equation*}\min_{x\in \left[ a,b\right] }f\left( x\right) =f\left( c\right)
\end{equation*}が成り立ちます。
関数\(f\)が単峰関数であることは分かっているものの、最小点\(c\)が判明していない状況を想定します。さらに、関数\(f\)は微分可能であるとは限らないものとします。つまり、最小点\(c\)を具体的に特定する上で微分を利用できないということです。この場合、\(\left[ a,b\right] \)上の点\(x\)に対して関数\(f\)が定める値\(f\left( x\right) \)どうしを比較しながら最小点\(c\)を見つける必要があります。
\end{equation*}を定めるものとします。この関数は\(\left[ 0,2\right] \)上において狭義単調減少であり、\(\left[ 2,6\right] \)上において狭義単調増加です。したがって\(f\)は単峰関数であるとともに、最小点は、\begin{equation*}c=2
\end{equation*}であり、最小値は、\begin{equation*}
\min_{x\in \left[ 0,6\right] }f\left( x\right) =f\left( 2\right) =0
\end{equation*}です。
&&\left( b\right) \ f\text{は}\left[ c,b\right] \text{上において狭義単調減少である}
\end{eqnarray*}がともに成り立つ場合にも、このような関数を単峰関数と呼びます。この場合、点\(c\)は\(f\)の唯一の最大点であり、\(f\left( c\right) \)は\(f\)の最大値です。つまり、\begin{equation*}\max_{x\in \left[ a,b\right] }f\left( x\right) =f\left( c\right)
\end{equation*}が成り立ちます。以降では最小点を持つ単峰関数を議論の対象としますが、最大点を持つ単峰関数に関しても同様の議論が成り立ちます。
黄金分割探索の基本戦略
単峰関数\(f:\mathbb{R} \supset \left[ a,b\right] \rightarrow \mathbb{R} \)の最小点を特定しようとしている状況を想定します。
まずは、\(0<\rho <\frac{1}{2}\)を満たす何らかの値\(\rho \in \mathbb{R} \)を設定した上で、区間\(\left[ a,b\right] \)を以下の割合\begin{equation*}\rho :1-2\rho :\rho
\end{equation*}で三分する2つの点\(x_{1},x_{2}\in \left[ a,b\right] \)を特定し(上図)、それらの点に対して\(f\)が定める値\(f\left( x_{1}\right) ,f\left(x_{2}\right) \)どうしを比較します。\(\rho \)の値をどのように定めるべきかは後ほど議論します。いずれにせよ、\begin{eqnarray*}x_{1} &=&a+\rho \left( b-a\right) \\
x_{2} &=&a+\left( 1-\rho \right) \left( b-a\right)
\end{eqnarray*}であるため、\begin{eqnarray*}
f\left( x_{1}\right) &=&f\left( a+\rho \left( b-a\right) \right) \\
f\left( x_{2}\right) &=&f\left( a+\left( 1-\rho \right) \left( b-a\right)
\right)
\end{eqnarray*}の大小を比較します。その結果、以下の2つの場合が起こり得ます。
1つ目のケースは、\begin{equation*}
f\left( x_{1}\right) <f\left( x_{2}\right)
\end{equation*}である場合です。つまり、変数\(x\)の値が\(x_{1}\)から\(x_{2}\)へ増加すると\(f\left( x\right) \)の値は増加しますが、単峰性の仮定より、この場合には\(x\)が\(x_{2}\)を出発点に大きくなると\(f\left( x\right) \)の値は大きくなり続けます。したがって、\(f\)の最小点は\(\left[ x_{2},b\right] \)上に存在しないため、\(\left[ x_{2},b\right] \)上の点を最小点の候補から外すことができます。
2つ目のケースは、\begin{equation*}
f\left( x_{1}\right) \geq f\left( x_{2}\right)
\end{equation*}である場合です。つまり、変数\(x\)の値が\(x_{1}\)から\(x_{2}\)へ増加すると\(f\left( x\right) \)の値は減少しますが、単峰性の仮定より、この場合には\(x\)が\(x_{1}\)を出発点に小さくなると\(f\left( x\right) \)の値は大きくなり続けます。したがって、\(f\)の最小点は\(\left[ a,x_{1}\right] \)上に存在しないため、\(\left[ a,x_{1}\right] \)上の点を最小点の候補から外すことができます。
結論をまとめると、\begin{eqnarray*}
f\left( x_{1}\right) &<&f\left( x_{2}\right) \Rightarrow \text{最小点は}\left[ a,x_{2}\right] \text{上にある} \\
f\left( x_{1}\right) &\geq &f\left( x_{2}\right) \Rightarrow \text{最小点は}\left[ x_{1},b\right] \text{上にある}
\end{eqnarray*}となります。つまり、この1回の比較により、探索範囲を\(1-\rho \)に絞り込めるということです。
続いて、残された探索範囲である区間を対象に、同様のプロセスを繰り返します。つまり、残された区間を\(\rho :1-2\rho :\rho \)の割合で三分する2つの点を特定し、それらの点に対して\(f\)が定める値を比較し、\(f\)の最小点が存在する区間を絞り込むということです。ただし、\(\rho \)の値を上手く設定することにより、先に利用した点を再利用できます。具体的には以下の通りです。
最初のステップにおいて\(f\left( x_{1}\right) <f\left( x_{2}\right) \)であった状況を想定します。この場合、探索範囲は\(\left[ a,b\right] \)から\(\left[ a,x_{2}\right] \)へ絞られます。その上で、新たな区間\(\left[ a,x_{2}\right] \)を再び\(\rho :1-2\rho :\rho \)の割合で三分する2つの点\(x_{1}^{\prime },x_{2}^{\prime }\in \left[ a,x_{2}\right] \)を特定します。\(x_{1}^{\prime}<x_{2}^{\prime }\)です。ただし、\(a<x_{1}<x_{2}\)であるため、先に特定した点\(x_{1}\)を再利用できれば関数評価を1回節約できるため効率的です。\(\rho <\frac{1}{2}\)ゆえに点\(x_{1}\)は新たな探索単位\(\left[ a,x_{2}\right] \)の中点よりも右側にあるため、\(x_{1}^{\prime }\)ではなく\(x_{2}^{\prime }\)として\(x_{1}\)を再利用することになります。このような省力化を実現するためには、\(\rho \)をどの水準に定めておけばよいでしょうか。
2つの点\(x_{1}^{\prime },x_{2}^{\prime }\in \left[ a,x_{2}\right] \)が区間\(\left[ a,x_{2}\right] \)を\(\rho:1-2\rho :\rho \)の割合で三分する状況を想定していますが、点\(x_{1}\)を再利用して\(x_{2}^{\prime }=x_{1}\)とするため、2つの点\(x_{1}^{\prime },x_{1}\)が\(\left[ a,x_{2}\right] \)を\(\rho :1-2\rho :\rho \)の割合で三分することになります。上図より、\begin{equation*}\left[ a,x_{1}\right] \text{の長さ}:\left[ x_{1},x_{2}\right] \text{の長さ}=\left[ a,x_{2}^{\prime }\right]
\text{の長さ}:\left[ x_{2}^{\prime },x_{2}\right] \text{の長さ}
\end{equation*}すなわち、\begin{equation*}
\rho :1-2\rho =1-\rho :\rho
\end{equation*}が成り立つため、\begin{equation*}
\rho ^{2}=\left( 1-2\rho \right) \left( 1-\rho \right)
\end{equation*}すなわち、\begin{equation*}
\rho ^{2}-3\rho +1=0
\end{equation*}を得ます。これを\(\rho \)について解くことにより、\begin{equation*}\rho =\frac{3\pm \sqrt{5}}{2}
\end{equation*}を得ますが、\(0<\rho <\frac{1}{2}\)であるため、\begin{equation*}\rho =\frac{3-\sqrt{5}}{2}\approx 0.382
\end{equation*}を得ます。以上の値\(\rho \)を踏まえた上で、2つの点\(x_{1}^{\prime },x_{2}^{\prime }\left( =x_{1}\right) \)が\(\left[ a,x_{2}\right] \)を\(\rho :1-2\rho :\rho \)の割合で三分するように定めるため、\begin{eqnarray*}x_{1}^{\prime } &=&a+\rho \left( x_{2}-a\right) \\
x_{2}^{\prime } &=&x_{1}
\end{eqnarray*}となります。その上で、これらの点に対して\(f\)が定める値\(f\left(x_{1}^{\prime }\right) ,f\left( x_{2}^{\prime }\right) \)どうしを比較することにより、\begin{eqnarray*}f\left( x_{1}^{\prime }\right) &<&f\left( x_{2}^{\prime }\right)
\Rightarrow \text{最小点は}\left[ a,x_{2}^{\prime }\right] \text{上にある} \\
f\left( x_{1}^{\prime }\right) &\geq &f\left( x_{2}^{\prime }\right)
\Rightarrow \text{最小点は}\left[ x_{1}^{\prime
},x_{2}\right] \text{上にある}
\end{eqnarray*}となり、探索範囲が\(1-\rho \)に絞り込まれます。
最初のステップにおいて\(f\left( x_{1}\right) \geq f\left( x_{2}\right) \)であった場合についても同様に考えます。この場合、探索範囲は\(\left[ a,b\right] \)から\(\left[ x_{1},b\right] \)へ絞られます。その上で、新たな区間\(\left[ x_{1},b\right] \)を再び\(\rho :1-2\rho :\rho \)の割合で三分する2つの点\(x_{1}^{\prime },x_{2}^{\prime }\in \left[ x_{1},b\right] \)を特定します。\(x_{1}^{\prime }<x_{2}^{\prime }\)です。ただし、\(x_{1}<x_{2}<b\)であるため、先に特定した点\(x_{2}\)を再利用します。\(\rho <\frac{1}{2}\)ゆえに点\(x_{2}\)は新たな探索単位\(\left[ x_{1},b\right] \)の中点よりも左側にあるため、\(x_{2}^{\prime }\)ではなく\(x_{1}^{\prime }\)として\(x_{2}\)を再利用することになります。先に求めた値\(\rho \)をもとに、2つの点\(x_{1}^{\prime }\left(=x_{2}\right) ,x_{2}^{\prime }\)が\(\left[ x_{1},b\right] \)を\(\rho:1-2\rho :\rho \)の割合で三分するように定めるため、\begin{eqnarray*}x_{1}^{\prime } &=&x_{2} \\
x_{2}^{\prime } &=&x_{1}+\left( 1-\rho \right) \left( b-x_{1}\right)
\end{eqnarray*}となります。その上で、これらの点に対して\(f\)が定める値\(f\left(x_{1}^{\prime }\right) ,f\left( x_{2}^{\prime }\right) \)どうしを比較することにより、\begin{eqnarray*}f\left( x_{1}^{\prime }\right) &<&f\left( x_{2}^{\prime }\right)
\Rightarrow \text{最小点は}\left[ x_{1},x_{2}^{\prime }\right] \text{上にある} \\
f\left( x_{1}^{\prime }\right) &\geq &f\left( x_{2}^{\prime }\right)
\Rightarrow \text{最小点は}\left[ x_{1}^{\prime },b\right] \text{上にある}
\end{eqnarray*}となり、探索範囲が\(1-\rho \)に絞り込まれます。
同様のプロセスを\(k\in \mathbb{N} \)回繰り返すことにより、最小点が存在する区間の長さが、\begin{equation*}\left( b-a\right) \left( 1-\rho \right) ^{k}
\end{equation*}にまで絞り込まれます。ただし、\begin{equation*}
1-\rho \approx 0.61803
\end{equation*}です。つまり、探索範囲は指数関数的に縮小するということです。最終的には、\begin{equation*}
\lim_{k\rightarrow +\infty }\left( b-a\right) \left( 1-\rho \right) ^{k}=0
\end{equation*}となるため、最小点だけが残ります。このような探索法を黄金分割探索(Golden section search)と呼びます。
黄金比(golden ratio)とは、\begin{equation*}
1:\frac{1+\sqrt{5}}{2}
\end{equation*}という比です。さらに、黄金比を構成する値\begin{equation*}
\varphi =\frac{1+\sqrt{5}}{2}
\end{equation*}を黄金数(golden number)と呼びます。一方、黄金分割探索に登場する値\begin{equation*}
\rho =\frac{3-\sqrt{5}}{2}
\end{equation*}に関して、\begin{eqnarray*}
1-\rho &=&1-\frac{3-\sqrt{5}}{2} \\
&=&\frac{1+\sqrt{5}}{2}
\end{eqnarray*}が成り立ちますが、これは黄金数\(\varphi \)と一致します。以上が黄金分割探索という名称の由来です。
\end{equation*}を定めるものとします。先に示したように\(f\)は単峰関数であるとともに、最小点は\(c=2\)です。同じことを黄金分割探索を用いて確認します。ただし、\begin{equation*}\rho =\frac{3-\sqrt{5}}{2}\approx 0.382
\end{equation*}です。区間\(\left[ 0,6\right] \)の三分点は、\begin{eqnarray*}x_{1} &=&0+\rho \cdot 6=9-3\sqrt{5} \\
x_{2} &=&0+\left( 1-\rho \right) 6=3\sqrt{5}-3
\end{eqnarray*}であるため\begin{eqnarray*}
f\left( x_{1}\right) &=&f\left( 9-3\sqrt{5}\right) \approx 0.085 \\
f\left( x_{2}\right) &=&f\left( 3\sqrt{5}-3\right) \approx 2.918
\end{eqnarray*}を得ます。したがって、\begin{equation*}
f\left( x_{1}\right) <f\left( x_{2}\right)
\end{equation*}であり、ゆえに探索範囲は\(\left[ 0,x_{2}\right] \)すなわち\(\left[ 0,3\sqrt{5}-3\right] \)に絞られます。新たな区間\(\left[ 0,3\sqrt{5}-3\right] \)の三分点は、\begin{eqnarray*}x_{1}^{\prime } &=&0+\rho \left( 3\sqrt{5}-3\right) =6\sqrt{5}-12 \\
x_{2}^{\prime } &=&x_{1}=9-3\sqrt{5}
\end{eqnarray*}であるため、\begin{eqnarray*}
f\left( x_{1}^{\prime }\right) &=&f\left( 6\sqrt{5}-12\right) \approx 0.340
\\
f\left( x_{2}^{\prime }\right) &=&f\left( x_{1}\right) \approx 0.085
\end{eqnarray*}を得ます。したがって、\begin{equation*}
f\left( x_{1}^{\prime }\right) >f\left( x_{2}^{\prime }\right)
\end{equation*}であり、ゆえに探索範囲は\(\left[ x_{1}^{\prime },3\sqrt{5}-3\right] \)すなわち\(\left[ 6\sqrt{5}-12,3\sqrt{5}-3\right] \)に絞られます。新たな区間\(\left[ 6\sqrt{5}-12,3\sqrt{5}-3\right] \)の三分点は、\begin{eqnarray*}x_{1}^{\prime \prime } &=&x_{2}^{\prime }=x_{1}=9-3\sqrt{5} \\
x_{2}^{\prime \prime } &=&\left( 6\sqrt{5}-12\right) +\left( 1-\rho \right) \left[ \left( 3\sqrt{5}-3\right) -\left( 6\sqrt{5}-12\right) \right] =12\sqrt{5}-24
\end{eqnarray*}であるため、\begin{eqnarray*}
f\left( x_{1}^{\prime \prime }\right) &=&f\left( x_{2}^{\prime }\right)
=f\left( x_{1}\right) \approx 0.085 \\
f\left( x_{2}^{\prime \prime }\right) &=&f\left( 12\sqrt{5}-24\right)
\approx 0.693
\end{eqnarray*}を得ます。\begin{equation*}
f\left( x_{1}^{\prime \prime }\right) <f\left( x_{2}^{\prime \prime }\right)
\end{equation*}であり、ゆえに探索範囲は\(\left[ 6\sqrt{5}-12,x_{2}^{\prime \prime }\right] \)すなわち\(\left[ 6\sqrt{5}-12,12\sqrt{5}-24\right] \)に絞られます。以上のプロセスによって、探索範囲は、\begin{equation*}\left[ 0,6\right] \rightarrow \left[ 0,3\sqrt{5}-3\right] \rightarrow \left[
6\sqrt{5}-12,3\sqrt{5}-3\right] \rightarrow \left[ 6\sqrt{5}-12,12\sqrt{5}-24\right] \end{equation*}へと絞られました。各ステップにおいて探索範囲は\(1-\rho \)に縮小していますが、真の最小点\(c=2\)はいずれの探索範囲にも含まれています。以降も同様のプロセスを繰り返します。
黄金分割探索の定式化
単峰関数\(f:\mathbb{R} \supset \left[ a,b\right] \rightarrow \mathbb{R} \)の最小点を特定しようとしている状況を想定します。黄金分割探索は以下のように定式化されます。ただし、\begin{equation*}\rho =\frac{3-\sqrt{5}}{2}\approx 0.382
\end{equation*}です。
- ステップ\(0\):当初の探索範囲を、\begin{equation*}\left[ a_{0},b_{0}\right] =\left[ a,b\right]
\end{equation*}で表記する。この区間の三分点は、\begin{equation*}
\left( x_{0}^{\left( 1\right) },x_{0}^{\left( 2\right) }\right) =\left(
a_{0}+\rho \left( b_{0}-a_{0}\right) ,a_{0}+\left( 1-\rho \right) \left(
b_{0}-a_{0}\right) \right)
\end{equation*}である。その上で、新たな探索範囲\(\left[ a_{1},b_{1}\right] \)を、\begin{equation*}\left[ a_{1},b_{1}\right] =\left\{
\begin{array}{cl}
\left[ a_{0},x_{0}^{\left( 2\right) }\right] & \left( if\ f\left(
x_{0}^{\left( 1\right) }\right) <f\left( x_{0}^{\left( 2\right) }\right)
\right) \\
\left[ x_{0}^{\left( 1\right) },b_{0}\right] & \left( if\ f\left(
x_{0}^{\left( 1\right) }\right) \geq f\left( x_{0}^{\left( 2\right) }\right)
\right)
\end{array}\right.
\end{equation*}と定める。 - ステップ\(1\):探索範囲\(\left[ a_{1},b_{1}\right] \)の三分点は、\begin{equation*}\left( x_{1}^{\left( 1\right) },x_{1}^{\left( 2\right) }\right) =\left\{
\begin{array}{cl}
\left( a_{1}+\rho \left( b_{1}-a_{1}\right) ,x_{0}^{\left( 1\right) }\right)
& \left( if\ f\left( x_{0}^{\left( 1\right) }\right) <f\left( x_{0}^{\left(
2\right) }\right) \right) \\
\left( x_{0}^{\left( 2\right) },a_{1}+\left( 1-\rho \right) \left(
b_{1}-a_{1}\right) \right) & \left( if\ f\left( x_{0}^{\left( 1\right)
}\right) \geq f\left( x_{0}^{\left( 2\right) }\right) \right)
\end{array}\right.
\end{equation*}である。その上で、新たな探索範囲\(\left[ a_{2},b_{2}\right] \)を、\begin{equation*}\left[ a_{2},b_{2}\right] =\left\{
\begin{array}{cl}
\left[ a_{1},x_{1}^{\left( 2\right) }\right] & \left( if\ f\left(
x_{1}^{\left( 1\right) }\right) <f\left( x_{1}^{\left( 2\right) }\right)
\right) \\
\left[ x_{1}^{\left( 1\right) },b_{1}\right] & \left( if\ f\left(
x_{1}^{\left( 1\right) }\right) \geq f\left( x_{1}^{\left( 2\right) }\right)
\right)
\end{array}\right.
\end{equation*}と定める。 - ステップ\(k\):探索範囲\(\left[ a_{k},b_{k}\right] \)の三分点は、\begin{equation*}\left( x_{k}^{\left( 1\right) },x_{k}^{\left( 2\right) }\right) =\left\{
\begin{array}{cl}
\left( a_{k}+\rho \left( b_{k}-a_{k}\right) ,x_{k-1}^{\left( 1\right)
}\right) & \left( if\ f\left( x_{k-1}^{\left( 1\right) }\right) <f\left(
x_{k-1}^{\left( 2\right) }\right) \right) \\
\left( x_{k-1}^{\left( 2\right) },a_{k}+\left( 1-\rho \right) \left(
b_{k}-a_{k}\right) \right) & \left( if\ f\left( x_{k-1}^{\left( 1\right)
}\right) \geq f\left( x_{k-1}^{\left( 2\right) }\right) \right)
\end{array}\right.
\end{equation*}である。その上で、新たな探索範囲\(\left[a_{k+1},b_{k+1}\right] \)を、\begin{equation*}\left[ a_{k+1},b_{k+1}\right] =\left\{
\begin{array}{cl}
\left[ a_{k},x_{k}^{\left( 2\right) }\right] & \left( if\ f\left(
x_{k}^{\left( 1\right) }\right) <f\left( x_{k}^{\left( 2\right) }\right)
\right) \\
\left[ x_{k}^{\left( 1\right) },b_{k}\right] & \left( if\ f\left(
x_{k}^{\left( 1\right) }\right) \geq f\left( x_{k}^{\left( 2\right) }\right)
\right)
\end{array}\right.
\end{equation*}と定める。
先の議論から明らかになったように、黄金分割探索の任意のステップにおいて、最小点は常に探索範囲内に残ります。
黄金分割探索によって得られる極限点は最小点と一致します。
\end{equation*}であるとともに、\begin{equation*}
\lim_{k\rightarrow +\infty }a_{k}=\lim_{k\rightarrow +\infty }b_{k}=c
\end{equation*}が成り立つ。
所与の誤差以内で真の最小値の近似値を実現する回数
黄金分割探索のプロセスを限りなく繰り返せば、最終的に得られる極限点が最小点と一致することが明らかになりました。ただ、実際にプロセスを無限回繰り返すことはできません。では、真の最小点\(c\)との誤差を事前に設定した場合、プロセスを何回繰り返せば、誤差の範囲内に収まる値を得られるのでしょうか。
黄金分割探索のステップ\(k\in \mathbb{N} \)における探索範囲を\(\left[ a_{k},b_{k}\right] \subset \left[ a,b\right] \)で表記し、さらにその中点を、\begin{equation*}m_{k}=\frac{a_{k}+b_{k}}{2}
\end{equation*}で表記します。真の最小点\(c\)との誤差として\(\varepsilon >0\)を採用した場合、\begin{equation*}\left\vert m_{k}-c\right\vert \leq \varepsilon
\end{equation*}を満たす\(k\)を特定することが目標になります。
\end{equation*}で表記する。真の最小点\(c\)との誤差として\(\varepsilon >0\)を採用した場合、\begin{equation*}k=\left\lceil \frac{\ln \left( \frac{b-a}{2\varepsilon }\right) }{\ln \left(
\frac{1}{1-\rho }\right) }\right\rceil
\end{equation*}のもとでは、\begin{equation*}
\left\vert m_{k}-c\right\vert \leq \varepsilon
\end{equation*}が成り立つ。ただし、\begin{equation*}
\rho =\frac{3-\sqrt{5}}{2}\approx 0.382
\end{equation*}である。
\end{equation*}であるとともに、誤差が、\begin{equation*}
\varepsilon =10^{-6}
\end{equation*}である場合、\begin{eqnarray*}
k &\geq &\frac{\ln \left( \frac{b-a}{2\varepsilon }\right) }{\ln \left(
\frac{1}{1-\rho }\right) } \\
&=&\frac{\ln \left( \frac{1}{2\times 10^{-6}}\right) }{\ln \left( \frac{2}{\sqrt{5}-1}\right) } \\
&=&\frac{\ln \left( 5\times 10^{5}\right) }{\ln \left( \frac{2}{\sqrt{5}-1}\right) } \\
&\approx &\frac{13.122}{0.481} \\
&\approx &27.3
\end{eqnarray*}となるため、三分探索のステップを\(28\)回繰り返せばよいことが明らかになりました。
黄金分割探索と三分探索の比較
三分探索の最初のステップでは探索範囲\(\left[ a_{0},b_{0}\right] \)を三等分する点\(x_{0}^{\left( 1\right) },x_{0}^{\left( 2\right) }\)を特定し、それらに対して\(f\)が定める値\begin{eqnarray*}&&f\left( x_{0}^{\left( 1\right) }\right) \\
&&f\left( x_{0}^{\left( 2\right) }\right)
\end{eqnarray*}を計算し、両者を比較します。つまり、関数評価が2回行われます。探索範囲が\(\left[a_{1},b_{1}\right] \)へと更新されると、新たな探索範囲\(\left[ a_{1},b_{1}\right] \)を三等分する点\(x_{1}^{\left( 1\right) },x_{1}^{\left( 2\right) }\)を特定し、それに対して\(f\)が定める値\begin{eqnarray*}&&f\left( x_{1}^{\left( 1\right) }\right) \\
&&f\left( x_{1}^{\left( 2\right) }\right)
\end{eqnarray*}を計算し、両者を比較します。\(x_{1}^{\left( 1\right)},x_{1}^{\left( 2\right) }\)は\(x_{0}^{\left( 1\right) },x_{0}^{\left(2\right) }\)とは異なる点であるため、直前のステップにおいて計算した関数値が再利用されず、ここでも関数評価が2回行われます。以降についても同様です。つまり、各ステップにおいて関数評価を必ず2回行う必要があります。
黄金分割探索の最初のステップでは探索範囲\(\left[ a_{0},b_{0}\right] \)を\(\rho :1-2\rho :\rho \)の割合で分割する点\(x_{0}^{\left( 1\right) },x_{0}^{\left( 2\right) }\)を特定し、それらに対して\(f\)が定める値\begin{eqnarray*}&&f\left( x_{0}^{\left( 1\right) }\right) \\
&&f\left( x_{0}^{\left( 2\right) }\right)
\end{eqnarray*}を計算し、両者を比較します。つまり、関数評価が2回行われます。探索範囲が\(\left[a_{1},b_{1}\right] \)へと更新されると、新たな探索範囲\(\left[ a_{1},b_{1}\right] \)を\(\rho :1-2\rho :\rho \)の割合で分割する点\(x_{1}^{\left(1\right) },x_{1}^{\left( 2\right) }\)を特定し、それらに対して\(f\)が定める値\begin{eqnarray*}&&f\left( x_{1}^{\left( 1\right) }\right) \\
&&f\left( x_{1}^{\left( 2\right) }\right)
\end{eqnarray*}を計算し、両者を比較します。ただし、\(x_{1}^{\left( 1\right) },x_{1}^{\left( 2\right) }\)のどちらか一方が\(x_{0}^{\left( 1\right) }\)または\(x_{0}^{\left( 2\right) }\)と一致するため、直前のステップにおいて計算した関数値が再利用され、新たな関数評価は1回だけです。つまり、最初のステップを除き、以降のステップでは関数評価を1回行うだけで済みます。このような意味において、黄金分割探索は三分探索よりも効率的なアルゴリズムです。
演習問題
\end{equation*}を定めるものとします。黄金分割探索を3ステップ適用してください。
プレミアム会員専用コンテンツです
【ログイン】【会員登録】