2014-02-25 236 views
0

我到处寻找这个东西,但是我错了某处。在我的Java程序中,我创建了几个2D数组。现在,我需要形成新的二维数组,其中包括以前的,反转的,转置的,乘法的,左分的,甚至更多的。他们中的一些人(简单)我创造了自己,但是留下了师,右师,反而我没有。Java中的矩阵操作

通过使用像Jama一样的库,会出现一些问题。

java.lang.RuntimeException: Matrix is rank deficient. 

我这样的代码是:

Matrix Am=new Matrix(A); 
Am=Am.inverse(); 

A是二维数组(MXN)和Am是2DArray A.创建新的矩阵

我想这样做是为了得到左除,但我不能先解矩阵求逆。

我的错误在哪里?是否有人知道另一个库从2DArray转换为Matrix,然后使用更复杂的矩阵运算(left div,inv ...)?

编辑

我用这个矩阵求逆得到A \ P(可以计算为逆(A)* P,因为我看到的地方)。你知道如何与贾马得到A \ P吗?这是我的主要问题,左派。

回答

1

矩阵库,你可以检查此question

但是你写的代码,没有人能说什么,你必须包括代码本身,看看问题出在哪里。

0

正如你的例外所述,你的矩阵是秩亏的,在数学上不可能计算一个逆矩阵。计算机在这些事务中不在数学之上。

这可能有多种原因。首先,对于平方输入,仅存在逆矩阵,即格式n×n。你没有说明是这样。存在可以为所有矩阵构造的伪逆的想法。

但即使对于矩阵矩阵,秩也可能是不足的,即矩阵可能是奇异的。具体而言,如果行列式为零,则会发生这种情况。在计算方面,这也可能发生在其奇异值具有宽幅度范围的恶化矩阵中。

你能提供发生问题的矩阵吗?

+0

那么好。我在这个矩阵上使用逆来得到A \ P(可以像我在某处看到的那样计算为逆(A)* P)。 你知道如何与贾马得到A \ P吗? – Aleksandar

+0

通常情况下,你没有。你所做的是解决一个线性系统。即,二次矩阵A被分解为PLU或QR,并且该分解用于求解AX = P。如果计算A = QR,那么这些步骤将乘以Q^T * P,然后对三角形因子应用回代。 - 这一切都假定A是二次的,规则的和有条件的。违反任何这些条件将阻止或中止计算。 – LutzL

+0

好的,明白了。我会尝试另一种方式来解决问题,而不使用这个公式...谢谢。 – Aleksandar

0

如果矩阵的秩< =分钟(numOfRows,numOfColumns)其说是秩亏及其不可能计算这样的矩阵的逆。

0

A是二维阵列(M×N个),和我是从2DArray A.创建新的矩阵

确保您的矩阵是二次(N×N的),否则反是没有定义。

如果无法避免的矩阵不是全排或二次,您可以考虑使用pseudo-inverse.

+0

我的矩阵不是二次的,但在文档中说(据我所知)如果矩阵不是二次的,它将作为伪逆返回。 – Aleksandar