FUNCTION
Aitken
Calculates the zeros of a function using Aitken acceleration.
You're viewing an older version of this page (#95). View the current version.
Interface
#include <codecogs/maths/rootfinding/aitken.h>
using namespace Maths::Rootfinding;
Let be a sequence with limit
. The Aitken method consists of transforming
into
where
The sequence converges more rapidly than
towards the same limit
. It is good practice to avoid the above form of
, which is numerically unstable, and write it in the following equivalent form:
This algorithm finds the roots of the user-defined function f starting with an initial guess x0 and iterating the sequence above until either the accuracy <em> eps </em> is achieved or the maximum number of iterations maxit is exceeded. The c factor is used to aid convergence; c = -1 is a normal value, however if divergence occurs, smaller and/or positive values should be tried.
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
Example 1
#include <codecogs/maths/rootfinding/aitken.h>
#include <iostream>
#include <iomanip>
#include <cmath>
// user-defined function
double f(double x) {
return sin(x);
}
int main()
{
double x = Maths::RootFinding::aitken(f, 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 = 3.14159265462
The associated ordinate value is Y = -1.02635576671e-009