M371 - Alexiades
                        Lab 2: Finding Roots[ For each lab, create a new folder (Lab#) and work in it ]
Consider the problem of finding the zeros of the function
      F(x) = x3+2x2+10x−20

1. Are there any ? How many ? How do you know ?

2. Name at least three methods one could use to find the roots.

3. Is there a root of F(x) in the interval [1, 2] ?
  Estimate how many iterations would the Bisection algorithm need to find such a root accurate to 12 decimals.

4. Write a code Bisect (in double precision) implementing the Bisection Method for F(x)=0 on an interval [a, b].
  Evaluation of F(x) should be done in a subprogram FCN(x).
  The code should ask for input of a, b, TOL, maxIT.
  At each iteration n, should print out (nicely, in columns, use fprintf):   n     xn     Fn     ERRn
  (with appropriate format, like   '%d   %f   %e   %e \n' )
  Upon convergence, it should print out: DONE: root=%f , residual=%e , in %d iters   or failure message(s).
  Debug on a simple problem, like 1.3−x on [1,2].

5. Use your Bisect code to find the root mentioned in 3, with TOL=1.e-12 .
  Output your final approximate root (with all appropriate digits), the residual, and how many iterations it took.

6. Write another code Newton (in double precision) implementing the Newton-Raphson Method
  (copy your Bisect code and modify).
  Evaluation of F(x) and F'(x) should be done in a subprogram FCN(x).
  The code should ask for input of: x0, TOL, maxIT (and should print output similar to Bisect code).
  Debug on a simple problem, like   x2−3 = 0.
  Then use it to find the root of F(x) in [1,2] with TOL=1.e-12.

Now consider the problem of finding zeros of
      G(x) = x−tan(x)   near x=99 (radians).

7. Are there any ? How many ? How do you know ?

8. Use your Newton code to find the zero of G(x) closest to x=99 (radians) to 9 decimals ( use TOL=10−9, maxIT=20 ).
  Output your final approximate root, the residual, and how many iterations it took.
  Note: Extremely accurate starting values are needed for this function. 
	Plot it using gnuplot or Matlab or...  or produce values of G(x) around x=99 
	to see the nature of the function. Simplest is gnuplot:  plot [98.9 : 99] x-tan(x) 
	then adjust the range [98.9 : 99] to zoom in further.

9. Matlab (and Python, and ...) have built-in programs to solve nonlinear (systems of) equations, among which
    fzero     ( help fzero for help in Matlab or Octave). It implements Brent's algorithm.
    ( FCN needs to be passed as "function handle", like:   F=@FCN , then pass F )
  This rootfinder needs an interval [a,b] on which the function changes sign;
  it performs bisection and then "inverse quadratic interpolation".
Can also search for "Brent's method" in various languages...

  Try fzero (or BRENT) on the function F(x) and on G(x).

In a single plain text file "Lab2.txt", submit (on Canvas):
    Lab2 , Name, Date
    ===================================================
    a. Answers to each of 1, 2, 3, 5 (show ONLY final result).
    ===================================================
    b. Answers to 7, 8 (show ONLY final result).
    ===================================================
    c. Answers to 9.   Specify which rootfinder you used, how you called it.
      Compare with yours from 5 and 8 on accuracy, efficiency (# of itereations).
    ===================================================
    d. Your bisection code, CLEANED UP, and FCN function.
    ===================================================
    e. Your Newton-Raphson code, CLEANED UP, and FCN function.