Location : Home > Languages > Perl > Package Title : Math::Brent |
![]() |
Math::Brent - ブレント法による関数の最適化
use Math::Brent qw(FindMinima BracketMinimum Brent Minimise1D); my ($x,$y)=Minimise1D($guess,$scale,\&func,$tol,$itmax); my ($ax,$bx,$cx,$fa,$fb,$fc)=BracketMinimum($ax,$bx,$cx,\&func); my ($x,$y)=Brent($ax,$bx,$cx,\&func,$tol,$itmax);
微分を用いない1次元の関数の最小化問題を解くためのブレント法(Brent's method)の実装である。このアルゴリズムは黄金分割法(Golden Section Search)と放物線補間(parabolic interpolation)を用いている。
メインの関数 Brent は、関数へのリファレンス \&func と3点の座標 $ax, $bx, $cx (ただし $bx は $ax とd $cx の間にあり、かつ、 func($bx) の値は func($ax) と func($cx)) より小さいものとする)を与えられればブレント法を用いて $tol で指定される精度で計算した最小値を分離する。繰り返し回数の最大値 $itmax はこの探索の回数を特定する。デフォルトは 100 である。最小値の座標と対応する関数値からなる配列を返す。
関数 BracketMinimum は関数 \&func と異なる初期値 $ax と $bx が与えられれば、下降方向へ探索を行い、3点 $ax, $bx, $cx 並びに関数の最小値とそれらの点における関数値を返す。
関数 Minimise1D は上記2つのルーティンへのインタフェースを提供する。関数 \&func並びに初期値とスケール ($guess,$scale)を与えれば、ブレント法を用いて $tol で指定される精度で計算した最小値を分離する。 繰り返し回数の最大値 $itmax はこの探索の回数を特定する。デフォルトは 100 である。最小値の座標と対応する関数値からなる配列を返す。
use Math::Brent qw(Minimise1D); sub func { my $x=shift ; return $x ? sin($x)/$x: 1; } my ($x,$y)=Minimise1D(1,1,\&func,1e-7); print "Minimum is func($x)=$y\n";
出力は以下のようになる。
Minimum is func(5.236068)=-.165388470697432
Revision 1.1 1995/12/26 10:06:36 willijar Initial revision
何かあれば著者まで。
John A.R. Williams <J.A.R.Williams@aston.ac.uk>
"Numerical Recipies: The Art of Scientific Computing" W.H. Press, B.P. Flannery, S.A. Teukolsky, W.T. Vetterling. Cambridge University Press. ISBN 0 521 30811 9.
【訳注と解説】
![]() |
Updated : 2006/08/25 |