2016-07-22 101 views
2

我有一个14x14的矩阵,我试图取得排名。问题是它有一个高的条件数,所以使用双精度我的矩阵不是满秩。我知道它应该是,所以我试图以更高的精度获得排名。Python/Matlab - 以四倍精度或更高的矩阵排序

到目前为止,我已经在python中安装了bigfloat包,但在尝试以更高的精度获得排名方面一直不成功。我也缩放了我的矩阵,我尝试了python的jacobi预处理器和其他一些缩放方法,但这并不足够。

我不是想解决一个线性方程组,我只需要验证我的所有列都是线性独立的。换句话说,我想验证的(简化的)基质,例如示出的一个是秩2的,而不是1

[1, 0; 
0, 1e-20] 

任何建议?

+1

只是指出,“排名”是指python完全不同于它的意思*数学*。这将有助于用一个例子来说明,所以没有混淆。 –

+0

[使用scipy计算矩阵排名]的可能重复(http://stackoverflow.com/questions/2473983/calculate-matrix-rank-using-scipy) –

+0

看看[numpy.linalg.matrix_rank()](http ://docs.scipy.org/doc/numpy-dev/reference/generated/numpy.linalg.matrix_rank.html) –

回答

0

有matlab的rank函数不适合你吗?

>> A = [1,0; 0, 1e-20]; 
>> rank(A, 1e-19) 
ans = 1 
>> rank(A, 1e-21) 
ans = 2 
+0

哦,道歉。我误解了'matlab'文章中的'matrix'标签,因此所有的matlab答案都是我认为你想要的“python或matlab”解决方案... * facepalm *。从好的一面来说,如果你很乐意使用'oct2py'模块,你可以使用八度的'rank'函数(尽管我确信python可能有一个原生函数):) –

+0

的确,我可以改变容忍并获得好的结果。但是,我认为默认容差是最好的,因为它决定了何时引入数字舍入误差。计算仍然以双精度执行,因此如果您要降低到更高精度,结果无效,因为它在错误范围内。我可能是错的,但这就是我的想法。 –