基本數學問題——矩陣運算
阿新 • • 發佈:2018-12-21
1、矩陣加法、減法
只需要將兩矩陣的對應項相加(或相減)即可;
注意:
矩陣加法、減法運算時必須保證兩個矩陣的行數、列數必須相等;
2、矩陣乘法
對於給定的mn矩陣A和nk矩陣B,其乘積矩陣為C=AB;這裡矩陣C為m*k階的;
C[i][j] = ∑A[i][t]B[t][j] (0≤t≤n-1)
第一個矩陣的第i行所有元素與矩陣B的第j列所有元素對應相乘,再把所得的結果相加結果就是矩陣C的第i行第j列的元素:
注意:
矩陣乘法運算時,矩陣A的列數必須等於矩陣B的行數,且矩陣的乘法不具有交換性,即:AB != BA;
/** * @ClassName TestDemo14 * @Description 矩陣計算 * @Author lzq * @Date 2018/12/1 14:44 * @Version 1.0 **/ public class TestDemo14 { public static void main(String[] args) { int[][] A = {{1,2,3}, {4,5,6}, {7,8,9}}; int[][] B = {{3,7,5}, {9,-5,2}, {-1,5,9}}; System.out.println("矩陣A"); show(A); System.out.println("矩陣B"); show(B); System.out.println("兩矩陣相加得:"); show(matrix_add(A,B)); System.out.println("兩矩陣相減得:"); show(matrix_sub(A,B)); System.out.println("兩矩陣相乘得:"); show(matrix_multiplication(A,B)); } /** * 判斷兩個矩陣的行數、列數是否相同 * @param A * @param B * @return */ public static boolean is_matrix1(int[][] A,int[][] B) { if(A.length != B.length) { System.out.println("兩矩陣不符合相加(或相減)要求!"); return false; } for(int i = 0;i < A.length;i++) { if(A[i].length != B[i].length) { System.out.println("兩矩陣不符合相加(或相減)要求!"); return false; } } return true; } /** * 判斷一個矩陣的行數是否與另一個矩陣的列數相等 * @param A * @param B * @return */ public static boolean is_matrix2(int[][] A,int[][] B) { for(int i = 0;i < A.length;i++) { if(A[i].length != B.length) { System.out.println("兩矩陣不符合相乘要求!"); return false; } } return true; } /** * 矩陣相加 * @param A * @param B * @return */ public static int[][] matrix_add(int[][] A,int[][] B) { if(!is_matrix1(A,B)) { return null; } int[][] C = new int[A.length][A[0].length]; int i,j; for(i = 0;i < A.length;i++) { for(j = 0;j < B[i].length;j++) { C[i][j] = A[i][j]+B[i][j]; } } return C; } /** * 矩陣相減 * @param A * @param B * @return */ public static int[][] matrix_sub(int[][] A,int[][] B) { if(!is_matrix1(A,B)) { return null; } int[][] C = new int[A.length][A[0].length]; int i,j; for(i = 0;i < A.length;i++) { for(j = 0;j < B[i].length;j++) { C[i][j] = A[i][j]-B[i][j]; } } return C; } /** * 矩陣相乘 * @param A * @param B * @return */ public static int[][] matrix_multiplication(int[][] A,int[][] B) { if(!is_matrix1(A,B)) { return null; } int[][] C = new int[A.length][B[0].length]; int i,j,t; for(i = 0;i < A.length;i++) { for(j = 0;j < B.length;j++) { C[i][j] = 0; for(t = 0;t < C.length;t++) { C[i][j] += (A[i][t]*B[t][j]); } } } return C; } /** * 列印矩陣 * @param X */ public static void show(int[][] X) { int i,j; for(i = 0;i < X.length;i++) { for(j = 0;j < X[i].length;j++) { System.out.print(X[i][j]+"\t"); } System.out.println(); } System.out.println("=================="); } }
矩陣A
1 2 3
4 5 6
7 8 9
==================
矩陣B
3 7 5
9 -5 2
-1 5 9
==================
兩矩陣相加得:
4 9 8
13 0 8
6 13 18
==================
兩矩陣相減得:
-2 -5 -2
-5 10 4
8 3 0
==================
兩矩陣相乘得:
18 12 36
51 33 84
84 54 132
==================