最优化理论与算法 fibonacci法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
function [a,b,n,x]=fibonacci(fname,a,b,d,L) % fname函数句柄,d辨别常数,L最终区间长度a(1)=a;
b(1)=b;
F=zeros(1,10); %选择fibonacci数列k值为10,可任意更改
F(1)=1;
F(2)=2;
for k=2:10 %k取到10,生成fibonacci数列
F(k+1)=F(k)+F(k-1);
F(k);
end
Fn=(b(1)-a(1))/L;
Fk=[F Fn];
N=sort(Fk);
n=find(Fn==N); %查找计算函数值的次数n
t(1)=a(1)+F(n-2)*(b(1)-a(1))/F(n); %计算试探点t(1),u(1)
u(1)=a(1)+F(n-1)*(b(1)-a(1))/F(n);
for k=1:n-2
ft=feval(fname,t(k));
fu=feval(fname,u(k));
if ft>fu
a(k+1)=t(k);
b(k+1)=b(k);
t(k+1)=u(k);
u(k+1)=a(k+1)+F(n-k-1)*(b(k+1)-a(k+1))/F(n-k);
while k==n-2
t(n)=t(n-1);
u(n)=t(n-1)+d;
ft=feval(fname,t(n));
fu=feval(fname,u(n));
if ft>fu
a(n)=t(n);
b(n)=b(n-1);
else
a(n)=a(n-1);
b(n)=t(n);
end
end
else
a(k+1)=a(k);
b(k+1)=u(k);
u(k+1)=t(k);
if k~=n-2
t(k+1)=a(k+1)+F(n-k-2)*(b(k+1)-a(k+1))/F(n-k);
ft=feval(fname,t(k));
fu=feval(fname,u(k));
else
t(k+1)=a(k+1)+F(n-k-1)*(b(k+1)-a(k+1))/F(n-k);
t(n)=t(n-1);
u(n)=t(n-1)+d;
ft=feval(fname,t(n));
fu=feval(fname,u(n));
if ft>fu
a(n)=t(n);
b(n)=b(n-1);
else
a(n)=a(n-1);
b(n)=t(n);
end
end
end
end
x=(a(n)+b(n))/2; % 取极小点x