一维搜索算法-----matlab实现用成功-失败法(进退法)求函数的搜索区间

本文介绍了一种称为成功-失败法的算法,该算法通过比较目标函数在当前点及其附近点的值来调整搜索方向和步长,以找到函数的极小值点或搜索区间。算法分为前进和后退两种情况,根据函数值的变化决定步长的增减。文章还提供了MATLAB代码实现,包括寻找搜索区间和函数最小值。
摘要由CSDN通过智能技术生成

一、算法的具体思想:

(1)选定初始点a 和步长h;

(2)计算并比较f(a)和f(a+h);有前进(1)和后退(2)两种情况

      2.1 前进运算:

             若f(a)>= f(a+h),则步长加倍h = 2*h,计算f(a+3h)。若f(a+h) ≤f(a+3h),令 a1=a, a2=a+3h, 停止运算;否则将步长加倍,并重复上述运算。

     2.2 后退运算:

             若f(a)<f(a+h),则将步长改为h=-0.25*h。计算f(a-h), f(a-h) ≥ f(a), 令 a1=a-h, a2=a+h, 停止运算;否则将步长加倍,并重复上述运算。

二、优缺点

缺点:效率低;
优点:可以求搜索区间;
注意:h 选择要适当,初始步长不能选得太小;

三、例子

3.1 前进例子

例 :利用“成功-失败”法求函数    f(x) = x^3 - 2x + 1  的搜索区间, 取初始点 x = -1/2,步长 h = 1/2。

3.2 后退例子

四、matlab代码实现----寻找搜索区间

%%这是function函数:
function f = myfun(x)
f = x^3 - 27*x + 10;

%%这是寻找搜索区间函数:
clear;
close all;
clc

x0 = 4.5;
h0 = 0.5;
h = h0;
t = x0 + h0;
f0 = myfun(x0);
f1 = myfun(t);
f2 = 0;
a1 = x0;
m = t;
a2 = t;
while 1 
    if f0 >= f1
        h = 2*h;
        f2 = myfun(t + h);
        t = t + h;
        a1 = m;
         m = a2;
        a2 = t;
            if f1 <= f2     
                break;
            end  
        f0 = f1;
        f1 = f2;
    elseif f0 < f1
        h = -0.25*h0;
        t = x0 + h;
        f1 = myfun(t);
    end
end
if h < 0
   t = a1;
   a1 = a2;
   a2 = t;
end
a1,a2

运行结果:

五、matlab代码实现----寻找函数的最小值

clear;
close all;
clc

x0 = 4.5;
h = 0.5;
eps = 0.001;
f0 = myfun(x0);
while abs(h)>eps 
    x1 = x0 + h;
    f1 = myfun(x1);
    if f0 > f1
        x0 = x0 + h;
        f0 = f1;
        h = 2*h;
    else
        h = -0.25*h;
    end
    x0
end
f0

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值