【Matlab】黄金分割法(0.618法)的 Matlab 实现

>>文章导航

1. 题目

2. 代码

3. 运行结果


1. 题目

2. 代码

function [xmin, fmin] = golden_section_method(f, a, b, tol)  
    % golden_section_method 使用黄金分割法来最小化函数f在区间[a, b]  
    %tol是区间精度  
    c = (b - a) * (2 - sqrt(5)) / (2 * sqrt(5));  % 计算第一个黄金分割点  
    d = (b + a) / 2;  % 计算中点  
  
    while abs(b - a) > tol  
        if f(c) < f(d)  % 如果第一个黄金分割点比中点更优  
            a = c;  
            c = (b - a) * (2 - sqrt(5)) / (2 * sqrt(5));  % 计算下一个黄金分割点  
        else  % 否则,中点更优  
            b = d;  
            d = (b + a) / 2;  % 更新中点  
        end  
    end  
    xmin = (a + b) / 2;  % 计算最优解  
    fmin = f(xmin);  % 计算最小值  
end  
  
% Test function  
f = @(x) x^2 - x - 1;    
a = -1;  % 初始区间左端点  
b = 1;  % 初始区间右端点  
tol = 0.05;  % 区间精度  
[xmin, fmin] = golden_section_method(f, a, b, tol);  % 调用黄金分割法函数求解  
disp(['xmin = ', num2str(xmin)]);  % 输出最优解  
disp(['fmin = ', num2str(fmin)]);  % 输出最小值

3. 运行结果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值