9.9. A Real-World Example

Problem

Understanding functional programming concepts is one thing; putting them into practice in a real project is another. You’d like to see a real example of them in action.

Solution

To demonstrate some of the techniques introduced in this chapter, the following example shows one way to implement Newton’s Method, a mathematical method that can be used to solve the roots of equations.

As you can see from the code, the method named newtonsMethod takes functions as its first two parameters. It also takes two other Double parameters, and returns a Double. The two functions that are passed in should be the original equation (fx) and the derivative of that equation (fxPrime).

The method newtonsMethodHelper also takes two functions as parameters, so you can see how the functions are passed from newtonsMethod to newtonsMethodHelper.

Here is the complete source code for this example:

object NewtonsMethod {

  def main(args: Array[String]) {
    driver
  }

  /**
   * A "driver" function to test Newton's method.
   * Start with (a) the desired f(x) and f'(x) equations,
   * (b) an initial guess and (c) tolerance values.
   */
  def driver {
    // the f(x) and f'(x) functions
    val fx = (x: Double) => 3*x + math.sin(x) - math.pow(math.E, x)
    val fxPrime = (x: Double) => 3 + math.cos(x) - math.pow(Math.E, x)

    val initialGuess = 0.0
    val tolerance = 0.00005

    // pass f(x) and f'(x) to the Newton's Method function, along with
    // the initial guess and tolerance
    val answer = newtonsMethod(fx, fxPrime, 

Get Scala Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.