[Java] Matrix 实现矩阵的运算

您所在的位置:网站首页 矩阵按列排序JAVA [Java] Matrix 实现矩阵的运算

[Java] Matrix 实现矩阵的运算

2024-01-05 18:01| 来源: 网络整理| 查看: 265

目录 1. 矩阵的表达式a. n阶矩阵或n阶方阵(N-order Matrix )b. 零矩阵(Zero Matrix )c. 单位矩阵(Identity Matrix) 2. 矩阵的线性运算(Linear Operations)a. 加减法运算(Addition & Subtraction)i. 要求 b. 数乘运算(Scalar Multiplication) 3. 矩阵的乘法运算(Multiplication)a. 要求b. 运算规律 4. 矩阵的转置(Transposed Matrix)a. 运算规律b. 对称矩阵(Symmetric Matrix)c. 反对称矩阵(Skew-Symmetric Matrix) 5. 矩阵的方程组运算a. 运算步骤 6. Java 实例a. 附录

1. 矩阵的表达式   A m n \ A_{mn}  Amn​ : A matrix of order m x n;其中i和m表示行数,j和n表示列数,   A = A m n = ( a i j ) = ( a i j ) m ∗ n \ A=A_{mn}=(a_{ij})=(a_{ij})_{m*n}  A=Amn​=(aij​)=(aij​)m∗n​; Matrix Expression a. n阶矩阵或n阶方阵(N-order Matrix )

行数与列数都等于n的矩阵;

b. 零矩阵(Zero Matrix )

所有元素皆为0;

c. 单位矩阵(Identity Matrix)

从左上角到右下角的对角线(即主对角线)上的元素均为1,其余元素全都为0; Identity Matrix

2. 矩阵的线性运算(Linear Operations) a. 加减法运算(Addition & Subtraction) i. 要求

两个矩阵必须是同型矩阵;   A i 1 j 1 B i 2 j 2 , i 1 = i 2 = m , j 1 = j 2 = n ; \ A_{i_1j_1} B_{i_2j_2},i_1=i_2=m, j_1=j_2=n;  Ai1​j1​​Bi2​j2​​,i1​=i2​=m,j1​=j2​=n; Addition and Subtraction

b. 数乘运算(Scalar Multiplication)

Scalar Multiplication

3. 矩阵的乘法运算(Multiplication) a. 要求

左边矩阵的列数必须等于右边矩阵的行数;   A = ( a i 1 j 1 ) , B = ( b i 2 j 2 ) , j 1 = i 2 = n ; \ A=(a_{i_1j_1}),B=(b_{i_2j_2}),j_1=i_2=n;  A=(ai1​j1​​),B=(bi2​j2​​),j1​=i2​=n; Multiplication1 Multiplication2

b. 运算规律   ( A B ) C = A ( B C ) \ (AB)C=A(BC)  (AB)C=A(BC)   ( A + B ) C = A C + B C \ (A+B)C=AC+BC  (A+B)C=AC+BC 4. 矩阵的转置(Transposed Matrix)

Transpose

a. 运算规律   ( A T ) T = A \ (A^T)^T=A  (AT)T=A   ( A + B ) T = A T + B T \ (A+B)^T=A^T+B^T  (A+B)T=AT+BT   ( k A ) T = k A T \ (kA)^T=kA^T  (kA)T=kAT   ( A B ) T = B T A T \ (AB)^T=B^TA^T  (AB)T=BTAT b. 对称矩阵(Symmetric Matrix)

  A T = A , a i j = a j i \ A^T=A, a_{ij}=a_{ji}  AT=A,aij​=aji​

c. 反对称矩阵(Skew-Symmetric Matrix)

  A T = − A , a i j = a j i \ A^T=-A, a_{ij}=a_{ji}  AT=−A,aij​=aji​

5. 矩阵的方程组运算

  A X = b \ AX=b  AX=b 在这里插入图片描述

