高数 矩阵的基本运算

旧城冷巷雨未停 提交于 2019-12-04 11:39:36

一、介绍

1、介绍。

        矩阵的运算,本质上就是二维数组的运算。

2、公共代码。

  1.  
    /**
  2.  
    * 打印二维数组
  3.  
    *
  4.  
    * @param a 二维数组a
  5.  
    */
  6.  
    public static void print(double[][] a) {
  7.  
    print(a, 5, 0);
  8.  
    }
  9.  
     
  10.  
    /**
  11.  
    * 打印二维数组
  12.  
    *
  13.  
    * @param a 二维数组a
  14.  
    * @param precision 如果是浮点型的话,保留几位小数
  15.  
    */
  16.  
    public static void print(int[][] a, int width, int precision) {
  17.  
    String str = "%" + width + "d ";
  18.  
    for (int i = 0; i < a.length; i++) {
  19.  
    int[] aItem = a[i];
  20.  
    for (int j = 0; j < aItem.length; j++) {
  21.  
    System.out.print(String.format(str, aItem[j]));
  22.  
    }
  23.  
    System.out.println();
  24.  
    }
  25.  
    }
  26.  
     
  27.  
    /**
  28.  
    * 打印二维数组
  29.  
    *
  30.  
    * @param a 二维数组a
  31.  
    * @param precision 如果是浮点型的话,保留几位小数
  32.  
    */
  33.  
    public static void print(double[][] a, int width, int precision) {
  34.  
    String str = "%" + width + "." + precision + "f ";
  35.  
    for (int i = 0; i < a.length; i++) {
  36.  
    double[] aItem = a[i];
  37.  
    for (int j = 0; j < aItem.length; j++) {
  38.  
    System.out.print(String.format(str, aItem[j]));
  39.  
    }
  40.  
    System.out.println();
  41.  
    }
  42.  
    }

二、减法。

1、介绍。

        

2、代码。

  1.  
    /**
  2.  
    * 矩阵a和b对应位置的数相减
  3.  
    *
  4.  
    * @param a 矩阵a[m][n]
  5.  
    * @param b 矩阵b[n][p]
  6.  
    */
  7.  
    public static double[][] sub(double[][] a, double[][] b) throws Exception {
  8.  
    int row = a.length;
  9.  
    int column = a[0].length;
  10.  
    int bRow = b.length;
  11.  
    int bColumn = b[0].length;
  12.  
    if (row != bRow || column != bColumn) {
  13.  
    throw new Exception("两个矩阵的大小不一致");
  14.  
    }
  15.  
    double[][] result = new double[row][column];
  16.  
    for (int i = 0; i < row; i++)
  17.  
    for (int j = 0; j < column; j++)
  18.  
    result[i][j] = a[i][j] - b[i][j];
  19.  
    return result;
  20.  
    }
  1.  
    public static void main(String[] args) {
  2.  
    try {
  3.  
    double[][] a = new double[][]{
  4.  
    {1, 2, 3, 4},
  5.  
    {5, 6, 7, 8},
  6.  
    {1, 1, 2, 2},
  7.  
    {3, 3, 4, 4},
  8.  
    };
  9.  
    System.out.println("矩阵a:");
  10.  
    ArrayUtils.print(a);
  11.  
    double[][] b = new double[][]{
  12.  
    {3, 2, 1, 4},
  13.  
    {8, 6, 5, 8},
  14.  
    {1, 2, 3, 4},
  15.  
    {8, 7, 6, 5},
  16.  
    };
  17.  
    System.out.println("矩阵b:");
  18.  
    ArrayUtils.print(b);
  19.  
    double[][] c = MatrixUtils.sub(a, b);
  20.  
    System.out.println("矩阵a-b=c:");
  21.  
    ArrayUtils.print(c);
  22.  
    } catch (Exception e) {
  23.  
    e.printStackTrace();
  24.  
    }
  25.  
    }

 

 

