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

📄 brent.c

📁 适合大型数值计算代码 现在网络上已经找不到了 购买需要20$
💻 C
字号:
#include <math.h>#define NRANSI#include "nrutil.h"#define ITMAX 100#define CGOLD 0.3819660#define ZEPS 1.0e-10#define SHFT(a,b,c,d) (a)=(b);(b)=(c);(c)=(d);float brent(float ax, float bx, float cx, float (*f)(float), float tol,	float *xmin){	int iter;	float a,b,d,etemp,fu,fv,fw,fx,p,q,r,tol1,tol2,u,v,w,x,xm;	float e=0.0;	a=(ax < cx ? ax : cx);	b=(ax > cx ? ax : cx);	x=w=v=bx;	fw=fv=fx=(*f)(x);	for (iter=1;iter<=ITMAX;iter++) {		xm=0.5*(a+b);		tol2=2.0*(tol1=tol*fabs(x)+ZEPS);		if (fabs(x-xm) <= (tol2-0.5*(b-a))) {			*xmin=x;			return fx;		}		if (fabs(e) > tol1) {			r=(x-w)*(fx-fv);			q=(x-v)*(fx-fw);			p=(x-v)*q-(x-w)*r;			q=2.0*(q-r);			if (q > 0.0) p = -p;			q=fabs(q);			etemp=e;			e=d;			if (fabs(p) >= fabs(0.5*q*etemp) || p <= q*(a-x) || p >= q*(b-x))				d=CGOLD*(e=(x >= xm ? a-x : b-x));			else {				d=p/q;				u=x+d;				if (u-a < tol2 || b-u < tol2)					d=SIGN(tol1,xm-x);			}		} else {			d=CGOLD*(e=(x >= xm ? a-x : b-x));		}		u=(fabs(d) >= tol1 ? x+d : x+SIGN(tol1,d));		fu=(*f)(u);		if (fu <= fx) {			if (u >= x) a=x; else b=x;			SHFT(v,w,x,u)			SHFT(fv,fw,fx,fu)		} else {			if (u < x) a=u; else b=u;			if (fu <= fw || w == x) {				v=w;				w=u;				fv=fw;				fw=fu;			} else if (fu <= fv || v == x || v == w) {				v=u;				fv=fu;			}		}	}	nrerror("Too many iterations in brent");}#undef ITMAX#undef CGOLD#undef ZEPS#undef SHFT#undef NRANSI

⌨️ 快捷键说明

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