Next: Least squares fitting and the QR decomposition, Previous: Eigenvalues and eigenvectors, Up: Matrix facilities
函数 svd(M) 调用任意一个矩阵 M
且对 M 进行奇异值分解。这包括
一个和 M 列空间一致的正交列 U 的矩阵,
一个和 M 行空间一致的正交列 V 的矩阵,
以及一个正元素 D 的对角矩阵,如 M = U %*% D %*%
t(V)。
D 实际上以对角元素向量的形式返回。
svd(M) 的结果是由
d, u 和 v 构成的一个列表。
如果 M 是一个方阵,那么就不难看出
> absdetM <- prod(svd(M)$d)
这就计算 M 行列式的绝对值。如果
在各种矩阵中都需要这种运算,我们可以把它
定义为一种 R 函数
> absdet <- function(M) prod(svd(M)$d)
我们会发现 absdet() 是另外一个 R 函数。
作为一个零碎但可能很有用的例子,你可能想
想写一个用来计算方阵迹(trace)的函数 tr()。
[提示: 你不需要外在的循环。
仔细看一下函数diag()。]