矩阵乘积

题目说明:

已知两个矩阵a,b,求a*b

分析:

结果矩阵等于 a的每一行的元素,分别乘b的每一列的元素在相加;

前提:a的列=b的行             


矩阵a2*2
1 2
1 -1
*
矩阵b2*3
1 2 -3
-1 1 2
结果矩阵C2*3
-1 4 1
2 1 -5

 我的代码主要分为一下几个模块:

1.从键盘输入矩阵a和b,用到getScanMatrix(A)函数;第一行为矩阵a和b的行,列;接下来输入矩阵的元素,以空格为分隔;

2.矩阵乘积matrixMulitply(A,B)

3.打印矩阵结果

 1 import java.util.Arrays;
 2 import java.util.Scanner;
 3 
 4 /*
 5  * 矩阵乘法
 6  *     2 2 2 3(2行2列;2行3列)
 7     1 2 1 -1
 8     1 2 -3 -1 1 2
 9  * */
10 
11 public class case7_MatrixMulity {
12     static Scanner sc=new Scanner(System.in);
13     final static int m1=sc.nextInt();//矩阵1的行
14     final static int m2=sc.nextInt();//矩阵1的列
15     final static int n1=sc.nextInt();//矩阵2的行
16     final static int n2=sc.nextInt();//矩阵2的列
17     
18     public static void main(String[] args) {
19         int [][]A = new int[m1][m2];
20         int [][]B = new int[m2][n1];
21         //从键盘获取矩阵A和B
22         getScanMatrix(A);
23         getScanMatrix(B);
24         //矩阵乘积所获得的结果矩阵
25         long[][] res=matrixMulitply(A,B);
26         //打印输入矩阵
27         printAB(A);
28         printAB(B);
29         //结果矩阵(类型不同,结果矩形为long型)
30         printMultMarix(res);
31         
32     }
33     
34     //按行输入矩阵的元素
35     private static void getScanMatrix(int[][] A) {
36         for (int i = 0; i < A.length; i++) {
37             for (int j = 0; j <A[0].length; j++) {
38                 A[i][j]=sc.nextInt();
39             }
40         }        
41     }
42 
43     //矩阵乘积
44     private static long[][] matrixMulitply(int[][] a, int[][] b) {
45         
46         if(m2!=n1) throw new IllegalArgumentException();
47         
48          long[][] X = new long[m1][n2];//定义结果矩阵;
49         
50          
51         for (int i = 0; i <m1; i++) {//矩阵1的行
52             for (int j = 0; j <n2; j++) {//矩阵2的列
53                 for(int k=0;k<m2;k++){//矩阵1的列,矩阵2的行
54                 X[i][j]+=a[i][k]*b[k][j];
55                 }
56             }
57             }
58         return X;
59         }
60     
61     //打印矩阵
62     private static void printMultMarix(long[][] res) {
63         for(long []arr:res){
64             for(long e:arr){
65                 System.out.print(e+"\t");
66             }
67             System.out.println();
68         }
69                 
70     }
71 
72     static void printAB(int [][]marix){
73         
74         for(int []arr:marix){
75             for(int e:arr){
76                 System.out.print(e+"  ");
77             }
78             System.out.println();
79         }
80         
81     }
82 }

 

 如有错误可在下方评论,感谢反馈!

 
上一篇:验证码


下一篇:字节跳动