2


0

私は JAMAを使ったプログラムを持っていますが、テストする必要があるのは逆行列です。 私はそれを試して例外をキャッチできることを知っていますが、それは悪い考えのように思えます( "通常の"コードパスの一部としてcatchブロックを持つことは悪い形式のようです)。

逆を返す(または逆の操作よりも優れたO()で実行する)テストも推奨されます。

4 Answer


2


一般に、行列を解くことができない場合、それは単数形(非反転可能)です。 JAMAがこれを実行する方法は、LU分解を使用して行列を解くことを試みることであり、失敗した場合はisSingular()に対して「true」を返します。

行列の要素を調べてそれが特異かどうかを判断するための一般的な方法は実際にはありません。各列を調べて、それが他の列と直交しているかどうかを確認する必要があります。 行列のnullスペースは0)です。 LU分解は非常に速いです、通常…​ しかし、それが操作の大部分を要する時があります。

あなたが克服しようとしている実際の速度の問題がありますか?


0


例外がスローされた場合、あなたの回復ポジションは何ですか?

もしあなたがLU分解をして、それが特異であるとわかったら、あなたは例外を捕らえて代わりにSVD(特異値分解)を試みますか?


0


条件数の逆数を推定したいようです。

http://www.alglib.net/matrixops/general/rcond.php [このサイト]はやや有望に見えます…​

http://books.google.com/books?id=mlOa7wPX6OYCもご覧ください。 128〜130]。 (コピーがない場合は入手してください。)

…​or Higham, 誰が数値計算法の権威なのか それは数学を解析するのは難しいのですが… ラズベリーの茂みの中を歩くのが好きです。 :/

あるいはOctaveのソースでhttp://www.mathworks.com/access/helpdesk/help/techdoc/ref/rcond.html [MATLABの rcond()]のバージョンを確認してください。 私はhttp://www.nabble.com/rcond,-condest,-and-a-block-1-norm-estimator-td13886035.html [この投稿]を見つけました。


-1


正方行列の場合は、その determinant --- http://math.nist.gov/javanumerics/jama/doc/Jama/Matrixをチェックするだけで済みます。 html#det()[Matrix.det()]は、行列が特異である場合に限りゼロを返します。 もちろん、 ill-conditionマトリックスにも注意する必要があります。