Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

เมทริกซ์เฉพาะเจาะจงแนวทแยง (Diagonally Dominant Matrix) ใน C++


นิยาม

เมทริกซ์เป็น Diagonally Dominant ถ้าทุกแถว ค่าสัมบูรณ์ของสมาชิกแนวทแยง มากกว่าหรือเท่ากับผลรวมค่าสัมบูรณ์ของสมาชิกอื่นในแถวเดียวกัน

|aᵢᵢ| ≥ Σ|aᵢⱼ| (สำหรับ j ≠ i)

อัลกอริธึม

  1. วนลูปทุกแถว i
  2. คำนวณผลรวมค่าสัมบูรณ์ทั้งแถว
  3. ลบ |aᵢᵢ| ออก
  4. ตรวจสอบ |aᵢᵢ| < ผลรวมที่เหลือ → ไม่ใช่ Diagonally Dominant

โปรแกรมตัวอย่าง

#include <iostream>
#include <cmath>
using namespace std;

const int N = 3;

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 mat[3][3] = {{3, -2, 1}, {1, -3, 2}, {-1, 2, 4}};
    if (isDDM(mat, 3))
        cout << "Yes, diagonally dominant matrix";
    else
        cout << "No, not diagonally dominant matrix";
    return 0;
}

ผลลัพธ์

Yes, diagonally dominant matrix