svd

语法

svd(obj, [fullMatrices=true], [computeUV=true])

参数

obj 是一个矩阵。

fullMatrices 是一个布尔值,其默认值为 true。

computeUV 是一个布尔值,默认值为 true。

详情

计算矩阵的奇异分解。

假设输入矩阵 A 的行数为 m,列数为 n:

  • fullMatrices=true,结果为一个 m*m 矩阵 U(以左奇异向量为列的矩阵),一个 n*n 矩阵 V(以右奇异向量为行的矩阵)和一个向量 s(按降序排列的奇异值),并满足以下条件:A=U*S*V。其中 S 是一个 m*n 矩阵,其对角线元素为s。

  • fullMatrices=false,S 矩阵仅保留有奇异值的那部分方阵,即矩阵 S 为 k*k,其中 k=min(m,n),并将与删除的这些行或列相乘的 U 与 V 中的行或列删除。矩阵 U 为 m*k,矩阵 V 为 k*n。

  • computeUV=false时,只返回向量 s。

例子

m=matrix([[2,1,0],[1,3,1],[0,1,4],[1,2,3]]);
U,s,V=svd(m);
U;
#0 #1 #2
-0.233976 0.57735 -0.782254
-0.560464 0.57735 0.593756
-0.79444 -0.57735 -0.188498
s;
// output
[6.029042,3,1.284776]

V;
#0 #1 #2 #3
-0.170577 -0.449459 -0.620036 -0.620036
0.57735 0.57735 -0.57735 0
-0.755582 0.630862 -0.12472 -0.12472
-0.258199 -0.258199 -0.516398 0.774597
U,s,V=svd(m,fullMatrices=false);
V;
#0 #1 #2 #3
-0.170577 -0.449459 -0.620036 -0.620036
0.57735 0.57735 -0.57735 0
-0.755582 0.630862 -0.12472 -0.12472