无约束一维极值——斐波那契法

本文介绍了斐波那契分数法,一种用于在一维区间内搜索极小值点的算法。该算法通过逐步缩短搜索区间并比较函数值来逼近极小值。文中给出了MATLAB实现代码,并举例说明如何应用该算法找到函数f(x)=x^2-4x+3在[-2,1]区间内的最小值点,经过7次迭代得到最小值为0.9286,满足精度不超过0.15的要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

斐波那契法(FibonaceiMethod)又称斐波那契分数法,是一种一维搜索区间消去法。

斐波那契法通过取代试探点和进行函数值的比较,使包含极小值点的搜索区间不断缩短,当区间长度缩短到一定程度时,区间上各点的函数值均接近极小值点的近似。该算法要求所考虑的区间上的目标函数是单峰函数,即在这个区间上只有一个局部极小值点的函数。

斐波那契算法的具体步骤如下:
(1)选取初始数据,确定单峰区间[a0,b0],给出搜索精度 δ>0,由步骤(4)确定搜索次数n。
(2) k=1,a = a0,b = b0,计算最初两个搜索点,按步骤(3)计算t1和t2。
(3)计算程序如下:
在这里插入图片描述
(4)当进行至 k= n-1时,t1 = t2 = -1/2(a+6),这就无法借比较函数值f(t1)和f(t2)
的大小来确定最终区间。为此,取
在这里插入图片描述
其中ε为任意小的数。在t1和t2这两点中,以函数值较小者为近似极小值点,相应的函
数值为近似极小值。并得最终区间为[a,t1]或[t2 ,b]。

由上述分析可知,斐波那契法使用对称搜索的方法,逐步缩短所考察的区间,它能以
尽量少的函数求值次数,达到预定的某一缩短率。

根据以上步骤,编写斐波那契算法MATLAB代码如下:

function[x,T,j]= Fibonacci(F_1,a1,b1,l,e)
    n=1;j= 1;
    a(n)=a1;b(n) = b1;
    while(Fib(j)*l < (b1 -a1))
        j=j+ 1;
    end
    r(1)= a(1) + (1- Fib(j- 1)/Fib(j))* (b(1)-a(1));
    u(1) =a(1) +Fib(j- 1)/Fib(j) * (b(1) -a(1));
    for n = 1:1:j-2
        R(n) = feval(F_1,r(n));
        U(n) = feval(F_1,u(n));
        Z(n) = b(n)-a(n);
        if R(n)> U(n)
            a(n+ 1)= r(n);
            b(n+ 1)= b(n);
            r(n+ 1)= u(n);
            u(n+1) = a(n+1)+ Fib(j-n-1)/Fib(j-n) * (b(n+1) -a(n+1));
        else
            a(n+ 1)=a(n);
            b(n+ 1)= u(n);
            u(n+ 1)= r(n);
            r(n+1)=a(n+1)+ (1- Fib(j-n- 1)/Fib(j-n))* (b(n+1)-a(n+ 1));
        end
    end

    R(j-1) = feval(F_1,r(j - 1));
    U(j-1) = feval(F_1,u(j - 1));
    r(j)=r(j-1);
    u(j)=r(j-1) + e;
    R(j) = feval(F_1,r(j));
    U(j) = feval(F_1,u(j));
    if R(j)> U(j)
        a(j)=r(j);
        b(j)=b(j-1);
    else
        a(j)=a(j-1);
        b(j)=u(j);
    end
    Z(j- 1)=b(j-1)-a(j- 1);
    Z(j) =b(j)-a(j); 
    x= (a(j) + b(j))/2;
    T=[a',b',r',u',R',U',Z'];
end

function Fi= Fib(n)
    i= 1;
    Fib(2) = 2;
    Fib(1) = 1;
    if n==0
        Fi= 1;
    else
        for i= 3:1:n
            Fib(i)=Fib(i-1) +Fib(i-2);
        end
        i = n;
    end
    Fi = Fib(i);
end

例 使用斐波那契法 ,求函数f(x)=x2-4x+3在区间[-2,1]上,精度不大于0.15的最小值点,要求最终区间长度不大于原始区间长度的0.02倍。

解:使用MATLAB编辑函数f(x)代码如下:

[x,T,j] = Fibonacci('Fun',-2,1,0.15,0.02)
function y= Fun(x)
y=x^2-4*x+3;

运行结果:
在这里插入图片描述
即经过7次迭代,得到函数最小值为0.9286.

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值