最优化原理与算法
实验内容:
用matlab编制一维搜索程序(黄金分割法(0.618法)和Fibonacci法为例子)来求解一维问题
( 1 ) min α ϕ ( α ) = e α − 5 α (1)\quad\min_{\alpha}\quad\phi(\alpha)=e^\alpha-5\alpha (1)αminϕ(α)=eα−5α
( 2 ) min α ϕ ( α ) = α 3 − 2 α 2 + 1 (2)\quad\min_{\alpha}\quad\phi(\alpha)=\alpha^3-2\alpha^2+1 (2)αminϕ(α)=α3−2α2+1
其中 ϵ = 0.001 其中\epsilon=0.001 其中ϵ=0.001
此问题中,需要先找出两个一维问题的初始区间,下面用进退法求出两函数的初始区间。
进退法求搜索区间
1.算法思想:
(1)给定初始点,初始步长>0,置,计算,并置.
(2)令,计算,置.
(3)若,则转步骤(4);否则转步骤(5).
(4)令置,转步骤(2).
(5)若,则转步骤(6);否则,转步骤(7).
(6)置转步骤(2).
(7)令,停止计算.
这样得到含有极小点的区间.
2.代码实现:
该进退法现以.m文件实现
search_field.m
%% 求搜索区间
%在这我们将步长α记为a,将点μ,μ1,μ2,μ3记为m,m1,m2,m3
%将函数值φ,φ1,φ2,φ3记为f,f1,f2,f3,将[b1,b2]记为最终的搜索空间
clear all;
clc;
a = 1; m3 = 0; f3 = ft1(m3); k = 0; %其中ft1为第一个函数的.m文件
m = m3+a; f = ft1(m); k = k+1;
while f<f3
m2 = m3; f2 = f3; m3 = m; f3 = f; a = 2*a; k = k+1;
m = m3+a; f = ft1(m); k = k+1;
end
while k==1
m2 = m; f2 = f; a=-1*a;
m = m3+a; f = ft1(m); k = k+1;
while m<m3
m2 = m3; f2 = f3; m3 = m; f3 = f;
a = 2*a; k = k+1;
end
end
m1 = m2; f1 = f2; m2 = m3; f2 = f3; m3 = m;
f3 = f;
b1 = min(m1,m3)
b2 = max(m1,m3)
ft1.m
function y = ft1(x)
y = exp(x)-5*x;
求第二问的搜索区间时,只需把search_field.m中的ft1改为ft2即可
ft2.m
function y = ft2(x)
y = x^3-2*x^2+1;
search_field.m运行后得出ft1的结果为b1=0, b2=3
search_field.m运行后得出ft2的结果为b1=0, b2=3
即两函数的初始搜索区间都为[0,3].
求出初始搜索区间后,紧接着用黄金分割法和Fib