一: 矩阵的加法与减法
规则:矩阵的加法与减法要求两个矩阵的行列完全相等,方可以完成两个矩阵的之间的运算。
举例说明如下
二:矩阵的乘法
规则:矩阵的乘法要求两个矩阵符合A(mx k), B( k x n)即矩阵A的列数与矩阵B的行数相等,否
则无法完成矩阵运算。举例说明如下:
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(); } } }