This preview shows page 1-2 out of 7 pages.

Save
View full document
View full document
Premium Document
Do you want full access? Go Premium and unlock all 7 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 7 pages.
Access to all documents
Download any document
Ad free experience
Premium Document
Do you want full access? Go Premium and unlock all 7 pages.
Access to all documents
Download any document
Ad free experience

Unformatted text preview:

’ ...MATLAB® files for test of Newton s method for 2 nonlinear equations with a solution at ( Page 1 of 7 MATLAB® files for test of Newton’s method for 2 nonlinear equations with a solution at (3,4) This program uses the routine reduced_Newton.m listed separately on the “Lecture Material” web page. All code generated with Matlab® Software File: Newton_2D_test2.m % Newton_2D_test2.m % This m-file investigates the use of a reduced Newton's step % method to solve a set of two nonlinear equations. % K. Beers. MIT ChE. 10/17/2001 % First, make a filled 2-D contour plot of the norm of the function vector. x1_min = -5; x1_max = 5; Npts_x1 = 50; x1_vect = linspace(x1_min,x1_max,Npts_x1); delta_x1 = x1_vect(2)-x1_vect(1); x2_min = -5; x2_max = 5; Npts_x2 = 50; x2_vect = linspace(x2_min,x2_max,Npts_x2); delta_x2 = x2_vect(2)-x2_vect(1); % Make 2D grid of mesh points. [X1,X2] = meshgrid(x1_vect,x2_vect); F1 = 3*X1.^3 + 4*X2.^2 - 145; F2 = 4*X1.^2 - X2.^3 + 28; Fmax = max(abs(F1),abs(F2)); % Now, make a coarse grid for the gradient plots. num_coarse = 10; scale_quiver = 0.5; x1_c = linspace(x1_min,x1_max,num_coarse); delta_x1_c = x1_c(2)-x1_c(1); x2_c = linspace(x2_min,x2_max,num_coarse); 7/16/2002MATLAB files for test of Newton’s method for 2 nonlinear equations with a solution at (... Page 2 of 7 delta_x2_c = x2_c(2)-x2_c(1); [X1_c,X2_c] = meshgrid(x1_c,x2_c); F1_c = 3*X1_c.^3 + 4*X2_c.^2 - 145; F2_c = 4*X1_c.^2 - X2_c.^3 + 28; Fmax_c = max(abs(F1_c),abs(F2_c)); [DF1_DX1,DF1_DX2] = gradient(F1_c,delta_x1_c,delta_x2_c); [DF2_DX1,DF2_DX2] = gradient(F2_c,delta_x1_c,delta_x2_c); [DFmax_DX1,DFmax_DX2] = gradient(Fmax_c,delta_x1_c,delta_x2_c); % Now make the plots. figure; hold on; contour(X1,X2,F1,20); quiver(X1_c,X2_c,DF1_DX1,DF1_DX2,scale_quiver); title('f_1(x_1,x_2) = 3*x_1^2 + 4*x_2^2 - 145'); xlabel('x_1'); ylabel('x_2'); figure; hold on; contour(X1,X2,F2,20); quiver(X1_c,X2_c,DF2_DX1,DF2_DX2,scale_quiver); title('f_2(x_1,x_2) = 4*x_1^2 - x_2^3 + 28'); xlabel('x_1'); ylabel('x_2'); figure; hold on; contour(X1,X2,Fmax,20); quiver(X1_c,X2_c,DFmax_DX1,DFmax_DX1,scale_quiver); title('||f|| = max(|f_1|, |f_2|)'); xlabel('x_1'); ylabel('x_2'); % ============================================================ % We now plot a trajectory for the Newton's method iterations. max_iter = 100; x_guess = input('Input initial guess as column vector : '); calc_f = 'Newton_2D_test1b_calc_f'; calc_Jac = 'Newton_2D_test1b_calc_Jac'; % ------------------------------------------------------------7/16/2002MATLAB files for test of Newton’s method for 2 nonlinear equations with a solution at (... Page 3 of 7 % First, use full Newton's method. x_traj = zeros(max_iter+1,2); x = x_guess; k = 1; x_traj(k,:) = x'; for j=1:max_iter k = k + 1; % calculate Jacobian matrix Jac=zeros(2,2); Jac(1,1) = 9*x(1)^2; Jac(1,2) = 8*x(2); Jac(2,1) = 8*x(1); Jac(2,2) = -3*x(2)^2; % calculate function vector f = [0;0]; f(1) = 3*x(1)^3 + 4*x(2)^2 - 145; f(2) = 4*x(1)^2 - x(2)^3 + 28; % check for convergence f_norm = max(abs(f)); if(f_norm < 1.e-10) iter_conv = j; break; end % solve for Newton step update dx = Jac\(-f); % update solution estimate x = x + dx; % store new result in trajectory vector x_traj(k,:) = x'; end % Make plot of trajectory over that of norm of f. figure; hold on; contour(X1,X2,Fmax,20); quiver(X1_c,X2_c,DFmax_DX1,DFmax_DX2,scale_quiver); title('Newton''s method, ||f||, trajectory'); xlabel('x_1'); ylabel('x_2'); 7/16/2002MATLAB files for test of Newton’s method for 2 nonlinear equations with a solution at (... Page 4 of 7 if(iter_conv) plot(x_traj(1:iter_conv,1),x_traj(1:iter_conv,2),'-o'); gtext(['Initial guess : x_1 = ', num2str(x_guess(1)), ... ', x_2 = ', num2str(x_guess(2)), ... ' # iter. = ', int2str(iter_conv)]); else plot(x_traj(:,1),x_traj(:,2),'-o'); gtext(['Initial guess : x_1 = ', num2str(x_guess(1)), ... ', x_2 = ', num2str(x_guess(2)), ... ' unconverged']); end gtext('f_1 = 3*x_1^2 + 4*x_2^2 - 145, f_2 = 4*x_1^2 - x_2^3 + 28'); xfull_traj = x_traj; iter_full_conv = iter_conv; % ------------------------------------------------------------ % Next, use the reduced Newton's step method with the same % convergence criterion. Options.max_iter = max_iter; Options.max_iter_LS = 10000; Options.rtol = 1; Options.atol = 1.e-10; Options.step_tol = 1.e-3; Options.verbose = 1; Options.use_range = 1; Options.range = [10; 10]; Param = 0; x0 = x_guess; [x,iflag,iter_conv,x_traj,f_traj] = ... reduced_Newton(x0,calc_f,calc_Jac,Options,Param); % Now we plot the reduced Newton method trajectory. figure; hold on; contour(X1,X2,Fmax,20); quiver(X1_c,X2_c,DFmax_DX1,DFmax_DX2,scale_quiver); title('Reduced-step Newton''s method, ||f||, trajectory'); xlabel('x_1'); ylabel('x_2'); if(iter_conv) plot(x_traj(:,1),x_traj(:,2),'-o'); gtext(['Initial guess : x_1 = ', num2str(x_guess(1)), ... 7/16/2002MATLAB files for test of Newton’s method for 2 nonlinear equations with a solution at (... Page 5 of 7 ', x_2 = ', num2str(x_guess(2)), ... ' # iter. = ', int2str(iter_conv)]); else plot(x_traj(:,1),x_traj(:,2),'-o'); gtext(['Initial guess : x_1 = ', num2str(x_guess(1)), ... ', x_2 = ', num2str(x_guess(2)), ... ' unconverged']); end gtext('f_1 = 3*x_1^2 + 4*x_2^2 - 145, f_2 = 4*x_1^2 - x_2^3 + 28'); 7/16/2002MATLAB files for test of Newton’s method for 2 nonlinear equations with a solution at (... Page 6 of 7 File: Newton_2D_test1b_calc_f.m % Newton_2D_test1b_calc_f.m % % This MATLAB m-file calculates the function value % for a simple set of 2 non-linear equations. % % K. Beers. MIT ChE. 10/17/2001 function f = Newton_2D_test1b_calc_f(x,Param); f = [0; 0]; f(1) = 3*x(1)^3 + 4*x(2)^2 - 145; f(2) = 4*x(1)^2 - x(2)^3 + 28; return; 7/16/2002MATLAB files for test of Newton’s method for 2 nonlinear equations with a solution at (... Page 7 of 7 File: Newton_2D_test1b_calc_Jac.m % Newton_2D_test1b_calc_Jac.m % % This MATLAB m-file calculates the Jacobian % for a simple set of 2 non-linear equations. % % K. Beers. MIT ChE. 10/17/2001 function Jac = Newton_2D_test1b_calc_Jac(x,Param); Jac = zeros(2,2); Jac(1,1) = 9*x(1)^2; Jac(1,2) = 8*x(2); Jac(2,1) = 8*x(1); Jac(2,2) = -3*x(2)^2; return;


View Full Document

MIT 10 34 - Lecture Notes

Documents in this Course
Load more
Download Lecture Notes
Our administrator received your request to download this document. We will send you the file to your email shortly.
Loading Unlocking...
Login

Join to view Lecture Notes and access 3M+ class-specific study document.

or
We will never post anything without your permission.
Don't have an account?
Sign Up

Join to view Lecture Notes 2 2 and access 3M+ class-specific study document.

or

By creating an account you agree to our Privacy Policy and Terms Of Use

Already a member?