In this section, we'll learn about the different methods used in numerical analysis to find the roots of functions. Root-finding algorithms are very useful, and we will learn more about their applications when we talk about volatility and implied volatility.
In this section, we will look at a method for finding the roots of a function using the bisection method. This method will be used later in this book to numerically find the implied volatility for an option that is given a certain market price. The bisection method uses iteration and repeatedly bisects an interval for the next iteration.
The following function implements bisection in F#:
let rec bisect n N (f:float -> float) (a:float) (b:float) (t:float) : float = if n >= N then -1.0 else let c = (a + b) / 2.0 if f(c) = 0.0 || (b - a) / 2.0 < t then // Solution found c else if sign(f(c)) = sign(f(a)) then bisect (n + 1) N f c b...