/*
 Copyright (C) 2008 Richard Gomes

 This source code is release under the BSD License.

 This file is part of JQuantLib, a free-software/open-source library
 for financial quantitative analysts and developers - http://jquantlib.org/

 JQuantLib is free software: you can redistribute it and/or modify it
 under the terms of the JQuantLib license.  You should have received a
 copy of the license along with this program; if not, please email
 . The license is also available online at
 .

 This program is distributed in the hope that it will be useful, but WITHOUT
 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 FOR A PARTICULAR PURPOSE.  See the license for more details.

 JQuantLib is based on QuantLib. http://quantlib.org/
 When applicable, the original copyright notice follows this notice.
 */

package org.jquantlib.math.solvers1D;

import org.jquantlib.math.AbstractSolver1D;
import org.jquantlib.math.Ops;

/**
 * Bisection 1-D solver
*

* The implementation of the algorithm was inspired by * Press, Teukolsky, Vetterling, and Flannery, "Numerical Recipes * in C", 2nd edition, Cambridge University Press * * @author Dominik Holenstein */ public class Bisection extends AbstractSolver1D { /** * Computes the roots of a function by using the Bisection method. * @param f the function * @param xAccuracy the provided accuracy * @returns root_ */ @Override protected double solveImpl(final Ops.DoubleOp f, final double xAccuracy) { double dx, xMid, fMid; // Orient the search so that f>0 lies at root_+dx if (fxMin < 0.0) { dx = xMax - xMin; root = xMin; } else { dx = xMin - xMax; root = xMax; } while (evaluationNumber <= getMaxEvaluations()) { dx /= 2.0; xMid = root + dx; fMid = f.op(xMid); evaluationNumber++; if (fMid <= 0.0) root = xMid; if (Math.abs(dx) < xAccuracy || fMid == 0.0) return root; } throw new ArithmeticException("maximum number of function evaluations exceeded"); // TODO: message } }

Ads help maintain this website.