C语言 进退法确定极小值区间

#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);
}
上一篇:图表框架HelloCharts(3)饼状图


下一篇:最优化算法python实现篇(1)——进退法