Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 대각선으로 지배적인 행렬?

<시간/>

모든 행렬 행에 대해 행의 대각선 항목 크기가 해당 행에 있는 다른 모든 비대각선 항목 크기의 합보다 크거나 같으면 행렬이 대각 우성 행렬이라고 합니다.

먼저 행렬 차원을 나타내는 값이 3인 상수 int 변수 N을 정의하겠습니다.

const int N = 3;

isDDM(int mat[N][N], int n)은 행렬의 복사본과 행렬의 크기를 가져오는 부울 함수입니다. 내부에서 중첩 for 루프를 사용하여 행렬의 행과 열을 반복합니다. 그런 다음 각 열에 대한 각 행의 합계를 찾아 합계 변수에 추가합니다.

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]);

다음으로, 대각선 요소 중 하나라도 합보다 작은지 확인합니다. 그 중 하나라도 합계보다 작으면 false를 반환하고 루프를 종료하고 그렇지 않으면 루프가 완료된 후 합계보다 작은 요소가 없으므로 true를 반환합니다.

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