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 -= abs(mat[i][i]);

接下来,我们检查对角线元素是否小于总和。如果其中任何一个小于总和,则返回false并退出循环并执行函数,否则,在循环完成后,由于所有元素都不小于总和,因此返回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;
}

最后,基于返回值,我们在主函数中显示它是否是对角线主导矩阵。

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