1. 程式人生 > 實用技巧 >進退法求區間

進退法求區間

#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; }

結果如下: