进退法求区间

#include <stdio.h>
//进退法求区间
double get_num(double m) {
    double f;
    f = m * m + 7 * m - 9;
    return f;
}
void search_num(double x1, double h) {
    double x2, x3;
    double y1, y2, y3;
    x2 = x1 + h;
    y1 = get_num(x1);
    y2 = get_num(x2);
    //递减区间
    if (y1 > y2)
    {
        h = 2 * h;
        x3 = x2 + h;
        y3 = get_num(x3);

        if (y2 > y3) {
            h = h;
            while (!(y2 < y3))
            {
                x1 = x2;
                y1 = y2;
                x2 = x3;
                y2 = y3;
                x3 = x2 + h;
                y3 = get_num(x3);
            }
        }        
        printf("区间为:[%.3f,%.3f]\n", x1, x3);
        printf("%.3f,%.3f,%.3f\n", y1, y2, y3);        
    }
    //递增区间,反向搜索
    if (y1 < y2)
    {
        double temp;
        temp = x1;
        x1 = x2;
        y1 = y2;
        x2 = temp;
        y2 = get_num(x2);
        x3 = x2 - 2 * h;
        y3 = get_num(x3);

        if (y2 > y3) {
            while (!(y2 < y3))
            {
                x1 = x2;
                y1 = y2;
                x2 = x3;
                y2 = y3;
                x3 = x2 - h;
                y3 = get_num(x3);
            }
        }
        printf("区间为:[%.3f,%.3f]\n", x1, x3);
        printf("%.3f,%.3f,%.3f\n", y1, y2, y3);        
    }
    return 0;
}


void main()
{
    search_num(-10.0, 0.5);
    return 0;
}

结果如下:

posted @ 2020-11-30 18:33  北冰洋L  阅读(258)  评论(0编辑  收藏  举报