Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Ma trận chéo trội (Diagonally Dominant Matrix) trong C++

Ma trận vuông n x n gọi là Ma trận chéo trội (Diagonally Dominant) nếu với mọi hàng i, giá trị tuyệt đối của phần tử trên đường chéo chính lớn hơn hoặc bằng tổng giá trị tuyệt đối của các phần tử còn lại trên hàng đó.

Công thức: |a[i][i]| >= Σ |a[i][j]| (với j != i)

Ví dụ

Ma trận 3x3:
{ 3, -2, 1 } -> Hàng 0: |3| >= |-2|+|1| = 3 >= 3 (Đúng)
{ 1, -3, 2 } -> Hàng 1: |-3| >= |1|+|2| = 3 >= 3 (Đúng)
{ -1, 2, 4 } -> Hàng 2: |4| >= |-1|+|2| = 4 >= 3 (Đúng)
=> Là ma trận chéo trội.

Chương trình C++

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

bool isDiagonallyDominant(const vector<vector<int>>& mat) {
    int n = mat.size();
    if (n == 0) return true;
    
    for (int i = 0; i < n; i++) {
        long long diag = abs(mat[i][i]);
        long long sum = 0;
        for (int j = 0; j < n; j++) {
            if (i != j) sum += abs(mat[i][j]);
        }
        if (diag < sum) return false; // Không thỏa mãn
    }
    return true;
}

int main() {
    vector<vector<int>> mat = {
        { 3, -2, 1 },
        { 1, -3, 2 },
        { -1, 2, 4 }
    };
    
    if (isDiagonallyDominant(mat))
        cout << "Yes, la ma tran cheo troi (Diagonally Dominant)";
    else
        cout << "NO, khong phai ma tran cheo troi";
    return 0;
}

Đầu ra

Yes, la ma tran cheo troi (Diagonally Dominant)

Ứng dụng

Ma trận chéo trội đảm bảo hội tụ cho các phương pháp lặp giải hệ phương trình tuyến tính như **Phương pháp Jacobi** và **Gauss-Seidel**.