% 定义目标函数、梯度和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

浙公网安备 33010602011771号