po3a  
% 定义目标函数、梯度和Hessian矩阵
fun = @(x) (x(1) + 10*x(2))^2 + 5*(x(3) - x(4))^2 + (x(2) - 2*x(3))^4 + 10*(x(1) - x(4))^4;
gfun = @(x) [2*(x(1) + 10*x(2)) + 40*(x(1) - x(4))^3;
             20*(x(1) + 10*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];
Hess = @(x) [2 + 120*(x(1) - x(4))^2, 20, 0, -120*(x(1) - x(4))^2;
             20, 200 + 12*(x(2) - 2*x(3))^2, -24*(x(2) - 2*x(3))^2, 0;
             0, -24*(x(2) - 2*x(3))^2, 10 + 48*(x(2) - 2*x(3))^2, -10;
             -120*(x(1) - x(4))^2, 0, -10, 10 + 120*(x(1) - x(4))^2];

% 定义初始点和精度
x0_list = [-1, -1, -1, -1; 1, -0.1, -3, 1.2; -0.5, 1.5, 0.2, 1; 0.1, 0.2, -1.1, -0.5];
epsilon = 1.0e-6;

% 初始化结果记录变量
num_starts = size(x0_list, 1);
optimal_points = zeros(num_starts, length(x0_list));
optimal_values = zeros(num_starts, 1);
iterations = zeros(num_starts, 1);

% 循环遍历每个初始点
for i = 1:num_starts
    % 调用牛顿法
    [k, x_opt, val_opt] = Newton(fun, gfun, Hess, x0_list(i, :)', epsilon);
   
    % 记录结果
    optimal_points(i, :) = x_opt';
    optimal_values(i) = val_opt;
    iterations(i) = k;
end

% 输出结果
for i = 1:num_starts
    fprintf('初始点: (%g, %g, %g, %g)\n', x0_list(i, 1), x0_list(i, 2), x0_list(i, 3), x0_list(i, 4));
    fprintf('迭代次数: %d\n', iterations(i));
    fprintf('最优点: (%g, %g, %g, %g)\n', optimal_points(i, 1), optimal_points(i, 2), optimal_points(i, 3), optimal_points(i, 4));
    fprintf('最优函数值: %g\n\n', optimal_values(i));
end
posted on 2024-11-21 09:27  po3a  阅读(12)  评论(0)    收藏  举报