matlab实验1-黄金分割法

golds.m:


function [xmin, fmin] = golds(func, a, b, epsilon)
    % 初始化参数
    maxIter = 1000; % 最大迭代次数
    iter = 0; % 迭代计数器
    
    % 计算黄金比例
    phi = (1 + sqrt(5)) / 2;
    c = b - (b - a) / phi;
    d = a + (b - a) / phi;
    
    % 输出表头
    fprintf('迭代次数\t a\t b\t c\t d\t f(c)\t f(d)\n');
    
    while (b - a) > epsilon && iter < maxIter
        iter = iter + 1;
        
        % 计算函数值
        fc = func(c);
        fd = func(d);
        
        % 输出当前迭代结果
        fprintf('%d\t %f\t %f\t %f\t %f\t %f\t %f\n', iter, a, b, c, d, fc, fd);
        
        % 更新区间
        if fc < fd
            b = d;
            d = c;
            c = b - (b - a) / phi;
        else
            a = c;
            c = d;
            d = a + (b - a) / phi;
        end
    end
    
    % 输出最终结果
    if iter < maxIter
        fprintf('找到极小值点: x = %f, 极小值: f(x) = %f\n', c, fc);
        xmin = c;
        fmin = fc;
    else
        fprintf('未能在最大迭代次数内找到解\n');
        xmin = NaN;
        fmin = NaN;
    end
end

golds_main.m:

% 目标函数
f = @(x) x.^2 - x + 6;

% 调用golds函数
[xmin, fmin] = golds(f, 0, 1, 1e-6);

% 显示结果
disp(['极小值点: ', num2str(xmin)]);
disp(['极小值: ', num2str(fmin)]);

posted @ 2025-05-12 08:08  vivi_vimi  阅读(37)  评论(0)    收藏  举报