无约束一维极值问题
极值问题表达式:min f(x) x,x[ x1 x2];
一维极值的搜索方式包括线性搜索和非线性搜索,线性搜索包含黄金分割法、斐波那契法和牛顿法,非线性方法包含抛物线法和三次样条插值。
1、进退法
算法原理:
进退法就是用来确定搜索区间的算法,理论依据:f(x)为函数有一极值,且【a b】为极值的区间,对于任一x1 和x2属于【a b】,如果f(x1)<f(x2),则【a x2】为极小值的搜索区间,如果f(x1)>f(x2),则搜索区间为【x1 b】为极小值的搜索区间,
因此,给定初始值x0,初始搜索步长h的情况下,首先以初始步长进行搜索,计算f(x0+h),
(1)如果f(x0)<f(x0+h)
则搜索区间为【x x+h】,为确定x,计算f(x0+ƪh),,
(2)如果f(x0)>f(x0+h)
则搜索区间为【x+h x】,为确定x,计算f(x0+ƪh),,
算法步骤:
1、给定初值x(0),初始步长h0,领h=h0,x(1)=x(0),k=0
2、给定x(4)=x(1)+h,置k=k+1
3、若f(x(4))<f(x(0)),则转到4,否则转到5
4、令x(2)=x(1),x(1)=x(4),f(x(2))=f(x(1)),f(x(1))=f(x(4)),令h=2*h
5、若k=1,转到6,否则转到7
6、令h=-h,x(2)=x(4),f(x(2))=f(x(4)),转到2
7、令x(3)=x(2),x(2)=x(1),x(1)=x(4),停止计算,极小点包含区间[x(0) x(1)],或者【x(3) x(1)]
算法代码:
<span style="font-size:18px;"><strong>%进退法 % 功能:用进退法法求解一维函数极值 %目标函数:f % 初始点:x0 % 初始步长h0 % 精度 eps % 目标函数取包含极值的区间左端点 minx % 目标函数取包含极值的区间右端点 maxx function [minx,maxx]=minJT(f,x0,h0,eps) format long; if nargin==3 eps=1.0e-6; end x1=x0; k=0; h=h0; while 1 x4=x1+h; k=k+1; f4=subs(f,findsym(f),x4); f1=subs(f,findsym(f),x1); if f4<f1 x2=x1; x1=x4; f2=f1; f1=f4; h=2*h; else if k==1 h=-h; x2=x4; f2=f4; else x3=x2; x2=x1; x1=x4; break; end end end minx=min(x1,x3); maxx=x1+x3-minx; format short;</strong></span>