SVD算法的全面介绍
(4) 广义逆问题(pseudo-inverse)
记A V UT,从(2.3)式我们可以看出,最小二乘法的解为x A b,和一般的线性方程组Ax b的解为x A 1b相类似,所以我们当我们已知矩阵A的奇异值分解A U VT后可以定义A的广义逆为A V UT。 (5) 条件数
如果已知矩阵A的秩为r,那么在式子(2.3)中,解x随着矩阵A的扰动而改变的剧烈程度有多大呢?这可以用矩阵的条件数来衡量,条件数的定义如下:
r(A) 1/ r......(2.5)
以上只是针对SVD的应用,而简单地介绍了LS问题,广义逆;而在文献[5,6]中则对这两个问题有详细的说明,在以后的报告中也将进行更进一步的分析,并且综合其它方法来全面分析和处理这些问题。
除了这些传统的应用以外,在图像压缩和大型数据库的数据恢复中,SVD也具有广泛的应用[7]。
三、 各种SVD算法及其特点
首先来对SVD算法的发展来做简单的回顾[11,12]:关于SVD算法的研究最早可以追溯到1873年Beltrami所做的工作,这中间在理论方面进行了大量的工作,这个历史过程可以参考Stewart的文献[8]。但是直到1965年Golub和Kahan才在SVD的数值计算领域取得突破性进展[9],并且于1969给出了比较稳定的算法[10](以下简称传统QR迭代算法),这也是后来在LINPACK中所采用的方法[3]。它的中心思想是用正交变换将原矩阵化为双对角线矩阵,然后再对双对角线矩阵迭代进行QR分解。
六十年代一份没有出版的技术报告中,Kahan证明了双对角线矩阵的奇异值可以精确地计算,具有和原矩阵元素的相对的精确度;进一步,1990年Demmel和Kahan给出了一种零位移的QR算法(zero-shift QR algorithm),这种算法计算双对角矩阵的奇异值具有很高的相对精度[13],并且由此得到的奇异向量也具有很高的精度[14]。
Fernando和Parlett在1994年将qd算法应用到奇异值的计算上,从而得到了一种全新的比zero-shift QR algorithm更加精确和快速的计算奇异值的算法[15,16]。
而Demmel和Veselic在文献[17]中则说明了用Jacobi方法与其它方法相比计算所得到的奇异值和奇异向量具有更高的精度,可惜Jacobi算法比DK算法速度要慢的多;在文献[18]中对Jacobi方法进行了改进使得其在速度上几乎和DK算法相当。
和Strassen算法类似,SVD问题也有快速的分而制之算法,在文献[19,20]对其有详细的介绍,由此得到的算法在总计算量上比现有的LAPACK软件包中所采用的方法要少的多。
在文献[21,22]中给出的bisection算法也可以对双对角线矩阵计算得到具有相对精度的全部奇异值。
以下就开始对各种算法原理进行详细说明,并分析它们的计算量,计算的精确度,以及所占得内存。