线程“main”中的异常java.lang.RuntimeException:Matrix是单数

时间:2011-06-09 09:07:20

标签: java matrix jama

我只想在JAMA文档之后创建一个3x3矩阵的逆矩阵。但每次它给我以下错误 -

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

在这方面,有人可以帮助我吗?

3 个答案:

答案 0 :(得分: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         }

正如维基百科所说:

  

“在线性代数中,如果存在n×n矩阵B,则n = n(正方形)矩阵A称为可逆或非奇异或非简并,使得AB = BA = I ñ   其中I n 表示n-by-n单位矩阵,使用的乘法是普通矩阵乘法。“

简而言之,单数意味着不可逆。


如果您对JAMA不满意,请查看Apache Commons Maths库,特别是Linear Algebra module

答案 1 :(得分:1)

如果你可以计算矩阵的行列式,你会发现它是零(或接近它)。

您可以通过检查来判断。如果一行与另一行成比例,则矩阵不可逆。

3x3很容易手动反转。试一试,看看它出了什么问题。

尝试使用SVD解决方案。它会告诉你矩阵的零空间是什么。

答案 2 :(得分:1)

嗯,它告诉你你需要知道的一切:你试图反转的矩阵是单数。

奇异矩阵是不可逆的。

如果您认为您的矩阵不是单数,请发布它,我们会看看。