function solution = newton_sys(x_init,err_tol,max_iterates) % % The calling sequence for newton_sys.m is % solution = newton_sys(x_init,err_tol,max_iterates) % This solves a pair of two nonlinear equations in two unknowns, % f(x) = 0 % with f(x) a column vector of length 2. The definition of f(x) % is to be given below in the function named fsys; and you % also need to give the Jacobian matrix for f(x) in the % function named deriv_fsys. % % x_init is a vector of length 2, and it is an initial guess % at the solution. % % The parameters err_tol and max_iterates are upper limits on % the desired error in the solution and the maximum number of % iterates to be computed. % % Initialization. x0=zeros(2,1); for i=1:2 x0(i) = x_init(i); end error = inf; it_count = 0; % Begin the main loop. while error > err_tol & it_count < max_iterates it_count = it_count + 1; rhs = fsys(x0); A = deriv_fsys(x0); delta = A\rhs; x1 = x0 - delta; error = norm(delta,inf); % The following statement is an internal print to show % the course of the iteration. It and the pause % statement following it can be commented out. [it_count x1' error] pause x0 = x1; end % Return with the solution. solution = x1; if it_count == max_iterates disp(' ') disp('*** Your answers may possibly not satisfy your error tolerance.') end %%%%%%%%%%% Definition of functions %%%%%%%%%%%%%%%%% function f_val = fsys(x) % % The equations being solved are % x(1)^2 + 4*x(2)^2 - 9 = 0 % 18*x(2) - 14*x(1)^2 + 45 = 0 % f_val = [x(1)^2+4*x(2)^2-9, 18*x(2)-14*x(1)^2+45]'; function df_val = deriv_fsys(x) % % This defines the Jacobian matrix for the function % given in fsys df_val = [2*x(1), 8*x(2); -28*x(1), 18];