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

📄 mnbrak.c

📁 适合大型数值计算代码 现在网络上已经找不到了 购买需要20$
💻 C
字号:
#include <math.h>#define NRANSI#include "nrutil.h"#define GOLD 1.618034#define GLIMIT 100.0#define TINY 1.0e-20#define SHFT(a,b,c,d) (a)=(b);(b)=(c);(c)=(d);void mnbrak(float *ax, float *bx, float *cx, float *fa, float *fb, float *fc,	float (*func)(float)){	float ulim,u,r,q,fu,dum;	*fa=(*func)(*ax);	*fb=(*func)(*bx);	if (*fb > *fa) {		SHFT(dum,*ax,*bx,dum)		SHFT(dum,*fb,*fa,dum)	}	*cx=(*bx)+GOLD*(*bx-*ax);	*fc=(*func)(*cx);	while (*fb > *fc) {		r=(*bx-*ax)*(*fb-*fc);		q=(*bx-*cx)*(*fb-*fa);		u=(*bx)-((*bx-*cx)*q-(*bx-*ax)*r)/			(2.0*SIGN(FMAX(fabs(q-r),TINY),q-r));		ulim=(*bx)+GLIMIT*(*cx-*bx);		if ((*bx-u)*(u-*cx) > 0.0) {			fu=(*func)(u);			if (fu < *fc) {				*ax=(*bx);				*bx=u;				*fa=(*fb);				*fb=fu;				return;			} else if (fu > *fb) {				*cx=u;				*fc=fu;				return;			}			u=(*cx)+GOLD*(*cx-*bx);			fu=(*func)(u);		} else if ((*cx-u)*(u-ulim) > 0.0) {			fu=(*func)(u);			if (fu < *fc) {				SHFT(*bx,*cx,u,*cx+GOLD*(*cx-*bx))				SHFT(*fb,*fc,fu,(*func)(u))			}		} else if ((u-ulim)*(ulim-*cx) >= 0.0) {			u=ulim;			fu=(*func)(u);		} else {			u=(*cx)+GOLD*(*cx-*bx);			fu=(*func)(u);		}		SHFT(*ax,*bx,*cx,u)		SHFT(*fa,*fb,*fc,fu)	}}#undef GOLD#undef GLIMIT#undef TINY#undef SHFT#undef NRANSI

⌨️ 快捷键说明

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