กล่าวกันว่าเมทริกซ์เป็นเมทริกซ์ที่โดดเด่นในแนวทแยง ถ้าสำหรับทุกแถวเมทริกซ์ ขนาดของรายการในแนวทแยงของแถวนั้นมากกว่าหรือเท่ากับผลรวมของขนาดของรายการที่ไม่ใช่แนวทแยงทุกรายการในแถวนั้น
ก่อนอื่นให้เรากำหนดตัวแปร int คงที่ N ด้วยค่า 3 ซึ่งแสดงถึงมิติเมทริกซ์ของเรา
const int N = 3;
isDDM(int mat[N][N], int n) เป็นฟังก์ชันบูลีนที่คัดลอกเมทริกซ์ของเราและขนาดของเมทริกซ์ของเรา ข้างในเราวนซ้ำแถวและคอลัมน์ของเมทริกซ์ของเราโดยใช้ nested for loop จากนั้นเราจะหาผลรวมของแต่ละแถวสำหรับแต่ละคอลัมน์และเพิ่มลงในตัวแปรผลรวมของเรา
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]);
ต่อไปเราจะตรวจสอบว่าองค์ประกอบในแนวทแยงใดน้อยกว่าผลรวมหรือไม่ หากตัวใดตัวหนึ่งมีค่าน้อยกว่าผลรวม เราจะคืนค่าเท็จและออกจากลูปและทำงานไม่เช่นนั้นหลังจากลูปเสร็จสิ้นเราจะคืนค่าเป็นจริง เนื่องจากไม่มีองค์ประกอบใดที่น้อยกว่าผลรวม
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