今天很开心把困扰几天的问题解决了,在学习线性代数这门课程的时候。想通过程序实现里面的计算方法,比如矩阵求逆,用java代码该如何描述呢?

首先,咱们先用我们所交流语言描述一下算法思路:

1.求出一个矩阵A对应的行列式在第i,j(i表示行,j表示列)位置的余子式(余子式前面乘以-1^(i+j)即得代数余子式);

2.根据代数余子式求得矩阵A行列式的值。(行列式展开法);

3.根据代数余子式和行列式的值求出伴随矩阵;

4.由伴随矩阵和矩阵行列式值求逆矩阵。(A^-1 = A* / |A|)。

了解上述算法思路后,废话少说,上代码。

1.求出一个矩阵A对应的行列式在第i,j(i表示行,j表示列)位置的余子式(余子式前面乘以-1^(i+j)即得代数余子式);

1 /**

2 * 求矩阵在i,j处余子式3 *@parammat4 *@parami5 *@paramj6 *@return

7 */

8 public static Matrix getComplementMinor(Matrix mat, int i, intj) {9 //创建一个新的矩阵用于接收表示该余子式,需删除本行本列的数值

10 Matrix m = new Matrix(mat.getRow()-1,mat.getCol()-1);11 //用于遍历新矩阵m的变量

12 int row =0 ,col=0;13 /*

14 * 遍历原矩阵的数据,j2表示行,k表示列15 */

16 for (int j2 = 0; j2 < mat.getRow(); j2++) {17 //在第i行除的数据省略

18 if(j2 == i) continue;19 for (int k = 0; k < mat.getCol(); k++) {20 //在第j列的数据省略

21 if(k == j) continue;22 //赋值

23 m.setValue(row, col,mat.getValue(j2, k));24 //遍历新矩阵的变量

25 col++;26 if(col >=m.getCol() ) {27 col = 0;28 row++;29 }30 }31 }32 returnm;33 }

2.根据代数余子式求得矩阵A行列式的值。(行列式展开法);

1 /**

2 * 求矩阵的行列式的值3 *@parammat4 *@return

5 */

6 public static doublegetMatrixValue(Matrix mat) {7 if(mat.getRow() !=mat.getCol()) {8 System.out.println("该矩阵不是方阵,没有行列式");9 returnDouble.MIN_VALUE;10 }11 //若为1*1矩阵则直接返回

12 if(mat.getRow() == 1) return mat.getValue(0, 0);13 //若为2*2矩阵则直接计算返回结果

14 if(mat.getRow() == 2) {15 return mat.getValue(0, 0)*mat.getValue(1, 1) - mat.getValue(0, 1)*mat.getValue(1, 0);16 }17 //行列式的值

18 double matrixValue = 0;19 for (int i = 0; i < mat.getCol(); i++) {20 //获取0,i位置的余子式,即第一行的余子式

21 Matrix m = getComplementMinor(mat, 0, i);22 //将第一行的余子式相加 ,递归下去

23 matrixValue += Math.pow(-1, i) *getMatrixValue(m);24

25 }26 returnmatrixValue;27 }

3.根据代数余子式和行列式的值求出伴随矩阵;

1 /**

2 * 求矩阵的伴随矩阵3 *@parammat4 *@return

5 */

6 public staticMatrix getWithMatrix(Matrix mat) {7 //创建一个矩阵存放伴随矩阵的值

8 Matrix withMatrix = newMatrix(mat.getRow(),mat.getCol());9 //遍历withMatrix存放对应的mat的值

10 for (int i = 0; i < withMatrix.getRow(); i++) {11 for (int j = 0; j < withMatrix.getCol(); j++) {12 double temp = Math.pow(-1, i+j) *MatrixUtil.getMatrixValue(MatrixUtil.getComplementMinor(mat, j, i));13 if(Math.abs(temp) <= 10e-6) temp = 0;14 withMatrix.setValue(i, j,temp);15 }16 }17 //返回结果

18 returnwithMatrix;19 }

4.由伴随矩阵和矩阵行列式值求逆矩阵。(A^-1 = A* / |A|)。

1 /**

2 * 求逆矩阵3 *@parammat4 *@return

5 */

6 public staticMatrix getReMatrix(Matrix mat) {7 //创建一个矩阵接收逆矩阵数据

8 Matrix reMatrix = newMatrix(mat.getRow(),mat.getCol());9 //得到原矩阵行列式的值

10 double value =MatrixUtil.getMatrixValue(mat);11 //判断矩阵行列式的值是否为零

12 if(Math.abs(value) <= 10e-6) {13 System.out.println("该矩阵不可逆!");14 return null;15 }16 //将原矩阵mat赋值除以原行列式的值value给逆矩阵

17 for (int i = 0; i < reMatrix.getRow(); i++) {18 for (int j = 0; j < reMatrix.getCol(); j++) {19 reMatrix.setValue(i, j, MatrixUtil.getWithMatrix(mat).getValue(i, j) /value);20 }21 }22 returnreMatrix;23

24 }

