在 Java 中检查矩阵是否为马尔可夫矩阵

javaobject oriented programmingprogramming更新于 2025/2/21 22:04:17

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

如果所有条目均为非负数且每个列向量之和等于 1,则方阵称为马尔可夫矩阵。马尔可夫矩阵表示马尔可夫链中的步骤。马尔可夫矩阵的每个输入都代表结果的概率。

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

向您展示一些实例

实例 1

假设我们有一个矩阵
   | 0.10.50.4 |
A= | 00.50.5   |
   | 0.90.10   |

所有行加起来为 1。因此它是一个马尔可夫矩阵

实例-2

假设我们有一个矩阵
   | 0.40.30.3 |
A =| 0.50.30.2 |
   | 0.50.10.4 |

所有行加起来为 1。因此它是一个马尔可夫矩阵

实例-3

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

所有行加起来为 1。因此它是一个马尔可夫矩阵

算法

步骤 1 - 取矩阵。

步骤 2 - 现在调用遍历矩阵的检查函数并检查每行总和是否等于 1。如果任何行的元素加起来不等于 1,则矩阵不是马尔可夫矩阵。

步骤 3 - 打印结果。

多种方法

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

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

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

让我们通过以下代码查看程序及其输出:一。

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

在此方法中,矩阵在程序中初始化,我们使用 for 循环计算每行的总和并检查其总和是否为 1。

示例

import java.util.Scanner;
public class Main {
   static boolean markovMatCheck(double mat[][]) {
      double sum = 0;
      
      // 遍历矩阵
      for (int i = 0; i < mat.length; i++) {
         sum = 0;
         // Adds the row elements
         for (int j = 0; j < mat.length; j++) {
            sum += mat[i][j];
         }
         
         // 检查行元素加起来是否为 1,否则返回 false
         if (sum != 1.0)
         return false;
      }
      return true;
   }
   public static void main(String[] args) {

      // 需要检查的矩阵
      double mat[][] = {
         { 0.1, 0.5, 0.4 },
         { 0, 0.5, 0.5 },
         { 0.9, 0, 0.1 },
      };
      
      // 打印结果
      if (markovMatCheck(mat))
         System.out.println("The matrix is a Markov matrix.");
      else
         System.out.println("The matrix is not a Markov matrix.");
   }
}

输出

The matrix is a Markov matrix.

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

在此方法中,我们要求用户输入所需大小的矩阵,然后使用 for 循环计算每行的总和并检查其总和是否为 1。

示例

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
    System.out.println("输入矩阵行数-");
    Scanner sc = new Scanner(System.in);
    int size = sc.nextInt();
    int mat[][] = new int[size][size];
    
    // 输入矩阵元素
    System.out.println("输入矩阵元素");
    for (int i = 0; i < mat.length; i++) {
        for (int j = 0; j < mat.length; j++) {
        mat[i][j] = sc.nextInt();
        }
    }
    
    // 打印结果
    if (markovMatCheck(mat))
        System.out.println("该矩阵为马尔可夫矩阵。");
    else
        System.out.println("该矩阵不是马尔可夫矩阵。");
    
    }
    
    //用户定义方法
    static boolean markovMatCheck(int mat[][]) {
    int sum = 0;
    
    // 遍历矩阵
    for (int i = 0; i < mat.length; i++) {
        sum = 0;
        
        // 添加行元素
        for (int j = 0; j < mat.length; j++) {
        	sum += mat[i][j];
    }
    
    // 检查行元素加起来是否为 1,否则返回 false
    if (sum != 1)
        return false;
    }
    return true;
    }
}

输出

输入矩阵行数-
3
输入矩阵元素
1 0 0
0 1 0
0 0 1
该矩阵为马尔可夫矩阵。

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


相关文章


有用资源