基本数学问题——矩阵运算

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	
==================

猜你喜欢

转载自blog.csdn.net/QQ2899349953/article/details/84674061