2013-04-06 31 views
0

我有一个点集P和我构造它的邻近矩阵A的K最近邻。 A的每一行是[... + 1 ... -1 ...],表示一对相邻点。 A的大小是48348 x 8058,sprank(A)是8058.但是当我做下面的事时,它给了我一个警告:“警告:等级不足,等级= 8055,等于= 8.307912e-10。为什么sprank(A)和A b在matlab中报告不同的等级?

a = A * b; c = A \ a;

和常模(c-b)相当大。看起来相邻的矩阵A有问题,但我无法弄清楚。提前致谢!

回答

0

sprank只告诉你多少行/你的矩阵的列有非零元素,而A\b是报告指示矩阵上实际官衔的矩阵有多少行线性无关。例如,对于下面的矩阵:

A = [-1 1 0 0; 
     0 1 -1 0; 
     1 0 -1 0; 
     0 0 1 -1] 

sprank(A)是4,但rank(A)仅为3,因为你可以写的第三行与其它行的线性组合,特别A(2,:) - A(1,:)

您需要解决的问题是您如何计算A(如果您希望生成一个线性独立方程的系统),或者您需要找到一种方法来使用A,该方法不需要因式分解等级不足矩阵。

+0

谢谢!在我的问题中,矩阵A往往是病态的,所以我使用LSQR(http://www.stanford.edu/group/SOL/software/lsqr.html),因此求解稀疏线性方程。 – areslp 2013-04-06 17:17:06

相关问题