// $Id$

// cf. pp. 74-75 of SICP

// Newton's method

package lib;

public class NewtonsMethod implements DoubleSolverIF {

    protected double tolerance = 0.00001;
    //@ invariant: tolerance > 0.0;

    public NewtonsMethod() { }

    public NewtonsMethod(double epsilon) {
        if (epsilon > 0.0) {
            tolerance = epsilon;
        }
    }

    public double solve(DoubleFun g, double guess) {
        return new FixedPoint(tolerance)
            .solve(new NewtonTransform(g, tolerance), guess);
    }
}
