⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 golden.c

📁 golden method in c, please enjoy it
💻 C
字号:
/* 搏垛尸充恕≤跋い哈み恕 *//* Coded by T.Takahama, 1998 */#define SQRT5	2.2360679#define F1	(3.0-SQRT5)/2.0#define F2	(SQRT5-1.0)/2.0#define EPSILON	1.0e-3int NEval=0;double evaluate(double x){	++NEval;	return((x-1.0)*(x-1.0));}main(){	double x[3], y[3], x_min, y_min;	bracketing(evaluate, 1.0, 1.0, x, y);	golden(evaluate, x[0], x[2], EPSILON, &x_min, &y_min);	printf("f(%lf)=%lf\n", x_min, y_min);	printf("%d evaluations\n", NEval);}/* golden(f, x_min, x_max, epsilon, x, y)  簇眶 f を惰粗 x_min から x_max の粗で玫瑚し、呵井猛を艰る x と y を手す  惰粗の升が epsilon 笆布の箕匿贿する*/golden(double (*f)(), double x_min, double x_max, double epsilon,	double *x, double *y){	double x1, y1, x2, y2;	x1=x_min+F1*(x_max-x_min); y1=(*f)(x1);	x2=x_min+F2*(x_max-x_min); y2=(*f)(x2);	while(x_max-x_min>epsilon) {		if(y1<y2) {			x_max=x2;			x2=x1; y2=y1;			x1=x_min+F1*(x_max-x_min); y1=(*f)(x1);		}		else {			x_min=x1;			x1=x2; y1=y2;			x2=x_min+F2*(x_max-x_min); y2=(*f)(x2);		}	}	if(y1<=y2) {		*x=x1; *y=y1;	}	else {		*x=x2; *y=y2;	}}/*    bracketing(f, x0, h, 手猛 x[3], 手猛 y[3])	簇眶 f に簇して介袋爬 x0 から 癸み h で跋い哈みを悸乖し、	y[0]>=y[1]<=y[2] (霹规は办数のみ) となる x[0]<x[1]<x[2] を手す*/bracketing(double (*f)(), double x0, double h, double x[], double y[]){	double y0, x1, y1, x2, y2;	y0=(*f)(x0);	x1=x0+h;	y1=(*f)(x1);	if(y1>y0) {		y2=y1; y1=y0; y0=y2; /* swap y0 y1 */		x2=x1; x1=x0; x0=x2; /* swap x0 x1 */		h=-h;	}	for(;;) {		h*=2.0;		x2=x1+h;		y2=(*f)(x2);		if(y2>y1) break;		y0=y1; x0=x1;		y1=y2; x1=x2;	}	if(h>=0.0) {		x[0]=x0; x[1]=x1; x[2]=x2;		y[0]=y0; y[1]=y1; y[2]=y2;	}	else {		x[0]=x2; x[1]=x1; x[2]=x0;		y[0]=y2; y[1]=y1; y[2]=y0;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -