知识回顾
若A为NxM阶矩阵 B为MxP阶矩阵,二者相乘之后的矩阵则为NXP阶矩阵
运算过程:
思路
- 计算并显示出来这个结果 我们则需要 一个计算方法 和 一个显示方法
- 因此主函数可以写的相当之简单 , 键入想要求解的矩阵的数值 然后调用两种方法即可
显示方法
- 只需要循环显示出行列值然后分行即可
计算方法
设进行矩阵乘法的两个矩阵为a 3x3型矩阵和b 3x2型矩阵
- 我们在运用数学思维计算矩阵乘法时首先计算的便是
z[1][1] = a[1][1]*b[1][1]+a[1][2]*b[2][1]+a[1][3]*b[3][1]
转换成代码则可想到 矩阵可以利用二维数组来实现
下标的改变以及算术累加可以用for循环来实现 - 在此之上我们可以再思考
z[1][1]计算过后我们将会继续计算z[1][2] 而列下标的改变则可再次利用循环来实现
以此类推 - 矩阵第一行的数值计算过后 我们要转为求解第二行的数值 这时则可再次利用循环来实现行的改变
因此 二维数组实现矩阵乘法的基本思路就是 利用嵌套循环来实现数值的累加计算,矩阵列以及行的变化。
以下为实现代码:
public class Example4_04{
public static void main(String[] args){
int[][] a={{-4 , 5 , -7},
{2, -3 , -4},
{3 , 4 , 5}};
int[][] b={{1 , 2},
{5 , 6},
{-7 , 9},};
int[][] result = mul(a,b);
print(result);
}
//mul返回值的类型是一个二维数组
static int[][] mul(int[][] x , int[][] y)
{
int i , j , k;//循环控制变量
//申请结果数组的空间
//行长度为x数组的行长度,列长度为y数组第一行的行长度
int[][] z=new int[x.length][y[0].length];
for(i = 0 ; i < x.length ; i++)
{ for(j = 0 ; j < y[0].length ; j++)
{
z[i][j] = 0;
for(k = 0 ; k < x[0].length ; k++)
z[i][j] = z[i][j] + x[i][k] * y[k][j];
}
}
return z;
}
static void print(int[][] x){
int i , j;
for(i = 0 ; i < x.length ; i++){
for(j = 0 ; j < x[i].length ; j++)
System.out.printf("%5d",x[i][j]);
System.out.println();
}
}
}