矩阵的测试
来源:互联网 发布:辐射4阴影优化 编辑:程序博客网 时间:2024/05/19 11:44
1.利用已知矩阵arr测试逆矩阵
2.随机产生一个3阶矩阵,判断是否存在逆矩阵,若存在则计算输出逆矩阵
代码如下:
public class InverseMatrix {private int row;private int col;private double[][] matrix;public InverseMatrix(){//构造默认矩阵this.row = 3;this.col = 3;this.matrix = new double[this.row][this.col];}public InverseMatrix(int row,int col){//构造随机矩阵this.row = row;this.col = col;this.matrix = new double[this.row][this.col];//对随机矩阵进行赋值操作for(int i=0;i<matrix.length;i++){for(int j=0;j<matrix[i].length;j++){Random rand = new Random();matrix[i][j] = rand.nextInt(10);}}}//求矩阵的余子式(minors) 传入参数矩阵和某一个元素的(x,y)坐标public static double[][] minors(double[][] ma,int x,int y){double[][] newMatrix = new double[ma.length-1][ma[0].length-1];for(int i=0;i<newMatrix.length;i++){if(i < x){for(int j=0;j<newMatrix[i].length;j++){if(j < y){newMatrix[i][j] = ma[i][j];}else{newMatrix[i][j] = ma[i][j+1];}}}else{for(int j=0;j<newMatrix[i].length;j++){if(j < y){newMatrix[i][j] = ma[i+1][j];}else{newMatrix[i][j] = ma[i+1][j+1];}}}}return newMatrix;}//求矩阵行列式的值(若返回值为0则表示不存在逆矩阵)public static double determinant(double[][] ma){//二阶行列式if(ma.length == 2){return ma[0][0]*ma[1][1] - ma[0][1]*ma[1][0];}//三阶行列式及以上//第一行的各元素与代数余子式乘积 然后累加就是行列式的值double[] num = new double[ma[0].length];for(int i=0;i<num.length;i++){//遍历第一行元素if(i%2 == 0){num[i] = ma[0][i]*determinant(minors(ma,0,i));}else{num[i] = -ma[0][i]*determinant(minors(ma,0,i));}}double result = 0;for(int i=0;i<num.length;i++){result += num[i];}return result;}//求转置矩阵public static double[][] reverse(double[][] ma){double[][] reveMatrix = new double[ma.length][ma[0].length];for(int i=0;i<reveMatrix.length;i++){for(int j=0;j<reveMatrix[i].length;j++){reveMatrix[i][j] = ma[j][i];}}return reveMatrix;}//求逆矩阵public static double[][] inMatix(double[][] ma){//传入矩阵的行行列式的值double num = determinant(ma);//求伴随矩阵(每个元素的代数余子式转置)double[][] newMatrix = new double[ma.length][ma[0].length];for(int i=0;i<newMatrix.length;i++){for(int j=0;j<newMatrix[i].length;j++){if((i+j)%2 == 0){newMatrix[i][j] = determinant(minors(ma,i,j))/num;}else{newMatrix[i][j] = -determinant(minors(ma,i,j))/num;}}}//转置后得到伴随矩阵return reverse(newMatrix);}public static void main(String[] args) {double[][] arr = new double[][]{//{1,2,-1},//{3,4,-2},//{5,-4,1}{0,2,-1},{0,4,-2},{0,-4,1}//此矩阵没有逆矩阵};//用指定矩阵进行测试:System.out.println("arr矩阵为:");printMatrix(arr);if(determinant(arr) == 0){System.out.println("arr矩阵没有逆矩阵");}else{System.out.println("arr矩阵的逆矩阵为:");printMatrix(inMatix(arr));}//用产生的随机矩阵进行测试InverseMatrix m = new InverseMatrix(3,3);System.out.println("系统产生的随机矩阵为:");m.printMatrix(m.matrix);if(determinant(m.matrix) == 0){System.out.println("随机矩阵没有逆矩阵");}else{System.out.println("随机矩阵的逆矩阵为:");printMatrix(inMatix(m.matrix));}}//输出矩阵public static void printMatrix(double[][] ma){for(int i=0;i<ma.length;i++){for(int j=0;j<ma[i].length;j++){System.out.printf("%-8.2f",ma[i][j]);}System.out.println();}}}测试结果如下:
arr矩阵为:0.00 2.00 -1.00 0.00 4.00 -2.00 0.00 -4.00 1.00 arr矩阵没有逆矩阵系统产生的随机矩阵为:7.00 1.00 5.00 1.00 6.00 6.00 4.00 7.00 2.00 随机矩阵的逆矩阵为:0.11 -0.12 0.09 -0.08 0.02 0.14 0.06 0.16 -0.15
0 0
- 矩阵的测试
- 矩阵的简单测试模板
- 测试矩阵乘法的例子
- 芯片测试矩阵的相关计算
- 测试矩阵连续运算的速度问题的代码
- 矩阵键盘以及测试
- petsc 矩阵测试
- 矩阵乘法测试
- cuda开发矩阵乘法测试你的GPU效率
- CUDA开发矩阵乘法测试你的GPU效率
- 基于矩阵模式的 Web 软件测试手段
- 不同工具下的矩阵乘法速度测试
- 奇异值分解(SVD)和图像矩阵的分解测试
- 矩阵结构式的测试部门建立及测试项目管理问题请教
- 迭代求解矩阵测试
- cache测试及其矩阵优化
- IT产品质量保证测试矩阵
- POJ3233不错的矩阵(矩阵套矩阵)
- python数字图像处理(2):图像的读取、显示与保存
- 字符串模式匹配
- ES6新增了一种模板字符串
- 2016年小码哥JAVA大神班第一期
- 解决UTF8+BOM编码xml文件解析异常
- 矩阵的测试
- C#设置注册表权限失败,修改应用程序以管理员身份执行
- Emgu Image RGB图转成灰度图
- 洛谷【P1156】垃圾陷阱
- 微服务协议选择
- 【12月16日】THUCTC实现基于支持向量机中文文本分类
- Android读取asset目录的文件转File
- Q-Dir取消直接打开zip文件,采用系统默认程序打开zip文件
- MYSQL性能测试