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 |