#include <stdio.h>
#define F(x) (3*x*x-8*x+9)
double fun1(double x);
void goAndBackSectionPrint(double x1, double h, double (*f)(double));
int main(void){
goAndBackSectionPrint(0, 0.1, fun1);
return 0;
}
//进退法打印区间
//x1 搜索初值
//h 搜索步长
//f 待搜索函数f(x)的指针
void goAndBackSectionPrint(double x1, double h, double (*f)(double)){
double a1 = x1;
double y1 = (*f)(a1);
double a2 = a1 + h;
double y2 = f(a2);
double a3 = 0;
double y3 = 0;
if(y2 > y1){
h = -h;
a3 = a1;
y3 = y1;
a1 = a2;
y1 = y2;
a2 = a3;
y2 = y3;
}
a3 = a2 + h;
y3 = f(a3);
while(y3 < y2){
h = 2*h;
a1 = a2;
y1 = y2;
a2 = a3;
y2 = y3;
a3 = a2 + h;
y3 = f(a3);
}
printf("a1 = %f, y1 = %f.\n", a1, y1);
printf("a2 = %f, y2 = %f.\n", a2, y2);
printf("a3 = %f, y3 = %f.\n", a3, y3);
}
double fun1(double x){
return F(x);
}