最优化理论与算法 fibonacci法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档