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

📄 brent.m

📁 一个关于adaboost算法的matlab程序,对开始接触adaboost研究的人,有实用价值
💻 M
字号:
function [xmin, fmin, iter]=brent_1d(co, ax,bx,cx, ps, xi)
% [xmin, fmin, iter]=cg_optimizable.brent_1d(co, ax,bx,cx, ps, xi)
%
% brents one-dimensional minimization
% (from Numerical Recipes in C, page 404)
%

%#realonly
%#inbounds

%   G. Raetsch 1.6.98
%   Copyright (c) 1998  GMD Berlin - All rights reserved
%   THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE of GMD FIRST Berlin
%   The copyright notice above does not evidence any
%   actual or intended publication of this work.
%   Please see COPYRIGHT.txt for details.

xmin=0.0 ;
fmin=0.0 ;

% Constants
CGOLD=0.3819660 ;
ZEPS=1e-8 ;

% a<b
if ax<cx, 
	a=ax; b=cx; 
else 
	a=cx; b=ax; 
end ; 

% Initializations ...
e=0.0 ;
x=bx ; w=bx ; v=bx ;

fw=0.0 ;
fv=0.0 ;
fx=0.0 ;

[fw]=err_func(co, ps+x*xi) ; fv=fw; fx=fw ;

xm=0.0 ;
tol1=0.0 ;
tol2=0.0 ;
d=0.0 ;

for iter=1:co.brent_max_iter,
	xm=0.5*(a+b);
	tol1=co.brent_tol*abs(x)+ZEPS ;
	tol2=2.0*tol1;
	if abs(x-xm) <= tol2-0.5*(b-a),
		xmin=x ;
		fmin=fx ;
		return ;
	end ;

	if abs(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; 
		end ;
		q=abs(q);
		etemp=e;
		e=d;
		if (abs(p)>=abs(0.5*q*etemp)) | (p<=q*(a-x)) | (p>=q*(b-x)),
			if x>=xm, 
				e=a-x ; 
			else 
				e=b-x; 
			end ;
			d=CGOLD*e ;
		else 
			d=p/q;
			u=x+d;
			if (u-a<tol2) | (b-u<tol2),
				d=tol1*sign(xm-x);
			end ;
		end ;
	else 
		if e>=xm, 
			e=a-x ; 
		else 
			e=b-x ;
		end ;
		d=CGOLD*e ;
	end ;

	if abs(d) >= tol1, 
		u=x+d ;
	else 
		u=x+tol1*sign(d) ;
	end ; 

	[fu]=err_func(co, ps+u*xi) ;

	if fu<=fx,
		if u>=x, 
			a=x; 
		else 
			b=x; 
		end ;
		v=w; w=x; x=u ;
		fv=fw; fw=fx; fx=fu ;
	else 
		if u<x, 
			a=u; 
		else 
			b=u; 
		end ;

		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;
			end ;
		end ;
	end ;
end ;

xmin=x ;
fmin=fx ;



⌨️ 快捷键说明

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