基于matlab的黄金搜索法【开源/可直接复制粘贴】

黄金搜索法是一种无须函数导数的数值优化方法。它基于黄金分割比例来选择新的搜索区间,以逐步缩小搜索范围并逼近极值点。在每次迭代中,算法会根据当前搜索区间的长度和黄金分割比例来计算两个新的点,并在这两个点处评估函数值。然后,根据这两个点的函数值比较结果,选择包含更优解(即更接近极值点)的那个区间作为新的搜索区间。

黄金搜索法不需要函数的导数信息,因此适用于函数不可导或者计算导数困难的情况

代码如下:

function Golden_Section_Search(a, b, f, tol) 
% 项目名称:黄金分割搜索法  
% 更新时间:2024/09/04 
% 背景:美国数学家Jack Kiefer在1953年提出了这种搜索方法,用于在一维空间中寻找函数的极值点。黄金比例概念最早由古希腊的毕达哥拉斯提出。
% 作者:月白风清江有声
    if a >= b    
        error('Must have a < b');    
    end    
        
    lambda = 0.618;    
    x1 = b - lambda * (b - a);    
    x2 = a + lambda * (b - a);    
    k = 0;  
  
    while abs(b - a) > tol     
        f_x1 = f(x1);    
        f_x2 = f(x2);    
        l = abs(b - a);    
        k = k + 1;  
        fprintf('num %d: a = %.4f, b = %.4f, f(x1) = %.4f, f(x2) = %.4f, l = %.4f\n', k, a, b, f_x1, f_x2, l);    
            
  
        if f_x1 < f_x2    
            b = x2;    
            x2 = x1;    
            x1 = a + lambda * (b - a);    
        else    
            a = x1;    
            x1 = x2;    
            x2 = b - lambda * (b - a);    
        end    
  
    end    
    alpha = (a + b) / 2;    
    fprintf('Final min result: a = %.4f, b = %.4f, alpha = %.4f\n', a, b, alpha);  
end    
   
% 示例用法  
    % 定义函数句柄  
    %f = @(x) 2*x^4 + x + 1;    
    % 调用黄金分割搜索法  
    %Golden_Section_Search(-2, 0, f, 0.1);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值