Fibonacci 算法的Matlab实现以及 Fibonacci 数列的构建

这是最近学习的第二个寻优算法,我查了查资料,据说速度很慢,网上有很多对其进行改进的优化算法。相比于黄金分割优化算法,它的优点是精度相对较高。

1. 代码实现思路

(注:这个老师没有具体讲,其中算法的判断条件是我网上找到的,思路也是自己按照自己想法写的,自取时请谨慎)

2. 具体代码 

        (1)Fibonacci算法

function[Optx,Opty,ValueRange,IteNum,OptTime]=opt_fibonacci(a0,b0,delta)
% fibonacci算法,速度较慢,但是精度比黄金分割算法高
% 关键步骤在fibonacci数列的构造
% 参数设置:delta--精度设置;[a,b]--初始搜索区间;区间更新为[A(i),B(i)];
% 输出为:Optx--寻优结果(最终区间的均值);Opty--优化函数的最优值;ValueRange--最优解所在区间;
%           IteNum--迭代次数;OptTime--代码执行时间
% 插值点分别用u和v表示;
% 该代码需要在phi函数变化时进行修改
tic
% 1.构建fibonacci数列
[F,N]=Fibonacci(a0,b0,delta);
% 2. 寻优
A = zeros(N+1,1);
B = zeros(N+1,1);
u = zeros(N+1,1);
v = zeros(N+1,1);
A(1) = a0;
B(1) = b0;
for i = 1:N-2
    u(i) = A(i)+(F(N-i-1)/F(N-i+1))*(B(i)-A(i));
    v(i) = A(i)+(F(N-i)/F(N-i+1))*(B(i)-A(i));
    if phi(u(i))<phi(v(i))
        A(i+1) = A(i);
        B(i+1) = v(i);
    else
        A(i+1) = u(i);
        B(i+1) = B(i);
    end
end
% 3. 结果输出
IteNum = i;
Optx = (A(i)+B(i))/2;
Opty = phi(Optx);
ValueRange = [A(i) B(i)];
toc; 
OptTime = toc;
function[y]=phi(x)
    %函数定义,根据我们的需求进行修改
    y =  1-21.6*x-3*x.^2;
end  
end

         (2)Fibonacci数列构建代码

function[F,N]=Fibonacci(a1,b1,precision)
% Fibonacci序列的构造,可用于斐波那契优化算法
% 输出应用:Fn=F(N+1);n=N;
F(1) = 1;
F(2) = 1;
i = 2;
while (1/F(i))*(b1-a1)>precision
    F(i+1) = F(i)+F(i-1);
    i = i+1;
end
N = i-1;
end

-----------------------------------------------谦虚学习分割线------------------------------------------------------------

我本科电力专业的,所以代码可能写得不是那么好,如果大家使用过程中出现什么问题,欢迎不吝赐教!

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值