muller {pracma} | R Documentation |
Muller's Method
Description
Muller's root finding method, similar to the secant method, using a parabola through three points for approximating the curve.
Usage
muller(f, p0, p1, p2 = NULL, maxiter = 100, tol = 1e-10)
Arguments
f |
function whose root is to be found; function needs to be defined on the complex plain. |
p0 , p1 , p2 |
three starting points, should enclose the assumed root. |
tol |
relative tolerance, change in successive iterates. |
maxiter |
maximum number of iterations. |
Details
Generalizes the secant method by using parabolic interpolation between three points. This technique can be used for any root-finding problem, but is particularly useful for approximating the roots of polynomials, and for finding zeros of analytic functions in the complex plane.
Value
List of root
, fval
, niter
, and reltol
.
Note
Muller's method is considered to be (a bit) more robust than Newton's.
References
Pseudo- and C code available from the ‘Numerical Recipes’; pseudocode in the book ‘Numerical Analysis’ by Burden and Faires (2011).
See Also
secant
, newtonRaphson
, newtonsys
Examples
muller(function(x) x^10 - 0.5, 0, 1) # root: 0.9330329915368074
f <- function(x) x^4 - 3*x^3 + x^2 + x + 1
p0 <- 0.5; p1 <- -0.5; p2 <- 0.0
muller(f, p0, p1, p2)
## $root
## [1] -0.3390928-0.4466301i
## ...
## Roots of complex functions:
fz <- function(z) sin(z)^2 + sqrt(z) - log(z)
muller(fz, 1, 1i, 1+1i)
## $root
## [1] 0.2555197+0.8948303i
## $fval
## [1] -4.440892e-16+0i
## $niter
## [1] 8
## $reltol
## [1] 3.656219e-13