行列Pの逆行列を計算しようとしていますが、inv(P)*P
を掛けると、MATLABは恒等行列を返しません。それはほぼ正体(10 ^( - 12)のオーダーの非対角の値)です。しかし、私のアプリケーションでは、より高い精度が必要です。行列の逆行列を正確に計算する方法は?
この場合、私は何ができますか?
行列Pの逆行列を計算しようとしていますが、inv(P)*P
を掛けると、MATLABは恒等行列を返しません。それはほぼ正体(10 ^( - 12)のオーダーの非対角の値)です。しかし、私のアプリケーションでは、より高い精度が必要です。行列の逆行列を正確に計算する方法は?
この場合、私は何ができますか?
明示的は、そうでない場合は、あなただけのバックスラッシュ演算子\
を使用し、あなたがinv
を使用する行列の逆行列を必要とする場合のみ。
inv
上のドキュメントは、明示的に述べている:
x = A\b
がx = inv(A)*b
とは異なる計算され、線型方程式系を解くために推奨されます。
バックスラッシュ演算子、またはmldivide
用途が特定のマトリックスのために最も適しているものは何でもこの方法だからである。
x = A\B
は線形方程式A*x = B
のシステムを解決します。行列A
とB
の行数は同じでなければなりません。A
がひどくスケーリングされているか、またはほぼ特異である場合にMATLAB®は警告メッセージを表示しますが、計算には関係ありません。あなたはMATLABがあなたの入力行列に応じて、ここでmldivide
の汎用性は、線形システムを解くには、そのドキュメントでを提供される完全なアルゴリズムのフローチャートを取る能力に由来しています選択したものをアルゴリズムを知っているだけので
適切なソルバにディスパッチすることで問題の対称性を利用することができます。このアプローチは、計算時間を最小化することを目的としています。関数が作る最初の区別は、完全(「密」とも呼ばれる)と疎入力配列の間です。
あなたは悪条件行列と呼ばれるものを持っています。このような行列の逆数を取ろうとするのは危険です。一般的に、最小の行列以外のもの(例えば、線形代数のテキストブックで紹介したようなもの)を逆にするのは危険です。もしあなたがしなければならないのは、ムーア・ペンローズ疑似逆行(Wikipedia参照)を取ってみることができますが、それでも確実ではありません。