码迷,mamicode.com
首页 > 编程语言 > 详细

java实现矩阵基本运算

时间:2017-10-03 22:18:15      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:public   class   row   print   one   tip   矩阵乘法   矩阵   nal   

  1 package Math;
  2 
  3 /**
  4  * 矩阵基本运算
  5  * @author woyouyihujiu
  6  * 
  7  */
  8 public class BasicMatrixMath {
  9     public static final int OPEROPERATION_ADD = 1;
 10     public static final int OPEROPERATION_SUB = 2;
 11     public static final int OPEROPERATION_MUL = 3;
 12     /**
 13      * 矩阵加法运算
 14      * @param matrix_a 矩阵a
 15      * @param matrix_b 矩阵b
 16      * @return result1 运算合法,返回结果
 17      */
 18     public int[][] additive(int[][] matrix_a, int[][] matrix_b){
 19         int[][] result1 = new int[matrix_a.length][matrix_a[0].length];
 20         if(legalOperation(matrix_a, matrix_b, OPEROPERATION_ADD)){
 21             for(int i = 0; i < matrix_a.length; i++){
 22                 for(int j = 0; j < matrix_a[0].length; j++){
 23                     result1[i][j] = matrix_a[i][j] + matrix_b[i][j];
 24                 }
 25             }
 26         }
 27         return result1;
 28     }
 29     /**
 30      * 矩阵减法运算
 31      * @param matrix_a 矩阵a
 32      * @param matrix_b 矩阵b
 33      * @return result2 运算合法,返回结果
 34      */    
 35     public int[][] subtraction(int[][] matrix_a, int[][] matrix_b){
 36         int[][] result2 = new int[matrix_a.length][matrix_a[0].length];
 37         if(legalOperation(matrix_a, matrix_b, OPEROPERATION_SUB)){
 38             for(int i = 0; i < matrix_a.length; i++){
 39                 for(int j = 0; j < matrix_a[0].length; j++){
 40                     result2[i][j] = matrix_a[i][j] - matrix_b[i][j];
 41                 }
 42             }
 43         }
 44         return result2;
 45     }
 46     /**
 47      * 矩阵乘法运算a 矩阵与矩阵相乘
 48      * @param matrix_a 矩阵a
 49      * @param matrix_b 矩阵b
 50      * @return result3 运算合法,返回结果; null 运算不合法
 51      */
 52     public int[][] multiplication_a(int[][] matrix_a, int[][] matrix_b){
 53         int[][] result3 = new int[matrix_a.length][matrix_b[0].length];
 54         if(legalOperation(matrix_a, matrix_b, OPEROPERATION_MUL)){
 55             for(int i = 0; i < matrix_a.length; i++){
 56                 for(int j = 0;j < matrix_a[0].length; j++){
 57                     result3[i][j] = calculateSingleResult(matrix_a, matrix_b, i, j);
 58                 }
 59             }
 60             return result3;
 61         }else{
 62             return null;
 63         }
 64     }
 65     /**
 66      * 矩阵乘法运算b 矩阵的数乘
 67      * @param matrix_a 矩阵a
 68      * @param n 数n
 69      * @return result4 运算合法,返回结果
 70      */
 71     public int[][] multiplication_b(int[][] matrix_a, int n){
 72         int[][] result4 = new int[matrix_a.length][matrix_a[0].length];
 73         for(int i = 0; i < matrix_a.length; i++){
 74             for(int j = 0; j < matrix_a[0].length; j++){
 75                 result4[i][j] = n * matrix_a[i][j];
 76             }
 77         }
 78         return result4;
 79     }
 80     /**
 81      * 矩阵乘法a中result每个元素的单一运算
 82      * @param matrix_a 矩阵a
 83      * @param matrix_b 矩阵b
 84      * @param row 参与单一运算的行标
 85      * @param col 参与单一运算的列标
 86      * @return result 运算结果
 87      */
 88     public int calculateSingleResult(int[][] matrix_a, int[][] matrix_b, int row, int col){
 89         int result = 0;
 90         for(int i = 0; i < matrix_a[0].length; i++){
 91             result += matrix_a[row][i] * matrix_b[i][col];
 92         }
 93         return result;
 94     }
 95     /**
 96      * 判断矩阵是否可以进行合法运算
 97      * @param matrix_a 矩阵a
 98      * @param matrix_b 矩阵b
 99      * @param type 判断运算类型,是加法,减法,还是乘法运算
100      * @return legal true 运算合法; false 运算不合法
101      */
102     private boolean legalOperation(int[][] matrix_a, int[][] matrix_b, int type){
103         boolean legal = true;
104         if(type == OPEROPERATION_ADD || type == OPEROPERATION_SUB){
105             if(matrix_a.length != matrix_b.length || matrix_a[0].length != matrix_b[0].length){
106                 legal = false;
107             }
108         }else if(type == OPEROPERATION_MUL){
109             if(matrix_a.length != matrix_b[0].length){
110                 legal = false;
111             }
112         }
113         return legal;
114     }
115     public static void main(String[] args) {
116         int a[][] = new int[][]{{1,2},{3,4}};
117         int b[][] = new int[][]{{5,6},{7,8}};
118         BasicMatrixMath bmm = new BasicMatrixMath();
119         System.out.println("addition two matrix");
120         int[][] result = bmm.additive(a, b);
121         for (int i = 0; i < result.length; i++) {
122             for (int j = 0; j < result[0].length; j++) {
123                 System.out.print("\t" + result[i][j]);
124             }
125             System.out.println();
126         }
127         System.out.println("substract two matrix");
128         int[][] result1 = bmm.subtraction(a, b);
129         for (int i = 0; i < result1.length; i++) {
130             for (int j = 0; j < result1[0].length; j++) {
131                 System.out.print("\t" + result1[i][j]);
132             }
133             System.out.println();
134         }
135         System.out.println("multiplex one matrix");
136         result = bmm.multiplication_b(a, 3);
137         for (int i = 0; i < result.length; i++) {
138             for (int j = 0; j < result[0].length; j++) {
139                 System.out.print("\t" + result[i][j]);
140             }
141             System.out.println();
142         }
143         System.out.println("multiplex two matrix");
144         result = bmm.multiplication_a(a, b);
145         for (int i = 0; i < result.length; i++) {
146             for (int j = 0; j < result[0].length; j++) {
147                 System.out.print("\t" + result[i][j]);
148             }
149             System.out.println();
150         }
151 
152     }
153 }

 

java实现矩阵基本运算

标签:public   class   row   print   one   tip   矩阵乘法   矩阵   nal   

原文地址:http://www.cnblogs.com/woyouyihujiu/p/7624606.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!