您的位置:首页 > 编程语言 > Java开发

java实现矩阵乘法

2017-09-22 09:10 239 查看
题目:试编程实现矩阵乘法

代码:

1.首先需要有两个矩阵,这里用二维数组来表示,通过键入的方式填充二维数组

  

Scanner input = new Scanner(System.in);
int m1Hang = 0; //m1的行数
int m1Lie = 0; //m1的列数
System.out.print("请输入第一个行列式的行数:");
m1Hang = input.nextInt(); //通过用户输入来定义m1的行数
System.out.print("请输入第一个行列式的列数:");
m1Lie = input.nextInt(); //通过用户输入来定义m1的列数
double[][] m1 = new double[m1Hang][m1Lie]; //因为数组初始化都需要确定大小,所以把用户输入的信息作为行和列定义 m1的大小
for(int i=0;i<m1Hang;i++){
for(int j=0;j<m1Lie;j++){ //使用循环来往m1里面填充数字
int trueHang = i+1; //因为下面要打印第几行第几列提示,这个几是我们通常所说的。但在二维数组中,通常说的第1行其实是计算机里的第0行
int trueLie = j+1;
System.out.print("第一个行列式第"+trueHang+"行,第"+trueLie+"列的数字:");
m1[i][j] = input.nextInt();
}
}
//m2的填充就跟上面同理
int m2Hang = 0;
int m2Lie = 0;
System.out.print("请输入第二个行列式的行数:");
m2Hang = input.nextInt();
System.out.print("请输入第二个行列式的列数:");
m2Lie = input.nextInt();
double[][] m2 = new double[m2Hang][m2Lie];
for(int i=0;i<m2Hang;i++){
for(int j=0;j<m2Lie;j++){
int trueHang = i+1;
int trueLie = j+1;
System.out.print("第二个行列式第"+trueHang+"行,第"+trueLie+"列的数字:");
m2[i][j] = input.nextInt();
}
}
2.有了两个二维数组了,就可以进行乘法运算了。这里使用方法来实现,写一个matrixMultiplier的 方法。这个方法首先应该做判断,如果输入的二维数组不是矩阵,也就是说应先判断m1每一行的列数是否相等以及m2每一行的列数是否相等,只要满足这个条件才是矩阵。还要做一个判断,就是看m1的列数和m2的行数是否相等,否则不能进行行列式的运算。之后就进行行列式运算,这里的算法思路如下图:



最后代码如下:

public static double[][] matrixMultiplier(double[][] m1,double[][] m2){
int m1Col = 0; //m1的列数
int m2Row = 0; //m2的行数
int m1Row = 0; //m1的行数
int sum = 0;
for(int i=0;i<m1.length-1;i++){ //进行第一个判断,看m1每一行的列数是否相等
if(m1[i].length != m1[i+1].length){
System.out.println("输入的第一个数组不是矩阵"); //不相等就输出错误信息
return new double[0][0];
}else{ //这里是满足了每一行的列数相等的条件才能进行到这里。
double[] line = m1[i];
m1Col = line.length; //m1的列数,赋值给m1Col
m1Row = m1.length; //m1的行数,赋值给m1Row
}
}
for(int i=0;i<m2.length-1;i++){ //道理同上,看m2每一行的列数是否相等
if(m2[i].length != m2[i+1].length){
System.out.println("输入的第二个数组不是矩阵");
return new double[0][0];
}else{
m2Row = m2.length; //m2的行数,赋值给m2Row
}
}
if(m1Col != m2Row){ //进行第三个判断,看m1的列数和m2的行数是否相等,否则不能进行行列式的运算
System.out.println("第一个行列式的列和第二个行列式的行不相等"); //打印报错信息
return new double[0][0];
}
for(int i=0;i<m1Row;i++){ //计算乘积
for(int j=0;j<m1Col;j++){
sum += (int) m1[i][j] * (int) m2[j][i];
System.out.println(m1[i][j] + "*" +m2[j][i]); //把运行间结果打印出来
}
System.out.println(sum); //把最后的结果打印出来
}

return new double[0][0];
}

有了这个计算矩阵相乘的方法后,再在主方法中使用这个方法就好了:
matrixMultiplier(m1,m2);

最后的运行结果如下图:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: