三分查找


用处

  • 用于函数在单调区间查找极值点

函数

double search(double l, double r) { //查找极大值点 
    while (fabs(l - r) >= EXP) {
        double midl = (l + r) / 2.0;
        double midr = (midl + r) / 2.0;
        if (function(midl) > function(midr)) r = midr;
        else l = midl;
    }
    return (l + r) / 2.0;
}

代码演示

#include <stdio.h>
#include <math.h>
#define EXP 1e-6

double function(double x) {
    return -(5.504 * x * x + 32.10 * x + 1.0);
}

double search(double l, double r) { //查找极大值点 
    while (fabs(l - r) >= EXP) {
        double midl = (l + r) / 2.0;
        double midr = (midl + r) / 2.0;
        if (function(midl) > function(midr)) r = midr;
        else l = midl;
    }
    return (l + r) / 2.0;
}

int main() {
    printf("%lf\n", search(-20, 100));
    return 0;
}

文章作者: Axieyun
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Axieyun !
评论
评论
  目录