# 7. Exercises on Root-finding Without Derivatives#

## Exercise 1: Comparing Root-finding Methods#

**Note:** This builds on the previous exercise comparing the Bisection and Newton’s Methods;
just adding the Secant Method.

A) Write a Python function implementing the secant method with usage

```
(root, errorEstimate, iterations, functionEvaluations) = secant(f, a, b, errorTolerance, maxIterations)
```

Update your previous implementations of the bisection method and Newton’s method to mimic this interfacce:

```
(root, errorEstimate, iterations, functionEvaluations) = bisection(f, a, b, errorTolerance, maxIterations)
(root, errorEstimate, iterations, functionEvaluations) = newton(f, x_0, errorTolerance, maxIterations)
```

**Aside:** the last parameter `maxIterations`

could be optional, with a default like `maxIterations=100`

.

B) Use these to solve the equation

\[ 10 - 2x + \sin(x) = 0 \]

i) with [estimated] absolute error of no more than \(10^{-8}\), and then

ii) with [estimated] absolute error of no more than \(10^{-15}\).

Note in particular how many iterations and how many function evaluations are needed.

C) Discuss: rank these methods for speed, as indicated by these experiments, and explain your ranking.