设A为mn阶矩阵,A'表示A的转置矩阵,A'A的n个特征值的非负平方根叫作A的奇异值。记为σi(A)。
这几天做实验涉及到奇异值分解svd(singular value decomposition),涉及到这样的一个问题,
做PCA时候400幅图像拉成向量按列摆放,结果摆成了比如说10000400大小的矩阵,
用到svd函数进行奇异值分解找主分量,结果MATLAB提示超出内存,后来想起还有个函数叫svds,看到别人用过,以为只是一个变体,没什么区别,就用上了,结果确实在预料之中。但是今天觉得不放心,跑到变量里面看了下,发现这个大的矩阵被分解成了
三个100006,66,4006大小的矩阵的乘积,而不是普通的svd分解得到的1000010000,10000400,400400大小的矩阵乘积,把我吓了一跳,都得到预期的结果,难不成这里还出个篓子?赶紧试验,
发现任给一个MN大小的矩阵,都是被分解成了M6,66,N6大小的矩阵的乘积,为什么都会出现6呢?确实很纳闷。help svds看了一下,发现SVDS(A) 返回的就是svds返回的就是最大的6个特征值及其对应的特征行向量和特征列向量,
还好,我们实验中是在svds得到列向量中再取前5个最大的列向量,这个与普通的svd得到的结果是一致的,虚惊一场。。。还得到了一些别的,比如
改变这个默认的设置,
比如用[u,d,v]=svds(A,10)将得到最大的10个特征值及其对应的最大特征行向量和特征列向量,
[u,d,v]=svds(A,10,0)将得到最小的10个特征值及其对应的特征行向量和特征列向量,
[u,d,v]=svds(A,10,2)将得到与2最接近的10个特征值及其对应的特征行向量和特征列向量。
总之,相比svd,svds的可定制性更强。
奇异值分解非常有用,对于矩阵A(mn),存在U(mm),V(nn),S(mn),满足A = USV’。
U和V中分别是A的奇异向量,而S是A的奇异值。
AA'的正交单位特征向量组成U,特征值组成S'S,
A'A的正交单位特征向量组成V,特征值(与AA'相同)组成SS'。
假定拟计算一般矩阵A的Moore-Penrose广义逆A+,
1)对A做SVD:
A = U S V, 其中 U, V为酉方阵, S为一般对角阵;
2)将S非零元取逆, 零元不变, 然后专置得到一个一般对角阵T;
3)则广义逆为A+ = V T U, 其中 表示取矩阵的复共轭
以上就是关于求matlab 奇异值分解函数 svd和svds的区别全部的内容,包括:求matlab 奇异值分解函数 svd和svds的区别、matlab中pinv函数是如何利用svd分解出的U、S、V来求取奇异矩阵的广义逆矩阵的、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)