2016-03-22 50 views
0

行列Pの逆行列を計算しようとしていますが、inv(P)*Pを掛けると、MATLABは恒等行列を返しません。それはほぼ正体(10 ^( - 12)のオーダーの非対角の値)です。しかし、私のアプリケーションでは、より高い精度が必要です。行列の逆行列を正確に計算する方法は?

この場合、私は何ができますか?

答えて

8

明示的は、そうでない場合は、あなただけのバックスラッシュ演算子\を使用し、あなたがinvを使用する行列の逆行列を必要とする場合のみ。

inv上のドキュメントは、明示的に述べている:

x = A\bx = inv(A)*bとは異なる計算され、線型方程式系を解くために推奨されます。

バックスラッシュ演算子、またはmldivide用途が特定のマトリックスのために最も適しているものは何でもこの方法だからである。

x = A\Bは線形方程式A*x = Bのシステムを解決します。行列ABの行数は同じでなければなりません。 Aがひどくスケーリングされているか、またはほぼ特異である場合にMATLAB®は警告メッセージを表示しますが、計算には関係ありません。あなたはMATLABがあなたの入力行列に応じて、ここでmldivideの汎用性は、線形システムを解くには、そのドキュメントで

を提供される完全なアルゴリズムのフローチャートを取る能力に由来しています選択したものをアルゴリズムを知っているだけので

適切なソルバにディスパッチすることで問題の対称性を利用することができます。このアプローチは、計算時間を最小化することを目的としています。関数が作る最初の区別は、完全(「密」とも呼ばれる)と疎入力配列の間です。

enter image description here

0

あなたは悪条件行列と呼ばれるものを持っています。このような行列の逆数を取ろうとするのは危険です。一般的に、最小の行列以外のもの(例えば、線形代数のテキストブックで紹介したようなもの)を逆にするのは危険です。もしあなたがしなければならないのは、ムーア・ペンローズ疑似逆行(Wikipedia参照)を取ってみることができますが、それでも確実ではありません。

関連する問題