开发者

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

I'm just trying to create an inverse matrix of a 3x3 matrix following JAMA documentation. But every time it's giving me the following error -

开发者_开发技巧

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

Can anyone help me in this regard?


The documentation for Jama is not very good.

In fact, if you look through the sourcecode, you will find that Matrix.inverse() ultimately calls LUDecomposition.solve(...) and the code says:

  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         }

As Wikipedia says:

"In linear algebra an n-by-n (square) matrix A is called invertible or nonsingular or nondegenerate, if there exists an n-by-n matrix B such that AB = BA = In where In denotes the n-by-n identity matrix and the multiplication used is ordinary matrix multiplication."

In short, singular means not invertible.


If you are unhappy with JAMA, take a look at the Apache Commons Maths libraries, in particular the Linear Algebra module.


If you can calculate the determinant of your matrix, you'll find that it's zero (or close to it).

You might be able to tell by inspection. If one row is proportional to another, your matrix is not invertible.

3x3 is easy enough to invert by hand. Try it and see where it goes wrong.

Try a SVD solution. It'll tell you what the null space for your matrix is.


Well, it's telling you everything you need to know: the matrix you are trying to invert is singular.

Singular matrices are non-invertible.

If you think your matrix isn't singular, please post it and we'll take a look.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