MATLAB 无约束一维极值问题

无约束一维极值问题

 

极值问题表达式: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>


 

你可能感兴趣的:(MATLAB 无约束一维极值问题)