100 likes | 443 Views
ENGG 1801 Engineering Computing. MATLAB Lecture 7 : Tutorial Weeks 11-13 Solution of nonlinear algebraic equations (II). Outline of lecture. Solving sets of nonlinear equations Multivariable Newton’s method Example (2 equations in 2 unknowns) Solving example problem in Matlab Functions
E N D
ENGG 1801Engineering Computing MATLAB Lecture 7: Tutorial Weeks 11-13 Solution of nonlinear algebraic equations (II)
Outline of lecture • Solving sets of nonlinear equations • Multivariable Newton’s method • Example (2 equations in 2 unknowns) • Solving example problem in Matlab • Functions • Conclusions
Sets of Nonlinear Equations • Equation sets can be large • 100’s (1000’s) of equations • Initial solution estimate can be a challenge • Fewer solution options • Plotting and direct substitution are not options • Most widely used approach ? • Multivariable Newton’s method
Multivariable Newton’s Method • Single variable algorithm • Each iteration solves a linear approximation to function • Multivariable algorithm • Each function approximated by a linear equation • Each iteration solves a set of linear equations Scalar equation Vector-matrix equation
Example (I) • Solve the pair of equations: • Elements of the Jacobian matrix Solution is: x1 = 4 x2 = 2
Example (II) • Use as initial estimate for solution (3, 3) • Next estimate obtained from: Functions evaluated at old point New point = (3.5714, 2.0952) Jacobian evaluated at old point Old point = (3, 3)
Solution in Matlab counter = 1; error = 10; xold = [3;3]; while error > 1e-3 & counter < 10 fold(1) = xold(1) - xold(2)^2; fold(2) = xold(1)*xold(2) - 8; J(1,1) = 1; J(1,2) = -2*xold(2); J(2,1) = xold(2); J(2,2) = xold(1); xnew = xold - inv(J)*fold' error = max(abs(xnew(1)-xold(1)),abs(xnew(2)-xold(2))); counter = counter + 1; xold = xnew; end
Advice on Iterative Methods • Follow one cycle through code by hand • Initially use modest convergence criterion • Put in a ‘counter’ ( to prevent infinite loop ) • Check final solution • Be prepared for multiple solutions • Initial guess has a big impact: • On the final solution obtained • On the time taken to converge to solution
Functions • Breaking up complex calculations into simpler blocks. • Main program • a = 2; b = 3; • [answer, diff] = my_function(a,b) • Separate file, my_function.m; outputs calculated inside function using input arguments (in1 & in2) • function [answ, differ] = my_function(in1,in2) • answ = in1 + in2; • differ = in1 – in2; One to one correspondence between inputs, outputs in calling statement and in function
Conclusions • Solution of nonlinear equation sets ? • Very common problem in engineering • Built-in Matlab functions ( e.g.fsolve from MATLAB’s Optimization Toolbox) • User supplied Jacobian speeds convergence • If unavailable → Matlab gets by finite differencing • User has to supply initial estimate of solution • Make your own functions to split up a big problem into simpler pieces.