MATLAB进退法确定搜索区间(单峰区间)

在这里插入图片描述
进退法是确定函数单峰区间的一种方法,本文以求一个函数的单峰区间为例,介绍进退法求解单峰区间的流程、及MATLAB代码。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
MATLAB代码如下:

syms a1 a2 a3 h f1 f2 f3 X Y section sign k;%所需变量,section为单峰区间
Y=(X-1) *(X-3) *(X-9) *(X-12);%所求单峰区间对应的函数
sign=1;
a1=10;h=0.1;%初始点及初始步长
a2=a1+h;
f1=double(subs(Y,X,a1));f2=double(subs(Y,X,a2));%计算f1、f2
if(f1 >= f2)%开始分情况讨论
    h=2*h;%假如条件:f1 >= f2成立,则极值点在a2右边,做前进运算,步长加倍
    a3=a2+h;%生成a3
    f3=double(subs(Y,X,a3));%计算f3  
    while(sign==1)
        if(f2 >= f3)%假如条件:f2 >= f3成立,则极值点在a3右边,做前进运算,步长加倍
           a1=a2;%将a2的值赋予原来的a1
           a2=a3;%以a3替换赋予原来的a2
           f1=f2;%以f2替换原来的f1
           f2=f3;%以f3替换原来的f2
           h=2*h;
           a3=a2+h;%重新生成a3
           f3=double(subs(Y,X,a3));%重新计算f3
        else
            section=[a1 a3];
            sign=0;
        end
    end
else%假如条件:f1 >= f2不成立,则极值点在a1左边,做后退运算
    h=(-1)*h;%极值点在a1左边,做后退运算
    k=a1+a2;
    a1=k-a1;%对调a1、a2
    a2=k-a2;%对调a1、a2
    k=f1+f2;
    f1=k-f1;%对调f1、f2
    f2=k-f2;%对调f1、f2
    a3=a2+h;%重新生成a3
    f3=double(subs(Y,X,a3));%重新计算f3  
    while(sign==1)
        if(f3 <= f2)%假如条件:f3 <= f2成立,则极值点在a3左边,做后退运算
           a1=a2;%舍弃原来a1,将a2的值赋予原来的a1
           a2=a3;%舍弃原来a2,以a3替换原来的a2
           f1=f2;%舍弃原来f1,以f2替换原来的f1
           f2=f3;%舍弃原来f2,以f3替换原来的f2
           h=2*h;%步长加倍
           a3=a2+h;%重新生成a3
           f3=double(subs(Y,X,a3));%重新计算f3 
        else
            section=[a3 a1];
            sign=0;
        end
    end
end

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
进退法也是一种局部算法,只能求出函数的一个单峰区间,而不能求出所有单峰区间。单峰区间的宽度与初始点、初始步长有关。
有关单峰区间的相关知识可以参考:
http://t.csdn.cn/EUpLX;http://t.csdn.cn/IHlLc

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值