基本矩阵运算的Java实现
一: 矩阵的加法与减法
规则:矩阵的加法与减法要求两个矩阵的行列完全相等,方可以完成两个矩阵的之间的运算。
举例说明如下
二:矩阵的乘法
规则:矩阵的乘法要求两个矩阵符合A(mx k), B( k x n)即矩阵A的列数与矩阵B的行数相等,否
则无法完成矩阵运算。举例说明如下:
Java代码如下:
1. package pet.shop;
2.
3. public class BasicMatrixMath {
4. public final static int OPERATION_ADD = 1;
5. public final static int OPERATION_SUB = 2;
6. public final static int OPERATION_MUL = 4;
7.
8. /**
9. * To be able to add two matrices, they must be of the same size
10. * @param matrixa
11. * @param matrixb
12. */
13. public int[][] add(int[][] matrixa, int[][] matrixb) {
14. if(legalOperation(matrixa, matrixb, OPERATION_ADD)) {
15. for(int i=0; i<matrixa.length; i++) {
16. for(int j=0; j<matrixa[0].length; j++) {
17. matrixa[i][j] = matrixa[i][j] + matrixb[i][j];
18. }
19. }
20. }
21. return matrixa;
22. }
23.
24. /**
25. * To be able to substract two matrices, they must be of the same size
26. *
27. * @param matrixa
28. * @param matrixb
29. */
30. public int[][] substract(int[][] matrixa, int[][] matrixb) {
31. if(legalOperation(matrixa, matrixb, OPERATION_SUB)) {
32. for(int i=0; i<matrixa.length; i++) {
33. for(int j=0; j<matrixa[0].length; j++) {
34. matrixa[i][j] = matrixa[i][j] - matrixb[i][j];
35. }
36. }
37. }
38. return matrixa;
39. }
40.
41. /**
42. *
43. * @param matrixa
44. * @param matrixb
45. */
46. public int[][] multiplication(int[][] matrixa, int[][] matrixb) {
47. if(legalOperation(matrixa, matrixb, OPERATION_SUB)) {
48. int[][] result = new int[matrixa.length][matrixb[0].length];
49. for(int i=0; i<matrixa.length; i++) {
50. for(int j=0; j<matrixb[0].length; j++) {
51. // i will complete this tomorrow @2012/09/17
52. result[i][j] = calculateSingleResult(matrixa, matrixb, i, j);
53. }
54. }
55. return result;
56. }
57. else
58. {
59. return null;
60. }
61. }
62.
63. private int calculateSingleResult(int[][] matrixa, int[][] matrixb, int row, int col) {
64. int result = 0;
65. for(int k=0; k<matrixa[0].length; k++) {
66. result += matrixa[row][k] * matrixb[k][col];
67. }
68. return result;
69. }
70.
71. /**
72. *
73. * @param matrixa
74. * @param b
75. */
76. public int[][] multiplication(int[][] matrixa, int b) {
77. for(int i=0; i<matrixa.length; i++) {
78. for(int j=0; j<matrixa[0].length; j++) {
79. matrixa[i][j] = matrixa[i][j] * b;
80. }
81. }
82. return matrixa;
83. }
84.
85. /**
86. * validate whether the parameters is valid parameters.
87. *
88. * @param a
89. * @param b
90. * @param type
91. * @return
92. */
93. private boolean legalOperation(int[][] a, int[][] b, int type) {
94. boolean legal = true;
95. if(type == OPERATION_ADD || type == OPERATION_SUB)
96. {
97. if(a.length != b.length || a[0].length != b[0].length) {
98. false;
99. }
100. }
101. else if(type == OPERATION_MUL)
102. {
103. if(a[0].length != b.length) {
104. false;
105. }
106. }
107. return legal;
108. }
109.
110. /**
111. * test code here !!!!
112. * @param args
113. */
114. public static void main(String[] args) {
115. int[][] a = new int[][]{{1,2},{3,4}};
116. int[][] b = new int[][]{{7, 8}, {6, 5}};
117. new BasicMatrixMath();
118.
119. "addition two matrix");
120. int[][] result = bmm.add(a, b);
121. for(int i=0; i<result.length; i++) {
122. for(int j=0; j<result[0].length; j++) {
123. "\t" + result[i][j]);
124. }
125. System.out.println();
126. }
127.
128. "substract two matrix");
129. result = bmm.substract(a, b);
130. for(int i=0; i<result.length; i++) {
131. for(int j=0; j<result[0].length; j++) {
132. "\t" + result[i][j]);
133. }
134. System.out.println();
135. }
136.
137. "multiplex one matrix");
138. 3);
139. for(int i=0; i<result.length; i++) {
140. for(int j=0; j<result[0].length; j++) {
141. "\t" + result[i][j]);
142. }
143. System.out.println();
144. }
145.
146. "multiplex two matrix");
147. result = bmm.multiplication(a, b);
148. for(int i=0; i<result.length; i++) {
149. for(int j=0; j<result[0].length; j++) {
150. "\t" + result[i][j]);
151. }
152. System.out.println();
153. }
154. }
155. }