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的乘积。
