【问题标题】:Matrix operations in JavaJava中的矩阵运算
【发布时间】:2014-02-25 23:47:41
【问题描述】:

我到处寻找这个,但我在某个地方错了。在我的 Java 程序中,我创建了几个二维数组。现在,我需要用以前的,比如,逆,转置,乘法,左除法甚至更多来形成新的二维数组。其中一些(简单)是我自己创建的,但左除法、右除法、逆我没有。

使用 Jama 之类的库会出现一些问题。

java.lang.RuntimeException: Matrix is rank deficient.

我这样编码:

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

A 是 2D Array (m x n),Am 是从 2DArray A 创建的新矩阵。

我尝试这样做以获得左除法,但我无法先求解矩阵求逆。

我的错误在哪里?有人知道另一个库可以从 2DArray 转换为 Matrix,然后用它做更难的矩阵运算(左 div、inv...)吗?

编辑

我在这个矩阵上使用逆来得到 A\P(可以计算为 inverse(A)*P,正如我在某处看到的那样)。你知道如何用 Jama 获得 A\P 吗?这是我的主要问题,左师。

【问题讨论】:

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


    【解决方案1】:

    矩阵库可以查看question

    但是对于你写的代码,没有人能说什么,你必须把代码本身包含进去才能看到问题出在哪里。

    【讨论】:

      【解决方案2】:

      正如您的例外所说,您的矩阵秩不足,在数学上不可能计算逆矩阵。在这些事务中,计算机并不高于数学。

      这可能有多种原因。首先,逆矩阵只存在于平方输入,即格式 n x n。你没有表明是这种情况。存在可以为所有矩阵构造的伪逆的想法。

      但即使对于方阵,秩也可能不足,即矩阵可以是奇异的。确切地说,如果行列式为零,就会发生这种情况。在计算方面,这也可能发生在奇异值的幅度范围很宽的病态矩阵上。

      你能提供出现问题的矩阵吗?

      【讨论】:

      • 好的。我在这个矩阵上使用逆来得到 A\P (可以计算为我在某处看到的 inverse(A)*P)。你知道如何用 Jama 获得 A\P 吗?
      • 通常情况下,您不会。你所做的是求解一个线性系统。即,二次矩阵 A 被分解为 PLU 或 QR,并且此分解用于求解 AX=P。如果计算了 A=QR,则步骤是将 Q^T*P 相乘,然后对三角因子应用反向代入。 -- 这一切都假设 A 是二次的、规则的和条件良好的。违反任何这些条件都会排除或中止计算。
      • 好的,知道了。我将尝试在不使用此公式的情况下找到另一种解决问题的方法...谢谢。
      【解决方案3】:

      如果矩阵的 Rank

      【讨论】:

        【解决方案4】:

        A 是 2D Array (m x n),Am 是从 2DArray A 创建的新矩阵。

        确保您的矩阵是二次矩阵 (n x n),否则未定义逆矩阵。

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

        【讨论】:

        • 我的矩阵不是二次的,但在文档中说(据我所知)如果矩阵不是二次的,它将返回伪逆。
        猜你喜欢
        • 1970-01-01
        • 2012-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-01
        • 2020-02-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多