如何在Java中檢查對角佔優矩陣?


在Java中,陣列是一個物件。它是一種非原始資料型別,用於儲存相同資料型別的多個值。Java中的矩陣只不過是一個多維陣列,它表示多行和多列。

如果矩陣中對角元素的絕對值大於等於該行中其他元素絕對值之和,則稱該矩陣為對角佔優矩陣。線上性方程組的數值分析求解中,此特性非常有用。即使方程的係數不精確已知,它也能保證求解方法會收斂到正確的答案。

這裡我們給出一個包含一組元素的矩陣,根據題目要求,我們必須檢查它是否是對角佔優矩陣。

讓我們深入研究這篇文章,瞭解如何使用Java程式語言來實現。

舉幾個例子

例1

給定矩陣:

45 	22	23
24	99	26
27	28	79
  • 對角元素為:45、29和79

    • 行1:45 >= (22+23)

    • 行2:99 > (24+26)

    • 行3:79 > (27+28)

  • 因此,給定矩陣是對角佔優矩陣。

例2

給定矩陣:

5 	1	2
2	9	7
5	1	7
  • 對角元素為:5、9和7

    • 行1:5 > (1+2)

    • 行2:9 > (2+7)

    • 行3:7 > (5+1)

  • 因此,給定矩陣是對角佔優矩陣。

例3

給定矩陣:

45 	22	23
24	19	26
27	28	79
  • 對角元素為:45、19和79

    • 行1:45 >= (22+23)

    • 行2:19 < (24+26)

    • 行3:79 > (27+28)

  • 在行2中,可以看到對角線值小於該行其他兩個元素的和。因此,給定矩陣不是對角佔優矩陣。

演算法

(針對第二種方法 - 使用者自定義方法的解釋)

  • 步驟1 - 函式isDiagonallyDominant接受由二維整數陣列matrix表示的二維矩陣。

  • 步驟2 - 變數n設定為矩陣的長度,假設它是一個方陣。

  • 步驟3 - 外部for迴圈迭代矩陣的每一行。

  • 步驟4 - 變數sum用於跟蹤當前行中元素絕對值之和,不包括對角元素。

  • 步驟5 - 內部for迴圈迭代當前行的每一列。

  • 步驟6 - 如果當前行和列索引(i和j)不相等,則將該位置元素的絕對值新增到sum中。

  • 步驟7 - 如果對角元素的絕對值小於sum,則矩陣不是對角佔優矩陣,函式返回false。

  • 步驟8 - 如果所有行都處理完畢而沒有找到非對角佔優行,則函式返回true,表示矩陣是對角佔優矩陣。

語法

Java中的Math.abs()方法返回數字的絕對值,即給定數字的非負值,與符號無關。

以下是它的語法:

Math.abs(inputMatrix[i][j])

其中,“inputMatrix”指的是給定的矩陣。

多種方法

我們提供了不同的方法來解決這個問題。

  • 使用矩陣元素的靜態初始化

  • 使用使用者自定義方法

讓我們一一檢視程式及其輸出。

方法1:使用矩陣元素的靜態初始化

在這種方法中,矩陣元素將在程式中初始化。然後根據演算法檢查給定的矩陣是否是對角佔優矩陣。

示例

public class Main {
   public static void main(String[] args) {
      int n = 3;
      int[][] inputMatrix = {{7,  2,  1}, {3,  8,  2}, {1,  1, 10}};
      
      //print the given matrix
      System.out.println("The given matrix is: ");
      for (int i = 0; i < inputMatrix.length; i++) {
         for (int j = 0; j < inputMatrix[0].length; j++) {
            System.out.print(inputMatrix[i][j] + " ");
         }
         System.out.println();
      }
      boolean isDiagonalDominant = true;
      for (int i = 0; i < inputMatrix.length; i++) {
         int sum = 0;
         for (int j = 0; j < inputMatrix[0].length; j++) {
            if (i != j) {
               sum += Math.abs(inputMatrix[i][j]);
            }
         }
         if (Math.abs(inputMatrix[i][i]) < sum) {
            isDiagonalDominant = false;
            break;
         }
      }
      if (isDiagonalDominant) {
         System.out.println("The given matrix is a diagonal dominant matrix.");
      } else {
         System.out.println("The given matrix is not a diagonal dominant matrix.");
      }
   }
}

輸出

The given matrix is: 
7 2 1 
3 8 2 
1 1 10 
The given matrix is a diagonal dominant matrix.

方法2:使用使用者自定義方法

在這種方法中,矩陣元素將在程式中初始化。然後呼叫使用者自定義方法,並將矩陣作為引數傳遞,並在方法內部根據演算法檢查給定的矩陣是否是對角佔優矩陣。

示例

public class Main {
   public static void main(String[] args) {
      int n = 3;
      int[][] inputMatrix = {{11, 22, 33}, {44, 55, 66}, {77, 88, 99}};
      
      //print the given matrix
      System.out.println("The given matrix is: ");
      for (int i = 0; i < inputMatrix.length; i++){
         for (int j = 0; j < inputMatrix[0].length; j++){
            System.out.print(inputMatrix[i][j] + " ");
         }
         System.out.println();
      }
      boolean result = isDiagonalAbsoluteValueGreaterThanSum(inputMatrix);
      if(result==false)
         System.out.println("The given matrix is not a diagonal dominant matrix.");
      else
         System.out.println("The given matrix is a diagonal dominant matrix.");
   }
   
   //user defined method
   public static boolean isDiagonalAbsoluteValueGreaterThanSum(int[][] mat) {
      int n = mat.length;
      for (int a = 0; a < n; a++) {
         int sum = 0;
         
         // Sum the absolute values of elements in the current row excluding the diagonal element
         for (int b = 0; b < n; b++) {
            if (a != b) {
               sum += Math.abs(mat[a][b]);
            }
         }
         
         // Check if the absolute value of the diagonal element is less than the sum
         if (Math.abs(mat[a][a]) < sum) {
            return false;
         }
      }
      return true;
   }
}

輸出

The given matrix is: 
11 22 33 
44 55 66 
77 88 99 
The given matrix is not a diagonal dominant matrix.

在這篇文章中,我們探索了使用Java程式語言檢查對角佔優矩陣的不同方法。

更新於:2023年5月4日

246 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.