当前位置:文档之家› 矩阵的加、乘、转置运算实现

矩阵的加、乘、转置运算实现

矩阵的加、乘、转置运算实现
矩阵的加、乘、转置运算实现

定义:由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;

}

}

相关主题
文本预览
相关文档 最新文档