C++對角優勢矩陣?


如果對每個矩陣行,行對角項的幅值大於或等於該行每一各非對角項的幅值之和,則稱該矩陣為對角優勢矩陣。

讓我們首先定義一個常量 int 變數 N 值為 3,表示我們的矩陣維度。

const int N = 3;

isDDM(int mat[N][N], int n) 是一個布林函式,它獲取我們矩陣的副本和我們矩陣的大小。在裡面,我們使用巢狀 for 迴圈迭代我們矩陣的行和列。然後,我們計算出每一行每一列的和,並將其新增到我們的 sum 變數中。

bool isDDM(int mat[N][N], int n){
for (int i = 0; i < n; i++){
   int sum = 0;
   for (int j = 0; j < n; j++)
      sum += abs(mat[i][j]);

接下來,我們從當前 sum 中移除對角元素的和。

sum -= abs(mat[i][i]);

接下來,我們檢查是否有任何對角元素小於 sum。如果有任何一個元素小於 sum,那麼我們就返回 false,退出我們的迴圈和函式,否則,在完成迴圈後,因為沒有元素小於 sum,我們返回 true。

bool isDDM(int mat[N][N], int n){
for (int i = 0; i < n; i++){
   int sum = 0;
   for (int j = 0; j < n; j++)
      sum += abs(mat[i][j]);
      sum -= abs(mat[i][i]);
   if (abs(mat[i][i]) < sum)
      return false;
   }
   return true;
}

最後,根據返回值,我們在我們的 main 函式中顯示它是否是對角優勢矩陣。

if(isDDM(mat,matSize)){
   cout << "yes,its a diagonally dominant matrix";
} else {
   cout << "NO, its not a diagonally dominant matrix";
}

示例

我們來看一下以下實現,以檢查矩陣是否是或者不是對角優勢矩陣。

 線上演示

#include <iostream>
const int N = 3;
using namespace std;
bool isDDM(int mat[N][N], int n){
   for (int i = 0; i < n; i++){
      int sum = 0;
      for (int j = 0; j < n; j++)
         sum += abs(mat[i][j]);
         sum -= abs(mat[i][i]);
         if (abs(mat[i][i]) < sum)
            return false;
   }
   return true;
}
int main(){
   int matSize = 3;
   int mat[N][N] = {
      { 3, -2, 1 },
      { 1, -3, 2 },
      { -1, 2, 4 }
   };
   if(isDDM(mat,matSize)){
      cout << "yes,its a diagonally dominant matrix";
   } else {
      cout << "NO, its not a diagonally dominant matrix";
   }
   return 0;
}

輸出

以上程式碼將生成以下輸出 −

yes,its a diagonally dominant matrix

更新於: 16-Jan-2021

315 次瀏覽

開啟你職業生涯

透過完成課程獲得認證

入門
廣告
© . All rights reserved.