三、加法

1、介绍。

        

2、代码。

  1.  
    /**
  2.  
    * 矩阵a和b对应位置的数相加
  3.  
    *
  4.  
    * @param a 矩阵a[m][n]
  5.  
    * @param b 矩阵b[n][p]
  6.  
    */
  7.  
    public static double[][] add(double[][] a, double[][] b) throws Exception {
  8.  
    int row = a.length;
  9.  
    int column = a[0].length;
  10.  
    int bRow = b.length;
  11.  
    int bColumn = b[0].length;
  12.  
    if (row != bRow || column != bColumn) {
  13.  
    throw new Exception("两个矩阵的大小不一致");
  14.  
    }
  15.  
    double[][] result = new double[row][column];
  16.  
    for (int i = 0; i < row; i++)
  17.  
    for (int j = 0; j < column; j++)
  18.  
    result[i][j] = a[i][j] + b[i][j];
  19.  
    return result;
  20.  
    }
  1.  
    public static void main(String[] args) {
  2.  
    try {
  3.  
    double[][] a = new double[][]{
  4.  
    {1, 2, 3, 4},
  5.  
    {5, 6, 7, 8},
  6.  
    {1, 1, 2, 2},
  7.  
    {3, 3, 4, 4},
  8.  
    };
  9.  
    System.out.println("矩阵a:");
  10.  
    ArrayUtils.print(a);
  11.  
    double[][] b = new double[][]{
  12.  
    {3, 2, 1, 4},
  13.  
    {8, 6, 5, 8},
  14.  
    {1, 2, 3, 4},
  15.  
    {8, 7, 6, 5},
  16.  
    };
  17.  
    System.out.println("矩阵b:");
  18.  
    ArrayUtils.print(b);
  19.  
    //加法
  20.  
    double[][] c = MatrixUtils.add(a, b);
  21.  
    System.out.println("矩阵a+b=c:");
  22.  
    ArrayUtils.print(c);
  23.  
    } catch (Exception e) {
  24.  
    e.printStackTrace();
  25.  
    }
  26.  
    }

 

四、数乘

1、介绍。

        

n和m是数,A和B是矩阵:n(mA)=(nm)A  ,  n(AB)=(nA)B=A(nB) , (n+m)A=nA+mA , n(A+B)=nA+nB

2、代码。

  1.  
    /**
  2.  
    * 矩阵数乘
  3.  
    *
  4.  
    * @param a 矩阵a
  5.  
    * @param multiplier 乘数multiplier
  6.  
    */
  7.  
    public static double[][] mul(double[][] a, double multiplier) {
  8.  
    int row = a.length;
  9.  
    int column = a[0].length;
  10.  
    double[][] result = new double[row][column];
  11.  
    for (int i = 0; i < row; i++)
  12.  
    for (int j = 0; j < column; j++)
  13.  
    result[i][j] = a[i][j] * multiplier;
  14.  
    return result;
  15.  
    }
  1.  
    public static void main(String[] args) {
  2.  
    try {
  3.  
    double[][] a = new double[][]{
  4.  
    {1, 2, 3, 4},
  5.  
    {5, 6, 7, 8},
  6.  
    {1, 1, 2, 2},
  7.  
    {3, 3, 4, 4},
  8.  
    };
  9.  
    System.out.println("矩阵a:");
  10.  
    ArrayUtils.print(a);
  11.  
    //数乘
  12.  
    double[][] c = MatrixUtils.mul(a, 3);
  13.  
    System.out.println("矩阵a*3=c:");
  14.  
    ArrayUtils.print(c);
  15.  
    } catch (Exception e) {
  16.  
    e.printStackTrace();
  17.  
    }
  18.  
    }

五、转置

1、介绍。

        

