在matlab中使用稀疏矩阵丢失精度?

时间:2014-05-09 02:47:55

标签: matlab precision sparse-matrix

我有两个矩阵J1(稀疏)= J2(完整)。

矩阵的维数为~5200x2600

然后当我这样做时:

hlm1 = (J1'*J1 + u*I)\g, I = eye(n); 

hlm2 = (J2'*J2 + u*I)\g, I = eye(n); 

我之后:norm(hlm1 - hlm12, Inf)4.8625e-05 ...

这个区别是我的问题,使用matrice稀疏的方式是否正确?。

THX。

1 个答案:

答案 0 :(得分:1)

这不是一个完整的答案,但我认为它可能有用。我可以使用一些随机数据来部分重现这种差异:

H1=sprand(1000,1000,.4);
g=sprand(1000,1,.5);
x=H1*g;
H2=full(H1);
x2=full(x);

g1=H1\x;
g2=H2\x2;

difference=norm(g1-g2,Inf)
errorSparse=norm(g1-g,Inf)
errorFull=norm(g2-g,Inf)

标准最终大约为O(1e-12)。我认为差异是由于用于求解稀疏方程组的方法。解决稀疏系统将使用稀疏函数,并且求解完整矩阵将使用不同的函数集。当然这些功能会有所不同,我认为这可能会造成一些差异。我无法解释为什么错误很大。

参见the documentation for mldivide,其中包括一些关于稀疏矩阵的简短讨论以及解决它们的一些方法。