在 Java 中检查矩阵是否对合?

javaobject oriented programmingprogramming

矩阵不过是二维矩形布局中排列的数据元素的集合。在 Java 中,二维数组可以视为矩阵。

对合矩阵是一个方阵,当它与自身相乘时,会返回一个单位矩阵。单位矩阵是一种除对角线为 1 外所有元素均为零的矩阵。

让我们深入研究这篇文章,了解如何使用 Java 编程语言来实现这一点。

向您展示一些实例

实例 1

假设我们有一个矩阵
     | 1 0 0 |
A  = | 0 1 0 |
     | 0 0 1 |

A2 = A X A

     | 1 0 0 |   | 1 0 0 |
   = | 0 1 0 | X | 0 1 0 |
     | 0 0 1 |   | 0 0 1 |
 
     | 1 0 0 |
A2 = | 0 1 0 | | 0 0 1 |

它是一个对合矩阵。

实例-2

假设我们有一个矩阵

假设我们有一个矩阵
     | 1 0 0  |
A  = | 0 -1 0 |
     | 0 0 -1 |
A2 = A X A
     | 1 0 0 |    | 1 0 0 |
   = | 0 -1 0 | X | 0 -1 0|
     | 0 0 -1 |   | 0 0 -1|

     | 1 0 0 |
A2 = | 0 1 0 |
     | 0 0 1 |

这是一个对合矩阵。

算法

步骤 1 - 初始化并声明矩阵

步骤 2 - 将矩阵与其自身相乘并存储结果

步骤 3 - 将乘积矩阵与单位矩阵进行比较,并检查两个矩阵是否相同

步骤 4 - 如果两个矩阵相同,则矩阵为对合矩阵

多种方法

我们提供了不同方法的解决方案。

  • 通过使用矩阵的静态初始化

  • 通过使用矩阵的动态初始化

让我们看看程序及其输出一个一个来。

方法 1:使用矩阵的静态初始化

在这种方法中,矩阵元素将在程序中初始化。然后根据算法检查矩阵是否是对合矩阵。

示例

import java.util.Scanner;
public class Main {
   public static void main(String[] args) {
      // 需要检查的矩阵
      int mat[][] = {{ 1, 0, 0 },{ 0, -1, 0 },{ 0, 0, -1 },};
      // 打印结果
      if (invoCheck(mat))
         System.out.println("The matrix is an involutory matrix.");
      else
         System.out.println("The matrix is not an involutory matrix.");
   }
   // 矩阵乘法
   static void mul(int mat[][], int prod[][]) {
      for (int i = 0; i < 3; i++) {
         for (int j = 0; j < 3; j++) {
            prod[i][j] = 0;
            
           // Resultant product is stored in prod
            for (int k = 0; k < 3; k++) {
               prod[i][j] += mat[i][k] * mat[k][j];
            }
         }
      }
   }
   // 检查矩阵是否对合
   static boolean invoCheck(int mat[][]) {
      // 3X3 单位矩阵
      int identityMat[][] = { { 1, 0, 0 },{ 0, 1, 0 },{ 0, 0, 1 } };
      int prod[][] = new int[3][3];
      
      // 调用矩阵乘法
      mul(mat, prod);
      
      // 检查乘积矩阵是否为单位矩阵
      for (int i = 0; i < 3; i++) {
         for (int j = 0; j < 3; j++) {
            if (identityMat[i][j] != prod[i][j])
            return false;
         }
      }
      return true;
   }
}

输出

The matrix is an involutory matrix.

方法 2:使用矩阵的动态初始化

在此方法中,矩阵元素将作为程序中的用户输入。然后根据算法检查矩阵是否为对合矩阵。

示例

import java.util.Scanner;
public class Main {
   public static void main(String[] args) {
        //待检查矩阵
        int mat[][] = new int[3][3];
        
        //将矩阵作为用户输入
        Scanner sc = new Scanner(System.in);
        System.out.println("输入矩阵元素:-");
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
            	mat[i][j] = sc.nextInt();
        }}
        //打印结果
        if (invoCheck(mat))
        	System.out.println("该矩阵是对合矩阵。");
        else
        	System.out.println("该矩阵不是对合矩阵。");
   }
   // 矩阵乘法
   static void mul(int mat[][], int prod[][]) {
      for (int i = 0; i < 3; i++) {
         for (int j = 0; j < 3; j++) {
            prod[i][j] = 0;
            
            // 结果产品存储在 prod 中
            for (int k = 0; k < 3; k++) {
               prod[i][j] += mat[i][k] * mat[k][j];
            }
         }
      }
   }
   // 检查矩阵是否对合
   static boolean invoCheck(int mat[][]) {
        // 3X3 单位矩阵
        intidentityMat[][] = { { 1, 0, 0 },{ 0, 1, 0 },{ 0, 0, 1 } };
        intprod[][] = new int[3][3];
        
        // 调用矩阵乘法
        mul(mat, prod);
        
        // 检查乘积矩阵是否为单位矩阵
        for (int i = 0; i < 3; i++) {
         for (int j = 0; j < 3; j++) {
            if (identityMat[i][j] != prod[i][j])
            return false;
         }
      }
      return true;
   }
}

输出

输入矩阵元素:-
1 0 0
0 1 0
0 0 1
该矩阵为对合矩阵

在本文中,我们探索了使用 Java 编程语言检查矩阵是否为对合矩阵的不同方法。


相关文章