進退法求區間
阿新 • • 發佈:2020-11-30
#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; }
結果如下: