// 가우스 소거법
#include <math.h>
#include <stdio.h>
int main() {
double matrix[3][3];
double b[3],x[3];
int n,i,count,j;
double ratio,temp;
// 행렬과 b 읽어들이기
n=3;
printf("The matrix is %d by %d\n",n,n);
printf("Matrix:\n");
for(i=0;i<n;i+=1) {
for(j=0;j<n;j+=1) {
scanf("%lf",&matrix[i][j]);
}
scanf("%lf",&b[i]);
}
printf("\n");
for(i=0;i<n;i+=1) {
for(j=0;j<n;j+=1) {
printf("%g ",matrix[i][j]);
}
printf("\n");
}
printf("\nRight Hand Side:\n");
for(i=0;i<n;i+=1) {
printf("%g ",b[i]);
}
printf("\n\n");
// 가우스 소거법
for(i=0;i<n-1;i+=1) {
for(j=i+1;j<n;j+=1){
ratio = matrix[j][i] / matrix[i][i];
for(count=i;count<n;count+=1) {
matrix[j][count] -= (ratio * matrix[i][count]);
}
b[j] -= (ratio * b[i]);
}
}
for (i=0;i<n;i+=1) {
for(j=0;j<n;j+=1) {
printf("%g ",matrix[i][j]);
}
printf("\n");
}
/* Back substitution */
x[n-1] = b[n-1] / matrix[n-1][n-1];
for(i=n-2;i>=0;i-=1) {
temp = b[i];
for(j=i+1;j<n;j+=1){
temp -= (matrix[i][j] * x[j]);
}
x[i] = temp / matrix[i][i];
}
printf("\nAnswer:\n");
for(i=0;i<n;i+=1){
printf("x%d = %g\n",i,x[i]);
}
return 0;
}
'c·c++ > c 프로그래밍' 카테고리의 다른 글
년,월,일이 주어졌을 때의 총날자수 구하기 (0) | 2013.10.02 |
---|---|
3x3 행렬의 곱셈 (0) | 2013.10.02 |
strlen, strcpy, strcmp 구현 (0) | 2013.09.24 |
sqrt, exp, log함수의 소스 (0) | 2013.09.22 |
비쥬얼 c++ cntrl+F5후 cmd창이 바로 꺼지는 문제 해결하기 (0) | 2013.09.22 |