适用于(凸)优化理论入门学习者。
一、基本思想
- 一维搜索:目标函数为一元单值函数 的优化问题的迭代求解方法
- 试探法:取试探点和函数值做比较,使得包含极小点的搜索区间不断缩短,适合单峰函数。
- 斐波那契数列法的要点:
1.区间长度的缩短率,由斐波那契数确定 :
, .
2.迭代次数 n 需要事先给定,n可由初始区间长度和精度要求计算:
二、斐波那契数列法的MATLAB实现
- 主函数:
function [result] = fibonacci_array(A,B)
fib=[1,1,2,3,5,8,13,21,34];
n=4;
%n=6;
a = A;
b = B;
k=1;
lambda=a+(fib(n-k)/fib(n-k+2))*(b-a);
mu=a+(fib(n-k+1)/fib(n-k+2))*(b-a);
display=[k,a,b,lambda,mu,diox(lambda),diox(mu)];
disp(display);
delta = 0.05;
%delta = 0.01;
while (k<= n)
if (diox(lambda)>diox(mu))
a = lambda;
lambda = mu;
mu=a+(fib(n-(k+1)+1)/fib(n-(k+1)+2))*(b-a);
if (k == n-2)
display=[k+1,a,b,lambda,mu,diox(lambda),diox(mu)];
disp(display);
lambda1 = lambda;
mu1 = mu+ delta;
if diox(lambda1)>diox(mu1)
k = k+2;
a1 = lambda1;
b1 = b;
else
k = k+2;
a1 = a;
b1 = lambda1;
end
display=[k,a1,b1,lambda1,mu,diox(lambda1),diox(mu)];
result = (a1+b1)/2;
disp(display);
break;
else
k = k+1;
display=[k,a,b,lambda,mu,diox(lambda),diox(mu)];
disp(display);
end
else
b = mu;
mu = lambda;
%
if (n-(k+1))<1
break;
end
lambda = a+(fib(n-(k+1))/fib(n-(k+1)+2))*(b-a);
if (k == n-2)
display=[k+1,a,b,lambda,mu,diox(lambda),diox(mu)];
disp(display);
lambda1 = lambda;
mu1 = mu+ delta;
if diox(lambda1)>diox(mu1)
k = k+2;
a1 = lambda1;
b1 = b;
else
k = k+2;
a1 = a;
b1 = lambda1;
end
display=[k,a1,b1,lambda1,mu,diox(lambda1),diox(mu)];
disp(display);
result = (a1+b1)/2;
break;
else
k = k+1;
display=[k,a,b,lambda,mu,diox(lambda),diox(mu)];
disp(display);
end
end
end
end
- 目标函数:
function [FX] = diox(X) FX=X^2+4*cos(X); end