基本矩阵运算的Java实现

简介: 基本矩阵运算的Java实现

一: 矩阵的加法与减法

规则:矩阵的加法与减法要求两个矩阵的行列完全相等,方可以完成两个矩阵的之间的运算。

举例说明如下

1347936016_4238.png

二:矩阵的乘法

规则:矩阵的乘法要求两个矩阵符合A(mx k),  B( k x n)即矩阵A的列数与矩阵B的行数相等,否

则无法完成矩阵运算。举例说明如下:

1347936033_6743.png

Java代码如下:

package pet.shop;
 
public class BasicMatrixMath {
  public final static int OPERATION_ADD = 1;
  public final static int OPERATION_SUB = 2;
  public final static int OPERATION_MUL = 4;
  
  /**
   * To be able to add two matrices, they must be of the same size
   * @param matrixa
   * @param matrixb
   */
  public int[][] add(int[][] matrixa, int[][] matrixb) {
    if(legalOperation(matrixa, matrixb, OPERATION_ADD)) {
      for(int i=0; i<matrixa.length; i++) {
        for(int j=0; j<matrixa[0].length; j++) {
          matrixa[i][j] = matrixa[i][j] + matrixb[i][j];
        }
      }
    }
    return matrixa;
  }
  
  /**
   * To be able to substract two matrices, they must be of the same size
   * 
   * @param matrixa
   * @param matrixb
   */
  public int[][] substract(int[][] matrixa, int[][] matrixb) {
    if(legalOperation(matrixa, matrixb, OPERATION_SUB)) {
      for(int i=0; i<matrixa.length; i++) {
        for(int j=0; j<matrixa[0].length; j++) {
          matrixa[i][j] = matrixa[i][j] - matrixb[i][j];
        }
      }
    }
    return matrixa;
  }
  
  /**
   * 
   * @param matrixa
   * @param matrixb
   */
  public int[][] multiplication(int[][] matrixa, int[][] matrixb) {
    if(legalOperation(matrixa, matrixb, OPERATION_SUB)) {
      int[][] result = new int[matrixa.length][matrixb[0].length];
      for(int i=0; i<matrixa.length; i++) {
        for(int j=0; j<matrixb[0].length; j++) {
          // i will complete this tomorrow @2012/09/17
          result[i][j] = calculateSingleResult(matrixa, matrixb, i, j); 
        }
      }
      return result;
    } 
    else
    {
      return null;
    }
  }
  
  private int calculateSingleResult(int[][] matrixa, int[][] matrixb, int row, int col) {
    int result = 0;
    for(int k=0; k<matrixa[0].length; k++) {
      result += matrixa[row][k] * matrixb[k][col];
    }
    return result;
  }
 
  /**
   * 
   * @param matrixa
   * @param b
   */
  public int[][] multiplication(int[][] matrixa, int b) {
    for(int i=0; i<matrixa.length; i++) {
      for(int j=0; j<matrixa[0].length; j++) {
        matrixa[i][j] = matrixa[i][j] * b;
      }
    }
    return matrixa;
  }
  
  /**
   * validate whether the parameters is valid parameters.
   * 
   * @param a
   * @param b
   * @param type
   * @return
   */
  private boolean legalOperation(int[][] a, int[][] b, int type) {
    boolean legal = true;
    if(type == OPERATION_ADD || type == OPERATION_SUB)
    {
      if(a.length != b.length || a[0].length != b[0].length) {
        legal = false;
      }
    } 
    else if(type == OPERATION_MUL)
    {
      if(a[0].length != b.length) {
        legal = false;
      }
    }
    return legal;
  }
  
  /**
   *  test code here !!!!
   * @param args
   */
  public static void main(String[] args) {
    int[][] a = new int[][]{{1,2},{3,4}};
    int[][] b = new int[][]{{7, 8}, {6, 5}};
    BasicMatrixMath bmm = new BasicMatrixMath();
    
    System.out.println("addition two matrix");
    int[][] result = bmm.add(a, b);
    for(int i=0; i<result.length; i++) {
      for(int j=0; j<result[0].length; j++) {
        System.out.print("\t" + result[i][j]);
      }
      System.out.println();
    }
    
    System.out.println("substract two matrix");
    result = bmm.substract(a, b);
    for(int i=0; i<result.length; i++) {
      for(int j=0; j<result[0].length; j++) {
        System.out.print("\t" + result[i][j]);
      }
      System.out.println();
    }
    
    System.out.println("multiplex one matrix");
    result = bmm.multiplication(a, 3);
    for(int i=0; i<result.length; i++) {
      for(int j=0; j<result[0].length; j++) {
        System.out.print("\t" + result[i][j]);
      }
      System.out.println();
    }
    
    System.out.println("multiplex two matrix");
    result = bmm.multiplication(a, b);
    for(int i=0; i<result.length; i++) {
      for(int j=0; j<result[0].length; j++) {
        System.out.print("\t" + result[i][j]);
      }
      System.out.println();
    } 
  }
}

相关文章
【Java每日一题,dfs】矩阵查找字符串
【Java每日一题,dfs】矩阵查找字符串
|
4月前
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
57 6
|
Java C++
【Java】剑指offer(29)顺时针打印矩阵
【Java】剑指offer(29)顺时针打印矩阵
|
7月前
|
Rust 索引
Rust 编程小技巧摘选(5)
Rust 编程小技巧摘选(5)
85 0
Rust 编程小技巧摘选(5)
|
7月前
|
Java Go C++
Java每日一练(20230417) N 皇后、搜索二维矩阵、发奖金问题
Java每日一练(20230417) N 皇后、搜索二维矩阵、发奖金问题
52 0
Java每日一练(20230417) N 皇后、搜索二维矩阵、发奖金问题
|
算法 Java
240. 搜索二维矩阵 II -- 力扣 --JAVA
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。
58 0
|
机器学习/深度学习 存储 算法
Java每日一练(20230515) 阶乘后的零、矩阵置零、两数相除
Java每日一练(20230515) 阶乘后的零、矩阵置零、两数相除
114 0
|
Java
矩阵重叠(Java实现)
矩阵重叠(Java实现)
154 1
矩阵重叠(Java实现)
|
算法 Java C语言
Strassen矩阵乘法问题(Java)
Strassen矩阵乘法问题(Java)
211 0
Strassen矩阵乘法问题(Java)
顺时针打印矩阵(剑指offer 29)Java
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。