基本數學問題:利用二維數組實現矩陣的乘法

 矩陣的乘法:

1、當矩陣A的列數(column)等於矩陣B的行數(row)時,A與B可以相乘。

2、矩陣C的行數等於矩陣A的行數,C的列數等於B的列數。

3、乘積C的第m行第n列的元素等於矩陣A的第m行的元素與矩陣B的第n列對應元素乘積之和。

需求:編寫程序實現兩個矩陣的乘法。數組中的元素隨機生成。 

分析:1、定義兩個int類型的二維數組int[][] a與int[][] b,其中一個矩陣行數與另一個矩陣的列數相等,例:int[2][3]和int[4][2]。

           2、矩陣中的元素使用for循環隨機生成[0,10)之間的整數。

           3、c矩陣的 cij 元素值爲 a 矩陣 i 行與 b 矩陣 j 列的各元素乘積之和。

實現兩個矩陣的乘法過程如下:

public class MatrixMutiply {
    // 編寫程序實現兩個矩陣的乘法
    private static int[][] a = new int[4][2];   //四行兩列
    private static int[][] b = new int[2][3];   //兩行三列

    public static void setParams(int[][] matrix){
        int row = matrix.length;        //獲取行數
        int col = matrix[0].length;     //獲取列數
        for(int i = 0;i < row; i++) {
            for(int j = 0; j < col; j++) {
                matrix[i][j] = (int) (Math.random() * 10);
//                System.out.println(matrix[i][j]);
            }
        }
    }

    public static void print(int[][] matrix){
        int row = matrix.length;        //獲取行數
        int col = matrix[0].length;     //獲取列數
        for(int i = 0;i < row; i++) {
            for(int j = 0; j < col; j++) {
                System.out.print(matrix[i][j] + "\t");
            }
            System.out.println();
        }
    }

    public static int[][] calcMatrix(int[][] matrix1,int[][] matrix2) {
        int row1 = matrix1.length;
        int col2 = matrix2[0].length;
        int sameNum = matrix1[0].length;

        int[][] matrix3 = new int[row1][col2];
        for(int i = 0; i < row1; i ++){
            for(int j = 0;j < col2; j++){
                for(int k = 0; k < sameNum; k++) {
                    matrix3[i][j] += matrix1[i][k] * matrix2[k][j]; //矩陣乘法的核心
                }
            }
        }
        return matrix3;
    }


    public static void main(String[] args) {
        MatrixMutiply.setParams(MatrixMutiply.a);
        MatrixMutiply.setParams(MatrixMutiply.b);
        int[][] c = calcMatrix(a,b);
        System.out.println("a矩陣元素如下:");
        print(a);
        System.out.println("b矩陣元素如下:");
        print(b);
        System.out.println("c矩陣元素如下:");
        print(c);
    }
}

運行代碼結果如下:

a矩陣元素如下:
8	4	
8	4	
5	1	
6	1	
b矩陣元素如下:
8	8	9	
5	4	2	
c矩陣元素如下:
84	80	80	
84	80	80	
45	44	47	
53	52	56	

其中需要注意的是,一般矩陣不滿足交換律,計算出來的矩陣結果會有差異。即使是兩個方陣進行乘法運算,也會因爲兩者是A*B還是B*A產生不同的矩陣計算結果,所以矩陣在前還是在後對於計算的結果很關鍵。另外矩陣的乘法核心就在於三層的循環嵌套,最外一層的循環控制生成的矩陣行號,中間一層循環控制生成的矩陣列號,最內一層控制矩陣元素的運算。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章