定义:由m × n 个数aij排成的m行n列的数表称为m行n列的矩阵,简称m × n矩阵;在编程语言中可以当做二维数组来处理;
加减法:同型矩阵之间
乘法:两个矩阵的乘法仅当第一个矩阵A的列数和另一个矩阵B的行数相等时才能定义。如A是m×n矩阵和B是n×p矩阵,它们的乘积C是一个m×p矩阵;
转置:把矩阵A的行换成同序数的列所得到的新矩阵称为A的转置矩阵;
详细的运算及原理可以百度一下;
如下是完整的Java代码实现:
package algorithm;
public class Matrix {
public final int TYPE_ADD = 1;
public final int TYPE_MUL = 2;
/**
* 矩阵类,实现n阶矩阵的加、乘、转置运算
*
* @paramargs
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[][] a = { { 1, 2 }, { 2, 3 } };
int[][] b = { { 4, 5 }, { 6, 7 } };
int[][] aa = new int[][]{{1,0,2},{-1,3,1}};
int[][] bb = new int[][]{{3,1}, {2,1},{1,0}};
Matrix m = new Matrix();
System.out.println("两矩阵相加:");
int[][] r = m.matrix_add(a, b);
for (inti = 0; i for (int j = 0; j < r[i].length; j++) { System.out.print(r[i][j] + "\t"); } System.out.println(); } System.out.println("两矩阵相乘:"); r = m.matrix_mul(aa, bb); for (inti = 0; i for (int j = 0; j < r[i].length; j++) { System.out.print(r[i][j] + "\t"); } System.out.println(); } System.out.println("矩阵转置:"); r = m.matrix_tran(a); for (inti = 0; i for (int j = 0; j < r[i].length; j++) { System.out.print(r[i][j] + "\t"); } System.out.println(); } } // 矩阵相加 publicint[][] matrix_add(int[][] a, int[][] b) { int[][] c = new int[a.length][a[0].length]; if (inputLegal(a, b, TYPE_ADD)) {// 只有同型矩阵才能相加 for (inti = 0; i for (int j = 0; j < a[i].length; j++) {// j控制列c[i][j] = a[i][j] + b[i][j]; } } } return c; } // 矩阵相乘 publicint[][] matrix_mul(int[][] a, int[][] b) { int[][] d = new int[a.length][b[0].length]; if (inputLegal(a, b, TYPE_MUL)) {// 两个矩阵的乘法仅当第一个矩阵A的行数和另一个矩阵B的列数相等时才能定义 for (inti = 0; i for (int j = 0; j < b[i].length; j++) {// 最终结果矩阵为B的列 /* * 罗列系数之后会发现如下规律,a的行标记随i,b的列标记随j,而a的列标记和b的行标记一样,且从0到n, * 其中n为a的列数,故还需要一个变量k来循环控制这个从0到n的标记 */ intnum = 0; for (int k = 0; k < a[i].length; k++) { num += a[i][k] * b[k][j]; } d[i][j] = num; } } } return d; } //矩阵转置 publicint[][] matrix_tran (int[][] a) { //矩阵A的行换成同序数的列所得到的新矩阵称为A的转置矩阵int[][] e = new int[a[0].length][a.length]; for (inti = 0; i for (int j = 0; j< a[0].length; j++) { e[j][i] = a[i][j]; } } return e; } // 矩阵类型校验 publicbooleaninputLegal(int[][] a, int[][] b, int type) { boolean flag = true; if (type == TYPE_ADD) { if (a.length != b.length || a[0].length != b[0].length) { flag = false;// 判断是否为同型矩阵 } } if (type == TYPE_MUL) { if (a.length != b[0].length) { flag = false;// 判断一个矩阵的行与另一个矩阵的列是否相等 } } return flag; } }