소개글
Gaussian Elimination, Inverse Matrix의 두가지 방법을 사용한 수치해석적 연립방정식 해법입니다. 수치해석 과제시 사용하세요.
컴파일 실행환경
Visual C++ 6.0
1.5G 노트북
본문내용
#include<stdio.h>
float MatrixMulti(float *a, float *b, int c, int d, int e);
float x[3][4];
main(){
int i,j,k;
float M[3][6]={{2,-3,1,1,0,0},{1,1,-1,0,1,0},{-1,1,-3,0,0,1}};
float aug[3][4]={{2,6,0,-1},{-1,4,1,0},{0,5,-3,0}};
float t,inv[3][3];
for(i=0;i<2;i++){
j=i+1;
while(M[i][i]==0){
for(k=0;k<6;k++){
t = M[i][k];
M[i][k] = M[j][k];
M[j][k] = t;
}
j++;
}
for(j=i+1;j<3;j++){
t=M[j][i];
for(k=i;k<6;k++){
M[j][k]=M[j][k]-M[i][k]*t/M[i][i];
}
}
}
for(k=0;k<3;k++){
inv[2][k] = M[2][k+3]/M[2][2];
inv[1][k] = (M[1][k+3]-M[1][2]*inv[2][k])/M[1][1];
inv[0][k] = (M[0][k+3]-M[0][1]*inv[1][k]-M[0][2]*inv[2][k])/M[0][0];
}
for(j=0;j<3;j++){
for(k=0;k<3;k++){
printf("inv[%d][%d]=%f\t",j+1,k+1,inv[j][k]);
}
printf("\n");
}
for(i=0;i<3;i++){
for(j=0;j<4;j++){
x[i][j]=0;
}
}
MatrixMulti(inv, aug, 3,3,4);
for(j=0;j<3;j++){
for(k=0;k<4;k++){
printf("x%d,%d=%f\t",j+1,k+1,x[j][k]);
}
printf("\n");
}
}
float MatrixMulti(float *a, float *b, int c, int d, int e){
int i,j,k;
for(i=0;i<c;i++){
for(j=0;j<e;j++){
for(k=0;k<d;k++){
참고 자료
없음