三分算法

主要用于求单峰函数的极值点,例如下图:
image
设当前函数为\(f\),若\(f(midl) < f(midr)\),那么极值点一定在\([midl, r]\)中取到,令\(l = midl\)继续执行。
反之,若\(f(midl) > f(midr)\),那么极值点一定在\([l, midr]\)中取到,令\(r = midr\)执行。

算法模板

while (r - l > eps)
{
    mid = (l + r) / 2;
    double fl = f(mid - eps), fr = f(mid + eps);
    if (fl < fr)
        l = mid; // 这里不写成mid - eps,防止死循环;可能会错过极值,但在误差范围以内所以没关系
    else
        r = mid;
}
posted @ 2022-02-21 20:17  Xxaj5  阅读(61)  评论(0编辑  收藏  举报