# File src/library/base/R/det.R # Part of the R package, https://www.R-project.org # # Copyright (C) 1995-2012 The R Core Team # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # A copy of the GNU General Public License is available at # https://www.R-project.org/Licenses/ ## det now uses Lapack and an LU decomposition. The method argument is ## no longer used. ## S-plus' Matrix pkg has arg. "logarithm = TRUE" and returns list ## (which is necessary for keeping the sign when taking log ..) ## S-plus v 6.x has incorporated the Matrix pkg det as determinant det <- function(x, ...) { z <- determinant(x, logarithm = TRUE, ...) c(z$sign * exp(z$modulus)) } determinant <- function(x, logarithm = TRUE, ...) UseMethod("determinant") determinant.matrix <- function(x, logarithm = TRUE, ...) { if ((n <- ncol(x)) != nrow(x)) stop("'x' must be a square matrix") if (n < 1L) return(structure(list(modulus = structure(if(logarithm) 0 else 1, logarithm = logarithm), sign = 1L), class = "det")) if (is.complex(x)) stop("'determinant' not currently defined for complex matrices") ## FIXME: should not be so hard to implement; see ## moddet_ge_real() in ../../../modules/lapack/Lapack.c ## the 'sign' would have to be complex z, with |z|=1 .Internal(det_ge_real(x, logarithm)) }