确定单峰函数的极小点所在的区间
发布日期:2021-05-07 14:37:55 浏览次数:29 分类:原创文章

本文共 1407 字,大约阅读时间需要 4 分钟。

确定函数f(x)=x^4-14x^3+60x^2-70x的在区间 [0,2] 的极小点,要求极小点所在的区间的长度压缩到0.3之内。

目标函数为一元单值函数,该问题即为一维问题,可用一维搜索法进行迭代求解,下面用MATLAB实现黄金分割法、斐波那契数列法和二分法的求解。

1、黄金分割法,程序代码如下:

fx=@(x)x^4-14*x^3+60*x^2-70*x;a0=0;b0=2;               %搜索区间d=0.3;                   %要求区间长度p=(3-sqrt(5))/2;N=0;                     %初始化迭代次数while abs(b0-a0)>d    a=a0+p*(b0-a0);    b=a0+(1-p)*(b0-a0); %(1-p)为压缩比    fa=fx(a);    fb=fx(b);    if fa<fb            %压缩搜索区间        b0=b;    else        a0=a;    end    N=N+1;              %迭代次数+1end

该方法迭代4次,即可找到满足要求的极小点所在的区间,为 [0.6525,0.9443]

2、斐波那契数列法,程序代码如下:

fx=@(x)x^4-14*x^3+60*x^2-70*x;a0=0;b0=2;Fk_2=0;Fk_1=1;                %生成斐波那契数列e=0.1;d=0.3for i=1:10    Fk(i)=Fk_1+Fk_2;    Fk_2=Fk_1;    Fk_1=Fk(i);endm=find(((1+2*e)./Fk)<(d/2));N=min(m);%压缩比for i=N:-1:2                    p(i-1)=Fk(i-1)/Fk(i);endp=fliplr(p);                  %按索引倒序排列%搜索a=a0+(1-p(1))*(b0-a0);       b=a0+p(1)*(b0-a0);fa=fx(a);fb=fx(b);for i=2:length(p)    if p(i)==0.5        p(i)=p(i)-e;    end    if fa<fb        b0=b;        b=a;        a=a0+(1-p(i))*(b0-a0);        fb=fa;        fa=fx(a);    else        a0=a;        a=b;        b=a0+p(i)*(b0-a0);        fa=fb;        fb=fx(b);    endend

在令\delta \leq 0.1的情况下,迭代4次,即可得到满足要求的搜索区间,为 [0.7692,0.9231]

3、二分法,程序代码如下:

fx=@(x) 4*x^3 - 42*x^2 + 120*x - 70;a0=0;b0=2;d=0.3;             %要求区间长度N=0;while abs(b0-a0)>d    x0=(a0+b0)/2;    fx0=fx(x0);    if fx0>0        %压缩搜索区间        b0=x0;    else        a0=x0;    end    N=N+1;end

该方法迭代2次即可得到满足要求的搜索区间,为 [0.75,1]

上一篇:时域抽取法FFT(DIT-FFT)算法的MATLAB实现
下一篇:二元对称信道输入二值图像仿真

发表评论

最新留言

不错!
[***.144.177.141]2025年04月12日 02时03分12秒