กล่าวกันว่าเมทริกซ์เป็นเมทริกซ์ที่โดดเด่นในแนวทแยง ถ้าสำหรับทุกแถวเมทริกซ์ ขนาดของรายการในแนวทแยงของแถวนั้นมากกว่าหรือเท่ากับผลรวมของขนาดของรายการที่ไม่ใช่แนวทแยงทุกรายการในแถวนั้น
ก่อนอื่นให้เรากำหนดตัวแปร 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