为什么我的Java矩阵乘法方法在处理较大矩阵时会产生意外的结果?
我在Java中练习矩阵运算,并尝试使用嵌套循环实现矩阵乘法。
这个方法在一些小矩阵上可以正确工作,但在测试更大的矩阵时,结果不一致,某些数值与我预期的不同。
观察到的行为:
结果矩阵中的某些位置的值不正确,尽管循环看起来是正确的。
预期行为:
对于任何兼容的矩阵尺寸,乘法都应返回正确的矩阵结果。
我已经尝试过:
我检查了嵌套循环,核对了矩阵的维度,并多次检查乘法逻辑,但仍然无法确定错误值的来源。
能否解释我的实现中可能哪里出错?
以下是我当前正在测试的代码:
public class Main {
public static int[][] multiplyMatrices(int[][] a, int[][] b) {
int rows = a.length;
int cols = b[0].length;
int[][] result = new int[rows][cols];
for(int i = 0; i < rows; i++) {
for(int j = 0; j < cols; j++) {
for(int k = 0; k < b.length; k++) {
result[i][j] += a[i][k] + b[k][j];
}
}
}
return result;
}
public static void main(String[] args) {
int[][] matrix1 = {
{1, 2},
{3, 4}
};
int[][] matrix2 = {
{5, 6},
{7, 8}
};
int[][] result = multiplyMatrices(matrix1, matrix2);
for(int i = 0; i < result.length; i++) {
for(int j = 0; j < result[0].length; j++) {
System.out.print(result[i][j] + " ");
}
System.out.println();
}
}
}
解决方案
主要问题不是你嵌套循环的结构(这是完全正确的),而是在第三个 for 循环中的算术运算符。
在矩阵乘法中,不应直接将两个矩阵的值相加。数学规则要求你将行元素与列元素相乘,然后将该乘积累加到结果矩阵中。使用 + 运算符而不是 *,会使你的计算变得不正确,导致值不匹配——尤其是在矩阵增大时更是如此。
你只需要在这一行把 + 运算符改成 * 即可:
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
for (int k = 0; k < b.length; k++) {
// Elements must be multiplied, not added
result[i][j] += a[i][k] * b[k][j];
}
}
}
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。