热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[Java]矩阵的加减和转置

在数学上,矩阵是由方程组的系数及常数所构成的方阵.用在解析性方程组上既方便又直观.生活中通过矩阵多因素探索解决问题.要点:  1.使用二维数组表示矩阵  2.对矩阵的操作前,需要进

在数学上, 矩阵是由方程组的系数及常数所构成的方阵.用在解析性方程组上既方便又直观.生活中通过矩阵多因素探索解决问题.

要点:

    1.使用二维数组表示矩阵

    2.对矩阵的操作前,需要进行合法性验证,判断他们是否能进行运算

/***
* 矩阵的加减和转置
* @author Power
*
*/
public class TextMatrix {
//矩阵数据
private double[][] data;
//默认构造函数
public TextMatrix() {

}
//初始化矩阵
public TextMatrix(double[][] data) {
if(CanTransToMatrix(data)) {
this.data = this.cloneArray(data);
}
}
//克隆一个二维数组
private double[][] cloneArray(double[][] data2) {
// TODO Auto-generated method stub
if(data == null) {
return null;
}
return (double[][])data.clone();
}
//判断二维数组能够转换成矩阵
public static boolean CanTransToMatrix(double[][] data) {
if(data == null) {
return false;
}
for(int i = 0; i if(data[i].length != data[i+1].length) {
return false;
}
}
return true;
}
//格式化数组
public String showArray(double[][] data) {
//数据格式化保留两位小数
DecimalFormat format = new DecimalFormat("0.00");
//声明StringBuffer可以修改数据
StringBuffer buffer = new StringBuffer("");
for(int i = 0; i for(int j = 0; j //将数组元素转换为指定格式
buffer.append(format.format(data[i][j])).append(" ");
}
buffer.append("\n");
}
return buffer.toString();
}
//调用方法显示二维数组
public void showData() {
System.out.println(showArray(this.data));
}
//获得矩阵
public double[][] getMatrixData(){
return cloneArray(this.data);
}
//矩阵加法运算
public TextMatrix add(TextMatrix t) {
if(t == null) {
return null;
}
TextMatrix text = null;
//获得一个矩阵
double[][] tmData = t.getMatrixData();
//判断矩阵行数列数是否相等
if((this.data.length != tmData.length) || (this.data[0].length != tmData[0].length)) {
System.out.println("两个矩阵大小不一样");
return text;
}else {
double[][] result = new double[this.data.length][this.data[0].length];
for(int i = 0; i for(int j = 0; j result[i][j] = this.data[i][j] + tmData[i][j];
}
}
text = new TextMatrix(result);
return text;
}
}
//矩阵减法
public TextMatrix subtration(TextMatrix t) {
if(t == null) {
return null;
}
TextMatrix text = null;
//获得一个矩阵
double[][] tmData = t.getMatrixData();
//判断矩阵行数列数是否相等
if((this.data.length != tmData.length) || (this.data[0].length != tmData[0].length)) {
System.out.println("两个矩阵大小不一样");
return text;
}else {
double[][] result = new double[this.data.length][this.data[0].length];
for(int i = 0; i for(int j = 0; j result[i][j] = this.data[i][j] + tmData[i][j];
}
}
text = new TextMatrix(result);
return text;
}
}
//矩阵转置,格式为a[i][j] = b[j][i]
public TextMatrix transposeMatrix() {
int Row = this.data[0].length;
int Colume = this.data.length;
double[][] change = new double[Row][Colume];
for(int i = 0; i for(int j = 0; j change[i][j] = this.data[j][i];
}
}
return new TextMatrix(change);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
double[][] data1 = new double[][] { {1.0,2.0,3.0},
{4.0,5.0,6.0},
{7.0,8.0,9.0}};
double[][] data2 = new double[3][3];
for(int i = 0; i <3; i++) {
for(int j = 0; j <3; j++) {
data2[i][j] = 2*i+j;
}
}
TextMatrix matrix1 = new TextMatrix(data1);
TextMatrix matrix2 = new TextMatrix(data2);
System.out.println("SHOW:");
matrix1.showData();
matrix2.showData();
System.out.println("ADD:");
matrix1.add(matrix2).showData();
System.out.println("SUB:");
matrix1.subtration(matrix2).showData();
System.out.println("TRAN:");
matrix1.transposeMatrix().showData();
}
}


