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);
最后的运行结果如下图:
代码:
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);
最后的运行结果如下图:
相关文章推荐
- java实现矩阵乘法public class MatrixMultiply { //A=A*B 将相乘的结果赋给A public static void Multiply(double[][
- java第四周 任务四 用二维数组表示矩阵,实现矩阵乘法
- 稀疏矩阵乘法加法等的java实现
- java 矩阵乘法的mapreduce程序实现
- java 二维数组矩阵乘法的实现方法
- 蓝桥杯试题矩阵乘法java实现
- Java程序实现矩阵乘法
- java第二周作业--实现矩阵的加法和乘法运算
- 分享矩阵乘法单线程与多线程的Java实现与效率对比,请教Strassen算法
- 【数据结构与算法】数组应用1:矩阵乘法(Java实现)
- 基于内积法的Hadoop的MapReducer框架实现稀疏矩阵乘法(java)
- 用Java的循环实现矩阵乘法代码
- java 多线程并行计算之矩阵乘法继承Thread类实现(星星笔记)
- 实现N*N矩阵的乘法,矩阵有一维数组表示
- <google面试题>实现两个N*N矩阵的乘法,矩阵由一维数组表示
- 用java实现的乘法口诀
- java单链表实现一元多项式加法和乘法运算
- 实现两个N*N矩阵的乘法,矩阵由一维数组表示
- WINDLX 体系结构 汇编实现矩阵乘法
- Java实现矩阵