Post List

[Discrete Mathematics] 가우스-조단 소거법의 구현(C언어)

Gauss-Jordan Elimination의 구현( C언어 )

n by n 행렬의 해를 가우스-조던 소거법으로 구현하였습니다.

대각선 기준으로 하삼각형의 성분들을 0으로, 그리고 상삼각형의 성분들을 0으로
그 후 대각선 성분의 값을 1로 바꿔주면 되는 문제 입니다.

첨부파일 : 흐름도(FlowChart)
실행 결과 : 

소스 코드 :

#include 
#include 


int main() {
 int n;
 double ** arr;
 int i, j, k, w;
 double tmp = 0.0;
 printf("Matrix size : ");
 scanf_s("%d", &n);
 arr = (double**)malloc(sizeof(double*) * (n));
 for (i = 0; i < n; i++) {
  arr[i] = (double*)malloc(sizeof(double) * (n+1));
 }
 printf("\ninput result :\n");
 for (i = 0; i < n; i++) {
  for (j = 0; j < n + 1; j++) {
   scanf_s("%lf", &arr[i][j]);
  }
 }
 
 for (i = 0; i < n; i++) { 
  for (j = i + 1; j < n; j++) {
   if (i + 1 >= n)break;
   tmp = (double)(-1) * arr[j][i] / arr[i][i];
   for (k = 0; k < n + 1; k++) {
    arr[j][k] = arr[j][k] + tmp * arr[i][k];
   }
  }
 }
 for (i = n - 1; i >= 0; i--) {
  for (j = i - 1; j >= 0; j--) {
   if (i - 1 < 0)break;
   tmp = (double)(-1) * arr[j][i] / arr[i][i];
   for (k = 0; k < n + 1; k++) {
    arr[j][k] = arr[j][k] + tmp * arr[i][k];
   }
  }
 }
 
 for (i = 0; i < n; i++) {
  arr[i][n] /= arr[i][i];
  arr[i][i] /= arr[i][i];
 }
 
 printf("\noutput result :\n");
 for (i = 0; i < n; i++) {
  for (j = 0; j < n + 1; j++) {
   printf("%-.6lf ", arr[i][j]);
  }
  printf("\n");
 }
}

댓글