定义:由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<r.length; 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<r.length; 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<r.length; 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<a.length; i++) {// 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<a.length; i++) {// 最终结果矩阵为A的行
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<a.length; 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;
}
}。