5.3

最速下降法程序设计

% 定义目标函数

f = @(x) (x(1)+x(2))^2 + 5*(x(3)-x(4))^2 + (x(2)-2*x(3))^4 + 10*(x(1)-x(4))^4;

 

% 定义目标函数的梯度

grad_f = @(x) [2*(x(1)+x(2)) + 40*(x(1)-x(4))^3; 2*(x(1)+x(2)) + 4*(x(2)-2*x(3))^3; 10*(x(3)-x(4)) - 8*(x(2)-2*x(3))^3; -10*(x(3)-x(4)) - 40*(x(1)-x(4))^3];

 

% 最大迭代次数

max_iter = 1000;

 

% 步长

alpha = 0.001;

 

% 梯度阈值

epsilon = 1e-5;

 

% 初始点

initial_points = [randn(4, 1), randn(4, 1), randn(4, 1)];%返回三个随机 4*1 的矩阵

 

for j = 1:size(initial_points, 2)

    x = initial_points(:, j);

    

    for i = 1:max_iter

        % 计算梯度

        gradient = grad_f(x);

 

        % 判断梯度是否满足阈值

        if norm(gradient) < epsilon

            break;

        end

 

        % 更新x

        x = x - alpha * gradient;

    end

 

    fprintf('初始点%d: \n', j);

    disp('=================');

    fprintf('迭代次数: %d \n', i);

    fprintf('最优解: %s \n', mat2str(x));

    fprintf('目标函数值: %f \n', f(x));

    disp('=================');

end

posted @ 2024-05-03 20:15  catsahsy  阅读(10)  评论(0)    收藏  举报