Namespace:
Imsl.Math
Assembly:
ImslCS (in ImslCS.dll) Version: 6.5.0.0
Syntax
C# |
---|
[SerializableAttribute] public class ZerosFunction |
Visual Basic (Declaration) |
---|
<SerializableAttribute> _ Public Class ZerosFunction |
Visual C++ |
---|
[SerializableAttribute] public ref class ZerosFunction |
Remarks
ZerosFunction computes n real zeros of a real, continuous, univariate function f. The search for the zeros of the function can be limited to a specified interval, or extended over the entire real line. The algorithm is generally more efficient if an interval is specified. The user supplied function, f(x), must return valid results for all values in the specified interval. If no interval is given, the user-supplied function must return valid results for all real numbers.
The function has two convergence criteria. The first criterion accepts a root, x, if


The second criterion accepts a root if it is known to be inside of an interval of length at most AbsoluteError, see property AbsoluteError.
A root is accepted if it satisfies either criteria and is not within MinimumSeparation of another accepted root, see property MinimumSeparation.
If initial guesses for the roots are given, Müller's method (Müller 1956) is used for each of these guesses. For each guess, the Müller iteration is stopped if the next step would be outside of the bound, if given. The iteration is also stopped if the algorithm cannot make further progress in finding a root.
If no guesses for the zeros were given, or if Müller's method with the
guesses did not find the requested number of roots, a meta-algorithm,
combining Müller's and Brent's methods, is used. Müller's method is used
primarily to find the roots of functions, such as ,
where the function does not cross the y=0 line. Brent's method is used to
find other types of roots.
The meta-algorithm successively refines the interval using a one-dimensional Faure low-discrepancy sequence. The Faure sequence may be scaled by setting the bound interval [a,b] using the SetBounds method. The Faure sequence will be scaled from (0,1) to (a,b).
If no bound on the function's domain is given, the entire real line must
be searched for roots. In this case the Faure sequence is scaled from
(0, 1) to using the mapping

At each step of the iteration, the next point in the Faure sequence is
added to the list of breakpoints defining the subintervals. Call the
points . The
new point,
splits an existing subinterval,
.
The function is evaluated at . If its value is
small enough, specifically if




If Müller's method did not find a root using the new point, the function
value at the point is compared with the function values at the endpoints of
the subinterval it divides. If
and no root has previously been found in
,
then Brent's method is used to find a root in this interval. Similarly, if
the function changes sign over the interval
,
and a root has not already been found in the subinterval, Brent's method is
used.