I have forgotten
my Password

Or login with:

  • Facebookhttp://facebook.com/
  • Googlehttps://www.google.com/accounts/o8/id
  • Yahoohttps://me.yahoo.com
COST (GBP)
this unit 2.98
sub units 0.00
+
0

Falseposition

Calculates the zeros of a function using the Regula-Falsi method.
Controller: CodeCogs

Interface

C++

Falseposition

 
doublefalsepositiondouble(*f)(double)[function pointer]
doublex0 = -1E+7
doublex1 = 1E+7
doubleeps = 1E-10
doublemaxit = 1000 )
The false position method, on contrast with Newton's method, in which the calculation of the derivative \inline f'(x_n) was required, replaces it with its approximation

Given \inline x_0 and \inline x_1, the main algorithm is based on the following recurrence relation

This method has rate of convergence \inline \frac {1 + \sqrt{5}} {2} \approx 1.618, therefore inferior to the method of Newton. However it is more accurate than Newton because only one function evaluation is required, \inline f(x_n), \inline f(x_{n - 1}) being calculated in the previous iteration, while Newton requires two, \inline f(x_n) and \inline f'(x_n).

To give you a better idea on the way this method works, the following graph shows different iterations in the approximation process. Here is the associated list of pairs chosen at consecutive steps

MISSING IMAGE!

1/falseposition-378.png cannot be found in /users/1/falseposition-378.png. Please contact the submission author.

This algorithm finds the roots of the user-defined function f starting with an initial interval [x0, x1] and iterating the sequence above until either the accuracy eps is achieved or the maximum number of iterations maxit is exceeded.

Example:

#include <codecogs/maths/rootfinding/falseposition.h>
 
#include <iostream>
#include <iomanip>
#include <cmath>
 
// user-defined function
double f(double x) {
    return cos(x);
}
 
int main() 
{
  double x = Maths::RootFinding::falseposition(f, 1, 3);
 
  std::cout << "The calculated zero is X = " << std::setprecision(12) << x << std::endl;
  std::cout << "The associated ordinate value is Y = " << f(x) << std::endl;
  return 0;
}
Output:
The calculated zero is X = 1.70614146372
The associated ordinate value is Y = -0.134932299622

References:

  • Jean-Pierre Moreau's Home Page, http://perso.wanadoo.fr/jean-pierre.moreau/
  • F.R. Ruckdeschel, "BASIC Scientific Subroutines", Vol. II, BYTE/McGRAWW-HILL, 1981

Parameters

fthe user-defined function
x0Default value = -1E+7
x1Default value = 1E+7
epsDefault value = 1E-10
maxitDefault value = 1000

Authors

Lucian Bentea (August 2005)
Source Code

Source code is available when you buy a Commercial licence.

Not a member, then Register with CodeCogs. Already a Member, then Login.