矩阵相乘需注意:
1、当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘。
2、矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。
3、乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和
设a为2*3的矩阵 b为3*2的矩阵 c矩阵为a*b的结果
a=[a11,a12,a13]
[a21,a22,a23]
b=[b11,b12]
[b21,b22]
[b31,b32]
c=[a11*b11+a12*b21+a13*b31,a11*b12+a12*b22+a13*b32]
[a21*b11+a22*b21+a23*b31,a11*b21+a22*b22+a23*b32]
代码实现(从控制台输入矩阵):
public static void main(String[] args) {
Scanner input = new Scanner();
("输入矩阵A的行数:");
int x = ();
("输入矩阵A的列数(B的行数):");
int y = ();
("输入矩阵B的列数:");
int z = ();
//用二位数组存储矩阵
int[][] a = new int[x][y];
int[][] b = new int[y][z];
int[][] c = new int[x][z];
("输入A矩阵");
for (int i = 0; i < ; i++) {
for (int j = 0; j < a[i].length; j++) {
a[i][j] = ();
}
}
("输入B矩阵");
for (int i = 0; i < ; i++) {
for (int j = 0; j < b[i].length; j++) {
b[i][j] = ();
}
}
//根据规律用三个for循环实现矩阵相乘
for (int i = 0; i < ; i++) {
for (int j = 0; j < a[i].length; j++) {
for (int k = 0; k < b[j].length; k++) {
c[i][k] += a[i][j] * b[j][k];
}
}
}
//将结果输出到控制台
("结果:");
for (int[] row : c){
for (int cloumn : row) {
(cloumn + "\t");
}
();
}
}
随机生成矩阵A和B:
Random random = new Random();
//随机生成矩阵A并输出
("矩阵A:");
for (int i = 0; i < ; i++) {
for (int j = 0; j < a[i].length; j++) {
a[i][j] = (10);//10以内的随机整数
(a[i][j] + "\t");
}
();
}
//随机生成矩阵B并输出
("矩阵B:");
for (int i = 0; i < ; i++) {
for (int j = 0; j < b[i].length; j++) {
b[i][j] = (10);//10以内的随机整数
(b[i][j] + "\t");
}
();
}