MATLAB用斐波那契求函数极值代码

  • 格式:doc
  • 大小:17.50 KB
  • 文档页数:3

下载文档原格式

  / 5
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

function [x,minf] = minFBNQ( f,a,b,delta,eps ) format long;

if nargin==4

eps=1.0e-6;

end

F=ones(2,1);

N=(b-a)/eps;

c=F(2)-N;

n=2;

while c<0 %求出n

n=n+1;

F(n)=F(n-1)+F(n-2);

c=F(n)-N;

end

l=a+F(n-2)*(b-a)/F(n);%试探点

u=a+F(n-1)*(b-a)/F(n);%试探点

k=1;

while 1

fl=subs(f,findsym(f),l);%试探点的函数值

fu=subs(f,findsym(f),u);%试探点的函数值

if fl>fu

a=l;

l=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=l;

l=a+F(n-k-2)*(b-a)/F(n-k);%缩短搜索区间

if(k==n-3)

break;

else

k=k+1;

end

end

end

if k==100000

disp('找不到最小值'); x=NaN;

minf=NaN;

return;

end

u=l+delta;

fl=subs(f,findsym(f),l); fu=subs(f,findsym(f),u); if fl>fu

a=l;

else

b=l;

end

x=(a+b)/2;

minf=subs(f,findsym(f),x); format short;

end

相关主题