function [xk, xs, gs] = Newton(f, x0, max_itr, tol, bt) syms x y; xk = x0; gf = gradient(f); hf = hessian(f, [x, y]); fl = matlabFunction(f); gfl = matlabFunction(gf); tnorm = norm(at(gf, xk), 2); xs = zeros(size(x0, 1), max_itr + 1); xs(:, 1) = x0; gs = zeros(1, max_itr + 1); gs(1) = tnorm; k = 1; while tnorm > tol && k <= max_itr + 1 pk = - (at(hf, xk) \ at(gf, xk)); if bt alpha = backtracking(fl, gfl, pk, xk, 1, 0.9, 1e-4); else alpha = 1; end xk = xk + alpha * pk; tnorm = norm(at(gf, xk), 2); k = k + 1; xs(:, k) = xk; gs(k) = tnorm; end xs = xs(:, 1:k); gs = gs(:, 1:k); end function y = at(f, xk) syms x y; y = double(subs(f, [x, y], [xk(1), xk(2)])); end