欢迎访问宙启技术站
智能推送

Java中如何实现求两个矩阵的乘积函数?

发布时间:2023-06-17 11:49:54

在Java中,我们可以通过创建一个矩阵类来实现矩阵的乘积函数。以下是一个示例代码:

public class Matrix {
    private int[][] matrix;
    private int m;
    private int n;

    public Matrix(int[][] matrix) {
        this.matrix = matrix;
        this.m = matrix.length;
        this.n = matrix[0].length;
    }

    public Matrix multiply(Matrix other) {
        if (this.n != other.m) {
            throw new IllegalArgumentException("Incompatible Matrix Dimensions");
        }

        int[][] result = new int[m][other.n];
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < other.n; j++) {
                int sum = 0;
                for (int k = 0; k < n; k++) {
                    sum += matrix[i][k] * other.matrix[k][j];
                }
                result[i][j] = sum;
            }
        }
        return new Matrix(result);
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        for (int[] row : matrix) {
            sb.append("[");
            for (int i = 0; i < row.length; i++) {
                sb.append(row[i]);
                if (i != row.length - 1) {
                    sb.append(", ");
                }
            }
            sb.append("]
");
        }
        return sb.toString();
    }
}

首先,我们创建一个Matrix类表示矩阵。该类包含矩阵本身的二维数组matrix,以及矩阵的行数m和列数n。

我们定义了一个构造函数,它接受一个二维数组matrix并将其存储在Matrix类中。构造函数还计算出矩阵m和n的行数和列数。

Matrix类中的multiply方法采用另一个Matrix对象作为输入参数,并返回两个矩阵的乘积。在这个方法中,我们首先检查传入的矩阵是否与当前矩阵的列数匹配。如果不匹配,则抛出异常。

接下来,我们使用三个嵌套的for循环来计算两个矩阵的乘积。外部循环迭代A的每一行,内部循环迭代B的每一列,中间循环对每个元素进行求和。这三个循环的算法时间复杂度为O(n3)。

最后,我们创建一个toString方法,该方法将矩阵转换为字符串并返回。我们使用StringBuilder类来构建该字符串,以便在大型矩阵的情况下获得更好的性能。

下面是一个测试main函数,测试以上乘积函数:

public static void main(String[] args) {
    int[][] a = {{1, 2, 3},
                 {4, 5, 6}};
    int[][] b = {{7, 8},
                 {9, 10},
                 {11, 12}};
    Matrix A = new Matrix(a);
    Matrix B = new Matrix(b);
    Matrix C = A.multiply(B);
    System.out.println(C);
}

输出结果:

[58, 64]
[139, 154]

这是矩阵A和B的乘积。