推荐阅读
  • 本文介绍了如何利用Apache POI库高效读取Excel文件中的数据。通过实际测试,除了分数被转换为小数存储外,其他数据均能正确读取。若在使用过程中发现任何问题,请及时留言反馈,以便我们进行更新和改进。 ... [详细]
  • Java SE 文件操作类详解与应用
    ### Java SE 文件操作类详解与应用#### 1. File 类##### 1.1 File 类概述File 类是 Java SE 中用于表示文件和目录路径名的对象。它提供了丰富的方法来操作文件和目录,包括创建、删除、重命名文件,以及获取文件属性和信息。通过 File 类,开发者可以轻松地进行文件系统操作,如检查文件是否存在、读取文件内容、列出目录下的文件等。此外,File 类还支持跨平台操作,确保在不同操作系统中的一致性。 ... [详细]
  • 如何使用 net.sf.extjwnl.data.Word 类及其代码示例详解 ... [详细]
  • 本文介绍了一种利用Dom4j库和JFileChooser组件在Java中实现XML文件自定义路径导出的方法。通过创建一个Document对象并设置根元素,结合JFileChooser选择目标路径,实现了灵活的XML文件导出功能。具体步骤包括初始化Document对象、构建XML结构以及使用JFileChooser选择保存路径,确保用户能够方便地将生成的XML文件保存到指定位置。 ... [详细]
  • 本文深入探讨了CGLIB BeanCopier在Bean对象复制中的应用及其优化技巧。相较于Spring的BeanUtils和Apache的BeanUtils,CGLIB BeanCopier在性能上具有显著优势。通过详细分析其内部机制和使用场景,本文提供了多种优化方法,帮助开发者在实际项目中更高效地利用这一工具。此外,文章还讨论了CGLIB BeanCopier在复杂对象结构和大规模数据处理中的表现,为读者提供了实用的参考和建议。 ... [详细]
  • 在PHP的设计中,预定义了9个超级全局变量、8个魔术变量和13个魔术函数,这些变量和函数无需声明即可在脚本的任意位置使用。这些特性在PHP开发中极为常见,能够显著提升开发效率和代码的灵活性。相比之下,Java并没有类似的内置机制,但通过其他方式如上下文对象和反射机制,也可以实现类似的功能。本文将详细探讨这两种语言中这些特殊变量和函数的使用方法及其应用场景。 ... [详细]
  • 在 Windows 10 环境中,通过配置 Visual Studio Code (VSCode) 实现基于 Windows Subsystem for Linux (WSL) 的 C++ 开发,并启用智能代码提示功能。具体步骤包括安装 VSCode 及其相关插件,如 CCIntelliSense、TabNine 和 BracketPairColorizer,确保在 WSL 中顺利进行开发工作。此外,还详细介绍了如何在 Windows 10 中启用和配置 WSL,以实现无缝的跨平台开发体验。 ... [详细]
  • 开发笔记:深入解析Android自定义控件——Button的72种变形技巧
    开发笔记:深入解析Android自定义控件——Button的72种变形技巧 ... [详细]
  • 在第二课中,我们将深入探讨Scala的面向对象编程核心概念及其在Spark源码中的应用。首先,通过详细的实战案例,全面解析Scala中的类和对象。作为一门纯面向对象的语言,Scala的类设计和对象使用是理解其面向对象特性的关键。此外,我们还将介绍如何通过阅读Spark源码来进一步巩固对这些概念的理解。这不仅有助于提升编程技能,还能为后续的高级应用开发打下坚实的基础。 ... [详细]
  • Java中处理NullPointerException:getStackTrace()方法详解与实例代码 ... [详细]
  • 在Java中,`Timer`类主要用于在指定时间或以固定周期执行任务。虽然它具备线程安全性,但并不保证实时性。此外,`Timer`支持使用守护线程来运行任务,Java中的线程分为用户线程和守护线程两种类型。用户线程通常用于执行应用程序的主要逻辑,而守护线程则用于支持程序的后台操作。通过合理配置`Timer`,可以实现高效的任务调度和管理。 ... [详细]
  • 在探讨C语言编程文本编辑器的最佳选择与专业推荐时,本文将引导读者构建一个基础的文本编辑器程序。该程序不仅能够打开并显示文本文件的内容及其路径,还集成了菜单和工具栏功能,为用户提供更加便捷的操作体验。通过本案例的学习,读者可以深入了解文本编辑器的核心实现机制。 ... [详细]
  • 本题库精选了Java核心知识点的练习题,旨在帮助学习者巩固和检验对Java理论基础的掌握。其中,选择题部分涵盖了访问控制权限等关键概念,例如,Java语言中仅允许子类或同一包内的类访问的访问权限为protected。此外,题库还包括其他重要知识点,如异常处理、多线程、集合框架等,全面覆盖Java编程的核心内容。 ... [详细]
  • 在稀疏直接法视觉里程计中,通过优化特征点并采用基于光度误差最小化的灰度图像线性插值技术,提高了定位精度。该方法通过对空间点的非齐次和齐次表示进行处理,利用RGB-D传感器获取的3D坐标信息,在两帧图像之间实现精确匹配,有效减少了光度误差,提升了系统的鲁棒性和稳定性。 ... [详细]
  • 深入解析:使用C++实现Python字节数组(struct)的高效处理方法 ... [详细]
author-avatar
青樽有酒_585_587
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有