1. Consider the following method for finding a zero of a function. Like the Bisection method, this method requires that the function be continuous and that you have bracketed a zero (That is, that $f(a)$ and $f(b)$ have different signs.) However, instead of considering the midpoint of the interval at each step, this method takes the x-intercept, $x_i$, of the line from $(a, f(a))$ through $(b, f(b))$. As before, $x_i$ becomes the new left or right endpoint of the new, smaller interval depending on whether $f(x_i)$ is positive or negative.
(a) Write a Python function called NotBisOnce(a,b,f) which performs one step of the method with a as the left endpoint and b the right endpoint of the starting interval, and f the function whose zero we're trying to find.
The program should return the new interval, either $(a,x)$ or $(x,b)$.
(b) Write a Python function called NotBisMethod(a, b,f, tol) which repeatedly performs this method until $|f(x)| < tol$. The program should return x. It should also initially check that $(a,b)$ does, in fact, bracket a zero of f.
(c) Test your program by finding the root of the equation:
$\sqrt{1 - x^2} = ln(x + 4) - 0.8$
in the interval $(0, 1)$. For tolerances (tol) of $10^{-1}$, $10^{-3}$, $10^{-5}$, $10^{-7}$ make a table showing the estimate of the root, and the number of steps required.