Java中的矩阵运算

时间:2014-02-25 23:47:42

标签: java matrix multidimensional-array matrix-inverse jama

我到处寻找这个,但我错了。在我的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吗?这是我的主要问题,左派。

4 个答案:

答案 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.