function [xm,fm]=fbnc(f,a,b,delta,e)
%%xm为决策变量最优值
%%fm为目标函数最优值
%%f为目标函数
%%a为搜索下界
%%b为搜索上界
%%delta为精度参数
%%e为指定的一个很小的数
format long;
F=ones(2,1); %%因为数组没有F(0),所以n=n+1,但不影响F(n)的值
c=F(2)- 1/ delta;
n=2;
while c<0
n=n+1;
F(n)=F(n-1)+F(n-2);
c=F(n)- 1/ delta;
end
t=a+F(n-2)*(b-a)/F(n); %%t、u为试点
u=a+F(n-1)*(b-a)/F(n);
k=1;
while 1
if f(t)>f(u)
a=t;
t=u;
u=a+F(n-k-1)*(b-a)/F(n-k);
if (k==n-3)
break;
else
k=k+1;
end
else
b=u;
u=t;
t=a+F(n-k-2)*(b-a)/F(n-k);
if (k==n-3)
break;
else
k=k+1;
end
end
end
t=(a+b)/2;
u=a+(1/2+e)*(b-a);
if f(t)>f(u)
xm=u;
else
xm=t;
end
fm=f(xm);
format short;