资源经验分享确定单峰函数的极小点所在的区间

确定单峰函数的极小点所在的区间

2019-11-05 | |  64 |   0

原标题:确定单峰函数的极小点所在的区间

原文来自:CSDN      原文链接:https://blog.csdn.net/X_s_yu/article/details/102883533


确定函数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;              %迭代次数+1
end

该方法迭代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.3
for i=1:10
    Fk(i)=Fk_1+Fk_2;
    Fk_2=Fk_1;
    Fk_1=Fk(i);
end
m=find(((1+2*e)./Fk)<(d/2));
N=min(m);
%压缩比
for i=N:-1:2                
    p(i-1)=Fk(i-1)/Fk(i);
end
p=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);
    end
end

在令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]

免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:python selenium的安装

下一篇:Python——h5模型文件转pb模型文件

用户评价
全部评价

热门资源

  • Python 爬虫(二)...

    所谓爬虫就是模拟客户端发送网络请求,获取网络响...

  • TensorFlow从1到2...

    原文第四篇中,我们介绍了官方的入门案例MNIST,功...

  • TensorFlow从1到2...

    “回归”这个词,既是Regression算法的名称,也代表...

  • 机器学习中的熵、...

    熵 (entropy) 这一词最初来源于热力学。1948年,克...

  • TensorFlow2.0(10...

    前面的博客中我们说过,在加载数据和预处理数据时...