MATLAB最优化设计之进退法寻找极值区间

MATLAB最优化设计之进退法寻找极值区间

算法原理

进退法是用来寻找单谷函数(只有一个极值点)极值所在区间的算法。我们这里以极小值为例:
假设函数f(x)为单谷函数,初始点为x0,步长为h0:
(1)下一个迭代点x1=x0+h0,计算f(x1);
(2)若f(x1)<f(x0),说明前进方向为下降方向;
1.x2=x1+h0,将x1作为新的起始点,定义i=1;
2.若f(x2)<f(x1),x2=x1+i*h0,,i=i+1,迭代搜索。直到,f(x2)<f(x1),f(x)经历了一个先递减后递增的过程,(x1,x2)即为极小值点所在的区间。
(3)若f(x1)>f(x0),说明前进方向为上升方向;
1.取h0=-h0,交换x1,x0的值,反向搜索即可。

MATLAB程序


%% 进退法 寻找搜索区间
clc
clear
close
fx=@(x) x^2+1;
fplot(fx,[-100 100]); %绘制出图形,查看极值点所在区间,用来验证结果。
[a,b]=Min_jintui(fx,-1,0.1);
function [a,b]=Min_jintui(f,x1,h0)
%f为函数句柄
%x1为初始点
%h0为步长
x2=x1+h0;
i=1;
if f(x2) < f(x1)  %该方向为下降方向
    x3=x2+h0;
    h=h0;
    while f(x3) < f(x2) %进入循环,不断迭代,直至f(x3) > f(x2) 
        x3=x2+h;
        h=i*h;
        i=i+1;
    end
    a=x1; %x1,x3即为极值所在区间
    b=x3;
else        %该方向为上升方向
    Temp=x1;  %交换x1,x2的位置
    x1=x2;
    x2=Temp;
    h=-h0;  %改变方向
    x3=x2+h;
    while f(x3) < f(x2)   %进入循环,不断迭代,直至f(x3) > f(x2) 
        x3=x2+h;
        h=i*h;
        i=i+1;
    end
    a=x3;
    b=x1;
end
end
  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值