1 / 36

Computational Methods in Physics PHYS 3437

This lecture covers the basics of finding roots of functions, with a focus on polynomials. Various root finding methods like bisection, Newton-Raphson, and secant method are discussed. Examples and advice on using these methods are provided.

kjensen
Download Presentation

Computational Methods in Physics PHYS 3437

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Computational Methods in Physics PHYS 3437 Dr Rob Thacker Dept of Astronomy & Physics (MM-301C) thacker@ap.smu.ca

  2. Today’s Lecture • Functions and roots: Part I • Polynomials • General rooting finding • Bracketing & the bisection method • Newton-Raphson method • Secant method

  3. Functions & roots • This is probably the first numerical task we encounter • Many graphical calculators have built-in routines for finding roots • Solving f(x)=0 is a problem frequently encountered in physics • First examine solutions for polynomials:

  4. Higher orders: cubic • Cubic formula was discovered by Tartaglia (1501-1545) but published by Cardan (~1530) without permission!

  5. Higher orders: quartic & higher • The general solution to a quartic was discovered by Ferrari (1545) but is extremely lengthy • Evariste Galois (1811-1832) showed that there is no general solution to a quintic & higher formulas • Remember certain higher order equations may be rewritten as quadratics, cubics in x2 (say) e.g. • What is the best approach for polynomials? • Always best to reduce to simplest form by dividing out factors • If coefficients sum to zero then x=1 is a solution and (x-1) can be factored to give a (x-1)*(polynomial order n-1) • Can you think why? • You may be able to repeatedly factor larger polynomials by inspection • Only useful for a single set of coefficients though

  6. Example • Consider f(x)=x5+4x4-10x2-x+6=0 • Firstly sum of coefficients is 0, so x=1 is a solution – factor (x-1) by long division of the polynomial • Hence we find that f(x)=(x-1)(x4+5x3+5x2-5x-6) • Notice that the coefficients in the second bracket sum to 0… • In fact we can show that further division gives f(x)=(x-1)2(x+1)(x+2)(x+3) So regardless of whether an analytic general solution exists, we may still be able to find roots without using numerical root finders…

  7. Advice on using the general quadratic formula • For the quadratic f(x)=x2+a1x+a0 the product of the roots must be a0 since f(x)=(x-x1)(x-x2) where x1 & x2 are the roots • Hence x2=a0/x1 sogiven one root, provided a0≠0, we can then quickly find the other root • Using the manipulation discussed in lecture 3 If a0=0 then we have divide by zero here. sgn(a1) is a function that is 1 if a1 is positive, and -1 if a1 is negative. This ensures that the discriminant is added with the correct sign.

  8. More general root finding • For a more general function, say f(x)=cos x – x the roots are non-trivial In this case the solution is given where g(x)=h(x) h(x)=x Graphing actually helps a great deal since you can see there must only be one root. In this case around 0.8. 1.0 It is extremely beneficial to know what a given function will look like (approximately) – helps you to figure out whether your solutions are correct or not. g(x)=cos x p/2 0.8

  9. Iterative root finding methods • It is clearly useful to construct numerical algorithms that will take any input f(x) and search for solutions • However, there is no perfect algorithm for a given function f(x) • Some converge fast for certain f(x) but slowly for others • Certain f(x) may not yield numerical solutions • Above all you should not use algorithms as black boxes • You need to know what the limitations are! • We shall look at the following algorithms • Bisection • Newton-Raphson • Secant Method • Muller’s Method

  10. Bracketing & Bisection • Bracketing is a beautifully simple idea • Anywhere region bounded by xl and xu, such that the sign of a function f(x) changes between f(xl) and f(xu), there must be at least one root • This is provided that the function does not have any infinities within the bracket – f(x) must be continuous within the region • The root is said to be bracketed by the interval (xl,xu) f(x) xl x xu

  11. Even if a region is bracketed by two positive (or two negative) values a root may still exist There could even be 2n roots in this region! Where n is a natural number x2 x3 xl xu Other possibilities xl xu

  12. Pathological behaviour occurs This is a graph of sin(1/x). As x→0 the function develops an infinite number of roots. But don’t worry! This is not a course in analysis…

  13. Bracketing singularities • f(x)=1/(x-1) is not continuous within the bracketed region [0.5,1.5].Although f(0.5)<0 and f(1.5)>0 there is no root in this bracket (regardless of the fact that the plotting program connects the segments) f(x) is not continuous within the bracket.

  14. Root finding by bisection • Step 1: Given we know that there exists an f(x0)=0 solution, choose xl and xu as the brackets for the root • Since the signs of f(xl) & f(xu) must be different, we must have f(xl)×f(xu) < 0 • This step may be non-trivial – we’ll come back to it xu xl f(x) For example, for f(x)=cos x –x we know that 0<x0<p/2

  15. xm Bisection: Find the mid-point • Step 2: Let xm=0.5(xl+xu) • the mid point between the two brackets • This point must be closer to the root than one of xl or xu • The next step is to select the new bracket from xl,xm,xu xu xl

  16. xm Bisection: Find the new bracket • Step 3: • If f(xl)×f(xm)<0 • root lies between xl and xm • Set xl=xl ; xu=xm • If f(xl)×f(xm)>0 • root lies between xm and xu • Set xl=xm; xu=xu • If f(xl)×f(xm)=0 • root is xm you can stop xu xl

  17. Final Step in Bisection • Step 4: Test accuracy (we want to stop at some point) • xm is the best guess at this stage • Absolute error is |xm-x0| but we don’t know what x0 is! • Error estimate: e=|xmn-xmn-1| where n corresponds to nth iteration • Check whether e<d where d is the tolerance that you have to decide for yourself at the start of the root finding • If e<d then stop • If e>d then return to step 1

  18. Example • Let’s consider f(x)=cos x - x • Pick the initial bracket as xl=0 and xu=p/2 • f(0)=1, f(p/2)=-p/2 – check this satisfies f(0)×f(p/2)<0 (yes - so good to start from here) • First bisection: xm=0.5(xl+xu)=p/4=0.785398 • f(xl(1))=f(0)=1 • f(xm(1))=f(p/4)=-0.078 • f(xu(1))=f(p/2)=-p/2 • So select xl(1) &xm(1) as the new bracket f(xl(1))×f(xm(1))<0

  19. Repeat… • After eleventh bisection: xm(11)=963p/4096=0.738612 • After twelfth bisection: xm(12)=1927p/8192=0.738995 • So after first 12 bisections we have only got the first three decimal places correct • Typically to achieve 9 decimal places of accuracy will require 30-40 steps

  20. Pros & cons of bisection • Pro: Bisection is robust • You will always find a root • For this fact alone it should be taken seriously • Pro: can be programmed very straightforwardly • Con: bisection converges slowly… • Width of the bracket: xun-xln=en=en-1/2 • Width halves at each stage • We know in advance if the initial bracket is width e0 after n steps the bracket will have width e0/2n • If we have a specified tolerance d then this will be achieved when n=log2(e0/d) • Bisection is said to converge linearly since en+1en

  21. Newton-Raphson Method • For many numerical methods, the underlying algorithms begins with a Taylor expansion • Consider the Taylor expansion of f(x) around a point x0 • If x is a root then • This formula is applicable provided f’(x0) is not an extremum (f’(x0)≠0))

  22. Applying the formula • If we interpret x0 to be the current guess we use the formula to give a better estimate for the root, x • We can repeat this process iteratively to get better and better approximations to the root • We may even get the exact answer if we are lucky • Take f(x)=cos x – x, then f’(x)=-sin x -1 • It helps to make a good guess for the first root, so we’ll take x0(1)=p/4=0.785398 • The (1) signifies the first in a series of guesses • f(x0(1))=-0.0782914 • f’(x0(1))=-1.7071068

  23. Steps in the iteration • Plugging in the values for f(x0(1)), f’(x0(1)) we get • We repeat the whole step again, with the values for x0(2) • At this stage f(x0(3))=0.0000002, so we are already very close to the correct answer – after only two iterations • It helps to see what is happening geometrically…

  24. x(n+2) x(n+3) x(n) xi=x(n+1) f(x) Geometric Interpretation of N-R • The general step in the iteration process is Draw out a line from f(x(n)) with slope f’(x(n)) – equivalent to a line y=m(x-x(n))+b where m=f’(x(n)) and b=f(x(n)) – check it! The next step in the iteration is when y=0. So N-R “spirals in” on the solution

  25. Problems with N-R • The primary problem with N-R is that if you are too close to an extremum the derivative f’(x(n)) can become very shallow: In this case the root was originally bracketed by (xl,xu), but the value of x(n+1) will lie outside that range to x(n+1) x(n) xl xu f(x)

  26. NR-Bisection Hybrid • Let’s combine the two methods • Good convergence speed from NR • Guaranteed convergence from bisection • Start with xl<x(n)<xu as being the current best guess within the bracket • Let • If xl<xNR(n+1)<xu then take an NR step • Else set xNR(n+1)=xm(n+1)=0.5(xl+xu), check and update xl and xu values for the new bracket • i.e. we throw away any bad NR steps and do a bisection step instead

  27. Example: Full NR-Bisection algorithm • Let’s look at how we might design the algorithm in detail • Initialization: • Given xl and xu from user input evaluate f(xl) & f(xu) • Test that xl≠xu – if they are equal report to user • Ensure root is properly bracketed: • Test f(xl)×f(xu)<0 – if not report to user • Initialize x(n) by testing values of f(xl) & f(xu) • If |f(xl)| < |f(xu)| then x(n)=xl and set f(x(n))= f(xl) • else let x(n)=xu and set f(x(n))=f(xu) • Evaluate the derivative f’(x(n)) • Set the counter for the number of steps to zero: icount=0

  28. Full NR-Bisection algorithm cont. • (1) Perform NR-bisection • Increment icount • Evaluate xNR(n+1)=x(n)-f(x(n))/f’(x(n)) • If (xNR(n+1)<xl) or (xNR(n+1)>xu) then require bisection • Set xNR(n+1)=0.5(xl+xu) • Calculate error estimate: e=|x(n+1)-x(n)| • Set x(n)=x(n+1) • Test error • If |e/x(n)|< tolerance go to (2) • Test number of iterations • If icount>max # iterations then go to (3) • Prepare for next iteration • Set value of f(x(n)) • Set value of f’(x(n)) • Update the brackets using Step 3 of the bisection algorithm • Go to 1

  29. Final parts of the algorithm • (2) Report the root and stop • (3) Report current best guess for root. Inform user max number of iterations has been exceeded • While it is tempting to think that these reporting stages are pointless verbiage – they absolutely aren’t! • Clear statements of the program state will help you to debug tremendously • Get in the habit now!

  30. Secant Method - Preliminaries • One of the key issues in N-R is that you need the derivative • May not have it if the function is defined numerically • Derivative could be extremely hard to calculate • You can get an estimate of the local slope using values of x(n),x(n-1), f(x(n)) and f(x(n-1)) Dx=x(n)-x(n-1) x(n) Dy=f(x(n))-f(x(n-1)) x(n-1) Estimate of function slope f(x)

  31. Secant Method • So once you initially select a pair of points bracketing the root (x(n-1), x(n)), x(n+1) is given by • You then iterate to a specific tolerance value exactly as in NR • This method can converge almost as quickly as NR

  32. Issues with the Secant Method • Given the initial values xl(=x(n-1)),xu(=x(n)) that bracket the root the calculation of x(n+1) is local • Easy to program, all values are easily stored • Difficulty is with finding suitable xl,xu since this is a global problem • Determined by f(x) over its entire range • Consequently difficult to program (no perfect method)

  33. Case where Secant will be poor 2 Estimated slope is pretty much always 45 degrees until you get close to the Root. 1 3 This is actually a difficult function to deal with for many root finders…

  34. Bracket finding Strategies • Graph the function • May require 1000’s of points and thus function calls to determine visually where the function crosses the x-axis • “Exhaustive searching” – a global bracket finder • Looks for changes in the sign of f(x) • Need small steps so that no roots are missed • Need still to take large enough steps that this doesn’t take forever

  35. Summary • When dealing with high order polynomials don’t rule out the possibility of being able to factorize by hand • For general functions, bisection is simple but slow • Nonetheless the fact that it is guaranteed to converge from good starting points is extremely useful • Newton-Raphson can have excellent convergence properties • Watch out for poor behaviour around extremums • Secant method can be used in place of NR when you cannot calculate the derivative

  36. Next Lecture • More on Global bracket finding • Müller-Brent method • Examples

More Related