norm-methods.RdComputes 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