Computer >> Máy Tính >  >> Lập trình >> C ++

Ma trận thống trị theo đường chéo trong C ++?

Ma trận được cho là ma trận chiếm ưu thế theo đường chéo nếu đối với mọi hàng ma trận, độ lớn của mục nhập đường chéo của hàng đó lớn hơn hoặc bằng tổng độ lớn của mọi mục nhập không thuộc đường chéo khác trong hàng đó.

Trước tiên, chúng ta hãy xác định một hằng số int biến N với giá trị 3 đại diện cho các kích thước ma trận của chúng ta.

const int N = 3;

Hàm isDDM (int mat [N] [N], int n) là một hàm Boolean lấy một bản sao của ma trận của chúng ta và kích thước của ma trận của chúng ta. Bên trong, chúng tôi lặp lại các hàng và cột của ma trận bằng cách sử dụng vòng lặp for lồng nhau. Sau đó, chúng tôi tìm tổng của mỗi hàng cho mỗi cột và thêm nó vào biến tổng của chúng tô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]);

Tiếp theo, chúng tôi xóa tổng các phần tử đường chéo khỏi tổng hiện tại.

sum -= abs(mat[i][i]);

Tiếp theo, chúng tôi kiểm tra xem có bất kỳ phần tử đường chéo nào nhỏ hơn tổng hay không. Nếu bất kỳ một trong số chúng nhỏ hơn tổng thì chúng tôi trả về false và thoát khỏi vòng lặp của chúng tôi và hoạt động nếu không thì sau khi hoàn thành vòng lặp, chúng tôi trả về true vì không có phần tử nào nhỏ hơn tổng.

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;
}

Cuối cùng, dựa trên giá trị trả về, chúng tôi hiển thị liệu đó có phải là ma trận chi phối theo đường chéo hay không trong chức năng chính của chúng tôi.

if(isDDM(mat,matSize)){
   cout << "yes,its a diagonally dominant matrix";
} else {
   cout << "NO, its not a diagonally dominant matrix";
}

Ví dụ

Chúng ta hãy xem cách triển khai sau để kiểm tra xem ma trận có chiếm ưu thế theo đường chéo hay không.

#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;
}

Đầu ra

Đoạn mã trên sẽ tạo ra kết quả sau -

yes,its a diagonally dominant matrix