基本矩阵运算的Java实现

基本矩阵运算的Java实现

分类: 图像处理 2537人阅读 评论(3) 收藏 举报
javamatrixparametersstringclassnull

一: 矩阵的加法与减法

规则:矩阵的加法与减法要求两个矩阵的行列完全相等,方可以完成两个矩阵的之间的运算。

举例说明如下


二:矩阵的乘法

规则:矩阵的乘法要求两个矩阵符合A(mx k),  B( k x n)即矩阵A的列数与矩阵B的行数相等,否

则无法完成矩阵运算。举例说明如下:


Java代码如下:

[java] view plaincopy
  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.                 legal = false;  
  99.             }  
  100.         }   
  101.         else if(type == OPERATION_MUL)  
  102.         {  
  103.             if(a[0].length != b.length) {  
  104.                 legal = 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[][]{{78}, {65}};  
  117.         BasicMatrixMath bmm = new BasicMatrixMath();  
  118.           
  119.         System.out.println("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.                 System.out.print("\t" + result[i][j]);  
  124.             }  
  125.             System.out.println();  
  126.         }  
  127.           
  128.         System.out.println("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.                 System.out.print("\t" + result[i][j]);  
  133.             }  
  134.             System.out.println();  
  135.         }  
  136.           
  137.         System.out.println("multiplex one matrix");  
  138.         result = bmm.multiplication(a, 3);  
  139.         for(int i=0; i<result.length; i++) {  
  140.             for(int j=0; j<result[0].length; j++) {  
  141.                 System.out.print("\t" + result[i][j]);  
  142.             }  
  143.             System.out.println();  
  144.         }  
  145.           
  146.         System.out.println("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.                 System.out.print("\t" + result[i][j]);  
  151.             }  
  152.             System.out.println();  
  153.         }     
  154.     }  
  155. }  

转载于:https://www.cnblogs.com/jamesf/p/4751601.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/432725.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

json返回页面读取data里的值都是object_【一】尤大神都说Vite香,让我来手把手分析Vite原理...

戳蓝字"前端优选"关注我们哦&#xff01;一.什么是Vite&#xff1f;法语Vite(轻量&#xff0c;轻快)vite 是一个基于 Vue3单文件组件的非打包开发服务器&#xff0c;它做到了本地快速开发启动、实现按需编译、不再等待整个应用编译完成的功能作用。对于Vite的描述&am…

e记法 python 底数_备战python二级

明天考试去&#xff0c;滚吧提醒与分值&#xff1a;1*40&#xff08;选择&#xff09;5*3&#xff08;填空&#xff09;101520比如今年的一个题目是要求随机抽一个手机品牌&#xff0c;这道题目的关键点在于你要使用seed()函数覆盖原来的给定的种子seed(1)&#xff0c;因为要求…

V210 UART TX 流程

1. 虽然V210的uart驱动是平台总线设备驱动模型&#xff0c;但实际上他还是以字符设备驱动存在&#xff0c;那么分析他的发送流程&#xff0c; 首先找到他的file_operations的write函数 drivers/char/tty_io.c tty_write(struct file *file, const char __user *buf, size_t cou…

浙江省计算机二级办公软件高级应用分值,浙江计算机二级高级办公软件word题分值是多少...

