clear
f=@(x)x.^4-14*x.^3+60*x.^2-70*x;
e=0.3;%定义误差区间长度
a0=0;
b0=2;%定义初始区间
%确定斐波那契数列和迭代次数
sigma=0.1;
F0=(1+2*sigma)*(b0-a0)/e;%确定迭代次数
F(1)=1;
F(2)=2;
N=2;%确定斐波那契数列
while F(N)<F0
F(N+1)=F(N-1)+F(N);
N=N+1;
end
N=N-1;
%确定每次迭代时的rio值
i=0;
while i<N-1
rio(i+1)=1-F(N-i)/F(N-i+1);%循环迭代求压缩比
i=i+1;
end
delta=0.05;
rio(N)=0.5-delta;%修正最后一次迭代的参数
%
a=ones(N+1,1);%产生一个N+1行,1列的数组来存储a的值
b=a;
a(1)=a0;
b(1)=b0;
N1=N+1;%matlab无法访问b(0),因此整体向后加一个数
k=1
while k<N1
L=b(k)-a(k)%L等于区间长度
a(k+1)=a(k)+rio(k)*L;%确定a的下一个点
b(k+1)=b(k)-rio(k)*L;%确定b的下一个点
if f(a(k+1))<f(b(k+1))
anew=a(k);
bnew=b(k+1);
else
anew=a(k+1);
bnew=b(k);
end
%迭代递增
a(k+1)=anew;
b(k+1)=bnew;
k=k+1
end
xmin=0.5*(anew+bnew)%最小值取平均
fxmin=f(xmin)
hold on
x=a0:0.05:b0;
plot(x,f(x));
plot(a,f(a),'.m');
plot(b,f(b),'ob');
plot(xmin,f(xmin),'*r');
xlabel('x');
ylabel('f(x)');
迭代法求最小值.zip_斐波那契查找_最小值matlab_费波拉契数列法求解最小值_迭代搜索_迭代法
版权申诉
5星 · 超过95%的资源 19 浏览量
2022-07-15
20:09:16
上传
评论 2
收藏 3KB ZIP 举报
朱moyimi
- 粉丝: 61
- 资源: 1万+
评论1