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

确定函数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]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值