Cramer 공식을 이용한 연립 방정식 풀기
5x+2y+2z=6
x+5y+z=11
2x-1y+6z=4
#include <stdio.h>
int main() {
double a[3][3]={{5, 2, 2},{1, 5, 1},{2, -1, 6}};
double inv[3][3], b[3]={6,11,4}, x[3], det, v;
int i, j, k;
det=a[0][0]*(a[1][1]*a[2][2]-a[2][1]*a[1][2])
-a[0][1]*(a[1][0]*a[2][2]-a[1][2]*a[2][0])
+a[0][2]*(a[1][0]*a[2][1]-a[1][1]*a[2][0]);
printf("Determinant = %g \n", det);
inv[0][0]=(a[1][1]*a[2][2]-a[2][1]*a[1][2])/det;
inv[1][0]=-(a[1][0]*a[2][2]-a[1][2]*a[2][0])/det;
inv[2][0]=(a[1][0]*a[2][1]-a[2][0]*a[1][1])/det;
inv[0][1]=-(a[0][1]*a[2][2]-a[0][2]*a[2][1])/det;
inv[1][1]=(a[0][0]*a[2][2]-a[0][2]*a[2][0])/det;
inv[2][1]=-(a[0][0]*a[2][1]-a[2][0]*a[0][1])/det;
inv[0][2]=(a[0][1]*a[1][2]-a[0][2]*a[1][1])/det;
inv[1][2]=-(a[0][0]*a[1][2]-a[1][0]*a[0][2])/det;
inv[2][2]=(a[0][0]*a[1][1]-a[1][0]*a[0][1])/det;
printf("\n a is : \n");
for(i=0;i<3;i+=1) {
for(j=0;j<3;j+=1) {
printf("%12f", a[i][j]);
}
printf("\n");
}
printf("\n a_inverse is : \n");
for(i=0;i<3;i+=1) {
for(j=0;j<3;j+=1) {
printf("%12f", inv[i][j]);
}
printf("\n");
}
printf("\n a x a_inverse is : \n");
for(i=0;i<3;i+=1) {
for(j=0;j<3;j+=1) {
v=0;
for(k=0;k<3;k+=1) {
v+=a[i][k]*inv[k][j];
}
printf("%12f", v);
}
printf("\n");
}
printf("\n x is : \n");
for(i=0;i<3;i+=1) {
x[i]=0;
for(j=0;j<3;j+=1) {
x[i]+=inv[i][j]*b[j];
}
printf("x[%d]=%g\n", i, x[i]);
}
return 0;
}
'c·c++ > c 프로그래밍' 카테고리의 다른 글
Hadamard 행렬구하기 (0) | 2013.09.15 |
---|---|
두수의 비교 (0) | 2013.09.13 |
자리수 제한없이 피보나치수열 구하기 (0) | 2013.09.13 |
어셈블리 리스팅 보기 vc++과 gcc(MinGW)의 경우 (0) | 2013.09.12 |
if문 없이 성적처리하기. (0) | 2013.09.10 |