現在シミュレーションに必要な逆行列の計算をpythonで行なっています。
データは ndarray, dtype=np.float64 型の変数 A に格納されており、A はおよそ 400×400 のマトリックスになっています。以下の方法によって逆行列を求めました。

import numpy as np
Ainv = np.linalg.inv(A)

ここまでは特にエラーなどなく計算できるのですが、この後

AAi = np.dot(A,Ainv)
AiA = np.dot(Ainv,A)

などもとの行列との逆行列の積を計算すると、本来単位行列になっていて欲しいのに、全く異なる値が返されます(たとえばAAi[0][0]=6.68, AiA[0][0]=5.8e+15など)。

そこであらかじめ

A = A[:100,:100]

などと範囲を区切って同様の計算を行うと、1となっていてほしい項が9.9997e-01, 0になっていて欲しい項は***e-05~***e-11などになっており、桁の精度は別として正しい計算となっています(具体的には要素数が106×106を超えたあたりから一桁目が合わなくなりました。逆に80×80程度だと6桁程度の精度で単位行列となっています)。

行列の要素数の増加によって精度が悪くなり、結果として元の行列と逆行列の積も単位行列ではなくなってしまっていると考えられるのですが、精度良くこれを求める方法はないでしょうか? 多少計算に時間がかかっても構いません。

環境:
python2.7.9
numpy1.14.0(lapack,blasは導入済み)