2016-07-22 104 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

的確,我可以改變容忍並獲得好的結果。但是,我認爲默認容差是最好的,因爲它決定了何時引入數字舍入誤差。計算仍然以雙精度執行,因此如果您要降低到更高精度,結果無效,因爲它在錯誤範圍內。我可能是錯的,但這就是我的想法。 –