Java实现矩阵的加、减、乘、数乘、转置、幂运算

article/2025/7/20 5:57:24

Java实现矩阵的加、减、乘、数乘、转置、幂运算

首先需要一个矩阵对应的类 Matrix.
命名为Matrix

import java.util.Arrays;
/*** @author yiran* @creat 2021-11-26-13:58*/
public class Matrix{// 矩阵private double[][] matrix;// m x n private int m;private int n;public double[][] getMatrix() {return matrix;}public Matrix() {}public Matrix(double[][] matrix) {this.matrix = matrix;this.m=matrix.length;this.n=matrix[0].length;}public Matrix(int m, int n) {this.matrix=new double[m][n];this.m=m;this.n=n;}public void setMatrix(double[][] matrix) {this.matrix = matrix;this.m=matrix.length;this.n=matrix[0].length;}public int getM() {return m;}public void setM(int m) {this.m = m;}public int getN() {return n;}public void setN(int n) {this.n = n;}//  打印矩阵public void print(){System.out.println("------------------结果-------------------");for (int i=0;i<m;i++){for (int j=0;j<n;j++){System.out.print(matrix[i][j]+"   ");}System.out.println();}System.out.println("----------------------------------------");}@Overridepublic String toString() {return "Matrix{" +"matrix=" + Arrays.toString(matrix) +'}';}
}

之后就是操作矩阵进行运算的工具类 Matrixs.
注意要先复制上面的Matrix矩阵类,再复制下面的工具类,然后将导入的包导一下即可


