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;
[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 |