a. 运算步骤 得到增广矩阵(Augmented Matrix)–   [ A ∣ b ] \ [A|b]  [A∣b];化简得到右边类似单位矩阵(Identity Matrix);最右边的列就是答案; 6. Java 实例 import java.text.DecimalFormat; /** * 实现矩阵的运算 * * @author Regino * class Matrix: * - height(): return no. of rows(行数) * - width(): return no. of columns(列数) * - add(Matrix target), multiply(double target): Linear Operations(线性运算) * - multiply(Matrix target): Multiplication(乘法运算) * - transpose(Matrix target)(): Transposed(转置) * - Solve equatino: solve(Matrix target), GaussElimination(Matrix target), setNum(int num): Equation System(解方程组) * - print() * test: * - output: origin & transpose & add & multiply & solve equation */ class Matrix { private int row; private int column; private double value[][]; private int num; Matrix() { } Matrix(int row, int column, double[][] value) { this.row = row; this.column = column; this.value = value; } int height() { return column; } int width() { return row; } Matrix add(Matrix target) throws Exception { if (this.height() != target.height() || this.width() != target.width()) { throw new Exception("The two matrices must be identical in addition and subtraction! " + "(加减法运算时两个矩阵必须是同型矩阵!)"); } else { double result[][] = new double[this.row][this.column]; for (int i = 0; i result[i][j] = this.value[i][j] + target.value[i][j]; } } Matrix addition = new Matrix(this.row, this.column, result); return addition; } } Matrix multiply(double d) { double result[][] = new double[this.row][this.column]; for (int i = 0; i result[i][j] = d * this.value[i][j]; } } Matrix multiplication2 = new Matrix(this.row, this.column, result); return multiplication2; } Matrix multiply(Matrix target) throws Exception { if (this.column != target.row) { throw new Exception("The number of columns in the left matrix must equal to the number of rows in the right matrix! " + "(乘法运算时左边矩阵的列数必须等于右边矩阵的行数!)"); } else { double result[][] = new double[this.row][this.column]; double c = 0; for (int i = 0; i //求C的元素值 for (int k = 0; k this.num = num; } Matrix transpose() { double result[][] = new double[this.column][this.row]; for (int i = 0; i result[j][i] = this.value[i][j]; } } Matrix transposed = new Matrix(this.column, this.row, result); return transposed; } String solve(Matrix target) { //Augmented Matrix double aug[][] = new double[this.row][this.column + 1]; for (int i = 0; i if (j == this.column) { aug[i][j] = target.value[i][0]; } else { aug[i][j] = this.value[i][j]; } } } Matrix augmented = new Matrix(this.row, this.column + 1, aug); Matrix solution = GaussElimination(augmented); StringBuilder sb = new StringBuilder(); sb.append("\r\n"); switch (solution.num) { case 0: sb.append("AX = B has no solution(方程无解)."); break; case 1: sb.append("AX = B has one unique solution(方程有解),\r\n"); sb.append("X ="); sb.append(solution.print()); break; default: sb.append("AX = B has infinite many solutions(方程有无穷多个解)."); break; } return sb.toString(); } Matrix GaussElimination(Matrix augmented) { double[][] sol = new double[augmented.row][1]; //TODO: 1. calculate arbitrary Equation System; 2. catch exception //r2-r3,r3*(1/2),r1-r3 for (int j = 0; j augmented.value[1][j] /= 3; augmented.value[0][j] -= augmented.value[1][j]; } //r3-r1 for (int j = 0; j double temp0 = augmented.value[0][j]; double temp1 = augmented.value[1][j]; double temp2 = augmented.value[2][j]; augmented.value[0][j] = temp2; augmented.value[1][j] = temp0; augmented.value[2][j] = temp1; } //output X for (int i = 0; i DecimalFormat df = new DecimalFormat("0.##"); StringBuilder sb = new StringBuilder(); sb.append("\r\n"); for (int i = 0; i if (j == this.column - 1) { sb.append(df.format(this.value[i][j]) + "\r\n"); } else { sb.append(df.format(this.value[i][j]) + " "); } } } sb.append("------"); return sb.toString(); } } public class test { public static void main(String[] args) { double a[][] = {{1, 2, 1}, {2, 2, 3}, {2, 2, 0}}; double b[][] = {{2}, {0}, {0}}; Matrix A = new Matrix(a.length, a[0].length, a); Matrix B = new Matrix(b.length, b[0].length, b); try { System.out.println("Matrix A(矩阵 A):" + A.print()); System.out.println("Matrix B(矩阵 B):" + B.print()); System.out.println("A x 5.5 =" + A.multiply(5.5).print()); System.out.println("A x B =" + A.multiply(B).print()); System.out.println("Transposed Matrix B(矩阵 B的置换):" + B.transpose().print()); System.out.println("Solve equation AX = B(解方程 AX = B):" + A.solve(B)); } catch (Exception e) { e.printStackTrace(); } } } a. 附录

Java程序中用到的方程组的实际运算; Java Example

原文链接:https://qwert.blog.csdn.net/article/details/104347898



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3