用Java编程实现矩阵连续相乘问题

首先是有10个左右的矩阵(矩阵个数自己定,但是不超过20个吧,不然精度达不到,而且矩阵从左到右是有序排列),矩阵中的数值已知,现在想实现这些矩阵的连续乘法。最终的效果是:不仅能实现所有矩阵最终相乘的结果,而且可以显示各个“阶段”矩阵相乘的结果,也就是说要显示第一个和第二个矩阵相乘的结果(定为结果1矩阵),同时把结果保存后,显示该结果和第三个矩阵相乘的结果(定为结果2矩阵),保存该结果后,能显示该结果和第四个矩阵相乘的结果(定为结果3矩阵)。依次类推,如果有N个矩阵,就需要求出相应的N-1个结果矩阵,当把每一步相乘的结果都保存下来后,在需要显示的时候,直接指定第几个结果矩阵就能显示出来。 把矩阵作为方阵来处理。 期待指点......

2个回答

猫鱼薄荷 2025-07-25 02:56:47
代码如下:
//按照步骤查找矩阵相乘结果,i=1表示第一次结果,i=2表示第二次结果,以此类推,如果i不合法则返回null
private static int[][] getMatrixsMultiByStep(int i, int[][]... matrixs) {
Map result = getMatrixsMultiResult(matrixs);
if(i<=0 || i>result.size()) {
return null;
}
return result.get("" + i);
}
//对个矩阵相乘,临时结果和最终结果保存在Map中
private static Map getMatrixsMultiResult(int[][]... matrixs) {
Map result = new HashMap();
int[][] param = matrixs[0];
for(int i=1; i int[][] matrix = matrixs[i];
param = getMatrixMultiResult(param, matrix);
if(param == null) {
return null;
}
result.put("" + i, param);
}
return result;
}
//两个矩阵相乘,结果为一个矩阵,返回值为空表示两个矩阵不能相乘
private static int[][] getMatrixMultiResult(int[][] matrix1, int[][] matrix2) {
if(matrix2.length <= 0) {
return matrix1;
}
if(matrix1.length<=0 || matrix1[0].length!=matrix2.length) {
return null;
}

int[][] result = new int[matrix1.length][matrix2[0].length];
for(int i=0; i for(int j=0; j result[i][j] = 0;
for(int k=0; k result[i][j] += matrix1[i][k]*matrix2[k][j];
}
}
}
return result;
}
测试程序:
public static void main(String[] args) {
int[][] p1 = {{1, 2, 3}, {3, 4, 5}, {4, 5, 6}};
int[][] p2 = {{1, 2, 3}, {3, 4, 5}, {4, 5, 6}};
int[][] p3 = {{1, 2, 3}, {3, 4, 5}, {4, 5, 6}};
int[][] p4 = {{1, 2, 3}, {3, 4, 5}, {4, 5, 6}};
int[][] value = getMatrixsMultiByStep(2, p1, p2, p3, p4);
if(value != null) {
for(int i=0; i for(int j=0; j System.out.print(value[i][j] + " ");
}
System.out.println();
}
} else {
System.out.println("矩阵无法相乘!");
}
}
输出结果:
218 293 368
412 553 694
509 683 857
PS:JDK要5.0以上,二维数组模拟矩阵,兼容普通矩阵相乘哦
一路向北 2025-07-07 19:04:53
一个矩阵就是2维数组,,,,数组按照一定的规则相乘