作业帮 > 数学 > 作业

奇异值分解可能会出现多个矩阵有相同的分解吗?

来源:学生作业帮 编辑:拍题作业网作业帮 分类:数学作业 时间:2024/04/30 17:35:30
奇异值分解可能会出现多个矩阵有相同的分解吗?
本来我觉得这是根本不可能的,但是现在出现了这么一个情况:
这是我用Matlab算奇异值的时候遇到的一个问题:
现在写了一个算奇异值和奇异向量的算法.目前需要验算这个算法,但是验算的时候出了一些问题.
(问题:给出一个200 * 100的长方阵,我让它的奇异值尽量均匀分布,以便于检验,然后进行奇异值计算.)
(记号:原长方阵是A,我的奇异值算法给出了A = V * Sigma * U(T)【(T)是转置】,VU分别是左奇异向量和右奇异向量,Sigma是对角阵,是奇异值)
1、我检验了我算出来的奇异值和matlab库函数算出来的奇异值,近似度相当好.
2、我检验了A(T)*A和U * Sigma^2 * U(T),两个结果基本相近,所以相当于证明了右奇异向量算出来是很接近的.
3、同样地,检验了A*A(T)和V * Sigma^2 * V(T),两个结果基本相近,证明了左奇异向量算出来也是很接近的.
但是!A和V * Sigma * U(T)结果差别很明显啊!这是什么情况啊?
万分感谢啊!
-----------------
我刚才重查了一遍计算结果。刚才也仔细想了一下各种可能。发现确实是你说的这种情况:
因为我限定整个计算在实数域进行,所以你表达式里边的z = 1或者z = -1。问题就来了。我的U和V确实是分开算的,所以U和V同一个奇异值σ对应的z符号可能不一样!所以整个加和一做完就彻底乱了……(伤心啊……)
请问我应该怎么保证他们符号一样啊?
(我用dqds算法算的奇异值,没办法产生奇异向量。所以对A(T)A和AA(T)分别用了逆幂法算了他们的特征向量,从而得到奇异向量。)我应该怎么办啊?
(我现在的目标需要保证A = V * Sigma * U(T)这个式子至少是对的,从而至少给出一组V、U、Sigma。)
标题里的问题是不可能出现的,不过你描述的问题是有可能的,说明你算错了
首先要注意,尽管不同的矩阵不可能有相同的SVD,但对于同一个矩阵来讲,SVD不是唯一的
比较简单的情况,A=∑σ_i v_i u_i^T,可以看出即使没有重奇异值v_i和u_i也可能不唯一,比如(v_i*z)(u_i^T/z)也满足条件,其中z是单位复数
有重奇异值的时候U和V松动的余地更大
所以我估计你的算法里U和V是分开算的,并没有互相故及对方
再问: ׷�����������ƣ��鷳��һ�����ⲹ�䣬лл��
再答: Ӧ��˵����Ҫ����������ʱ����dqds��̫�ʺ�, Ӧ�ÿ��DZ���㷨 �����ȷʵ��������, ��ô��ʵ����������һ�����취 ��ȷ����k�������ķ�ŵ�ʱ��, A_k = ��_1 v_1 u_1^T + ... + ��_k v_k u_k^T ��A�������k�ƽ�(��Frobenius����), ����ֻ������ѡ��, ��������ʹ��||A-A_k||��С