MATLAB 无约束一维极值问题

来源:互联网 发布:java boolean几个字节 编辑:程序博客网 时间:2024/06/11 11:11

无约束一维极值问题

 

极值问题表达式: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% 目标函数取包含极值的区间右端点 maxxfunction [minx,maxx]=minJT(f,x0,h0,eps)format long;if nargin==3    eps=1.0e-6;endx1=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    endendminx=min(x1,x3);maxx=x1+x3-minx;format short;</strong></span>


 

0 0
原创粉丝点击