Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext

定位函數最小值(Locating Function Minima)

概要

#include <boost/math/tools/minima.hpp>

template <class F, class T>
std::pair<T, T> brent_find_minima(F f, T min, T max, int bits);

template <class F, class T>
std::pair<T, T> brent_find_minima(F f, T min, T max, int bits, boost::uintmax_t& max_iter);
說明

這兩個函數使用Brent算法定位連續函數的極值。參數為:

f

求最小值的函數。在區間 [min,max]上,函數應當是光滑的(smooth),在這個區間中沒有出現極大值

min

查找極小值的範圍的下端點。

max

查找極小值的範圍的下端點。

bits

查找的極小值應當具有的bit精度數字。注意,在原理上,不能以超過機器精度( machine epsilon)平方根的精度來定位函數的極小值,因此如果bits 設置為超過類型T中bit數目的一半,那麼這個值將會被忽略。

max_iter

這個算法中所使用的最大的迭代次數,如果沒有提供這個值,那麼算法將持續迭代,直到找到極小值。

返回值: 一對包含極小值橫坐標和在極小值處的函數f(x)值的數對。

實現

這個函數是 Brent 算法的可靠實現,參考:

Brent, R.P. 1973, Algorithms for Minimization without Derivatives (Englewood Cliffs, NJ: Prentice-Hall), Chapter 5.

Numerical Recipes in C, The Art of Scientific Computing, Second Edition, William H. Press, Saul A. Teukolsky, William T. Vetterling, and Brian P. Flannery. Cambridge University Press. 1988, 1992.

An algorithm with guaranteed convergence for finding a zero of a function, R. P. Brent, The Computer Journal, Vol 44, 1971.


PrevUpHomeNext