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
浙公网安备 33010602011771号