Code for Matlab
Code for Matlab
A = 3; B = 3; C = 4;
x0 = 2; y0 = 8;
h_vals = [1e-2, 1e-4, 1e-6, 1e-8];
tol = 1e-7; max_iter = 100;
x = x0; y = y0;
path_exact(:,1) = [x; y];
for k = 1:max_iter
grad = [2*A*x - B*y + 1; -B*x + 2*C*y - 1];
H = [2*A, -B; -B, 2*C];
delta = H \ grad;
alpha = line_search(f, x, y, delta(1), delta(2), 0, 1, tol);
alpha_history_method1(k) = alpha;
x = x - alpha * delta(1);
y = y - alpha * delta(2);
path_exact(:,k+1) = [x; y];
if norm(path_exact(:,end) - path_exact(:,end-1)) < tol
break;
end
end
min_exact = [x; y];
for hi = 1:length(h_vals)
h = h_vals(hi);
x = x0; y = y0;
path = [x; y];
for k = 1:max_iter
grad_x = (f(x+h, y) - f(x, y)) / h;
grad_y = (f(x, y+h) - f(x, y)) / h;
grad = [grad_x; grad_y];
H = [2*A, -B; -B, 2*C];
delta = H \ grad;
alpha = line_search(f, x, y, delta(1), delta(2), 0, 1, tol);
alpha_history_method2(hi,k) = alpha;
x = x - alpha * delta(1);
y = y - alpha * delta(2);
path(:,k+1) = [x; y];
if norm(path(:,end) - path(:,end-1)) < tol
break;
end
end
path_num{hi} = path;
iter_counts(hi) = k;
errors(hi) = norm([x; y] - min_exact);
end