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
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP