数据结构与算法(3)——矩阵的加、乘、转置运算实现
来源:互联网 发布:淘宝聚划算团购每一天 编辑:程序博客网 时间:2024/05/01 03:58
定义:由 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阶矩阵的加、乘、转置运算 * * @param args */ 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 (int i = 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 (int i = 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 (int i = 0; i < r.length; i++) { for (int j = 0; j < r[i].length; j++) { System.out.print(r[i][j] + "\t"); } System.out.println(); } } // 矩阵相加 public int[][] matrix_add(int[][] a, int[][] b) { int[][] c = new int[a.length][a[0].length]; if (inputLegal(a, b, TYPE_ADD)) {// 只有同型矩阵才能相加 for (int i = 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; } // 矩阵相乘 public int[][] matrix_mul(int[][] a, int[][] b) { int[][] d = new int[a.length][b[0].length]; if (inputLegal(a, b, TYPE_MUL)) {// 两个矩阵的乘法仅当第一个矩阵A的行数和另一个矩阵B的列数相等时才能定义 for (int i = 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的标记 */ int num = 0; for (int k = 0; k < a[i].length; k++) { num += a[i][k] * b[k][j]; } d[i][j] = num; } } } return d; } //矩阵转置 public int[][] matrix_tran (int[][] a) { //矩阵A的行换成同序数的列所得到的新矩阵称为A的转置矩阵 int[][] e = new int[a[0].length][a.length]; for (int i = 0; i < a.length; i++) { for (int j = 0; j< a[0].length; j++) { e[j][i] = a[i][j]; } } return e; } // 矩阵类型校验 public boolean inputLegal(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; }}
期待你的更高效代码!
0 0
- 数据结构与算法(3)——矩阵的加、乘、转置运算实现
- 性代数矩阵论——矩阵的基本运算——加、减、取负、乘、数乘、转置
- 【算法】矩阵 的 加、乘、转置
- 一元多项式的运算(加、减、乘)C 实现
- 矩阵算法----------利用随机数组的特性来定义矩阵,并进行加、乘、置换的运算
- 矩阵运算(加,减,乘,除,快速幂)
- java通过矩阵类实现矩阵的加减乘运算
- 算法导论—矩阵链乘C/C++实现
- 利用AMPL实现矩阵的加、乘和求逆
- 用链表实现一元多项式的加、减、乘、求导运算
- matlab-线性代数 加,减,乘(变量与数字矩阵)
- 三元组十字链表下稀疏矩阵的加、转、乘实现
- 数据结构课程设计:稀疏矩阵(加、减、乘、求逆矩阵)
- 数据结构与算法(Java描述)-15、稀疏矩阵以及稀疏矩阵的三元组实现
- linux下的shell运算(加、减、乘、除)
- linux下的shell运算(加、减、乘、除)
- Java算法3--动态规划算法实现矩阵连乘
- Java实现的矩阵类及矩阵的转置,加减乘和矩阵求逆
- 回归CSDN
- QQ授权网站进行登录~php篇
- windows 和 Linux 创建都怎么创建符号连接
- 公共Dialog
- Intent中的四个重要属性——Action、Data、Category、Extras
- 数据结构与算法(3)——矩阵的加、乘、转置运算实现
- rz,sz命令的安装
- Xcode7 出现 linker command failed with exit code 1 (use -v to see invocation)解决方法
- Xcode_离线文档安装
- spring mvc 简介与例程
- 数据结构总结
- MySQL导入.sql文件及常用命令
- JavaScript let (EcmaScript 6 let), JavaScript 局部变量
- 成为Java GC专家(4)—Apache的MaxClients参数详解及其在Tomcat执行FullGC时的影响