Jama.Matrix を使用して可逆性をテストする
-
20-08-2019 - |
質問
を使用するプログラムがあります 自工会 行列が反転できるかどうかをテストする必要があります。試してみて例外をキャッチできることはわかっていますが、それは悪い考えのようです(「通常の」コードパスの一部として catch ブロックを持つのは悪い形式のようです)。
逆演算も返す (または逆演算よりも優れた O() で実行する) テストが推奨されます。
解決
一般的に、それはsingluar(非反転可能)です。私は、JAMAがないような方法は、これはLU分解を使用して行列を解決しようとすることであり、それが失敗した場合、それは)(isSingularのために「真」を返すと考えています。
本当にただ行列の要素を見て、それが特異であるかどうかを判断する一般的な方法はありません - あなたはそれが他の人と直交するかどうかを確認するために各列をチェックする必要があります(すなわち、マトリックスのための零空間であります0)。 LU分解は、通常...それはしかし、操作の大半を取る時間がありますが、非常に高速です。
あなたが克服しようとしている実際の速度に問題がありますか?
他のヒント
例外がスローされた場合は、お使いの回収位置は何ですか?
あなたはLU分解を行うと、それが単数形だということを発見した場合は、、あなたは例外をキャッチし、代わりにSVD(特異値分解)をしようとしていますか?
は、条件数の逆数を推定したいように聞こえるます。
やや有望に見えるのこのサイト...
また、ゴラブとヴァンローン、Pを参照してください。 128-130 に。 (あなたはそのコピーを持っていない場合は、1を得ることができます。)
...またはハイアムに、数値法上の権限は誰。それはラズベリーの茂みの茂みを歩くように...数学を解析するために、ハードのようなものだということを除いて。 :/
それとも、MATLABのの彼らのバージョンのオクターブソースをチェック 正方行列の場合は、その行列を確認してください。 決定要因 --- マトリックス.det() 行列が特異な場合に限り、ゼロを返します。もちろん注意が必要ですが、 体調不良の 行列も。rcond()
する。私はこの記事noreferrer">