逆矩阵 java_用java描述矩阵求逆的算法相关推荐

  1. java 矩阵求逆_详解用java描述矩阵求逆的算法

    今天很开心把困扰几天的问题解决了,在学习线性代数这门课程的时候.想通过程序实现里面的计算方法,比如矩阵求逆,用java代码该如何描述呢? 首先,咱们先用我们所交流语言描述一下算法思路: 1.求出一个矩 ...

  2. 整数反转leetcode java_【Java】【每日算法/刷穿 LeetCode】7. 整数反转(简单)

    首页 专栏 java 文章详情 0 [每日算法/刷穿 LeetCode]7. 整数反转(简单) 宫水三叶发布于 今天 12:10 题目描述 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数 ...

  3. 插入排序java_「Java」各类排序算法

    排序大的分类可以分为两种:内排序和外排序.在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序.下面讲的排序都是属于内排序.内排序有可以分为以下几类: (1) 插入 ...

  4. Java描述 数据结构与算法

    算法:NonextremeElement(S[], n) 输入:由n个整数构成的集合S 输出:其中的任一非极端元素 { 任取的三个元素x, y, z ∈ S; //既然S是集合,这三个元素必互异 通过 ...

  5. 水桶平分 java_关于java:桶排序算法代码问题

    我需要在Java中实现以下内容. 输入:整数数组 输出:重新排列数组以具有以下内容: 假设原始数组中的第一个元素的值为x 在新数组中,假设x在位置I,即data[I] = x.然后,对所有x和所有j ...

  6. 逆矩阵 java_用java实现逆矩阵运算

    查java实现逆矩阵转换的代码,居然没怎么发现,想偷懒一下也不行.关于矩阵基本运算 :加 减 乘,转置矩阵,相当简单,能看见不少别人写的,但是就是没看见逆矩阵,不爽. 自己实现了下逆矩阵功能,可以是任 ...

  7. des 向量 java_在JAVA中使用DES算法

    DES算法提供CBC, OFB, CFB, ECB四种模式,MAC是基于ECB实现的. 一.数据补位 DES数据加解密就是将数据按照8个字节一段进行DES加密或解密得到一段8个字节的密文或者明文,最后 ...

  8. 狗生活在陆地上 java_用java描述动物特性: 狗生活在陆地上(是一种陆生动物),既是哺乳类的也是肉食性的。狗通常的时候和人打...

    满意答案 Innayuji 2013.08.24 采纳率:57%    等级:12 已帮助:7723人 public class Animal { public String name =" ...

  9. xmodem java_[转]JAVA实现CRC-CCITT(XMODEM)算法

    static final char TABLE1021[] = { /* CRC1021余式表 */ 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0 ...

最新文章

  1. 计算机键盘上的哪个键可以复制,复制电脑键盘按什么
  2. 第十五届全国大学生智能汽车竞赛室外光电组全国总决赛方案
  3. codeblocks安装后提示找不到编译器,也找不到MinGW目录
  4. idea设置打开文件窗口个数
  5. 【J2ME 2D 游戏开发系列】◣HIMI游戏开发启蒙教程◢JAVA零基础学习J2ME游戏开发全过程!...
  6. Cloudera CDP 企业数据云测试开通指导
  7. Serverless 工作流给人工智能带来了哪些变化?
  8. makefile工作笔记0003---Makefile的ifeq逻辑或,逻辑与的变通实现
  9. html怎么做成3d正方体,利用CSS3的3D效果制作正方体
  10. 「leetcode」C++题解:226.翻转二叉树,递归法与迭代法详解
  11. YOLOv4一作提出Transformer新架构:DPT!替代卷积网络做密集预测
  12. Reading query string values in JavaScript
  13. Oracle官网下载速度慢
  14. 阿里云主要产品及功能介绍,阿里云产品分为6大分类:云计算基础/安全/大数据/人工智能/企业应用/物联网...
  15. 疫情下企业面临的关键网络安全建设,去繁从简,保住核心安全
  16. linux 文件追加,如何在Linux中将文本内容追加到文件末尾?
  17. 前端在线微信扫码支付的小功能
  18. 沐风:可怕的想什么就来什么
  19. lumen php命令,lumen添加artisan 命令方法
  20. 容灾技术及建设经验介绍

热门文章

  1. Python参数传递:值传递和引用传递
  2. python照片转素描_Python3.4图片转换素描
  3. 红黑树结构原理的图文讲解(非代码)
  4. 红黑二叉树的左旋右旋和变色
  5. 周日了,我们来聊聊女生到底适不适合做网络营销
  6. Matlab强行终止程序执行
  7. Unity程序联动rs485可编程开关
  8. 解决IDEA中maven项目视图中出现红色波浪线的问题
  9. python学习小记--取整/取余
  10. gridview repeater DataList 鼠标经过改变背景颜色