在数学上,矩阵是由方程组的系数及常数所构成的方阵。用在解线性方程组上既方便又直观。生活中通过矩阵多因素探索解决问题。
程序如下:
package JAVA_Project_01_04;//创建一个包
//在数学上,矩阵是由方程组的系数及常数所构成的方阵。用在解线性方程组上既方便又直观。生活中通过矩阵多因素探索解决问题。
//对数组进行初始化有两种方法:在声明变量时直接初始化;运用循环对其进行初始化。
//Java支持多维数组,可以用二维数组表示矩阵。
//对矩阵进行操作前,需要进行合法性验证,判断它们是否能进行运算。
import java.text.DecimalFormat;//引入类
public class TextMatrix {//操作矩阵的类,使用二维数组
private double[][] data;//矩阵数据
public TextMatrix() {//默认构造函数
}
public TextMatrix(double[][] data) {//初始化矩阵
if (CanTransTomatrix(data))//判断数组是否能转换成矩阵
this.data = this.cloneArray(data);
}
private static boolean CanTransTomatrix(double[][] data) {//判断二维数组能够转换成矩阵
if (data == null)//判断二维数组是否为空
return false;
for (int i = 0; i <= data.length - 2; i++) {//循环依次比较如果长度不相等则返回false
if (data[i].length != data[i + 1].length)//数组长度比较
return false;
}
return true;
}
public String showArray(double[][] data) {//格式化数组
DecimalFormat format = new DecimalFormat("0.00");//数据格式化保留两位小数
StringBuffer buffer = new StringBuffer("");//声明StringBuffer可以修改数据
for (int i = 0; i < data.length; i++) {//遍历一个二维数组按格式显示
//将数组元素转化成指定格式
for (int j = 0; j < data.length; j++) {
buffer.append(format.format(data[i][j])).append(" ");
}
buffer.append("\n");//换行
}
return buffer.toString();
}
public void showData() {//调用方法显示二维数组
System.out.println(showArray(this.data));
}
private double[][] cloneArray(double[][] data) {//克隆一个二维数组
if (data == null)
return null;
return (double[][]) data.clone();
}
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 < this.data.length; i++) {//依次循环行数
for (int j = 0; j < this.data[0].length; 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 < this.data.length; i++) {//依次循环行数
for (int j = 0; j < this.data[0].length; j++) {//依次循环列数
result[i][j] = this.data[i][j] - tmData[i][j];//两个矩阵相减
}
}
text = new TextMatrix(result);//将新生成的矩阵传入对象中
return text;//返回对象
}
}
public TextMatrix transposeMatrix() {//矩阵转置,格式为a[i][j]=b[j][i]
int Row = this.data[0].length;
int Column = this.data.length;
double[][] change = new double[Row][Column];//声明一个二维数组,长度指定
for (int i = 0; i < Row; i++) {
for (int j = 0; j < Column; j++) {
change[i][j] = this.data[j][i];//循环进行转置
}
}
return new TextMatrix(change);
}
public static void main(String[] args) {//Java程序主入口处
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循环依次初始化二维数组
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("两组二维数组展示:");
matrix1.showData();//二维数组展示
matrix2.showData();
System.out.println("矩阵加减法运算结果:");
matrix1.add(matrix2).showData();//显示矩阵加法运算结果
System.out.println("矩阵减法运算结果:");
matrix1.subtration(matrix2).showData();//显示矩阵减法运算结果
System.out.println("矩阵matrix1的转置结果:");
matrix1.transposeMatrix().showData();//矩阵转置的结果
}
}
/*
本实例根据不同的方法对二维数组进行初始化,并采用二维数组存放矩阵的数据。并对要操作的两个数组进行行和列是否一致的判断。
add()方法实现了矩阵的加法运算,根据矩阵加法的条件,判断参与加法的两个矩阵是否可加,并将结果数组变换为矩阵对象返回。
sub()方法实现了矩阵减法运算,当前对象是被减数,输入参数对象是减数。
clone()方法用于克隆一个矩阵。
*/