基本矩阵运算的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…

item name=android:width,Android:形状中的笔划创建笔划宽度的边距

我创建了一个矩形形状&#xff0c;以便将其用作列表项背景。 我的问题是笔划不遵循视图边框但是让笔划宽度为/-。这是我的形状的xml&#xff1a;<?xml version"1.0" encoding"utf-8"?>android:innerRadiusRatio"1"android:shape"re…

shell脚本报错:[: =: unary operator expected

shell脚本报错&#xff1a;"[: : unary operator expected" 在匹配字符串相等时&#xff0c;我用了类似这样的语句&#xff1a; if [ $STATUS "OK" ]; then echo "OK" fi 在运行时出现了 [: : unary operator expected 的错误&#xff…

discuz 标签详解

Discuz 模板标签说明 Discuz! 的模板采用近似 PHP 表达式的语法&#xff0c;基本都是可识别的HTML&#xff0c;但涉及到变量和动态内容时&#xff0c;基本形式下: <!-{ 代码内容 }-> 逻辑元素包围符&#xff0c;该符号用于包含条件和循环元素 条件判断 <!-{if …

ppp在linux下的编译和安装

我的编程环境是vmware fedora9, ARM目标板为ATMEL 9G45&#xff0c;LINUX内核2.6.30&#xff0c; GPRS模块为TELIT公司的GC864-DUAL-V2&#xff0c;使用3线制串口连接&#xff08;TXD RXD GND&#xff09; 1.修改2.6.30内核选项 &#xff0c;make menuconfigDevice drivers -…

计算机图形学在线作业,电子科技16秋《计算机图形学》在线作业3 辅导资料

16秋《计算机图形学》在线作业3一、单选题(共 10 道试题&#xff0c;共 50 分。)1. 在下列有关曲线和曲面概念的叙述语句中&#xff0c;错误的论述为____。. 实体模型和曲面造型是系统中常用的主要造型方法&#xff0c;曲面造型是用参数曲面描述来表示一个复杂的物体. 在曲线和…

eins

模拟9 T1 &#xff08;COGS上也有&#xff0c;链接http://218.28.19.228/cogs/problem/problem.php?pid1426&#xff09; 题目描述 f0 0&#xff0c;f1 1&#xff0c; fn fn-1 fn-2&#xff08;i > 2&#xff09;&#xff0c;求fn mod p 分析 反正就是矩阵乘法吧&#…

V210 UART 整体流程

2.6内核以后&#xff0c;多数驱动都是以平台总线的方式编写&#xff0c;因此对于这种类型的驱动&#xff0c;实际就是要分成两个流程来分析 平台总线设备的构造&#xff0c;平台总线驱动的构造。 下面先分析平台总线设备的构造&#xff0c;平台总线设备里是硬件相关的信息&am…

安徽大学计算机考研学硕2019初试单科线,安徽大学2019年考研复试分数线已公布...

2019考研国家线及各大院校复试分数线已公布&#xff01;考生们自从得知考研成绩后都在忐忑的等待着。下面中公考研小编整理了“安徽大学2019年考研复试分数线已公布”相关内容&#xff0c;希望能对2019考研考生们有所帮助。点击查看&#xff1a;2019考研国家线一、第一志愿报考…

1 jquery对checkbox的简单操作

//全选和全不选 votefunction selectAll(){ if($(":checkbox").prop(checked)){ //$(":checkbox").removeAttr(checked);//attr不兼容了jquery1.6以上 $(":checkbox").prop(checked,false); }else{ $(":checkbox").prop(c…

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;只有一个选…

MVC中JSON字符长度超出限制的异常处理

异常信息如下&#xff1a; 使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了为 maxJsonLength 属性设置的值。这个异常是在执行MVC中的JsonResult的时抛出的&#xff0c;根据异常的Message得知是序列化的字符串超出了maxJsonLength的限制。并得…

cookie 百科_cookie是什么

很多朋友并不了解cookie是什么&#xff0c;Cookie&#xff0c;有时也用其复数形式 Cookies&#xff0c;指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)。定义于 RFC2109 和 2965 中的都已废弃&#xff0c;最新取代的规范是 RFC6265…

pppd 源码修改1

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

学校计算机专业春联大全带横批,对联大全带横批_春节对联大全_新年春联合集...

上联&#xff1a;旧岁又添几个喜 下联&#xff1a;新年更上一层楼 横批&#xff1a;辞旧迎新上联&#xff1a;绿竹别其三分景 下联&#xff1a;红梅正报万家春 横批&#xff1a;春回大地上联&#xff1a;民安国泰逢盛世 下联&#xff1a;风调雨顺颂华年 横批&#xff1a;民泰国…

2014腾讯实习生招聘软件开发类附加题

附加题&#xff1a; 31. 一个珠宝商甲要鉴定41克以下的宝石&#xff08;40克及以下的任意重量&#xff09;&#xff0c;商甲只带一个天平和四个砝码&#xff0c;请问带哪四个砝码&#xff1f; 32. 一道有关utf-8编码的题。给了个例子&#xff1a;“我”的Unicode码是xxxx, 其ut…

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;可是找来找去都没有找到。后来才发现原来需要自己在源码上进行修…