我正在使用LAPACK dgesvd来计算实值Hankel矩阵的SVD,作为我的C程序的一部分,并将得到的结果与MATLAB函数SVD进行比较。我注意到,对于各种情况,奇异值之间的最差差异大约是10 ^ -6或10 ^ -7(这不是太糟糕);随着矩阵大小的增加,来自LAPACK和MATLAB的左右奇异向量矩阵之间的最差差异开始增大,达到~0.08。根据我的能力,MATLAB还在内部使用了dgesvd功能。有人可以指导我什么会导致奇异向量之间的较大差异以及为什么这些差异不会反映在奇异值中? MATLAB可能在内部进行一些预处理以提高其准确性。有什么建议让我提高从LAPACK获得的准确度吗?
附注:矩阵的条件数一般随着矩阵大小的增加而恶化,对于400x400矩阵,大约达到10 ^ 10。此外,我可以通过找到两种方法的矩阵和U S V'之间的差异来确认MATLAB的解决方案更准确。虽然MATLAB解决方案的准确性始终为10 ^ -11或更高;从LAPACK获得的总是比10 ^ -5差,最坏的情况是大约0.0177。最后,即使对于我测试的最大矩阵,最小的奇异值大约为10 ^ -5,与机器精度相比并不是那么小。