日报89
代码:
% 定义目标函数及其梯度和海森矩阵
f = @(x) 100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
grad_f = @(x) [400*x(1)^3-400*x(1)*x(2)+2*x(1)-2;
200*(x(2)-x(1)^2)];
hes_f = @(x) [1200*x(1)^2-400*x(2)+2, -400*x(1);
-400*x(1), 200];
% 初始点和终止准则
x0_list = [-2, 2; -3, 3; 0.5, -1.5]; % 多个不同的初始点
tol = 1e-5;
for i = 1:length(x0_list)
x0 = x0_list(i,:);
x = x0';
iter = 0;
grad_norm = inf; % 初始化为正无穷
d = -grad_f(x);
alpha = 1; % 初始步长
while grad_norm > tol
iter = iter + 1;
% 进行非精确线搜索,确定步长alpha
while f(x+alpha*d) > f(x)+0.1*alpha*grad_f(x)'*d
alpha = alpha/2;
end
% 计算FR共轭梯度下降方向
if iter == 1
g_prev = grad_f(x-d);
beta = 0;
else
g = grad_f(x);
y = g - g_prev;
beta = (y'*s)/(s'*s);
g_prev = g;
end
s = alpha*d;
d = -grad_f(x+s) + beta*d;
x = x + s;
grad_norm = norm(grad_f(x));
end
fprintf('Initial point (%g, %g)\n', x0(1), x0(2));
fprintf('Number of iterations: %d\n', iter);
fprintf('Optimal point: (%g, %g)\n', x(1), x(2));
fprintf('Optimal function value: %g\n', f(x));
fprintf('\n');
end
浙公网安备 33010602011771号