【问题标题】:Having trouble multiplying two matrices将两个矩阵相乘时遇到问题
【发布时间】:2015-02-21 16:53:39
【问题描述】:

抱歉,这是一道作业题。我数学不好,所以我查看了一些视频来了解两个矩阵是如何相乘的。我想出了一个公式,但我不知道我做错了什么?这个问题之前已经回答过,但是没看懂。谢谢。

    case 3:
          System.out.println("THE PRODUCT OF TWO MATRICES ARE: "); 

     for(i =0; i< arrayList.length; i++){
           for(j =0; j< arrayList1.length; j++){
             for(k =0; k < arrayList1.length;k++){
               multiplication = arrayList[i][k] * arrayList1[k][j] +  multiplication;

          }
          System.out.print(arrayList[i][j]+" ");    

        }

   System.out.println();
      }

    break;

【问题讨论】:

  • @hexafraction 是什么让您认为它们是列表?它只是名为arrayList 的数组。 (即使名称具有误导性,我同意)。
  • @ZouZou 如果我看不到它们的声明,我怎么知道它们是数组而不是列表?

标签: java loops matrix product


【解决方案1】:

首先,您应该了解,两个矩阵相乘应该得到一个矩阵(multiplication 变量似乎不是这种情况)。

我想您必须对基本实现进行编程。我们来看看下面的矩阵。

A 有n 行和m 列;据说是一个矩阵n x m。 同样,B 有m 行和p 列(m x p 矩阵)。 A x B 的乘法会给你一个矩阵n x p。

请注意,如果要进行乘法运算A x B,则矩阵A 的列数必须与矩阵B 的行数相同。

现在矩阵AB(第ith行和jth列)中的每个值计算如下:

话虽如此,让我们看一下Java实现(这是对数学公式的纯翻译)。

public static int[][] multiply(int[][] matrixA, int[][] matrixB) {
    int[][] result = new int[matrixA.length][matrixB[0].length];

    for (int i = 0; i < result.length; i++) {
        for (int j = 0; j < result[0].length; j++) {
            for (int k = 0; k < matrixB.length; k++) {
                result[i][j] += matrixA[i][k] * matrixB[k][j];
            }
        }
    }
    return result;
}

result 矩阵在正确的维度初始化。然后前两个嵌套循环(索引i 和j)将循环遍历结果矩阵的所有元素。然后你只需要第三个循环来计算总和。

您仍然需要检查作为参数提供的矩阵的长度是否正确。

使用的算法非常简单(O(n3) 复杂度)。如果你不明白,网络上有很多资源可以解释它是如何工作的;但这更像是一个数学问题而不是编程问题。

希望对您有所帮助! :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-19
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多