2、代码。

  1.  
    /**
  2.  
    * 矩阵转置
  3.  
    *
  4.  
    * @param a 矩阵a
  5.  
    */
  6.  
    public static double[][] transform(double[][] a) {
  7.  
    int row = a.length;
  8.  
    int column = a[0].length;
  9.  
    double[][] result = new double[column][row];
  10.  
    for (int i = 0; i < column; i++)
  11.  
    for (int j = 0; j < row; j++)
  12.  
    result[i][j] = a[j][i];
  13.  
    return result;
  14.  
    }
  1.  
    public static void main(String[] args) {
  2.  
    try {
  3.  
    double[][] a = new double[][]{
  4.  
    {1, 2},
  5.  
    {5, 6},
  6.  
    {1, 1},
  7.  
    {3, 3},
  8.  
    };
  9.  
    System.out.println("矩阵a:");
  10.  
    ArrayUtils.print(a);
  11.  
    double[][] c = MatrixUtils.transform(a);
  12.  
    System.out.println("矩阵a转置c:");
  13.  
    ArrayUtils.print(c);
  14.  
    } catch (Exception e) {
  15.  
    e.printStackTrace();
  16.  
    }
  17.  
    }

六、乘法

1、介绍。

        

A、B和C都为矩阵: ABC=A(BC) ,  (A+B)C=AC+AB ,  

 ,  AB != BA。

        两个矩阵的乘法仅当第一个矩阵A的列数和另一个矩阵B的行数相等时才能定义。如Am×n矩阵和Bn×p矩阵,它们的乘积C是一个m×p矩阵

,它的一个元素表示为:

2、代码。

  1.  
    /**
  2.  
    * 矩阵a[m][n]和矩阵b[n][p]相乘,返回c[m][p]
  3.  
    *
  4.  
    * @param a 矩阵a[m][n]
  5.  
    * @param b 矩阵b[n][p]
  6.  
    */
  7.  
    public static double[][] mul(double[][] a, double[][] b) throws Exception {
  8.  
    int aRow = a.length;
  9.  
    int aColumn = a[0].length;
  10.  
    int bRow = b.length;
  11.  
    int bColumn = b[0].length;
  12.  
    if (aColumn != bRow) {
  13.  
    throw new Exception("a[m][n]和b[n][p],其中两个n不相等");
  14.  
    }
  15.  
    double[][] result = new double[aRow][bColumn];
  16.  
    //计算
  17.  
    for (int i = 0; i < aRow; i++) {
  18.  
    for (int j = 0; j < bColumn; j++) {
  19.  
    double sum = 0;
  20.  
    for (int k = 0; k < aColumn; k++) {
  21.  
    sum += (a[i][k] * b[k][j]);
  22.  
    }
  23.  
    result[i][j] = sum;
  24.  
    }
  25.  
    }
  26.  
    return result;
  27.  
    }
  1.  
    public static void main(String[] args) {
  2.  
    try {
  3.  
    double[][] a = new double[][]{
  4.  
    {1, 2, 3, 4},
  5.  
    {5, 6, 7, 8},
  6.  
    {1, 1, 2, 2},
  7.  
    {3, 3, 4, 4},
  8.  
    };
  9.  
    System.out.println("矩阵a:");
  10.  
    ArrayUtils.print(a);
  11.  
    double[][] b = new double[][]{
  12.  
    {3, 2, 1, 4},
  13.  
    {8, 6, 5, 8},
  14.  
    {1, 2, 3, 4},
  15.  
    {8, 7, 6, 5},
  16.  
    };
  17.  
    System.out.println("矩阵b:");
  18.  
    ArrayUtils.print(b);
  19.  
    //乘法
  20.  
    double[][] c = MatrixUtils.mul(a, b);
  21.  
    System.out.println("矩阵a*b=c:");
  22.  
    ArrayUtils.print(c);
  23.  
    } catch (Exception e) {
  24.  
    e.printStackTrace();
  25.  
    }
  26.  
    }

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!