计算机文化基础试题集(浙江省计算机办公室软件等级考试悬赏分&#xff1a;10 - 离问题结束还有 12 天 23 小时一、选择题((1)&#xff5e;(30)每小题1分&#xff0c;(31)&#xff5e;(55)每小题2分&#xff0c;共80分)下列各题 A) 、B)、C)、D)四个选项中&#xff0c;只有一个选…

pppd 源码修改1

1. pppd拨号成功后&#xff0c;会将解析到的dns服务器IP地址&#xff0c;写入/etc/ppp/resolv.conf 这样的话&#xff0c;gethostbyname_r并不会识别&#xff0c;并且&#xff0c;如果有启动两路pppd的话&#xff0c;后面一路会将resolv.conf文件重写。 因此&#xff0c;这块代…

location.href属于重定向还是转发_servlet2 单元测试、转发、重定向

解决服务端接收数据乱码问题。服务器默认采用 ISO8859-1 编码响应内容。// 1req.setCharacterEncoding("utf-8");// 2 byte[] bytes req.getParameter("username").getBytes("iso-8859-1"); System.out.println("username:" n…

如何在CSDN博客中的所贴的代码进行【代码块】显示

笔者最近很喜欢在csdn发一些技术博客&#xff0c;可是看了别人的博客&#xff0c;有代码的地方总是可以显示出代码块&#xff0c;而自己贴上去的代码总是没有。刚开始还以为CSDN博客里面的编辑功能有&#xff0c;可是找来找去都没有找到。后来才发现原来需要自己在源码上进行修…

学安全工程用不用计算机,上重点大学的末流专业,不如上普通大学的重点专业,你赞成吗?...

上重点大学的末流专业&#xff0c;不如上普通大学的重点专业&#xff0c;你赞成吗&#xff1f;首先&#xff0c;我对这个说法不赞成&#xff0c;这个说法是错误的。可以说&#xff1a;基本上说的是对的也是错的。说对的&#xff0c;是这个思路是对的&#xff0c;说错&#xff0…

ORACLE复杂查询之连接查询

一、传统的连接查询 1、交叉连接&#xff1a;返回笛卡尔积 WHERE中限定查询条件&#xff0c;可以预先过滤掉掉不符合条件的记录&#xff0c;返回的只是两个表中剩余记录&#xff08;符合条件的记录&#xff09;的笛卡尔积。 2、内连接&#xff1a;参与连接的表地位平等&#xf…

12306加密传输_三大运营商发5G消息白皮书:短消息服务升级,支持加密传输

4月8日&#xff0c;中国电信、中国移动、中国联通联合举行线上发布会&#xff0c;共同发布《5G消息白皮书》。《白皮书》阐述了5G消息的核心理念&#xff0c;明确了相关业务功能及技术需求&#xff0c;提出了对5G消息生态建设的若干构想。据介绍&#xff0c;5G消息业务是终端原…

winpe修复计算机无法启动,用winpe来修复无法进入系统的问题

很多网友都碰到过有的时候无法进入系统&#xff1f;不知道该怎么操作&#xff0c;U大师告诉你一个方法&#xff1a;那就是用winpe来修复无法进入系统的问题,可以先在硬盘上安装一个PE维护系统&#xff0c;重启电脑时在多重启动菜单选择Windows PE&#xff0c;系统便会自动进入P…

详细解说 STL 排序(Sort)

0 前言: STL&#xff0c;为什么你必须掌握 对于程序员来说&#xff0c;数据结构是必修的一门课。从查找到排序&#xff0c;从链表到二叉树&#xff0c;几乎所有的算法和原理都需要理解&#xff0c;理解不了也要死记硬背下来。幸运的是这些理论都已经比较成熟&#xff0c;算法也…

ad9生成坐标文件_GROMACS各种文件格式介绍

CPT文件&#xff1a;该文件为模拟断点文件(check point&#xff0c;.cpt)。该文件为模拟过程固定时间间隔产生&#xff0c;保存模拟系统所有信息。该文件一部分可以在能量文件(.edr)找到&#xff0c;一部分可以在双精度轨迹文件(.trr)中找到。如果模拟因为外界条件中断&#xf…

广东计算机电子学校,广东省电子职业技术学校

开设6大专业类别&#xff0c;十九个专业方向&#xff0c;其中电子技术应用是全国首批示范专业和省重点建设专业&#xff0c;计算机及应用是省重点建设专业。广东省电子职业技术学校创建于1974年&#xff0c;主管部门是广东省教育厅&#xff0c;是我省创办最早的电子信息(IT)类省…

为什么不能睁一只眼闭一只眼_自媒体人上哪里找非常多的原创短视频素材?我为什么一定要你做原创?...

现在短视频非常火&#xff0c;很多人都想拍摄3-5分钟的视频&#xff0c;因为各个平台对于视频的收益补贴简直太大了&#xff0c;比文章大多了&#xff0c;目的就是为了让大家多去创作视频。但是创作视频真的不容易&#xff0c;于是很多人就是想起了搬运&#xff0c;把某个人在A…

计算机控制的点火系统由,第八节(点火系统)

1、点火系统作用(1)将蓄电池电压12V&#xff0c;转换成点火系统需要极高的电压,并分配到各缸。(2)适时地点燃发动机气缸内的空气和燃油的混合气体。相关阅读&#xff1a;浅谈汽车电子稳定程序系统(ESP)驱动的革命 本田SH-AWD四轮驱动详解看丰田专家如何解释发动机转速升高2、对…

搭建Windows Embedded Compact 7开发环境

大家期盼已久的WindowsEmbedded Compact 7是微软2010年发布的第七代嵌入式操作系统&#xff01;微软可谓对它寄予很大的希望&#xff0c;所以连名字都改了。以下就简称WEC7吧。WEC7 的最大亮点就是引入了Silverlight 使用Expression blend 3 作为UI的首选开发&#xff0c;当然这…

华中师范大学计算机考研论坛,2020年华中师范大学计算机考研经验分享

本人是2020年考入华中师范大学计算机专业硕士的学生&#xff0c;已成功上岸&#xff0c;下面给大家分享一下我的个人考研经验。我为什么考研我从大一就已经确定要考研&#xff0c;毕竟自己错过了高考这样的机会&#xff0c;希望自己的人生能再一次重新洗牌&#xff0c;不受人冷…

ELF文件和BIN文件

文件的内容&#xff1a;1. BIN文件是 raw binary 文件&#xff0c;这种文件只包含机器码。2. ELF文件除了机器码外&#xff0c;还包含其它额外的信息&#xff0c;如段的加载地址&#xff0c;运行地址&#xff0c;重定位表&#xff0c;符号表等。所以ELF文件的体积比对应的BIN文…

计算机辅助项目管理课程方案,天津大学计算机辅助管理研究生课程简介

8 / 14【育明教育】中国考研考博专业课辅导第一品牌 官方网站&#xff1a;http://www.doczj.com/doc/e25fb4dad4d8d15abe234eb2.html8《翻译硕士英语》重点考察考生的英语水平&#xff0c;内容包括&#xff1a;词汇语法、阅读理解、英语写作等&#xff0c; 总分 100 分。 二、考…