norm.Rd
Computes a matrix norm of x
, using Lapack for dense matrices.
The norm can be the one ("O"
, or "1"
) norm, the
infinity ("I"
) norm, the Frobenius ("F"
) norm,
the maximum modulus ("M"
) among elements of a matrix, or the
spectral norm or 2-norm ("2"
), as determined by the value of
type
.
norm(x, type, ...)
a real or complex matrix.
A character indicating the type of norm desired.
"O"
, "o"
or "1"
specifies the one norm, (maximum absolute column sum);
"I"
or "i"
specifies the infinity norm (maximum absolute row sum);
"F"
or "f"
specifies the Frobenius norm (the
Euclidean norm of x
treated as if it were a vector);
"M"
or "m"
specifies the maximum modulus of
all the elements in x
; and
"2"
specifies the “spectral norm” aka “2-norm”, which
is the largest singular value (svd
) of x
.
The default is "O"
. Only the first character of
type[1]
is used.
further arguments passed to or from other methods.
A numeric value of class "norm"
, representing the quantity
chosen according to type
.
For dense matrices, the methods eventually call the Lapack functions
dlange
, dlansy
, dlantr
, zlange
,
zlansy
, and zlantr
.
onenormest()
, an approximate randomized estimate
of the 1-norm condition number, efficient for large sparse matrices.
The norm()
function from R's base package.
Anderson, E., et al. (1994). LAPACK User's Guide, 2nd edition, SIAM, Philadelphia.
x <- Hilbert(9)
norm(x)# = "O" = "1"
#> [1] 2.828968
stopifnot(identical(norm(x), norm(x, "1")))
norm(x, "I")# the same, because 'x' is symmetric
#> [1] 2.828968
allnorms <- function(x) {
## norm(NA, "2") did not work until R 4.0.0
do2 <- getRversion() >= "4.0.0" || !anyNA(x)
vapply(c("1", "I", "F", "M", if(do2) "2"), norm, 0, x = x)
}
allnorms(x)
#> 1 I F M 2
#> 2.828968 2.828968 1.755872 1.000000 1.725883
allnorms(Hilbert(10))
#> 1 I F M 2
#> 2.928968 2.928968 1.785527 1.000000 1.751920
i <- c(1,3:8); j <- c(2,9,6:10); x <- 7 * (1:7)
A <- sparseMatrix(i, j, x = x) ## 8 x 10 "dgCMatrix"
(sA <- sparseMatrix(i, j, x = x, symmetric = TRUE)) ## 10 x 10 "dsCMatrix"
#> 10 x 10 sparse Matrix of class "dsCMatrix"
#>
#> [1,] . 7 . . . . . . . .
#> [2,] 7 . . . . . . . . .
#> [3,] . . . . . . . . 14 .
#> [4,] . . . . . 21 . . . .
#> [5,] . . . . . . 28 . . .
#> [6,] . . . 21 . . . 35 . .
#> [7,] . . . . 28 . . . 42 .
#> [8,] . . . . . 35 . . . 49
#> [9,] . . 14 . . . 42 . . .
#> [10,] . . . . . . . 49 . .
(tA <- sparseMatrix(i, j, x = x, triangular= TRUE)) ## 10 x 10 "dtCMatrix"
#> 10 x 10 sparse Matrix of class "dtCMatrix"
#>
#> [1,] . 7 . . . . . . . .
#> [2,] . . . . . . . . . .
#> [3,] . . . . . . . . 14 .
#> [4,] . . . . . 21 . . . .
#> [5,] . . . . . . 28 . . .
#> [6,] . . . . . . . 35 . .
#> [7,] . . . . . . . . 42 .
#> [8,] . . . . . . . . . 49
#> [9,] . . . . . . . . . .
#> [10,] . . . . . . . . . .
(allnorms(A) -> nA)
#> Warning: 'norm' via sparse -> dense coercion
#> 1 I F M 2
#> 56.00000 49.00000 82.82512 49.00000 49.00000
allnorms(sA)
#> Warning: 'norm' via sparse -> dense coercion
#> 1 I F M 2
#> 84.00000 84.00000 117.13240 49.00000 61.54212
allnorms(tA)
#> Warning: 'norm' via sparse -> dense coercion
#> 1 I F M 2
#> 56.00000 49.00000 82.82512 49.00000 49.00000
stopifnot(all.equal(nA, allnorms(as(A, "matrix"))),
all.equal(nA, allnorms(tA))) # because tA == rbind(A, 0, 0)
#> Warning: 'norm' via sparse -> dense coercion
A. <- A; A.[1,3] <- NA
stopifnot(is.na(allnorms(A.))) # gave error
#> Warning: 'norm' via sparse -> dense coercion