线程“main”中的exceptionjava.lang.RuntimeException:Matrix是单数
我只想在JAMA文档之后创建一个3×3矩阵的逆矩阵。 但每次它给我以下错误 –
Exception in thread "main" java.lang.RuntimeException: Matrix is singular
在这方面有人可以帮助我吗?
如果你可以计算矩阵的行列式,你会发现它是零(或接近它)。
您可以通过检查来判断。 如果一行与另一行成比例,则矩阵不可逆。
3×3很容易手动反转。 试一试,看看哪里出错了。
尝试SVD解决方案。 它会告诉你矩阵的零空间是什么。
Jama的文件不是很好。
事实上,如果你查看源代码,你会发现Matrix.inverse()
最终调用LUDecomposition.solve(...)
,代码说:
270 /** Solve A*X = B 271 @param BA 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(正方形)矩阵A称为可逆或非奇异或非简并,如果存在n×n矩阵B,则AB = BA = I n ,其中I n表示n-by -n单位矩阵和使用的乘法是普通矩阵乘法。“
简而言之,单一意味着不可逆转。
如果您对JAMA不满意,请查看Apache Commons Maths库,特别是Linear Algebra模块 。
好吧,它告诉你需要知道的一切:你试图反转的矩阵是单数。
奇异矩阵是不可逆的。
如果您认为您的矩阵不是单数,请发布它,我们将看一看。