/*** 方阵的辅助类* @author yiran* @creat 2021-11-26-14:08*/
public class Matrixs{/*** 实现矩阵的加法* @param p1 矩阵1* @param p2 矩阵2* @return 如果矩阵不可加,返回null*/public static Matrix plus(Matrix p1,Matrix p2){if (p1!=null&&p2!=null){if (p1.getM()== p2.getM()&&p1.getN()== p2.getN()){double[][] m1 = p1.getMatrix();double[][] m2 = p2.getMatrix();// 矩阵可加的条件满足// 创建矩阵Matrix m=new Matrix();double [][] m_data=new double[p1.getM()][p1.getN()];for (int i=0;i< p1.getM();i++){// a[0]for (int j=0;j< p1.getN();j++){m_data[i][j]=m1[i][j]+m2[i][j];}}m.setMatrix(m_data);return m;}else{// 矩阵不可加System.out.println("矩阵不可加!");return null;}}return null;}/*** 矩阵减法* @param p1* @param p2* @return 如果矩阵不可加,返回null*/public static Matrix minus(Matrix p1,Matrix p2){if (p1!=null&&p2!=null){if (p1.getM()== p2.getM()&&p1.getN()== p2.getN()){double[][] m1 = p1.getMatrix();double[][] m2 = p2.getMatrix();// 矩阵可加的条件满足// 创建矩阵Matrix m=new Matrix();double [][] m_data=new double[p1.getM()][p1.getN()];for (int i=0;i< p1.getM();i++){// a[0]for (int j=0;j< p1.getN();j++){m_data[i][j]=m1[i][j]-m2[i][j];}}m.setMatrix(m_data);return m;}else{// 矩阵不可加System.out.println("矩阵不可减!");return null;}}return null;}/*** 实现矩阵的乘法* @param p1 矩阵1* @param p2 矩阵2* @return 如果矩阵不可乘,返回null*/public static Matrix mutil(Matrix p1,Matrix p2){if (p1!=null&&p2!=null){// 判断矩阵是否可以相乘if (p1.getN()==p2.getM()){double[][] m1 = p1.getMatrix();double[][] m2 = p2.getMatrix();// 矩阵可乘double [][] m =new double[p1.getM()][p2.getN()];for (int i=0;i<p1.getM();i++){for (int j=0;j<p2.getN();j++){double a=0;// 核心for (int k=0;k<p1.getN();k++){a+=m1[i][k]*m2[k][j];}m[i][j]=a;}}return new Matrix(m);}else{// 矩阵不可乘System.out.println("矩阵不可乘!");return null;}}return null;}// 矩阵转置public static Matrix reverse(Matrix m){if(m!=null){Matrix new_m=new Matrix();double[][] m_data = m.getMatrix();double[][] new_m_data=new double[m.getN()][m.getM()];for (int i=0;i<m.getN();i++){for (int  j=0;j<m.getM();j++){new_m_data[i][j]=m_data[j][i];}}m.setMatrix(new_m_data);return m;}return null;}/*** 矩阵的幂运算* @param m 矩阵对象* @param count  运算次数* @return  如果矩阵不是方阵,则矩阵无法进行*/public static Matrix  mutils(Matrix m,int count){if (m!=null&&m.getM()==m.getN()){double[][] matrix = m.getMatrix();Matrix result = new Matrix(matrix);// [A]^countfor (int i=0;i<count-1;i++){result = Matrixs.mutil(result,new Matrix(matrix));}return result;}return  null;}// 矩阵数乘public static Matrix numtil(Matrix m,double num){if(m!=null){Matrix new_m=new Matrix();double[][] m_data = m.getMatrix();double[][] new_m_data=new double[m.getM()][m.getN()];for (int i=0;i<m.getM();i++){for (int  j=0;j<m.getN();j++){new_m_data[i][j] = num * m_data[i][j];}}new_m.setMatrix(new_m_data);return new_m;}return null;}}

然后通过调用工具类中的方法就可以进行矩阵的运算了.
.如果只是需要操作进行运算,复制上面的代码就够了.


如果只是要通过输入的数值只进行矩阵乘法的计算,那么本人另外写了一个类,直接用下面的代码,上面的就不需要了,一个类就可以搞定 类名为 MatrixFormulas运行MatrixFormulas 类中的main方法即可开始.

import java.util.Arrays;
import java.util.Scanner;/*** @author yiran* @creat 2021-11-27-11:03*/
public class MatrixFormulas {// 第一个矩阵的m与nprivate static int m1;private static int n1;// 第二个矩阵的m与nprivate static int m2;private static int n2;// 输入的句矩阵数private static boolean count;// 输入流private static Scanner scan;// 矩阵1private static Matrix mat1;// 矩阵2private static Matrix mat2;// 处理输入错误private static boolean flag;// 读取矩阵private static void readFirst(){// 处理输入错误if (flag){scan.nextLine();}while(true){String c=count?"一":"二";System.out.print("请输入第"+c+"个矩阵A的行与列(m n):");String s = scan.nextLine();String[] s1 = s.trim().split(" ");if (s1!=null&&s1.length!=2){System.out.println("输入错误!请重新输入");continue;}//  解析if (count){m1=Integer.parseInt(s1[0]);n1=Integer.parseInt(s1[1]);}else{m2=Integer.parseInt(s1[0]);n2=Integer.parseInt(s1[1]);}double [][] d1=new double[Integer.parseInt(s1[0])][Integer.parseInt(s1[1])];System.out.println("请输入矩阵的数据:");System.out.println("如果遇到要输入多一行的情况,请直接回车");for (int i=0;i<Integer.parseInt(s1[0]);i++){// 一行一行地赋值System.out.print("第"+(i+1)+"行: ");String s2 = scan.nextLine();String[] s3 = s2.trim().split(" ");if (s3.length!=Integer.parseInt(s1[1])){// 再次输入i--;System.out.println("输入格式错误,请重新输入!");continue;}for (int j=0;j<Integer.parseInt(s1[1]);j++){d1[i][j]=Double.parseDouble(s3[j]);}}// 赋值if(count){mat1=new Matrix(d1);break;}else{mat2=new Matrix(d1);break;}}}public static void main(String[] args) {flag=false;scan=new Scanner(System.in);while (true){System.out.println("-----------------矩阵乘法----------------");// 第一次输入count=true;readFirst();// 第二次输入count=false;readFirst();// 计算结果Matrix mutil = Matrixs.mutil(mat1, mat2);mutil.print();System.out.println("----------------------------------------");System.out.print("输入0可以继续:");int i = scan.nextInt();if (i!=0){break;}// 处理输入错误flag=true;}}}/*** 方阵的矩阵类* @author yiran* @creat 2021-11-26-14:08*/
class Matrixs{/*** 实现矩阵的乘法* @param p1 矩阵1* @param p2 矩阵2* @return 如果矩阵不可乘,返回null*/public static Matrix mutil(Matrix p1,Matrix p2){if (p1!=null&&p2!=null){// 判断矩阵是否可以相乘if (p1.getN()==p2.getM()){double[][] m1 = p1.getMatrix();double[][] m2 = p2.getMatrix();// 矩阵可乘double [][] m =new double[p1.getM()][p2.getN()];for (int i=0;i<p1.getM();i++){for (int j=0;j<p2.getN();j++){double a=0;// 核心for (int k=0;k<p1.getN();k++){a+=m1[i][k]*m2[k][j];}m[i][j]=a;}}return new Matrix(m);}else{// 矩阵不可乘System.out.println("矩阵不可乘!");return null;}}return null;}}/*** @author yiran* @creat 2021-11-26-13:58*/
class Matrix{// 矩阵private double[][] matrix;private int m;private int n;public double[][] getMatrix() {return matrix;}public Matrix() {}public Matrix(double[][] matrix) {this.matrix = matrix;this.m=matrix.length;this.n=matrix[0].length;}public Matrix(int m, int n) {this.matrix=new double[m][n];this.m=m;this.n=n;}public void setMatrix(double[][] matrix) {this.matrix = matrix;this.m=matrix.length;this.n=matrix[0].length;}public int getM() {return m;}public void setM(int m) {this.m = m;}public int getN() {return n;}public void setN(int n) {this.n = n;}public void print(){System.out.println("------------------结果-------------------");for (int i=0;i<m;i++){for (int j=0;j<n;j++){System.out.print(matrix[i][j]+"   ");}System.out.println();}System.out.println("----------------------------------------");}@Overridepublic String toString() {return "Matrix{" +"matrix=" + Arrays.toString(matrix) +'}';}
}

编译运行:
注意:如果是在命令行中进行编译的,进入到类对应目录后,执行javac时,
需要指定编码为utf-8,否则会报乱码错误(“因为注释还有输出语句是中文的”),要求编码方式也设置为utf-8,见下面的格式,编译后会多三个class文件

javac -encoding utf-8 MatrixFormulas.java

之后使用java 命令运行即可(不要加上.class的后缀),否则会报无法加载主类的错误

java MatrixFormulas

测试样例
在这里插入图片描述


http://chatgpt.dhexx.cn/article/55UvooJ9.shtml

相关文章

【数理知识】向量数乘,内积,外积,matlab代码实现

序号内容1【数理知识】向量数乘&#xff0c;内积&#xff0c;外积&#xff0c;matlab代码实现2【数理知识】矩阵普通乘积&#xff0c;哈达玛积&#xff0c;克罗内克积&#xff0c;点乘&#xff0c;点积&#xff0c;叉乘&#xff0c;matlab代码实现 文章目录 1. 向量基本形式2. …

Eigen入门系列 —— Eigen::Matrix矩阵基本加减、数乘运算

Eigen入门系列 —— Eigen::Matrix矩阵基本加减、数乘运算 前言程序说明输出结果代码示例 前言 随着工业自动化、智能化的不断推进&#xff0c;机器视觉&#xff08;2D/3D&#xff09;在工业领域的应用和重要程度也同步激增&#xff08;识别、定位、抓取、测量&#xff0c;缺陷…

07-行向量列向量_向量的运算 加法,数乘,减法,转置

行向量和列向量 其实它们非常简单&#xff0c;所谓的行向量就是我们的向量表示&#xff0c;一组数这组数码成一行&#xff0c;那么所谓的列向量呢&#xff1f;就是这组数码成一列而已&#xff0c;那么对于行向量还是列向量&#xff0c;在我们的学习中是并没有区别的&#xff0…

矩阵相乘求解最小数乘次数

矩阵连乘问题&#xff1a; 给定n 个矩阵(A0,A1,....An-1) 其中 Ai 和 Ai1 是可乘的&#xff0c; i0, 1,... , n-2 . 求解计算这n 个矩阵的连乘积A0A1....An-1 。 由于矩阵连乘满足结合律&#xff0c;因此矩阵的乘法可以有多种不同的计算次序&#xff0c;每种计算次序对应不同…

人工智能数学基础-线性代数1:向量及向量加减法与数乘

☞ ░ 老猿Python博文目录░ 一、向量 1.1、向量定义 向量也称为欧几里得向量、几何向量、矢量&#xff0c;指具有大小&#xff08;magnitude&#xff09;和方向的量。它可以形象化地表示为带箭头的线段。箭头所指&#xff1a;代表向量的方向&#xff1b;线段长度&#xff1…

线性代数-向量数乘、点乘意义

Vector 什么是向量基向量向量数乘向量的加法向量点乘 什么是向量 向量是指具有大小和方向的量。它可以形象化地表示为带箭头的线段 箭头所指&#xff1a;代表向量的方向 线段长度&#xff1a;代表向量的大小 向量是线性代数中最基础、最根源的组成部分&#xff0c;向量加法和…

C语言——矩阵计算(转置、加法、减法、数乘、乘法)

使用该计算器可以帮助你快速完成矩阵的简单计算。 #include <stdio.h> void menu() {printf("****************************************************************\n");printf("****************************************************************\n"…

各种乘法的区别 “点积、外积、数乘...等

Ive seen several conventions, including ⋅⋅, ∘∘, ∗∗, ⊗⊗, and ⊙⊙. However, most of these have overloaded meanings (see http://en.wikipedia.org/wiki/List_of_mathematical_symbols). Thus, in my personal experience, the best choice Ive found is: ⊙(\o…

06 ,矩阵的运算:加法运算,数乘,矩阵乘向量,矩阵相乘

1 &#xff0c;矩阵计算 &#xff1a; 加法运算 前提 &#xff1a; 必须同型矩阵之间才可以进行加法运算运算 &#xff1a; 两个 m * n 矩阵相加总结 &#xff1a; 对应元相加 2 &#xff0c;矩阵计算 &#xff1a; 数乘 计算规则 &#xff1a; 3 &#xff0c;矩阵计算 &…

7.进入线性代数的奇妙世界:向量的乘法之数乘

向量的乘法有3种&#xff0c;一是数乘&#xff0c;二是点积&#xff0c;三是叉积。听起来名称有点陌生&#xff0c;别急&#xff0c;接下来一一道来&#xff0c;先讲数乘。 数乘&#xff0c;就是用数字乘以一个向量&#xff0c;或用向量乘以一个数字&#xff0c;两者之间结果相…

【图像特征提取】基于脉冲耦合神经网络(PCNN)实现图像特征提取含Matlab源码

1 简介 脉冲耦合神经网络&#xff08;PCNN——Pulse Coupled Neural Network&#xff09;,由于其非常接近人类大脑的生物神经网络的特性&#xff0c;现已广泛应用在图像处理中&#xff0c;是一种重要的信息处理工具&#xff0c;具有优良的自适应图像分割和自适应特征提取能力。…

CRCNN PCNN

目录 论文阅读前期准备前期知识储备学习目标 论文导读论文研究背景、成果及意义论文泛读论文结构摘要 论文精读CRCNN模型PCNN模型论文总结 论文阅读前期准备 前期知识储备 学习目标 论文导读 论文研究背景、成果及意义 回顾 Bootstrapping 远程监督 多示例学习 分类损失…

传统PCNN算法python实现

传统耦合神经网络&#xff08;pcnn&#xff09;算法的实现&#xff08;python&#xff09;&#xff1a; 参数的设定没有具体参考&#xff0c;这是一篇文献中的解释&#xff1a; # coding:utf-8 # from PIL import Image from pylab import * from scipy import signal as sg…

关系抽取远程监督PCNN:Distant Supervision for Relation Extraction via Piecewise Convolutional Neural Networks

Distant Supervision for Relation Extraction via Piecewise Convolutional Neural Networks 0 前言1 多示例学习2 数据集3 模型架构3.1 向量表示3.2 卷积、分段最大池化与分类3.3 样本选择与损失 5 结语6 参考资料 0 前言 远程监督&#xff08;distant supervision&#xff…

脉冲耦合神经网络(PCNN)的python实现

前言 看了很多人用matlab写的网络,竟然没有python代码。作为正在研究PCNN模型的一名学生,必须安排。 数学模型 打公式太麻烦,直接从截图啦,全连接模型,如下图1。 python代码 """ Created on Sun Jun 6 16:48:38 2021PCNN全连接 """ impor…

pytorch关系抽取框架OpenNRE源码解读与实践:PCNN ATT

pytorch关系抽取框架OpenNRE源码解读与实践&#xff1a;PCNN ATT 0 前言1 OpenNRE整体架构2 PCNNATT 模型架构2.1 PCNN Encoder2.2 Bag Attention 结语参考资料 0 前言 OpenNRE是清华大学推出的开源关系抽取框架&#xff0c;针对命名实体识别&#xff0c;句子级别的关系抽取&a…

【MATLAB图像融合】[14]PCNN脉冲耦合神经网络代码分享

本代码转自厦门大学屈小波教授15年的DEMO代码。 % Demo for PCNN in image processing % --------- % Author: Qu Xiao-Bo <qxb_xmu [at] yahoo.com.cn> Aug.28,2008 % Postal address: % Rom 509, Scientific Research Building # 2,Haiyun Campus, Xi…

PCNN探究实验

1.常规PCNN&#xff0c;采用kin的连接权矩阵&#xff0c;并固定参数beta 0.2 alph 0.22 Ve 50 周期为15 初次迭代&#xff0c;图像信息熵最大&#xff0c;但效果不是最好的&#xff0c;在周期临界位置的不同迭代次数有不同的分割效果&#xff0c;第11次迭代效果最好。 因此…

脉冲耦合神经网络(PCNN)的matlab实现

基本脉冲耦合神经网络的matlab实现 Gray 首先发现了猫的初生视觉皮层有神经激发相关振荡现象&#xff0c;并将其研究结果发在了 Nature 杂志上。与此同时&#xff0c; Eckhom 也根据猫的大猫皮层的同步脉冲发放现象&#xff0c;提出了脉冲发现的连接模式&#xff0c;将开拓性地…

【MATLAB图像融合】[18]双通道PCNN模型实现图像融合

引言 简单回顾一下以往的单通道PCNN模型&#xff0c;原理与实现步骤&#xff1a; 13、单通道PCNN原理 14、单通道PCNN融合代码实现 一、单通道PCNN 图1 单通道PCNN&#xff1a; 在单通道PCNN中&#xff0c;对于一个神经元的一次迭代过程正如图1描述&#xff1a; ①、F&#…