본문 바로가기
수업/수치계산

[수치계산] 연립선형방정식의 해 - Gauss 소거법

by graygreat 2017. 6. 11.
728x90
반응형


Gauss 소거법


● n 개의 미지수를 가지는 n개 연립방정식을 대응한 삼각모양으로 변환




 


일반화


a, b, x 구하기







#include <stdio.h>

#define n 4
void main(){
    float a[5][5], b[5], x[5];
    int i, j, k;
    float c;
    
    printf("Input A : \n");
    for(i = 1; i <= 4; i++)
        scanf("%f %f %f %f", &a[i][1], &a[i][2], &a[i][3], &a[i][4]);
        
    printf("Input b : \n");
    scanf("%f %f %f %f", &b[1], &b[2], &b[3], &b[4]);
    
    for(k = 1; k <= n - 1; k++){
        for(i = k + 1; i <= n; i++){
            c = a[i][k] / a[k][k];
            for(j = k; j <= n; j++){
                a[i][j] = a[i][j] - c * a[k][j];
            }   
            b[i] = b[i] - c * b[k];
        }   
    }   
    
    printf("\nResult : \n");
    
    for(i = 1; i <= 4; i++){
        printf("%8.3f x1 + %8.3f x2 + %8.3f x3 + %8.3f x4 = %8.3f \n",
                a[i][1], a[i][2], a[i][3], a[i][4], b[i]);
    }           
    
    for(i = n - 1; i >= 1; i--){
        c = b[i];
        for(j = i + 1; j <= n; j++){
            c = c - a[i][j] * x[j];
        }   
        x[i] = c / a[i][i];
    }   
    for(i = 1; i <= n; i++)
        printf("x%d = %8.3f\n", i, x[i]);
}   



반응형

댓글