我到处寻找这个,但我错了。在我的Java程序中,我创建了一些2D阵列。现在,我需要形成具有先前的新2D阵列,例如,反向,转置,乘法,LEFT DIVISION,甚至更多。其中一些(简单)我自己创造,但是左分裂,右分裂,反过来我没有。
通过使用像Jama这样的库,会出现一些问题。
java.lang.RuntimeException: Matrix is rank deficient.
我这样编码:
Matrix Am=new Matrix(A);
Am=Am.inverse();
A
是2D数组(m x n),Am
是从2DArray A创建的新矩阵。
我试图这样做以获得左分裂,但我不能先解决矩阵逆。
我的错误在哪里?有人知道另一个库要从2DArray转换为Matrix,然后用它做更难的矩阵运算(左div,inv ...)吗?
修改
我在这个矩阵上使用逆来获得A \ P(可以像我在某处看到的那样计算为逆(A)* P)。你知道如何用Jama获得A \ P吗?这是我的主要问题,左派。
答案 0 :(得分:1)
对于矩阵库,您可以查看question:
但对于您编写的代码,没有人可以说什么,您必须包含代码本身以查看问题所在。
答案 1 :(得分:0)
正如你的例外所说,你的矩阵是秩不足的,在数学上不可能计算逆矩阵。在这些事务中,计算机并不高于数学。
这可能有多种原因。首先,仅对于平方输入存在逆矩阵,即格式n×n。你没有说明是这种情况。存在可以为所有矩阵构造的伪逆的思想。
但即使对于方形矩阵,秩也可能是不足的,即矩阵可以是单数。确切地说,如果行列式为零,则会发生这种情况。在计算方面,对于具有奇异值的宽范围的病态矩阵,也会发生这种情况。
你能提供发生问题的矩阵吗?
答案 2 :(得分:0)
如果矩阵的Rank <= min(numOfRows,numOfColumns),则表示其排名不足,无法计算这种矩阵的逆。
答案 3 :(得分:0)
A是2D数组(m x n),Am是从2DArray A创建的新矩阵。
确保矩阵是二次方(n x n),否则不定义逆矩阵。
如果您无法避免矩阵不是全排或二次,您可以考虑使用pseudo-inverse.