ENGG 1801 Engineering Computing MATLAB Lecture 7: Tutorial Weeks 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: x 1 = 4 x 2 = 2
Example (II) Use as initial estimate for solution (3, 3) Next estimate obtained from: New point = (3.5714, ) Old point = (3, 3) Jacobian evaluated at old point Functions evaluated at old point
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.