【MATLAB与机械设计】一维优化进退法确定初始区间
在讨论一维搜索时,首先保证搜索区间函数具有单峰性,也就是在区间[a,b]中函数是凸函数,对于求极小值问题,函数值具有高—低—高的特性,在区间[a,b]上有唯一的最小值。
1,方法的建立
2.进退法确定搜索区间的程序框图
3,根据上述的程序框图,编写的MATLAB程序如下:
function [x,y] = u_d( f,a0,h )
%% 函数基本说明
%{
本函数为进退法用于求解一维优化问题中搜索最优区间,要求函数具有单峰性
初始值为函数f、初始点a0、初始步长h
返回值为最优值所在区间的左右端点
u_d意为进退
函数调用:
clear; clc;
f = @(x) (x^2+4*x+4);
[lb, ub] = u_d(f, 10000, 0.01)
%}
%% 函数主题部分
a1=a0;
a2=a0+h;
f1=f(a1);
f2=f(a2);
if f2<f1
h=2*h;
a2=a2+h;
f1=f2;
f2=f(a2);
while 1
if f1>f2
a2=a2-h;
h=2*h;
a2=a2+h;
f1=f2;
f2=f(a2);
else
break
end
end
end
if f1<f2
h=-h;
a1=a1+h;
f2=f1;
f1=f(a1);
while 1
if f2>f1
a2=a1-h;
h=2*h;
a1=a1+h;
f2=f1;
f1=f(a1);
else
break
end
end
end
x=a1;
y=a2;
end