https://github.com/cran/pracma
Raw File
Tip revision: 71455748623ef69836470c75c5f9384f6e872d45 authored by HwB on 28 June 2011, 00:00:00 UTC
version 0.6-3
Tip revision: 7145574
agm.R
##
##   a g m . R  Arithmetic-geometric Mean
##


agm <- function(a, b, maxiter = 25, tol = .Machine$double.eps^(1/2)) {
    stopifnot(is.numeric(a), length(a) == 1, a >= 0,
              is.numeric(b), length(b) == 1, b >= 0)

    niter <- 0
    while (abs(a-b) >= tol && niter <= maxiter) {
        a1 <- (a + b) / 2
        b1 <- sqrt(a * b)
        a <- a1
        b <- b1
        niter <- niter + 1
    }
    if (niter > maxiter)
        warning("Maximum number of allowed iterations exceeded.")
    return(list(agm=(a+b)/2, niter = niter, estim.prec = abs(a-b)))
}
back to top