当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R norm 计算矩阵的范数


R语言 norm 位于 base 包(package)。

说明

使用 LAPACK 计算 x 的矩阵范数。范数可以是矩阵元素中的一 ( "O" ) 范数、无穷大 ( "I" ) 范数、弗罗贝尼乌斯 ( "F" ) 范数、最大模数 ( "M" ) 或 “spectral”或 "2" -norm,由 type 的值确定。

用法

norm(x, type = c("O", "I", "F", "M", "2"))

参数

x

数值矩阵;请注意, Matrix 等包定义了更多norm() 方法。

type

字符串,指定要计算的矩阵范数的类型。指示所需规范类型的字符。

"O""o""1"

指定一个范数(最大绝对列总和);

"I""i"

指定无穷范数(最大绝对行和);

"F""f""E""e"

指定 Frobenius 范数(x 的欧几里得范数被视为向量);

"M""m"

指定x中所有元素的最大模数;和

"2"

指定 “spectral” 或 2-范数,它是 x 的最大奇异值 (svd )。

默认为 "O" 。仅使用type[1] 的第一个字符。

细节

norm()base 方法调用 LAPACK 函数 dlange

请注意,1-、Inf- 和 "M" 范数的计算速度比 Frobenius 范数更快。

底层 LAPACK 代码的不成功结果将导致错误,并给出正错误代码:这些只能通过详细研究 FORTRAN 代码来解释。

矩阵范数,一个非负数。 0 范围(空)矩阵为零。

例子

(x1 <- cbind(1, 1:10))
norm(x1)
norm(x1, "I")
norm(x1, "M")
stopifnot(all.equal(norm(x1, "F"),
                    sqrt(sum(x1^2))))

hilbert <- function(n) { i <- 1:n; 1 / outer(i - 1, i, `+`) }
h9 <- hilbert(9)
## all 5 (4 different) types of norm:
(nTyp <- eval(formals(base::norm)$type))
sapply(nTyp, norm, x = h9)
stopifnot(exprs = { # 0-extent matrices:
    sapply(nTyp, norm, x = matrix(, 1,0)) == 0
    sapply(nTyp, norm, x = matrix(, 0,0)) == 0
})

来源

除了 norm = "2" 之外,LAPACK 例程 DLANGE

LAPACK 来自https://netlib.org/lapack/

参考

Anderson, E., et al (1994). LAPACK User's Guide, 2nd edition, SIAM, Philadelphia.

也可以看看

rcond 表示(倒数)条件号。

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Compute the Norm of a Matrix。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。