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"); } }
댓글
댓글 쓰기