关于求矩阵SVD的问题
来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/11/12 07:08:50
关于求矩阵SVD的问题
最近在弄算法研究到关于矩阵求SVD的知识,找到了徐士良的<C语言常用算法集>的PDF和源程序.
在PDF的2.12说到了关于SVD分解的问题.在验证算法时,发现按书本里的矩阵计算SVD和在Matlab里计算相同矩阵的SVD时得出来的结果有差异(如图).那么究竟是什么问题造成的呢?有哪位大大研究过这个问题?
原矩阵:
PDF里的结果(使用相应源码也可以得到一致):
Matlab计算结果:
最近在弄算法研究到关于矩阵求SVD的知识,找到了徐士良的<C语言常用算法集>的PDF和源程序.
在PDF的2.12说到了关于SVD分解的问题.在验证算法时,发现按书本里的矩阵计算SVD和在Matlab里计算相同矩阵的SVD时得出来的结果有差异(如图).那么究竟是什么问题造成的呢?有哪位大大研究过这个问题?
原矩阵:
PDF里的结果(使用相应源码也可以得到一致):
Matlab计算结果:
你自己看matlab对svd的说明,
X= U*S*V'
这里的V是转置的
所以跟你的C程序结果是转置
其次正负号可以随便分配的,例如你把U的符号全取负号,那么V也是全取负号
然后就是精度问题,你在matlab 先输入format long
就能看到更多位数了,大小基本是一样的
所以其实结果是等价的,说白了就是S按特征值大小排序的话是唯一的,U,V不唯一
不明白可追问
X= U*S*V'
这里的V是转置的
所以跟你的C程序结果是转置
其次正负号可以随便分配的,例如你把U的符号全取负号,那么V也是全取负号
然后就是精度问题,你在matlab 先输入format long
就能看到更多位数了,大小基本是一样的
所以其实结果是等价的,说白了就是S按特征值大小排序的话是唯一的,U,V不唯一
不明白可追问