2

JAMAのドキュメントに従って、3x3行列の逆行列を作成しようとしています。しかし、それが私に次のエラーを与えるたびに-

Exception in thread "main" java.lang.RuntimeException: Matrix is singular

誰かがこの点で私を助けることができますか?

4

3 に答える 3

2

Jamaのドキュメントはあまり良くありません。

実際、ソースコードを調べると、Matrix.inverse()最終的には呼び出しが行わLUDecomposition.solve(...)れ、コードには次のように書かれていることがわかります。

  270      /** Solve A*X = B
  271      @param  B   A Matrix with as many rows as A and any number of columns.
  272      @return     X so that L*U*X = B(piv,:)
  273      @exception  IllegalArgumentException Matrix row dimensions must agree.
  274      @exception  RuntimeException  Matrix is singular.
  275      */
  277      public Matrix solve (Matrix B) {
  278         if (B.getRowDimension() != m) {
  279            throw new IllegalArgumentException("Matrix row dimensions must agree.");
  280         }
  281         if (!this.isNonsingular()) {
  282            throw new RuntimeException("Matrix is singular.");
  283         }

ウィキペディアが言うように:

「線形代数では、AB = BA = Inであるようなn行n列の行列Bが存在する場合、n行n列(正方形)の行列Aは、可逆または非特異または非縮退と呼ばれます。ここで、Inはn を示します。 -n正則行列と使用される乗算は、通常の行列乗算です。」

要するに、単数は可逆ではないことを意味します。


JAMAに不満がある場合は、Apache Commons Mathsライブラリ、特に線形代数モジュールを確認してください。

于 2011-06-09T09:38:08.687 に答える
1

行列式を計算できる場合は、それがゼロ(またはそれに近い)であることがわかります。

検査でわかるかもしれません。ある行が別の行に比例している場合、行列は可逆ではありません。

3x3は、手で反転するのに十分簡単です。それを試して、どこがうまくいかないかを確認してください。

SVDソリューションを試してください。行列のヌルスペースが何であるかがわかります。

于 2011-06-09T09:24:26.093 に答える
1

まあ、それはあなたが知る必要があるすべてをあなたに伝えています:あなたが反転しようとしているマトリックスは特異です。

特異行列は可逆です。

マトリックスが特異ではないと思われる場合は、投稿してください。確認します。

于 2011-06-09T09:40:29.610 に答える