2016-07-22 11 views
2

私はランクを取ろうとしている14x14行列を持っています。問題は、それが高い条​​件数を持つので、倍精度を使用していることです。私の行列はフルランクではありません。私はそれがすべきであることを知っているので、私はより高い精度でランクを取ろうとしています。Python/Matlab - 4倍精度以上の行列のランクを取る

これまでのところ、私はpythonでbigfloatパッケージをインストールしましたが、より高い精度でランクを取得しようとして失敗しました。私も行列をスケーリングして、私はpythonのjacobi前提条件といくつかの他のスケーリング方法を試しましたが、それでは十分ではありませんでした。

私は線形方程式の系を解こうとしていません。すべての列が線形独立であることを検証するだけです。換言すれば、私は(簡体字)行列を示すものではない1

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

、ランク2のいずれか提案されているようなことを確認したいですか?

+1

「ランク」は、数学的には何かを意味するものとは全く違う意味を持つことを指摘しています。例を挙げて説明すると、混乱することはありません。 –

+0

[scipyを使用して行列のランクを計算する]の可能な複製(0120)をご覧ください[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'タグを誤って読んだので、あなたが "pythonかmatlab"のいずれかの解決策を望んだと思ったので、すべてのmatlabが答えます。* facepalm *。プラスの面では、 'oct2py'モジュールを使用して欲しいのであれば、オクターブの' rank'関数を使うことができます(しかし、私はpythonがおそらくネイティブ関数を持っていると確信しています): –

+0

実際に私は寛容と良い結果を得る。しかし、数値の丸め誤差がいつ導入されるかを決定するので、デフォルトの許容誤差が最も良いと思った。計算は倍精度で実行されます。結果として、精度が低下した場合、エラー内にあるため結果は無効になります。私は間違っているかもしれませんが、それは私が思ったものです。 –