您的位置:首页 > 编程语言 > Java开发

基本矩阵运算的Java实现

2012-09-18 10:36 543 查看
一: 矩阵的加法与减法
规则:矩阵的加法与减法要求两个矩阵的行列完全相等,方可以完成两个矩阵的之间的运算。
举例说明如下



二:矩阵的乘法
规则:矩阵的乘法要求两个矩阵符合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(); 		}	 	} }


本文出自 “流浪的鱼” 博客,请务必保留此出处http://gloomyfish.blog.51cto.com/8837804/1400332
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: